about summary refs log tree commit diff
path: root/pkgs/build-support/cc-wrapper
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2017-08-31 15:29:03 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2017-09-01 11:44:54 -0400
commitfbb7d335db6cee4130314c15cac457e506db79a7 (patch)
tree94af40f8bd8e1ed44e89b1aa8e8415a227ae77e0 /pkgs/build-support/cc-wrapper
parent1f5807d760bd82aab510d8e75016f10ea886919e (diff)
downloadnixlib-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.sh9
-rw-r--r--pkgs/build-support/cc-wrapper/utils.sh25
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