diff options
author | Alyssa Ross <hi@alyssa.is> | 2021-04-09 18:28:16 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2021-04-12 18:46:15 +0000 |
commit | fd2e737e0678ee7d8081baef05b305146a2c0034 (patch) | |
tree | ac3e9b27576a0382335532d126f9a66d486bc638 /nixpkgs/pkgs/build-support/trivial-builders.nix | |
parent | cc207d720b6aa836e256c1ee9842bc739e630a8a (diff) | |
parent | 9e377a6ce42dccd9b624ae4ce8f978dc892ba0e2 (diff) | |
download | nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.gz nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.bz2 nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.lz nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.xz nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.zst nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.zip |
Merge remote-tracking branch 'nixpkgs/nixos-unstable'
Diffstat (limited to 'nixpkgs/pkgs/build-support/trivial-builders.nix')
-rw-r--r-- | nixpkgs/pkgs/build-support/trivial-builders.nix | 78 |
1 files changed, 57 insertions, 21 deletions
diff --git a/nixpkgs/pkgs/build-support/trivial-builders.nix b/nixpkgs/pkgs/build-support/trivial-builders.nix index eab5366e1839..4995efd9a4bf 100644 --- a/nixpkgs/pkgs/build-support/trivial-builders.nix +++ b/nixpkgs/pkgs/build-support/trivial-builders.nix @@ -1,27 +1,12 @@ { lib, stdenv, stdenvNoCC, lndir, runtimeShell }: -let - - runCommand' = runLocal: stdenv: name: env: buildCommand: - stdenv.mkDerivation ({ - name = lib.strings.sanitizeDerivationName name; - inherit buildCommand; - passAsFile = [ "buildCommand" ]; - } - // (lib.optionalAttrs runLocal { - preferLocalBuild = true; - allowSubstitutes = false; - }) - // env); - -in - rec { /* Run the shell command `buildCommand' to produce a store path named * `name'. The attributes in `env' are added to the environment - * prior to running the command. By default `runCommand' runs using - * stdenv with no compiler environment. `runCommandCC` + * prior to running the command. By default `runCommand` runs in a + * stdenv with no compiler environment. `runCommandCC` uses the default + * stdenv, `pkgs.stdenv`. * * Examples: * runCommand "name" {envVariable = true;} ''echo hello > $out'' @@ -42,13 +27,64 @@ rec { runCommand = runCommandNoCC; runCommandLocal = runCommandNoCCLocal; - runCommandNoCC = runCommand' false stdenvNoCC; - runCommandNoCCLocal = runCommand' true stdenvNoCC; + runCommandNoCC = name: env: runCommandWith { + stdenv = stdenvNoCC; + runLocal = false; + inherit name; + derivationArgs = env; + }; + runCommandNoCCLocal = name: env: runCommandWith { + stdenv = stdenvNoCC; + runLocal = true; + inherit name; + derivationArgs = env; + }; - runCommandCC = runCommand' false stdenv; + runCommandCC = name: env: runCommandWith { + stdenv = stdenv; + runLocal = false; + inherit name; + derivationArgs = env; + }; # `runCommandCCLocal` left out on purpose. # We shouldn’t force the user to have a cc in scope. + /* Generalized version of the `runCommand`-variants + * which does customized behavior via a single + * attribute set passed as the first argument + * instead of having a lot of variants like + * `runCommand*`. Additionally it allows changing + * the used `stdenv` freely and has a more explicit + * approach to changing the arguments passed to + * `stdenv.mkDerivation`. + */ + runCommandWith = + let + # prevent infinite recursion for the default stdenv value + defaultStdenv = stdenv; + in + { stdenv ? defaultStdenv + # which stdenv to use, defaults to a stdenv with a C compiler, pkgs.stdenv + , runLocal ? false + # whether to build this derivation locally instead of substituting + , derivationArgs ? {} + # extra arguments to pass to stdenv.mkDerivation + , name + # name of the resulting derivation + }: buildCommand: + stdenv.mkDerivation ({ + name = lib.strings.sanitizeDerivationName name; + inherit buildCommand; + passAsFile = [ "buildCommand" ] + ++ (derivationArgs.passAsFile or []); + } + // (lib.optionalAttrs runLocal { + preferLocalBuild = true; + allowSubstitutes = false; + }) + // builtins.removeAttrs derivationArgs [ "passAsFile" ]); + + /* Writes a text file to the nix store. * The contents of text is added to the file in the store. * |