diff options
author | Martin Weinelt <hexa@darmstadt.ccc.de> | 2024-02-29 07:19:15 +0100 |
---|---|---|
committer | Martin Weinelt <hexa@darmstadt.ccc.de> | 2024-02-29 07:19:15 +0100 |
commit | 65b31e498ade8c921a9868a458fa37af2c2e167a (patch) | |
tree | 05b53a9f74578bba97fecf5903822a77a922cf9a /pkgs/build-support | |
parent | 392bc69fa749302c8859db904530dcdf8f971705 (diff) | |
parent | 0852bff4370133e3a62b0cc7d14d193b928a7c59 (diff) |
Merge remote-tracking branch 'origin/staging-next' into staging
Conflicts: - pkgs/development/python-modules/influxdb/default.nix - pkgs/development/tools/misc/binutils/default.nix
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/substitute/substitute.nix | 56 | ||||
-rw-r--r-- | pkgs/build-support/substitute/substitute.sh | 8 | ||||
-rw-r--r-- | pkgs/build-support/trivial-builders/default.nix | 13 |
3 files changed, 64 insertions, 13 deletions
diff --git a/pkgs/build-support/substitute/substitute.nix b/pkgs/build-support/substitute/substitute.nix index 7f0332334585b..37233a306840d 100644 --- a/pkgs/build-support/substitute/substitute.nix +++ b/pkgs/build-support/substitute/substitute.nix @@ -1,14 +1,58 @@ -{ stdenvNoCC }: +{ lib, stdenvNoCC }: +/* +This is a wrapper around `substitute` in the stdenv. +Attribute arguments: +- `name` (optional): The name of the resulting derivation +- `src`: The path to the file to substitute +- `substitutions`: The list of substitution arguments to pass + See https://nixos.org/manual/nixpkgs/stable/#fun-substitute +- `replacements`: Deprecated version of `substitutions` + that doesn't support spaces in arguments. + +Example: + +```nix +{ substitute }: +substitute { + src = ./greeting.txt; + substitutions = [ + "--replace" + "world" + "paul" + ]; +} +``` + +See ../../test/substitute for tests +*/ args: -# This is a wrapper around `substitute` in the stdenv. -# The `replacements` attribute should be a list of list of arguments -# to `substitute`, such as `[ "--replace" "sourcetext" "replacementtext" ]` -stdenvNoCC.mkDerivation ({ +let name = if args ? name then args.name else baseNameOf (toString args.src); + deprecationReplacement = lib.pipe args.replacements [ + lib.toList + (map (lib.splitString " ")) + lib.concatLists + (lib.concatMapStringsSep " " lib.strings.escapeNixString) + ]; + optionalDeprecationWarning = + # substitutions is only available starting 24.05. + # TODO: Remove support for replacements sometime after the next release + lib.warnIf (args ? replacements && lib.isInOldestRelease 2405) '' + pkgs.substitute: For "${name}", `replacements` is used, which is deprecated since it doesn't support arguments with spaces. Use `substitutions` instead: + substitutions = [ ${deprecationReplacement} ];''; +in +optionalDeprecationWarning +stdenvNoCC.mkDerivation ({ + inherit name; builder = ./substitute.sh; inherit (args) src; preferLocalBuild = true; allowSubstitutes = false; -} // args // { replacements = args.replacements; }) +} // args // lib.optionalAttrs (args ? substitutions) { + substitutions = + assert lib.assertMsg (lib.isList args.substitutions) '' + pkgs.substitute: For "${name}", `substitutions` is passed, which is expected to be a list, but it's a ${builtins.typeOf args.substitutions} instead.''; + lib.escapeShellArgs args.substitutions; +}) diff --git a/pkgs/build-support/substitute/substitute.sh b/pkgs/build-support/substitute/substitute.sh index dbac275a80ede..d50a82446639d 100644 --- a/pkgs/build-support/substitute/substitute.sh +++ b/pkgs/build-support/substitute/substitute.sh @@ -8,7 +8,13 @@ if test -n "$dir"; then mkdir -p $out/$dir fi -substitute $src $target $replacements +substitutionsList=($replacements) + +if [[ -v substitutions ]]; then + eval "substitutionsList+=($substitutions)" +fi + +substitute $src $target "${substitutionsList[@]}" if test -n "$isExecutable"; then chmod +x $target diff --git a/pkgs/build-support/trivial-builders/default.nix b/pkgs/build-support/trivial-builders/default.nix index a38231bdcaa32..cecf3f5eae84b 100644 --- a/pkgs/build-support/trivial-builders/default.nix +++ b/pkgs/build-support/trivial-builders/default.nix @@ -904,22 +904,23 @@ rec { else throw "applyPatches: please supply a `name` argument because a default name can only be computed when the `src` is a path or is an attribute set with a `name` attribute." ) + "-patched" , patches ? [ ] + , prePatch ? "" , postPatch ? "" , ... }@args: - if patches == [ ] && postPatch == "" + if patches == [ ] && prePatch == "" && postPatch == "" then src # nothing to do, so use original src to avoid additional drv else stdenvNoCC.mkDerivation - { - inherit name src patches postPatch; + ({ + inherit name src patches prePatch postPatch; preferLocalBuild = true; allowSubstitutes = false; phases = "unpackPhase patchPhase installPhase"; installPhase = "cp -R ./ $out"; } - # Carry `meta` information from the underlying `src` if present. - // (optionalAttrs (src?meta) { inherit (src) meta; }) - // (removeAttrs args [ "src" "name" "patches" "postPatch" ]); + # Carry `meta` information from the underlying `src` if present. + // (optionalAttrs (src?meta) { inherit (src) meta; }) + // (removeAttrs args [ "src" "name" "patches" "prePatch" "postPatch" ])); /* An immutable file in the store with a length of 0 bytes. */ emptyFile = runCommand "empty-file" |