diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2017-08-31 15:29:03 -0400 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2017-09-01 11:44:54 -0400 |
commit | fbb7d335db6cee4130314c15cac457e506db79a7 (patch) | |
tree | 94af40f8bd8e1ed44e89b1aa8e8415a227ae77e0 /pkgs/build-support/cc-wrapper | |
parent | 1f5807d760bd82aab510d8e75016f10ea886919e (diff) | |
download | nixlib-fbb7d335db6cee4130314c15cac457e506db79a7.tar nixlib-fbb7d335db6cee4130314c15cac457e506db79a7.tar.gz nixlib-fbb7d335db6cee4130314c15cac457e506db79a7.tar.bz2 nixlib-fbb7d335db6cee4130314c15cac457e506db79a7.tar.lz nixlib-fbb7d335db6cee4130314c15cac457e506db79a7.tar.xz nixlib-fbb7d335db6cee4130314c15cac457e506db79a7.tar.zst nixlib-fbb7d335db6cee4130314c15cac457e506db79a7.zip |
cc-wrapper: Use separate mangler for "bool" variables
This avoids any `NIX_FOOBAR=1 1` not triggering conditions.
Diffstat (limited to 'pkgs/build-support/cc-wrapper')
-rw-r--r-- | pkgs/build-support/cc-wrapper/add-flags.sh | 9 | ||||
-rw-r--r-- | pkgs/build-support/cc-wrapper/utils.sh | 25 |
2 files changed, 27 insertions, 7 deletions
diff --git a/pkgs/build-support/cc-wrapper/add-flags.sh b/pkgs/build-support/cc-wrapper/add-flags.sh index 5f7c071fb9cf..978041fb4d87 100644 --- a/pkgs/build-support/cc-wrapper/add-flags.sh +++ b/pkgs/build-support/cc-wrapper/add-flags.sh @@ -4,7 +4,7 @@ # that case, it is cheaper/better to not repeat this step and let the forked # wrapped binary just inherit the work of the forker's wrapper script. -var_templates=( +var_templates_list=( NIX+CFLAGS_COMPILE NIX+CFLAGS_LINK NIX+CXXSTDLIB_COMPILE @@ -14,7 +14,9 @@ var_templates=( NIX+LDFLAGS NIX+LDFLAGS_BEFORE NIX+LDFLAGS_AFTER +) +var_templates_bool=( NIX+SET_BUILD_ID NIX+DONT_SET_RPATH NIX+ENFORCE_NO_NATIVE @@ -35,9 +37,12 @@ fi # We need to mangle names for hygiene, but also take parameters/overrides # from the environment. -for var in "${var_templates[@]}"; do +for var in "${var_templates_list[@]}"; do mangleVarList "$var" "${role_infixes[@]}" done +for var in "${var_templates_bool[@]}"; do + mangleVarBool "$var" "${role_infixes[@]}" +done # `-B@out@/bin' forces cc to use ld-wrapper.sh when calling ld. NIX_@infixSalt@_CFLAGS_COMPILE="-B@out@/bin/ $NIX_@infixSalt@_CFLAGS_COMPILE" diff --git a/pkgs/build-support/cc-wrapper/utils.sh b/pkgs/build-support/cc-wrapper/utils.sh index 3637d1241e88..a9ab2b23f24d 100644 --- a/pkgs/build-support/cc-wrapper/utils.sh +++ b/pkgs/build-support/cc-wrapper/utils.sh @@ -1,20 +1,35 @@ mangleVarList() { - declare var="$1" + local var="$1" shift - declare -a role_infixes=("$@") + local -a role_infixes=("$@") - outputVar="${var/+/_@infixSalt@_}" - export ${outputVar}+='' + local outputVar="${var/+/_@infixSalt@_}" + declare -gx ${outputVar}+='' # For each role we serve, we accumulate the input parameters into our own # cc-wrapper-derivation-specific environment variables. for infix in "${role_infixes[@]}"; do - inputVar="${var/+/${infix}}" + local inputVar="${var/+/${infix}}" if [ -v "$inputVar" ]; then export ${outputVar}+="${!outputVar:+ }${!inputVar}" fi done } +mangleVarBool() { + local var="$1" + shift + local -a role_infixes=("$@") + + local outputVar="${var/+/_@infixSalt@_}" + declare -gxi ${outputVar}+='' + for infix in "${role_infixes[@]}"; do + local inputVar="${var/+/${infix}}" + if [ -v "$inputVar" ]; then + let "${outputVar} |= ${!inputVar}" + fi + done +} + skip () { if [ -n "${NIX_DEBUG:-}" ]; then echo "skipping impure path $1" >&2 |