diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2009-02-10 15:48:30 +0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2009-02-10 15:48:30 +0000 |
commit | 0cf9849afd0db06dc70a938000b545099c06eb43 (patch) | |
tree | 4d0d5c4c45a4a33be9d70f6758f8c962f4cb001d /pkgs/stdenv | |
parent | b2ccd56224a60e7ae4f5a6cb1b740ba3485fd3e0 (diff) |
* 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
Diffstat (limited to 'pkgs/stdenv')
-rw-r--r-- | pkgs/stdenv/adapters.nix | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix new file mode 100644 index 0000000000000..ff4de11bc8b70 --- /dev/null +++ b/pkgs/stdenv/adapters.nix @@ -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;}; + + +} \ No newline at end of file |