{ "default-CC": { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "join" , "$1": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "CC"] , [ "transition" , {"type": "var", "name": "defaults-transition", "default": null} ] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } } , "default-CXX": { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "join" , "$1": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "CXX"] , [ "transition" , {"type": "var", "name": "defaults-transition", "default": null} ] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } } , "default-AR": { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "join" , "$1": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "AR"] , [ "transition" , {"type": "var", "name": "defaults-transition", "default": null} ] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } } , "default-CFLAGS": { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "CFLAGS"] , [ "transition" , {"type": "var", "name": "defaults-transition", "default": null} ] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } , "default-CXXFLAGS": { "vars": ["defaults-transition"] , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "CXXFLAGS"] , [ "transition" , {"type": "var", "name": "defaults-transition", "default": null} ] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } , "default-ENV": { "vars": ["defaults-transition"] , "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": { "type": "let*" , "bindings": [ ["fieldname", "defaults"] , ["provider", "ENV"] , [ "transition" , {"type": "var", "name": "defaults-transition", "default": null} ] , ["default", {"type": "empty_map"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "provider_list"} } } , "defaults-base-provides": { "doc": ["Query list-provider from 'base' targets (last wins)"] , "vars": ["provider", "default"] , "vars_doc": {"provider": ["The name of the list-provider in the provides map."]} , "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": { "type": "let*" , "bindings": [["fieldname", "base"]] , "body": { "type": "foldl" , "var": "next" , "start": {"type": "var", "name": "default", "default": []} , "accum_var": "curr" , "range": {"type": "CALL_EXPRESSION", "name": "provider_list"} , "body": { "type": "if" , "cond": {"type": "var", "name": "next"} , "then": {"type": "var", "name": "next"} , "else": {"type": "var", "name": "curr"} } } } } , "compile-deps": { "doc": ["Collect compile dependencies (headers) from given target_fields"] , "vars": ["deps-fieldnames", "deps-transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect dependencies from."] , "deps-transition": ["The optional configuration transition for the targets."] } , "imports": { "runfiles_list": ["./", "..", "field_runfiles_list"] , "provider_list": ["./", "..", "field_provider_list"] } , "expression": { "type": "disjoint_map_union" , "$1": { "type": "++" , "$1": { "type": "foreach" , "var": "fieldname" , "range": {"type": "var", "name": "deps-fieldnames"} , "body": { "type": "++" , "$1": { "type": "let*" , "bindings": [ ["provider", "compile-deps"] , ["transition", {"type": "var", "name": "deps-transition"}] , ["default", {"type": "empty_map"}] ] , "body": [ {"type": "CALL_EXPRESSION", "name": "provider_list"} , {"type": "CALL_EXPRESSION", "name": "runfiles_list"} ] } } } } } } , "compile-args-deps": { "doc": ["Collect compile arguments from given target_fields"] , "vars": ["deps-fieldnames", "deps-transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect arguments from."] , "deps-transition": ["The optional configuration transition for the targets."] } , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "++" , "$1": { "type": "foreach" , "var": "fieldname" , "range": {"type": "var", "name": "deps-fieldnames"} , "body": { "type": "let*" , "bindings": [ ["provider", "compile-args"] , ["transition", {"type": "var", "name": "deps-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } } } , "link-deps": { "doc": ["Collect link dependencies (libraries) from given target_fields"] , "vars": ["deps-fieldnames", "deps-transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect dependencies from."] , "deps-transition": ["The optional configuration transition for the targets."] } , "imports": { "artifacts_list": ["./", "..", "field_artifacts_list"] , "provider_list": ["./", "..", "field_provider_list"] } , "expression": { "type": "disjoint_map_union" , "$1": { "type": "++" , "$1": { "type": "foreach" , "var": "fieldname" , "range": {"type": "var", "name": "deps-fieldnames"} , "body": { "type": "++" , "$1": { "type": "let*" , "bindings": [ ["provider", "link-deps"] , ["default", {"type": "empty_map"}] , ["transition", {"type": "var", "name": "deps-transition"}] ] , "body": [ {"type": "CALL_EXPRESSION", "name": "provider_list"} , {"type": "CALL_EXPRESSION", "name": "artifacts_list"} ] } } } } } } , "link-args-deps": { "doc": ["Collect linker arguments from given target_fields"] , "vars": ["deps-fieldnames", "deps-transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect arguments from."] , "deps-transition": ["The optional configuration transition for the targets."] } , "imports": {"list_provider": ["./", "..", "field_list_provider"]} , "expression": { "type": "++" , "$1": { "type": "foreach" , "var": "fieldname" , "range": {"type": "var", "name": "deps-fieldnames"} , "body": { "type": "let*" , "bindings": [ ["provider", "link-args"] , ["transition", {"type": "var", "name": "deps-transition"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} } } } } , "pkg-map-provider-deps": { "doc": ["Collect maps from provider \"package\" for given target_fields"] , "vars": ["pkg-key", "deps-fieldnames", "deps-transition"] , "vars_doc": { "pkg-key": ["Key to lookup in provider \"package\"."] , "deps-fieldnames": ["List of target_field names to collect maps from."] , "deps-transition": ["The optional configuration transition for the targets."] } , "imports": {"provider_list": ["./", "..", "field_provider_list"]} , "expression": { "type": "disjoint_map_union" , "$1": { "type": "++" , "$1": { "type": "foreach" , "var": "fieldname" , "range": {"type": "var", "name": "deps-fieldnames"} , "body": { "type": "let*" , "bindings": [ ["provider", "package"] , ["default", {"type": "empty_map"}] , ["transition", {"type": "var", "name": "deps-transition"}] ] , "body": { "type": "foreach" , "range": {"type": "CALL_EXPRESSION", "name": "provider_list"} , "var": "map" , "body": { "type": "lookup" , "key": {"type": "var", "name": "pkg-key"} , "map": {"type": "var", "name": "map"} , "default": {"type": "empty_map"} } } } } } } } , "cflags-files-deps": { "doc": ["Collect cflags files from target_fields"] , "vars": ["deps-fieldnames", "deps-transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect files from."] , "deps-transition": ["The optional configuration transition for the targets."] } , "imports": {"pkg-provider": "pkg-map-provider-deps"} , "expression": { "type": "let*" , "bindings": [["pkg-key", "cflags-files"]] , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} } } , "ldflags-files-deps": { "doc": ["Collect cflags files from target_fields"] , "vars": ["deps-fieldnames", "deps-transition"] , "vars_doc": { "deps-fieldnames": ["List of target_field names to collect files from."] , "deps-transition": ["The optional configuration transition for the targets."] } , "imports": {"pkg-provider": "pkg-map-provider-deps"} , "expression": { "type": "let*" , "bindings": [["pkg-key", "ldflags-files"]] , "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"} } } , "pkg-prefix-lib-paths": { "doc": ["Detect ldflags referring to local libs and prefix them."] , "vars": ["pkg-ldflags", "pkg-libs", "flat-libs", "lib-prefix"] , "imports": {"contains": ["", "contains"]} , "expression": { "type": "let*" , "bindings": [["list", {"type": "keys", "$1": {"type": "var", "name": "pkg-libs"}}]] , "body": { "type": "foreach" , "var": "item" , "range": {"type": "var", "name": "pkg-ldflags"} , "body": { "type": "if" , "cond": {"type": "CALL_EXPRESSION", "name": "contains"} , "then": { "type": "join" , "$1": { "type": "if" , "cond": {"type": "var", "name": "flat-libs"} , "then": [ "-l:" , {"type": "basename", "$1": {"type": "var", "name": "item"}} ] , "else": [ {"type": "var", "name": "lib-prefix"} , "/" , {"type": "var", "name": "item"} ] } } , "else": {"type": "var", "name": "item"} } } } } , "pkg-prefix-flag-paths": { "doc": ["Detect flags referring to local flag files and prefix them."] , "vars": ["flags", "pkg-flag-files", "flag-prefix"] , "imports": {"contains": ["", "contains"]} , "expression": { "type": "let*" , "bindings": [ [ "list" , {"type": "keys", "$1": {"type": "var", "name": "pkg-flag-files"}} ] , ["list_prefix", "@"] ] , "body": { "type": "foreach" , "var": "item" , "range": {"type": "var", "name": "flags"} , "body": { "type": "let*" , "bindings": [["flag-file", {"type": "CALL_EXPRESSION", "name": "contains"}]] , "body": { "type": "if" , "cond": {"type": "var", "name": "flag-file"} , "then": { "type": "join" , "$1": [ "@" , {"type": "var", "name": "flag-prefix"} , "/" , {"type": "var", "name": "flag-file"} ] } , "else": {"type": "var", "name": "item"} } } } } } , "pkg-config": { "vars": [ "pkg-name" , "pkg-prefix" , "pkg-version" , "pkg-cflags" , "pkg-ldflags" , "pkg-flag-files" , "pkg-libs" , "flat-libs" , "pc-install-dir" ] , "imports": { "pkg-prefix-lib-paths": "pkg-prefix-lib-paths" , "pkg-prefix-flag-paths": "pkg-prefix-flag-paths" } , "expression": { "type": "let*" , "bindings": [ ["lib-prefix", "${libdir}"] , [ "pkg-ldflags" , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-lib-paths"} ] , [ "flag-prefix" , { "type": "join" , "$1": ["${prefix}/", {"type": "var", "name": "pc-install-dir"}] } ] , ["flags", {"type": "var", "name": "pkg-cflags"}] , [ "pkg-cflags" , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"} ] , ["flags", {"type": "var", "name": "pkg-ldflags"}] , [ "pkg-ldflags" , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"} ] ] , "body": { "type": "singleton_map" , "key": {"type": "join", "$1": [{"type": "var", "name": "pkg-name"}, ".pc"]} , "value": { "type": "BLOB" , "data": { "type": "join" , "separator": "\n" , "$1": [ { "type": "join" , "$1": [ "prefix=" , {"type": "var", "name": "pkg-prefix", "default": "/"} ] } , "libdir=${prefix}/lib" , "includedir=${prefix}/include" , { "type": "join" , "$1": ["Name: ", {"type": "var", "name": "pkg-name"}] } , { "type": "join" , "$1": [ "Version: " , {"type": "var", "name": "pkg-version", "default": "unknown"} ] } , { "type": "join" , "$1": [ "Description: Pkg-config for " , {"type": "var", "name": "pkg-name"} , ", generated by JustBuild" ] } , "URL: unknown" , { "type": "join" , "separator": " " , "$1": { "type": "++" , "$1": [ ["Cflags:", "-I${includedir}"] , {"type": "var", "name": "pkg-cflags"} ] } } , { "type": "join" , "separator": " " , "$1": { "type": "++" , "$1": [ ["Libs:"] , { "type": "if" , "cond": {"type": "var", "name": "flat-libs"} , "then": ["-L${libdir}"] } , {"type": "var", "name": "pkg-ldflags"} ] } } ] } } } } } , "objects": { "vars": [ "COMPILER" , "COMPILE_FLAGS" , "ENV" , "srcs" , "hdrs" , "private-hdrs" , "compile-deps" , "cflags-files" ] , "expression": { "type": "let*" , "bindings": [ [ "include tree" , { "type": "singleton_map" , "key": "include" , "value": {"type": "TREE", "$1": {"type": "var", "name": "compile-deps"}} } ] , [ "all hdrs" , { "type": "map_union" , "$1": [ {"type": "var", "name": "include tree"} , { "type": "to_subdir" , "subdir": "work" , "$1": { "type": "disjoint_map_union" , "$1": [ {"type": "var", "name": "hdrs"} , {"type": "var", "name": "private-hdrs"} ] } } ] } ] ] , "body": { "type": "map_union" , "$1": { "type": "foreach_map" , "var_key": "src_name" , "var_val": "src_val" , "range": {"type": "var", "name": "srcs"} , "body": { "type": "let*" , "bindings": [ [ "work src_name" , { "type": "join" , "separator": "/" , "$1": ["work", {"type": "var", "name": "src_name"}] } ] , [ "inputs" , { "type": "map_union" , "$1": [ {"type": "var", "name": "all hdrs"} , { "type": "singleton_map" , "key": {"type": "var", "name": "work src_name"} , "value": {"type": "var", "name": "src_val"} } , { "type": "var" , "name": "cflags-files" , "default": {"type": "empty_map"} } ] } ] , [ "out" , { "type": "change_ending" , "$1": {"type": "var", "name": "src_name"} , "ending": ".o" } ] , [ "work out" , { "type": "join" , "separator": "/" , "$1": ["work", {"type": "var", "name": "out"}] } ] , [ "action output" , { "type": "ACTION" , "outs": [{"type": "var", "name": "work out"}] , "inputs": {"type": "var", "name": "inputs"} , "env": { "type": "var" , "name": "ENV" , "default": {"type": "empty_map"} } , "cmd": { "type": "++" , "$1": [ [{"type": "var", "name": "COMPILER"}] , {"type": "var", "name": "COMPILE_FLAGS"} , ["-I", "work", "-isystem", "include"] , ["-c", {"type": "var", "name": "work src_name"}] , ["-o", {"type": "var", "name": "work out"}] ] } } ] , [ "staged output artifact" , { "type": "map_union" , "$1": { "type": "foreach_map" , "range": {"type": "var", "name": "action output"} , "var_val": "object" , "body": { "type": "singleton_map" , "key": {"type": "var", "name": "out"} , "value": {"type": "var", "name": "object"} } } } ] ] , "body": {"type": "var", "name": "staged output artifact"} } } } } } , "compiler-cc": { "vars": ["CC", "defaults-transition"] , "imports": {"default-CC": "default-CC"} , "expression": { "type": "var" , "name": "CC" , "default": {"type": "CALL_EXPRESSION", "name": "default-CC"} } } , "compiler-cxx": { "vars": ["CXX", "defaults-transition"] , "imports": {"default-CXX": "default-CXX"} , "expression": { "type": "var" , "name": "CXX" , "default": {"type": "CALL_EXPRESSION", "name": "default-CXX"} } } , "compiler": { "vars": ["CC", "CXX", "pure C", "defaults-transition"] , "imports": {"compiler-cc": "compiler-cc", "compiler-cxx": "compiler-cxx"} , "expression": { "type": "if" , "cond": {"type": "var", "name": "pure C"} , "then": {"type": "CALL_EXPRESSION", "name": "compiler-cc"} , "else": {"type": "CALL_EXPRESSION", "name": "compiler-cxx"} } } , "flags-cc": { "vars": ["CFLAGS", "ADD_CFLAGS", "defaults-transition"] , "imports": {"default-CFLAGS": "default-CFLAGS"} , "expression": { "type": "++" , "$1": [ { "type": "var" , "name": "CFLAGS" , "default": {"type": "CALL_EXPRESSION", "name": "default-CFLAGS"} } , {"type": "var", "name": "ADD_CFLAGS", "default": []} ] } } , "flags-cxx": { "vars": ["CXXFLAGS", "ADD_CXXFLAGS", "defaults-transition"] , "imports": {"default-CXXFLAGS": "default-CXXFLAGS"} , "expression": { "type": "++" , "$1": [ { "type": "var" , "name": "CXXFLAGS" , "default": {"type": "CALL_EXPRESSION", "name": "default-CXXFLAGS"} } , {"type": "var", "name": "ADD_CXXFLAGS", "default": []} ] } } , "flags": { "vars": [ "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "pure C" , "defaults-transition" ] , "imports": {"flags-cc": "flags-cc", "flags-cxx": "flags-cxx"} , "expression": { "type": "if" , "cond": {"type": "var", "name": "pure C"} , "then": {"type": "CALL_EXPRESSION", "name": "flags-cc"} , "else": {"type": "CALL_EXPRESSION", "name": "flags-cxx"} } } , "lib artifact": { "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "AR" , "ENV" , "name" , "pure C" , "srcs" , "hdrs" , "private-hdrs" , "stage" , "compile-deps" , "compile-args" , "cflags-files" , "defaults-transition" ] , "imports": { "compiler": "compiler" , "flags": "flags" , "objects": "objects" , "default-AR": "default-AR" , "default-ENV": "default-ENV" } , "expression": { "type": "let*" , "bindings": [ ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] , [ "COMPILE_FLAGS" , { "type": "++" , "$1": [ {"type": "CALL_EXPRESSION", "name": "flags"} , {"type": "var", "name": "compile-args"} ] } ] , [ "AR" , { "type": "var" , "name": "AR" , "default": {"type": "CALL_EXPRESSION", "name": "default-AR"} } ] , [ "ENV" , { "type": "map_union" , "$1": { "type": "++" , "$1": [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} , [ { "type": "var" , "name": "ENV" , "default": {"type": "empty_map"} } ] ] } } ] , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] , [ "base name" , { "type": "if" , "cond": {"type": "var", "name": "objects"} , "then": { "type": "assert_non_empty" , "msg": "A name has to be provided for non-header-only libraries" , "$1": {"type": "var", "name": "name"} } , "else": {"type": "var", "name": "name"} } ] , [ "libname" , { "type": "join" , "$1": ["lib", {"type": "var", "name": "base name"}, ".a"] } ] , [ "libpath" , { "type": "if" , "cond": {"type": "var", "name": "stage"} , "then": { "type": "join" , "separator": "/" , "$1": [ {"type": "var", "name": "stage"} , {"type": "var", "name": "libname"} ] } , "else": {"type": "var", "name": "libname"} } ] , [ "lib" , { "type": "if" , "cond": {"type": "var", "name": "objects"} , "else": {"type": "empty_map"} , "then": { "type": "ACTION" , "outs": [{"type": "var", "name": "libpath"}] , "inputs": {"type": "var", "name": "objects"} , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} , "cmd": { "type": "++" , "$1": [ [ {"type": "var", "name": "AR", "default": "ar"} , "cqs" , {"type": "var", "name": "libpath"} ] , {"type": "keys", "$1": {"type": "var", "name": "objects"}} ] } } } ] ] , "body": {"type": "var", "name": "lib"} } } , "lib result": { "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "AR" , "ENV" , "name" , "pure C" , "srcs" , "hdrs" , "private-hdrs" , "cflags" , "private-cflags" , "private-ldflags" , "stage" , "pkg-name" , "extra-provides" , "public-fieldnames" , "private-fieldnames" ] , "imports": { "compile-deps": "compile-deps" , "compile-args-deps": "compile-args-deps" , "link-deps": "link-deps" , "link-args-deps": "link-args-deps" , "cflags-files-deps": "cflags-files-deps" , "ldflags-files-deps": "ldflags-files-deps" , "lib artifact": "lib artifact" } , "expression": { "type": "let*" , "bindings": [ ["deps-fieldnames", {"type": "var", "name": "private-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" , { "type": "nub_right" , "$1": { "type": "++" , "$1": [ {"type": "var", "name": "cflags"} , {"type": "var", "name": "private-cflags"} , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} ] } } ] , [ "cflags-files" , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , ["lib", {"type": "CALL_EXPRESSION", "name": "lib artifact"}] , [ "link-args" , { "type": "nub_right" , "$1": { "type": "++" , "$1": [ {"type": "keys", "$1": {"type": "var", "name": "lib"}} , {"type": "var", "name": "private-ldflags", "default": []} , {"type": "CALL_EXPRESSION", "name": "link-args-deps"} ] } } ] , [ "ldflags-files" , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} ] , ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" , { "type": "nub_right" , "$1": { "type": "++" , "$1": [ {"type": "var", "name": "cflags"} , {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} ] } } ] , [ "cflags-files" , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} ] , [ "package" , { "type": "let*" , "bindings": [["name", {"type": "var", "name": "pkg-name"}]] , "body": {"type": "env", "vars": ["name", "cflags-files", "ldflags-files"]} } ] ] , "body": { "type": "RESULT" , "artifacts": {"type": "var", "name": "lib"} , "runfiles": {"type": "var", "name": "hdrs"} , "provides": { "type": "map_union" , "$1": [ { "type": "env" , "vars": [ "compile-deps" , "compile-args" , "link-deps" , "link-args" , "package" ] } , { "type": "var" , "name": "extra-provides" , "default": {"type": "empty_map"} } ] } } } } , "bin artifact": { "doc": ["Produces the binary artifact."] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "ENV" , "name" , "pure C" , "srcs" , "private-hdrs" , "stage" , "compile-deps" , "compile-args" , "link-deps" , "link-args" , "cflags-files" , "ldflags-files" , "defaults-transition" ] , "imports": { "compiler": "compiler" , "flags": "flags" , "objects": "objects" , "default-ENV": "default-ENV" } , "expression": { "type": "let*" , "bindings": [ ["COMPILER", {"type": "CALL_EXPRESSION", "name": "compiler"}] , [ "COMPILE_FLAGS" , { "type": "++" , "$1": [ {"type": "CALL_EXPRESSION", "name": "flags"} , {"type": "var", "name": "compile-args"} ] } ] , [ "ENV" , { "type": "map_union" , "$1": { "type": "++" , "$1": [ {"type": "CALL_EXPRESSION", "name": "default-ENV"} , [ { "type": "var" , "name": "ENV" , "default": {"type": "empty_map"} } ] ] } } ] , ["hdrs", {"type": "empty_map"}] , ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}] , [ "link-args" , { "type": "nub_right" , "$1": { "type": "++" , "$1": [ {"type": "keys", "$1": {"type": "var", "name": "objects"}} , {"type": "var", "name": "link-args"} ] } } ] , [ "binpath" , { "type": "if" , "cond": {"type": "var", "name": "stage"} , "then": { "type": "join" , "separator": "/" , "$1": [ {"type": "var", "name": "stage"} , {"type": "var", "name": "name"} ] } , "else": {"type": "var", "name": "name"} } ] , [ "binary" , { "type": "ACTION" , "outs": [{"type": "var", "name": "binpath"}] , "inputs": { "type": "disjoint_map_union" , "$1": [ {"type": "var", "name": "objects"} , {"type": "var", "name": "link-deps"} , { "type": "var" , "name": "cflags-files" , "default": {"type": "empty_map"} } , { "type": "var" , "name": "ldflags-files" , "default": {"type": "empty_map"} } ] } , "cmd": { "type": "++" , "$1": [ [ {"type": "var", "name": "COMPILER"} , "-o" , {"type": "var", "name": "binpath"} ] , {"type": "var", "name": "COMPILE_FLAGS"} , {"type": "var", "name": "link-args"} ] } , "env": {"type": "var", "name": "ENV"} } ] ] , "body": {"type": "var", "name": "binary"} } } , "bin result": { "doc": ["Produces the binary target result."] , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "ENV" , "name" , "pure C" , "srcs" , "private-hdrs" , "private-cflags" , "private-ldflags" , "stage" , "private-fieldnames" ] , "imports": { "compile-deps": "compile-deps" , "compile-args-deps": "compile-args-deps" , "link-deps": "link-deps" , "link-args-deps": "link-args-deps" , "cflags-files-deps": "cflags-files-deps" , "ldflags-files-deps": "ldflags-files-deps" , "binary": "bin artifact" } , "expression": { "type": "let*" , "bindings": [ ["deps-fieldnames", {"type": "var", "name": "private-fieldnames"}] , ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}] , [ "compile-args" , { "type": "++" , "$1": [ {"type": "CALL_EXPRESSION", "name": "compile-args-deps"} , {"type": "var", "name": "private-cflags"} ] } ] , ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}] , [ "link-args" , { "type": "nub_right" , "$1": { "type": "++" , "$1": [ {"type": "var", "name": "private-ldflags"} , {"type": "CALL_EXPRESSION", "name": "link-args-deps"} ] } } ] , [ "cflags-files" , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"} ] , [ "ldflags-files" , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"} ] , ["package", {"type": "singleton_map", "key": "to_bin", "value": true}] ] , "body": { "type": "RESULT" , "artifacts": {"type": "CALL_EXPRESSION", "name": "binary"} , "provides": {"type": "env", "vars": ["package"]} } } } , "install-with-deps result": { "vars": ["pc-install-dir", "targets", "prefix", "flat-libs", "hdrs-only"] , "imports": { "compile-deps": "compile-deps" , "compile-args-deps": "compile-args-deps" , "link-deps": "link-deps" , "link-args-deps": "link-args-deps" , "pkg-config": "pkg-config" } , "expression": { "type": "let*" , "bindings": [ [ "install-stage" , { "type": "disjoint_map_union" , "msg": "install stages may not overlap" , "$1": { "type": "foreach" , "var": "target" , "range": {"type": "var", "name": "targets"} , "body": { "type": "let*" , "bindings": [ [ "runfiles" , { "type": "DEP_RUNFILES" , "dep": {"type": "var", "name": "target"} , "default": {"type": "empty_map"} } ] , [ "compile-deps" , { "type": "DEP_PROVIDES" , "dep": {"type": "var", "name": "target"} , "provider": "compile-deps" , "default": {"type": "empty_map"} } ] , [ "headers" , { "type": "disjoint_map_union" , "msg": "headers may not overlap" , "$1": [ {"type": "var", "name": "runfiles"} , {"type": "var", "name": "compile-deps"} ] } ] ] , "body": { "type": "if" , "cond": {"type": "var", "name": "hdrs-only"} , "then": {"type": "var", "name": "headers"} , "else": { "type": "let*" , "bindings": [ [ "artifacts" , { "type": "DEP_ARTIFACTS" , "dep": {"type": "var", "name": "target"} , "default": {"type": "empty_map"} } ] , [ "link-deps" , { "type": "DEP_PROVIDES" , "dep": {"type": "var", "name": "target"} , "provider": "link-deps" , "default": {"type": "empty_map"} } ] , [ "package" , { "type": "DEP_PROVIDES" , "dep": {"type": "var", "name": "target"} , "provider": "package" , "default": {"type": "empty_map"} } ] , [ "to_bin" , { "type": "lookup" , "key": "to_bin" , "map": {"type": "var", "name": "package"} } ] , [ "binaries" , { "type": "if" , "cond": {"type": "var", "name": "to_bin"} , "then": {"type": "var", "name": "artifacts"} , "else": {"type": "empty_map"} } ] , [ "libraries" , { "type": "disjoint_map_union" , "msg": "libraries may not overlap" , "$1": { "type": "++" , "$1": [ { "type": "if" , "cond": {"type": "var", "name": "to_bin"} , "then": [] , "else": [{"type": "var", "name": "artifacts"}] } , [{"type": "var", "name": "link-deps"}] ] } } ] , [ "pkg-name" , { "type": "lookup" , "key": "name" , "map": {"type": "var", "name": "package"} } ] , [ "pkg-config" , { "type": "if" , "cond": {"type": "var", "name": "pkg-name"} , "then": { "type": "let*" , "bindings": [ ["pkg-prefix", {"type": "var", "name": "prefix"}] , [ "pkg-version" , { "type": "lookup" , "key": "version" , "map": {"type": "var", "name": "package"} } ] , [ "pkg-cflags" , { "type": "DEP_PROVIDES" , "dep": {"type": "var", "name": "target"} , "provider": "compile-args" , "default": [] } ] , [ "pkg-ldflags" , { "type": "++" , "$1": [ { "type": "DEP_PROVIDES" , "dep": {"type": "var", "name": "target"} , "provider": "link-args" , "default": [] } ] } ] , [ "pkg-flag-files" , { "type": "map_union" , "$1": [ { "type": "lookup" , "key": "cflags-files" , "map": {"type": "var", "name": "package"} , "default": {"type": "empty_map"} } , { "type": "lookup" , "key": "ldflags-files" , "map": {"type": "var", "name": "package"} , "default": {"type": "empty_map"} } ] } ] , [ "pkg-libs" , {"type": "var", "name": "libraries"} ] , [ "flat-libs" , {"type": "var", "name": "flat-libs"} ] ] , "body": { "type": "map_union" , "$1": [ { "type": "CALL_EXPRESSION" , "name": "pkg-config" } , {"type": "var", "name": "pkg-flag-files"} ] } } , "else": {"type": "empty_map"} } ] ] , "body": { "type": "map_union" , "$1": [ { "type": "to_subdir" , "subdir": "bin" , "flat": true , "msg": "install binaries may not overlap" , "$1": {"type": "var", "name": "binaries"} } , { "type": "to_subdir" , "subdir": "include" , "$1": {"type": "var", "name": "headers"} } , { "type": "to_subdir" , "subdir": "lib" , "flat": {"type": "var", "name": "flat-libs"} , "msg": "install libraries may not overlap" , "$1": {"type": "var", "name": "libraries"} } , { "type": "to_subdir" , "subdir": {"type": "var", "name": "pc-install-dir"} , "$1": {"type": "var", "name": "pkg-config"} } ] } } } } } } ] ] , "body": {"type": "RESULT", "artifacts": {"type": "var", "name": "install-stage"}} } } }