From 4199892768b412a22de303cb392b698887deecb4 Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Fri, 17 Nov 2017 10:11:01 +0000 Subject: [PATCH 1/4] makeWrapper: add --set-default and --set-eval After #31497 starter quoting all values, there arouse the need to left some values evaluated. `--set-default var value` expands to `export var=${var-value}`, where value is not evaluated and literally assigned to var unless it is already set. `--set-eval var value` expands to `export var=$(eval echo value)`, where value is evaluated by `eval`. --- pkgs/build-support/setup-hooks/make-wrapper.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkgs/build-support/setup-hooks/make-wrapper.sh b/pkgs/build-support/setup-hooks/make-wrapper.sh index 01410828d39..ab24fb38b29 100644 --- a/pkgs/build-support/setup-hooks/make-wrapper.sh +++ b/pkgs/build-support/setup-hooks/make-wrapper.sh @@ -48,6 +48,16 @@ makeWrapper() { value="${params[$((n + 2))]}" n=$((n + 2)) echo "export $varName=${value@Q}" >> "$wrapper" + elif [[ "$p" == "--set-default" ]]; then + varName="${params[$((n + 1))]}" + value="${params[$((n + 2))]}" + n=$((n + 2)) + echo "export $varName=\${$varName-${value@Q}}" >> "$wrapper" + elif [[ "$p" == "--set-eval" ]]; then + varName="${params[$((n + 1))]}" + value="${params[$((n + 2))]}" + n=$((n + 2)) + echo "export $varName=\$(eval echo ${value@Q})" >> "$wrapper" elif [[ "$p" == "--unset" ]]; then varName="${params[$((n + 1))]}" n=$((n + 1)) From 80d1eaa01de9d02e73a99aac15b9be1908839c6a Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Fri, 17 Nov 2017 12:19:36 +0000 Subject: [PATCH 2/4] mesos: do not use makeWrapper with bash from bootstrap tools It is too old and does not support required features. The error is: /nix/store/...-hook/nix-support/setup-hook: line 78: export $varName=${value@Q}\${$varName:+${separator@Q}}\$$varName: bad substitution --- pkgs/applications/networking/cluster/mesos/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/applications/networking/cluster/mesos/default.nix b/pkgs/applications/networking/cluster/mesos/default.nix index 90924227393..6654ee89c80 100644 --- a/pkgs/applications/networking/cluster/mesos/default.nix +++ b/pkgs/applications/networking/cluster/mesos/default.nix @@ -14,6 +14,8 @@ let # src/common/command_utils.cpp # https://github.com/NixOS/nixpkgs/issues/13783 tarWithGzip = lib.overrideDerivation gnutar (oldAttrs: { + # Original builder is bash 4.3.42 from bootstrap tools, too old for makeWrapper. + builder = "${bash}/bin/bash"; buildInputs = (oldAttrs.buildInputs or []) ++ [ makeWrapper ]; postInstall = (oldAttrs.postInstall or "") + '' wrapProgram $out/bin/tar --prefix PATH ":" "${gzip}/bin" From 74648f74662080a11e7d80511b4487989c6084c0 Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Fri, 17 Nov 2017 10:15:52 +0000 Subject: [PATCH 3/4] treewide: use --set-default and --set-eval where appropriate --- pkgs/development/compilers/dmd/2.067.1.nix | 2 +- pkgs/development/compilers/dmd/default.nix | 2 +- pkgs/misc/emulators/retrofe/default.nix | 2 +- pkgs/servers/nosql/apache-jena/fuseki-binary.nix | 2 +- pkgs/tools/text/popfile/default.nix | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/development/compilers/dmd/2.067.1.nix b/pkgs/development/compilers/dmd/2.067.1.nix index 6a3cddbd2e5..29a8618dc7b 100644 --- a/pkgs/development/compilers/dmd/2.067.1.nix +++ b/pkgs/development/compilers/dmd/2.067.1.nix @@ -146,7 +146,7 @@ stdenv.mkDerivation rec { wrapProgram $out/bin/dmd \ --prefix PATH ":" "${stdenv.cc}/bin" \ - --set CC "$""{CC:-$CC""}" + --set-default CC "$CC" cd $out/bin tee dmd.conf << EOF diff --git a/pkgs/development/compilers/dmd/default.nix b/pkgs/development/compilers/dmd/default.nix index 938dd04904b..ff19a5b872c 100644 --- a/pkgs/development/compilers/dmd/default.nix +++ b/pkgs/development/compilers/dmd/default.nix @@ -152,7 +152,7 @@ stdenv.mkDerivation rec { wrapProgram $out/bin/dmd \ --prefix PATH ":" "${stdenv.cc}/bin" \ - --set CC "$""{CC:-$CC""}" + --set-default CC "$CC" cd $out/bin tee dmd.conf << EOF diff --git a/pkgs/misc/emulators/retrofe/default.nix b/pkgs/misc/emulators/retrofe/default.nix index 5f921c5a923..26ef9907f89 100644 --- a/pkgs/misc/emulators/retrofe/default.nix +++ b/pkgs/misc/emulators/retrofe/default.nix @@ -65,7 +65,7 @@ stdenv.mkDerivation rec { postInstall = '' wrapProgram "$out/bin/retrofe" \ --prefix GST_PLUGIN_PATH : "$GST_PLUGIN_SYSTEM_PATH_1_0" \ - --set RETROFE_PATH "\''${RETROFE_PATH:-\$PWD}" + --set-eval RETROFE_PATH '$''\{RETROFE_PATH:-$PWD}' ''; meta = with stdenv.lib; { diff --git a/pkgs/servers/nosql/apache-jena/fuseki-binary.nix b/pkgs/servers/nosql/apache-jena/fuseki-binary.nix index 6b15c165dfd..4f9b3a6b443 100644 --- a/pkgs/servers/nosql/apache-jena/fuseki-binary.nix +++ b/pkgs/servers/nosql/apache-jena/fuseki-binary.nix @@ -24,7 +24,7 @@ stdenv.mkDerivation { for i in "$out"/bin/*; do wrapProgram "$i" \ --prefix "PATH" : "${java}/bin/" \ - --set "FUSEKI_HOME" '"''${FUSEKI_HOME:-'"$out"'}"' \ + --set-default "FUSEKI_HOME" "$out" \ ; done ''; diff --git a/pkgs/tools/text/popfile/default.nix b/pkgs/tools/text/popfile/default.nix index 10b82342051..37ad72813f6 100644 --- a/pkgs/tools/text/popfile/default.nix +++ b/pkgs/tools/text/popfile/default.nix @@ -44,8 +44,8 @@ stdenv.mkDerivation rec { wrapProgram "$path" \ --prefix PERL5LIB : $PERL5LIB:$out/bin \ --set POPFILE_ROOT $out/bin \ - --set POPFILE_USER \$\{POPFILE_USER:-\$HOME/.popfile\} \ - --run "test -d \$POPFILE_USER || mkdir -m 0700 -p \$POPFILE_USER" + --set-eval POPFILE_USER '$''\{POPFILE_USER:-$HOME/.popfile}' \ + --run 'test -d "$POPFILE_USER" || mkdir -m 0700 -p "$POPFILE_USER"' done ''; From fbdc74c761ef4bbd9ccc3688924932e0af49f7f9 Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Fri, 17 Nov 2017 12:53:54 +0000 Subject: [PATCH 4/4] makeWrapper: delete --set-eval because --run is good enough. --- pkgs/build-support/setup-hooks/make-wrapper.sh | 5 ----- pkgs/misc/emulators/retrofe/default.nix | 2 +- pkgs/tools/text/popfile/default.nix | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/pkgs/build-support/setup-hooks/make-wrapper.sh b/pkgs/build-support/setup-hooks/make-wrapper.sh index ab24fb38b29..f75b285bacf 100644 --- a/pkgs/build-support/setup-hooks/make-wrapper.sh +++ b/pkgs/build-support/setup-hooks/make-wrapper.sh @@ -53,11 +53,6 @@ makeWrapper() { value="${params[$((n + 2))]}" n=$((n + 2)) echo "export $varName=\${$varName-${value@Q}}" >> "$wrapper" - elif [[ "$p" == "--set-eval" ]]; then - varName="${params[$((n + 1))]}" - value="${params[$((n + 2))]}" - n=$((n + 2)) - echo "export $varName=\$(eval echo ${value@Q})" >> "$wrapper" elif [[ "$p" == "--unset" ]]; then varName="${params[$((n + 1))]}" n=$((n + 1)) diff --git a/pkgs/misc/emulators/retrofe/default.nix b/pkgs/misc/emulators/retrofe/default.nix index 26ef9907f89..ffc494dad4c 100644 --- a/pkgs/misc/emulators/retrofe/default.nix +++ b/pkgs/misc/emulators/retrofe/default.nix @@ -65,7 +65,7 @@ stdenv.mkDerivation rec { postInstall = '' wrapProgram "$out/bin/retrofe" \ --prefix GST_PLUGIN_PATH : "$GST_PLUGIN_SYSTEM_PATH_1_0" \ - --set-eval RETROFE_PATH '$''\{RETROFE_PATH:-$PWD}' + --run 'export RETROFE_PATH=''${RETROFE_PATH:-$PWD}' ''; meta = with stdenv.lib; { diff --git a/pkgs/tools/text/popfile/default.nix b/pkgs/tools/text/popfile/default.nix index 37ad72813f6..42befa2ce26 100644 --- a/pkgs/tools/text/popfile/default.nix +++ b/pkgs/tools/text/popfile/default.nix @@ -44,7 +44,7 @@ stdenv.mkDerivation rec { wrapProgram "$path" \ --prefix PERL5LIB : $PERL5LIB:$out/bin \ --set POPFILE_ROOT $out/bin \ - --set-eval POPFILE_USER '$''\{POPFILE_USER:-$HOME/.popfile}' \ + --run 'export POPFILE_USER=''${POPFILE_USER:-$HOME/.popfile}' \ --run 'test -d "$POPFILE_USER" || mkdir -m 0700 -p "$POPFILE_USER"' done '';