diff options
author | Naïm Favier <n@monade.li> | 2021-12-19 01:32:35 +0100 |
---|---|---|
committer | Raphael Megzari <raphael@megzari.com> | 2021-12-27 20:30:01 -0500 |
commit | f2065d81ad9d25bbe581aef5c4c80845d7bb3041 (patch) | |
tree | 029b352507dee029ccc802af4ef1ad6e70a1ab77 | |
parent | 4aaf4c256b94f8789e116473e7f86201002ecf2f (diff) | |
download | nixpkgs-f2065d81ad9d25bbe581aef5c4c80845d7bb3041.tar nixpkgs-f2065d81ad9d25bbe581aef5c4c80845d7bb3041.tar.gz nixpkgs-f2065d81ad9d25bbe581aef5c4c80845d7bb3041.tar.bz2 nixpkgs-f2065d81ad9d25bbe581aef5c4c80845d7bb3041.tar.lz nixpkgs-f2065d81ad9d25bbe581aef5c4c80845d7bb3041.tar.xz nixpkgs-f2065d81ad9d25bbe581aef5c4c80845d7bb3041.tar.zst nixpkgs-f2065d81ad9d25bbe581aef5c4c80845d7bb3041.zip |
stdenv/generic: introduce shellDryRun
Add `shellDryRun` to the generic stdenv and substitute it for uses of `${stdenv.shell} -n`. The point of this layer of abstraction is to add the flag `-O extglob`, which resolves #126344 in a more direct way.
-rw-r--r-- | nixos/modules/system/activation/top-level.nix | 4 | ||||
-rw-r--r-- | nixos/modules/system/boot/systemd.nix | 16 | ||||
-rw-r--r-- | pkgs/build-support/trivial-builders.nix | 6 | ||||
-rw-r--r-- | pkgs/games/vdrift/default.nix | 20 | ||||
-rw-r--r-- | pkgs/stdenv/generic/default.nix | 7 |
5 files changed, 23 insertions, 30 deletions
diff --git a/nixos/modules/system/activation/top-level.nix b/nixos/modules/system/activation/top-level.nix index 501998fa399..3c48d6bfd85 100644 --- a/nixos/modules/system/activation/top-level.nix +++ b/nixos/modules/system/activation/top-level.nix @@ -55,8 +55,8 @@ let substituteInPlace $out/dry-activate --subst-var out chmod u+x $out/activate $out/dry-activate unset activationScript dryActivationScript - ${pkgs.stdenv.shell} -n $out/activate - ${pkgs.stdenv.shell} -n $out/dry-activate + ${pkgs.stdenv.shellDryRun} $out/activate + ${pkgs.stdenv.shellDryRun} $out/dry-activate cp ${config.system.build.bootStage2} $out/init substituteInPlace $out/init --subst-var-by systemConfig $out diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix index ec5dea075bb..76c59c047e0 100644 --- a/nixos/modules/system/boot/systemd.nix +++ b/nixos/modules/system/boot/systemd.nix @@ -210,20 +210,14 @@ let makeJobScript = name: text: let scriptName = replaceChars [ "\\" "@" ] [ "-" "_" ] (shellEscape name); - out = pkgs.writeTextFile { + out = (pkgs.writeShellScriptBin scriptName '' + set -e + ${text} + '').overrideAttrs (_: { # The derivation name is different from the script file name # to keep the script file name short to avoid cluttering logs. name = "unit-script-${scriptName}"; - executable = true; - destination = "/bin/${scriptName}"; - text = '' - #!${pkgs.runtimeShell} -e - ${text} - ''; - checkPhase = '' - ${pkgs.stdenv.shell} -n "$out/bin/${scriptName}" - ''; - }; + }); in "${out}/bin/${scriptName}"; unitConfig = { config, options, ... }: { diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index 3c9f3189d2c..5720ebac298 100644 --- a/pkgs/build-support/trivial-builders.nix +++ b/pkgs/build-support/trivial-builders.nix @@ -219,7 +219,7 @@ rec { ${text} ''; checkPhase = '' - ${stdenv.shell} -n $out + ${stdenv.shellDryRun} $out ''; }; @@ -246,7 +246,7 @@ rec { ${text} ''; checkPhase = '' - ${stdenv.shell} -n $out/bin/${name} + ${stdenv.shellDryRun} $out/bin/${name} ''; }; @@ -295,7 +295,7 @@ rec { checkPhase = if checkPhase == null then '' runHook preCheck - ${stdenv.shell} -n $out/bin/${name} + ${stdenv.shellDryRun} $out/bin/${name} ${shellcheck}/bin/shellcheck $out/bin/${name} runHook postCheck '' diff --git a/pkgs/games/vdrift/default.nix b/pkgs/games/vdrift/default.nix index 04f65cf7937..19397794649 100644 --- a/pkgs/games/vdrift/default.nix +++ b/pkgs/games/vdrift/default.nix @@ -12,7 +12,7 @@ , bullet , curl , gettext -, writeTextFile +, writeShellScriptBin , data ? fetchsvn { url = "svn://svn.code.sf.net/p/vdrift/code/vdrift-data"; @@ -54,21 +54,15 @@ let }; }; wrappedName = "vdrift-${version}-with-data-${toString data.rev}"; -in writeTextFile { +in +(writeShellScriptBin "vdrift" '' + export VDRIFT_DATA_DIRECTORY="${data}" + exec ${bin}/bin/vdrift "$@" +'').overrideAttrs (_: { name = wrappedName; - text = '' - export VDRIFT_DATA_DIRECTORY="${data}" - exec ${bin}/bin/vdrift "$@" - ''; - destination = "/bin/vdrift"; - executable = true; - checkPhase = '' - ${stdenv.shell} -n $out/bin/vdrift - ''; -} // { meta = bin.meta // { hydraPlatforms = [ ]; }; unwrapped = bin; inherit bin data; -} +}) diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 49ebc67f854..4fb98e5e801 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -112,7 +112,7 @@ let # are absolute unless we go out of our way to make them relative (like with CF) # TODO: This really wants to be in stdenv/darwin but we don't have hostPlatform # there (yet?) so it goes here until then. - preHook = preHook+ lib.optionalString buildPlatform.isDarwin '' + preHook = preHook + lib.optionalString buildPlatform.isDarwin '' export NIX_DONT_SET_RPATH_FOR_BUILD=1 '' + lib.optionalString (hostPlatform.isDarwin || (hostPlatform.parsed.kernel.execFormat != lib.systems.parse.execFormats.elf && hostPlatform.parsed.kernel.execFormat != lib.systems.parse.execFormats.macho)) '' export NIX_DONT_SET_RPATH=1 @@ -168,6 +168,11 @@ let inherit overrides; inherit cc hasCC; + + # Convenience for doing some very basic shell syntax checking by parsing a script + # without running any commands. Because this will also skip `shopt -s extglob` + # commands and extglob affects the Bash parser, we enable extglob always. + shellDryRun = "${stdenv.shell} -n -O extglob"; } # Propagate any extra attributes. For instance, we use this to |