From 0cf9849afd0db06dc70a938000b545099c06eb43 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 10 Feb 2009 15:48:30 +0000 Subject: [PATCH] * 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 --- pkgs/stdenv/adapters.nix | 111 ++++++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 98 ++-------------------------- 2 files changed, 115 insertions(+), 94 deletions(-) create mode 100644 pkgs/stdenv/adapters.nix diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix new file mode 100644 index 00000000000..ff4de11bc8b --- /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 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 955762ecb93..f861bea95a0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -106,105 +106,11 @@ let 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 // { 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; - # 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 # inside the set for derivations. recurseIntoAttrs = attrs: attrs // {recurseForDerivations = true;}; @@ -322,6 +228,10 @@ let else stdenv; + inherit (import ../stdenv/adapters.nix {inherit (pkgs) dietlibc fetchurl runCommand;}) + overrideGCC overrideInStdenv overrideSetup + useDietLibC useKlibc makeStaticBinaries; + ### BUILD SUPPORT