{ "make-build": { "vars": [ "source_dir" , "subdir" , "localbase_dir" , "configure" , "configure_options" , "make_targets" , "make_prefix" , "make_options" , "make_jobs" , "pre_cmds" , "post_cmds" , "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "LDFLAGS" , "ADD_CFLAGS" , "ADD_CXXFLAGS" , "ADD_LDFLAGS" , "ENV" , "AR" , "PREFIX" , "BUILD_POSITION_INDEPENDENT" , "TIMEOUT_SCALE" , "defaults-transition" , "expand_exec" , "resolve_symlinks" ] , "imports": { "artifacts": ["", "field_artifacts"] , "flags-cc": ["CC", "flags-cc"] , "flags-cxx": ["CC", "flags-cxx"] , "compiler-cc": ["CC", "compiler-cc"] , "compiler-cxx": ["CC", "compiler-cxx"] , "default-LDFLAGS": ["CC", "default-LDFLAGS"] , "default-AR": ["CC", "default-AR"] , "default-ENV": ["CC", "default-ENV"] , "default-PATH": ["CC", "default-PATH"] , "default-TOOLCHAIN": ["CC", "default-TOOLCHAIN"] , "default-NON_SYSTEM_TOOLS": ["CC", "default-NON_SYSTEM_TOOLS"] , "foreign-MAKE": ["CC/foreign", "default-MAKE"] , "foreign-ENV": ["CC/foreign", "default-ENV"] , "foreign-PATH": ["CC/foreign", "default-PATH"] , "foreign-TOOLCHAIN": ["CC/foreign", "default-TOOLCHAIN"] , "foreign-NON_SYSTEM_TOOLS": ["CC/foreign", "default-NON_SYSTEM_TOOLS"] , "map_provider": ["", "field_map_provider"] , "sh": ["shell", "sh"] , "sh-PATH": ["shell", "PATH"] } , "expression": { "type": "let*" , "bindings": [ ["TOOLCHAIN_DIR", "toolchain"] , [ "shell TOOLCHAIN" , { "type": "let*" , "bindings": [ ["fieldname", "shell defaults"] , ["provider", "TOOLCHAIN"] , ["default", {"type": "empty_map"}] ] , "body": {"type": "CALL_EXPRESSION", "name": "map_provider"} } ] , [ "sh" , { "type": "let*" , "bindings": [["fieldname", "shell defaults"]] , "body": {"type": "CALL_EXPRESSION", "name": "sh"} } ] , [ "TOOLCHAIN" , { "type": "disjoint_map_union" , "msg": "Toolchain trees may not overlap" , "$1": [ {"type": "CALL_EXPRESSION", "name": "foreign-TOOLCHAIN"} , {"type": "CALL_EXPRESSION", "name": "default-TOOLCHAIN"} , {"type": "var", "name": "shell TOOLCHAIN"} ] } ] , [ "TOOLCHAIN" , { "type": "to_subdir" , "subdir": {"type": "var", "name": "TOOLCHAIN_DIR"} , "$1": {"type": "var", "name": "TOOLCHAIN"} } ] , [ "NON_SYSTEM_TOOLS" , { "type": "map_union" , "$1": [ {"type": "CALL_EXPRESSION", "name": "foreign-NON_SYSTEM_TOOLS"} , {"type": "CALL_EXPRESSION", "name": "default-NON_SYSTEM_TOOLS"} ] } ] , [ "MAKE" , { "type": "join" , "$1": { "type": "++" , "$1": [ { "type": "if" , "cond": { "type": "lookup" , "key": "MAKE" , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} } , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] } , {"type": "CALL_EXPRESSION", "name": "foreign-MAKE"} ] } } ] , ["CC", {"type": "CALL_EXPRESSION", "name": "compiler-cc"}] , ["CXX", {"type": "CALL_EXPRESSION", "name": "compiler-cxx"}] , [ "CFLAGS" , { "type": "join" , "separator": " " , "$1": {"type": "CALL_EXPRESSION", "name": "flags-cc"} } ] , [ "CXXFLAGS" , { "type": "join" , "separator": " " , "$1": {"type": "CALL_EXPRESSION", "name": "flags-cxx"} } ] , [ "LDFLAGS" , { "type": "join" , "separator": " " , "$1": { "type": "++" , "$1": [ ["-Wl,-rpath,$ORIGIN", "-Wl,-rpath,$ORIGIN/../lib"] , { "type": "var" , "name": "LDFLAGS" , "default": {"type": "CALL_EXPRESSION", "name": "default-LDFLAGS"} } , {"type": "var", "name": "ldflags", "default": []} ] } } ] , [ "AR" , { "type": "var" , "name": "AR" , "default": { "type": "join" , "$1": { "type": "++" , "$1": [ { "type": "if" , "cond": { "type": "lookup" , "key": "AR" , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} } , "then": ["./", {"type": "var", "name": "TOOLCHAIN_DIR"}, "/"] } , {"type": "CALL_EXPRESSION", "name": "default-AR"} ] } } } ] , [ "PREFIX" , { "type": "if" , "cond": {"type": "var", "name": "make_prefix"} , "then": { "type": "join" , "separator": "/" , "$1": { "type": "++" , "$1": [[""], {"type": "var", "name": "make_prefix"}] } } , "else": {"type": "var", "name": "PREFIX", "default": "/"} } ] , [ "sh-PATH" , { "type": "join" , "separator": ":" , "$1": { "type": "let*" , "bindings": [["fieldname", "shell defaults"]] , "body": {"type": "CALL_EXPRESSION", "name": "sh-PATH"} } } ] , [ "sh-ENV" , { "type": "if" , "cond": {"type": "var", "name": "sh-PATH"} , "then": { "type": "singleton_map" , "key": "PATH" , "value": {"type": "var", "name": "sh-PATH"} } , "else": {"type": "empty_map"} } ] , [ "PATH" , { "type": "join" , "separator": ":" , "$1": { "type": "nub_left" , "$1": { "type": "++" , "$1": [ {"type": "CALL_EXPRESSION", "name": "foreign-PATH"} , {"type": "CALL_EXPRESSION", "name": "default-PATH"} ] } } } ] , [ "ENV" , { "type": "map_union" , "$1": [ { "type": "env" , "vars": [ "CC" , "CXX" , "CFLAGS" , "CXXFLAGS" , "LDFLAGS" , "AR" , "MAKE" , "PREFIX" ] } , {"type": "var", "name": "sh-ENV"} , {"type": "CALL_EXPRESSION", "name": "default-ENV"} , {"type": "CALL_EXPRESSION", "name": "foreign-ENV"} , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}} ] } ] , [ "SUBDIR" , { "type": "join" , "separator": "/" , "$1": {"type": "var", "name": "subdir", "default": []} } ] , [ "configure_args" , { "type": "if" , "cond": {"type": "var", "name": "configure"} , "then": { "type": "++" , "$1": [ {"type": "var", "name": "configure_options", "default": []} , [ { "type": "join" , "$1": ["--prefix=", {"type": "var", "name": "PREFIX"}] } ] ] } } ] , [ "make_targets" , { "type": "if" , "cond": {"type": "var", "name": "make_targets"} , "then": {"type": "var", "name": "make_targets"} , "else": ["install"] } ] , [ "script" , { "type": "singleton_map" , "key": "run_make.sh" , "value": { "type": "BLOB" , "data": { "type": "join" , "separator": "\n" , "$1": { "type": "++" , "$1": [ [ "set -eu" , "mkdir -p scratch install" , "readonly ROOT=\"$(pwd)\"" , "export TMPDIR=\"$(pwd)/scratch\"" , "export DESTDIR=\"$(pwd)/install\"" , "export TOOLCHAIN=\"$(pwd)/toolchain\"" , "export LOCALBASE=\"$(pwd)/localbase\"" , { "type": "if" , "cond": { "type": "lookup" , "key": "CC" , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} } , "then": "export CC=$(pwd)/${CC}" , "else": "" } , { "type": "if" , "cond": { "type": "lookup" , "key": "CXX" , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} } , "then": "export CXX=$(pwd)/${CXX}" , "else": "" } , { "type": "if" , "cond": { "type": "lookup" , "key": "AR" , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} } , "then": "export AR=$(pwd)/${AR}" , "else": "" } , { "type": "if" , "cond": { "type": "lookup" , "key": "MAKE" , "map": {"type": "var", "name": "NON_SYSTEM_TOOLS"} } , "then": "export MAKE=$(pwd)/${MAKE}" , "else": "" } , { "type": "join" , "$1": [ "export PATH=" , { "type": "join_cmd" , "$1": [{"type": "var", "name": "PATH"}] } , "${PATH:+:}\"${PATH}\"" ] } ] , { "type": "if" , "cond": {"type": "var", "name": "pre_cmds"} , "then": { "type": "++" , "$1": [ ["(", "set --", "cd ./source"] , {"type": "var", "name": "pre_cmds"} , [")"] ] } } , ["readonly SUBDIR=\"$1\"", "shift"] , { "type": "if" , "cond": {"type": "var", "name": "configure_args"} , "then": [ "( cd \"source/${SUBDIR}\"" , { "type": "join" , "$1": [ "${ROOT}/expand_exec TMPDIR DESTDIR LOCALBASE CC CXX CFLAGS CXXFLAGS LDFLAGS AR PREFIX -- ./configure " , { "type": "join_cmd" , "$1": {"type": "var", "name": "configure_args"} } , " >\"${ROOT}/configure.log\" 2>&1 || (cat \"${ROOT}/configure.log\" && exit 1)" ] } , ")" ] } , { "type": "foreach" , "range": {"type": "var", "name": "make_targets"} , "var": "target" , "body": { "type": "join" , "separator": " " , "$1": [ "${ROOT}/expand_exec TMPDIR DESTDIR LOCALBASE CC CXX CFLAGS CXXFLAGS LDFLAGS AR PREFIX" , "--" , "${MAKE} -C \"source/${SUBDIR}\" DESTDIR=${DESTDIR} \"$@\"" , { "type": "join_cmd" , "$1": [{"type": "var", "name": "target"}] } , ">>build.log 2>&1 || (cat build.log && exit 1)" ] } } , { "type": "if" , "cond": {"type": "var", "name": "resolve_symlinks"} , "then": [ "mv install install_with_symlinks" , "cp -rL install_with_symlinks install >copy.log 2>&1 || (echo 'ERROR: symlink resolve failed with:' && cat copy.log && exit 1)" ] } , { "type": "if" , "cond": {"type": "var", "name": "post_cmds"} , "then": { "type": "++" , "$1": [ ["(", "set --", "cd ./install"] , {"type": "var", "name": "post_cmds"} , [")"] ] } } ] } } } } ] ] , "body": { "type": "ACTION" , "inputs": { "type": "map_union" , "$1": [ {"type": "var", "name": "TOOLCHAIN"} , {"type": "var", "name": "source_dir"} , {"type": "var", "name": "expand_exec"} , { "type": "var" , "name": "localbase_dir" , "default": {"type": "empty_map"} } , {"type": "var", "name": "script"} ] } , "cmd": { "type": "++" , "$1": [ [{"type": "var", "name": "sh"}, "run_make.sh"] , [{"type": "var", "name": "SUBDIR"}] , {"type": "var", "name": "make_options"} , { "type": "if" , "cond": {"type": "var", "name": "make_jobs"} , "then": [ { "type": "join" , "$1": { "type": "++" , "$1": [["-j"], {"type": "var", "name": "make_jobs"}] } } ] } ] } , "out_dirs": ["install"] , "env": {"type": "var", "name": "ENV"} , "timeout scaling": {"type": "var", "name": "TIMEOUT_SCALE", "default": 10.0} , "execution properties": {"type": "var", "name": "FOREIGN_EXECUTION_PROPERTIES"} } } } }