* More refactoring: move all the stdenv adapter functions (like
useDietlibc) to a separate file. all-packages.nix should really only contain package composition stuff. svn path=/nixpkgs/trunk/; revision=14022
This commit is contained in:
parent
b2ccd56224
commit
0cf9849afd
111
pkgs/stdenv/adapters.nix
Normal file
111
pkgs/stdenv/adapters.nix
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/* This file contains various functions that take a stdenv and return
|
||||||
|
a new stdenv with different behaviour, e.g. using a different C
|
||||||
|
compiler. */
|
||||||
|
|
||||||
|
{dietlibc, fetchurl, runCommand}:
|
||||||
|
|
||||||
|
|
||||||
|
rec {
|
||||||
|
|
||||||
|
|
||||||
|
# Override the compiler in stdenv for specific packages.
|
||||||
|
overrideGCC = stdenv: gcc: stdenv //
|
||||||
|
{ mkDerivation = args: stdenv.mkDerivation (args // { NIX_GCC = gcc; });
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
# Add some arbitrary packages to buildInputs for specific packages.
|
||||||
|
# Used to override packages in stenv like Make. Should not be used
|
||||||
|
# for other dependencies.
|
||||||
|
overrideInStdenv = stdenv: pkgs: stdenv //
|
||||||
|
{ mkDerivation = args: stdenv.mkDerivation (args //
|
||||||
|
{ buildInputs = (if args ? buildInputs then args.buildInputs else []) ++ pkgs; }
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
# Override the setup script of stdenv. Useful for testing new
|
||||||
|
# versions of the setup script without causing a rebuild of
|
||||||
|
# everything.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# randomPkg = import ../bla { ...
|
||||||
|
# stdenv = overrideSetup stdenv ../stdenv/generic/setup-latest.sh;
|
||||||
|
# };
|
||||||
|
overrideSetup = stdenv: setup: stdenv.regenerate setup;
|
||||||
|
|
||||||
|
|
||||||
|
# Return a modified stdenv that uses dietlibc to create small
|
||||||
|
# statically linked binaries.
|
||||||
|
useDietLibC = stdenv: stdenv //
|
||||||
|
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
||||||
|
NIX_CFLAGS_LINK = "-static";
|
||||||
|
|
||||||
|
# libcompat.a contains some commonly used functions.
|
||||||
|
NIX_LDFLAGS = "-lcompat";
|
||||||
|
|
||||||
|
# These are added *after* the command-line flags, so we'll
|
||||||
|
# always optimise for size.
|
||||||
|
NIX_CFLAGS_COMPILE =
|
||||||
|
(if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "")
|
||||||
|
+ " -Os -s -D_BSD_SOURCE=1";
|
||||||
|
|
||||||
|
configureFlags =
|
||||||
|
(if args ? configureFlags then args.configureFlags else "")
|
||||||
|
+ " --disable-shared"; # brrr...
|
||||||
|
|
||||||
|
NIX_GCC = import ../build-support/gcc-wrapper {
|
||||||
|
inherit stdenv;
|
||||||
|
libc = dietlibc;
|
||||||
|
inherit (stdenv.gcc) gcc binutils name nativeTools nativePrefix;
|
||||||
|
nativeLibc = false;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
isDietLibC = true;
|
||||||
|
} // {inherit fetchurl;};
|
||||||
|
|
||||||
|
|
||||||
|
# Return a modified stdenv that uses klibc to create small
|
||||||
|
# statically linked binaries.
|
||||||
|
useKlibc = stdenv: klibc: stdenv //
|
||||||
|
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
||||||
|
NIX_CFLAGS_LINK = "-static";
|
||||||
|
|
||||||
|
# These are added *after* the command-line flags, so we'll
|
||||||
|
# always optimise for size.
|
||||||
|
NIX_CFLAGS_COMPILE =
|
||||||
|
(if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "")
|
||||||
|
+ " -Os -s";
|
||||||
|
|
||||||
|
configureFlags =
|
||||||
|
(if args ? configureFlags then args.configureFlags else "")
|
||||||
|
+ " --disable-shared"; # brrr...
|
||||||
|
|
||||||
|
NIX_GCC = runCommand "klibc-wrapper" {} ''
|
||||||
|
ensureDir $out/bin
|
||||||
|
ln -s ${klibc}/bin/klcc $out/bin/gcc
|
||||||
|
ln -s ${klibc}/bin/klcc $out/bin/cc
|
||||||
|
ensureDir $out/nix-support
|
||||||
|
echo 'PATH=$PATH:${stdenv.gcc.binutils}/bin' > $out/nix-support/setup-hook
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
isKlibc = true;
|
||||||
|
isStatic = true;
|
||||||
|
} // {inherit fetchurl;};
|
||||||
|
|
||||||
|
|
||||||
|
# Return a modified stdenv that tries to build statically linked
|
||||||
|
# binaries.
|
||||||
|
makeStaticBinaries = stdenv: stdenv //
|
||||||
|
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
||||||
|
NIX_CFLAGS_LINK = "-static";
|
||||||
|
|
||||||
|
configureFlags =
|
||||||
|
(if args ? configureFlags then args.configureFlags else "")
|
||||||
|
+ " --disable-shared"; # brrr...
|
||||||
|
});
|
||||||
|
isStatic = true;
|
||||||
|
} // {inherit fetchurl;};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -106,105 +106,11 @@ let
|
|||||||
|
|
||||||
inherit lib config getConfig;
|
inherit lib config getConfig;
|
||||||
|
|
||||||
# Override the compiler in stdenv for specific packages.
|
|
||||||
overrideGCC = stdenv: gcc: stdenv //
|
|
||||||
{ mkDerivation = args: stdenv.mkDerivation (args // { NIX_GCC = gcc; });
|
|
||||||
};
|
|
||||||
|
|
||||||
# Add some arbitrary packages to buildInputs for specific packages.
|
|
||||||
# Used to override packages in stenv like Make. Should not be used
|
|
||||||
# for other dependencies.
|
|
||||||
overrideInStdenv = stdenv: pkgs: stdenv //
|
|
||||||
{ mkDerivation = args: stdenv.mkDerivation (args //
|
|
||||||
{ buildInputs = (if args ? buildInputs then args.buildInputs else []) ++ pkgs; }
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
addAttrsToDerivation = extraAttrs: stdenv: stdenv //
|
addAttrsToDerivation = extraAttrs: stdenv: stdenv //
|
||||||
{ mkDerivation = args: stdenv.mkDerivation (args // extraAttrs); };
|
{ mkDerivation = args: stdenv.mkDerivation (args // extraAttrs); };
|
||||||
|
|
||||||
# Override the setup script of stdenv. Useful for testing new
|
|
||||||
# versions of the setup script without causing a rebuild of
|
|
||||||
# everything.
|
|
||||||
#
|
|
||||||
# Example:
|
|
||||||
# randomPkg = import ../bla { ...
|
|
||||||
# stdenv = overrideSetup stdenv ../stdenv/generic/setup-latest.sh;
|
|
||||||
# };
|
|
||||||
overrideSetup = stdenv: setup: stdenv.regenerate setup;
|
|
||||||
|
|
||||||
stdenvNew = overrideSetup stdenv ../stdenv/generic/setup-new.sh;
|
stdenvNew = overrideSetup stdenv ../stdenv/generic/setup-new.sh;
|
||||||
|
|
||||||
# Return a modified stdenv that uses dietlibc to create small
|
|
||||||
# statically linked binaries.
|
|
||||||
useDietLibC = stdenv: stdenv //
|
|
||||||
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
|
||||||
NIX_CFLAGS_LINK = "-static";
|
|
||||||
|
|
||||||
# libcompat.a contains some commonly used functions.
|
|
||||||
NIX_LDFLAGS = "-lcompat";
|
|
||||||
|
|
||||||
# These are added *after* the command-line flags, so we'll
|
|
||||||
# always optimise for size.
|
|
||||||
NIX_CFLAGS_COMPILE =
|
|
||||||
(if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "")
|
|
||||||
+ " -Os -s -D_BSD_SOURCE=1";
|
|
||||||
|
|
||||||
configureFlags =
|
|
||||||
(if args ? configureFlags then args.configureFlags else "")
|
|
||||||
+ " --disable-shared"; # brrr...
|
|
||||||
|
|
||||||
NIX_GCC = import ../build-support/gcc-wrapper {
|
|
||||||
inherit stdenv;
|
|
||||||
libc = dietlibc;
|
|
||||||
inherit (gcc) gcc binutils name nativeTools nativePrefix;
|
|
||||||
nativeLibc = false;
|
|
||||||
};
|
|
||||||
});
|
|
||||||
isDietLibC = true;
|
|
||||||
} // {inherit fetchurl;};
|
|
||||||
|
|
||||||
# Return a modified stdenv that uses klibc to create small
|
|
||||||
# statically linked binaries.
|
|
||||||
useKlibc = stdenv: klibc: stdenv //
|
|
||||||
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
|
||||||
NIX_CFLAGS_LINK = "-static";
|
|
||||||
|
|
||||||
# These are added *after* the command-line flags, so we'll
|
|
||||||
# always optimise for size.
|
|
||||||
NIX_CFLAGS_COMPILE =
|
|
||||||
(if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "")
|
|
||||||
+ " -Os -s";
|
|
||||||
|
|
||||||
configureFlags =
|
|
||||||
(if args ? configureFlags then args.configureFlags else "")
|
|
||||||
+ " --disable-shared"; # brrr...
|
|
||||||
|
|
||||||
NIX_GCC = runCommand "klibc-wrapper" {} ''
|
|
||||||
ensureDir $out/bin
|
|
||||||
ln -s ${klibc}/bin/klcc $out/bin/gcc
|
|
||||||
ln -s ${klibc}/bin/klcc $out/bin/cc
|
|
||||||
ensureDir $out/nix-support
|
|
||||||
echo 'PATH=$PATH:${stdenv.gcc.binutils}/bin' > $out/nix-support/setup-hook
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
isKlibc = true;
|
|
||||||
isStatic = true;
|
|
||||||
} // {inherit fetchurl;};
|
|
||||||
|
|
||||||
# Return a modified stdenv that tries to build statically linked
|
|
||||||
# binaries.
|
|
||||||
makeStaticBinaries = stdenv: stdenv //
|
|
||||||
{ mkDerivation = args: stdenv.mkDerivation (args // {
|
|
||||||
NIX_CFLAGS_LINK = "-static";
|
|
||||||
|
|
||||||
configureFlags =
|
|
||||||
(if args ? configureFlags then args.configureFlags else "")
|
|
||||||
+ " --disable-shared"; # brrr...
|
|
||||||
});
|
|
||||||
isStatic = true;
|
|
||||||
} // {inherit fetchurl;};
|
|
||||||
|
|
||||||
# Applying this to an attribute set will cause nix-env to look
|
# Applying this to an attribute set will cause nix-env to look
|
||||||
# inside the set for derivations.
|
# inside the set for derivations.
|
||||||
recurseIntoAttrs = attrs: attrs // {recurseForDerivations = true;};
|
recurseIntoAttrs = attrs: attrs // {recurseForDerivations = true;};
|
||||||
@ -322,6 +228,10 @@ let
|
|||||||
else
|
else
|
||||||
stdenv;
|
stdenv;
|
||||||
|
|
||||||
|
inherit (import ../stdenv/adapters.nix {inherit (pkgs) dietlibc fetchurl runCommand;})
|
||||||
|
overrideGCC overrideInStdenv overrideSetup
|
||||||
|
useDietLibC useKlibc makeStaticBinaries;
|
||||||
|
|
||||||
|
|
||||||
### BUILD SUPPORT
|
### BUILD SUPPORT
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user