aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/stdenv/generic/make-derivation.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/stdenv/generic/make-derivation.nix')
-rw-r--r--nixpkgs/pkgs/stdenv/generic/make-derivation.nix47
1 files changed, 36 insertions, 11 deletions
diff --git a/nixpkgs/pkgs/stdenv/generic/make-derivation.nix b/nixpkgs/pkgs/stdenv/generic/make-derivation.nix
index 09879451d8e..491951e6121 100644
--- a/nixpkgs/pkgs/stdenv/generic/make-derivation.nix
+++ b/nixpkgs/pkgs/stdenv/generic/make-derivation.nix
@@ -247,7 +247,8 @@ in rec {
(/**/ if lib.isString cmakeFlags then [cmakeFlags]
else if cmakeFlags == null then []
else cmakeFlags)
- ++ [ "-DCMAKE_SYSTEM_NAME=${lib.findFirst lib.isString "Generic" [ stdenv.hostPlatform.uname.system ]}" ]
+ ++ [ "-DCMAKE_SYSTEM_NAME=${lib.findFirst lib.isString "Generic" (
+ lib.optional (!stdenv.hostPlatform.isRedox) stdenv.hostPlatform.uname.system)}"]
++ lib.optional (stdenv.hostPlatform.uname.processor != null) "-DCMAKE_SYSTEM_PROCESSOR=${stdenv.hostPlatform.uname.processor}"
++ lib.optional (stdenv.hostPlatform.uname.release != null) "-DCMAKE_SYSTEM_VERSION=${stdenv.hostPlatform.release}"
++ lib.optional (stdenv.buildPlatform.uname.system != null) "-DCMAKE_HOST_SYSTEM_NAME=${stdenv.buildPlatform.uname.system}"
@@ -262,7 +263,7 @@ in rec {
else if isx86_32 then "x86"
else if isx86_64 then "x86_64"
else platform.parsed.cpu.family + builtins.toString platform.parsed.cpu.bits;
- crossFile = builtins.toFile "cross-file.conf" (''
+ crossFile = builtins.toFile "cross-file.conf" ''
[properties]
needs_exe_wrapper = true
@@ -271,13 +272,7 @@ in rec {
cpu_family = '${cpuFamily stdenv.targetPlatform}'
cpu = '${stdenv.targetPlatform.parsed.cpu.name}'
endian = ${if stdenv.targetPlatform.isLittleEndian then "'little'" else "'big'"}
- ''
- # TODO should have target prefix too, issue #86077
- + ''
-
- [binaries]
- pkgconfig = 'pkg-config'
- '');
+ '';
in [ "--cross-file=${crossFile}" ] ++ mesonFlags;
} // lib.optionalAttrs (attrs.enableParallelBuilding or false) {
enableParallelChecking = attrs.enableParallelChecking or true;
@@ -314,8 +309,12 @@ in rec {
name = attrs.name or "${attrs.pname}-${attrs.version}";
# If the packager hasn't specified `outputsToInstall`, choose a default,
- # which is the name of `p.bin or p.out or p`;
- # if he has specified it, it will be overridden below in `// meta`.
+ # which is the name of `p.bin or p.out or p` along with `p.man` when
+ # present.
+ #
+ # If the packager has specified it, it will be overridden below in
+ # `// meta`.
+ #
# Note: This default probably shouldn't be globally configurable.
# Services and users should specify outputs explicitly,
# unless they are comfortable with this default.
@@ -343,6 +342,32 @@ in rec {
validity.handled
({
overrideAttrs = f: mkDerivation (attrs // (f attrs));
+
+ # A derivation that always builds successfully and whose runtime
+ # dependencies are the original derivations build time dependencies
+ # This allows easy building and distributing of all derivations
+ # needed to enter a nix-shell with
+ # nix-build shell.nix -A inputDerivation
+ inputDerivation = derivation (derivationArg // {
+ # Add a name in case the original drv didn't have one
+ name = derivationArg.name or "inputDerivation";
+ # This always only has one output
+ outputs = [ "out" ];
+
+ # Propagate the original builder and arguments, since we override
+ # them and they might contain references to build inputs
+ _derivation_original_builder = derivationArg.builder;
+ _derivation_original_args = derivationArg.args;
+
+ builder = stdenv.shell;
+ # The bash builtin `export` dumps all current environment variables,
+ # which is where all build input references end up (e.g. $PATH for
+ # binaries). By writing this to $out, Nix can find and register
+ # them as runtime dependencies (since Nix greps for store paths
+ # through $out to find them)
+ args = [ "-c" "export > $out" ];
+ });
+
inherit meta passthru;
} //
# Pass through extra attributes that are not inputs, but