From cf8daf63120adedbeaf5bc8c2f396be2496a741e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 28 Dec 2012 16:36:09 +0100 Subject: [PATCH] =?UTF-8?q?Add=20an=20option=20=E2=80=98stdenv.userHook?= =?UTF-8?q?=E2=80=99=20to=20set=20a=20global=20stdenv=20setup=20hook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows various applications. It allows users to set global optimisation flags, e.g. stdenv.userHook = ''NIX_CFLAGS_COMPILE+=" -funroll-loops"''; But the impetus is as an alternative to issue #229, allowing impure stdenv setup for people who want to use distcc: stdenv.userHook = "source /my/impure/setup-script.sh"; This is probably a bad idea, but at least now it's a bad idea in people's configuration and not in Nixpkgs. :-) --- pkgs/stdenv/default.nix | 7 ++++--- pkgs/stdenv/generic/default.nix | 3 ++- pkgs/stdenv/generic/setup.sh | 6 ++++++ pkgs/stdenv/linux/default.nix | 6 +++--- pkgs/stdenv/native/default.nix | 4 ++-- pkgs/stdenv/nix/default.nix | 4 +++- pkgs/top-level/all-packages.nix | 2 +- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix index 8e0da288eec..67000670cd1 100644 --- a/pkgs/stdenv/default.nix +++ b/pkgs/stdenv/default.nix @@ -10,7 +10,7 @@ # system, e.g., cygwin and mingw builds on i686-cygwin. Most people # can ignore it. -{system, stdenvType ? system, allPackages ? import ../.., platform}: +{ system, stdenvType ? system, allPackages ? import ../.., platform, config }: assert system != "i686-cygwin" -> system == stdenvType; @@ -24,7 +24,7 @@ rec { # be used with care, since many Nix packages will not build properly # with it (e.g., because they require GNU Make). stdenvNative = (import ./native { - inherit system allPackages; + inherit system allPackages config; }).stdenv; stdenvNativePkgs = allPackages { @@ -35,13 +35,14 @@ rec { # The Nix build environment. stdenvNix = import ./nix { + inherit config; stdenv = stdenvNative; pkgs = stdenvNativePkgs; }; # Linux standard environment. - stdenvLinux = (import ./linux {inherit system allPackages platform;}).stdenvLinux; + stdenvLinux = (import ./linux { inherit system allPackages platform config;}).stdenvLinux; # MinGW/MSYS standard environment. diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 20cbb1b455c..311f66241c8 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -1,5 +1,5 @@ { system, name ? "stdenv", preHook ? "", initialPath, gcc, shell -, extraAttrs ? {}, overrides ? (pkgs: {}) +, extraAttrs ? {}, overrides ? (pkgs: {}), config , # The `fetchurl' to use for downloading curl and its dependencies # (see all-packages.nix). @@ -58,6 +58,7 @@ let args = attrs.args or ["-e" (attrs.builder or ./default-builder.sh)]; stdenv = result; system = result.system; + userHook = config.stdenv.userHook or null; # Inputs built by the cross compiler. buildInputs = lib.optionals (crossConfig != null) buildInputs; diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index a9f9aa2af2f..d697fcb7c4f 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -869,4 +869,10 @@ genericBuild() { runHook postHook +# Execute the global user hook (defined through the Nixpkgs +# configuration option ‘stdenv.userHook’). This can be used to set +# global compiler optimisation flags, for instance. +runHook userHook + + dumpVars diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 3105e76f817..777b2cf6a32 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -7,7 +7,7 @@ # The function defaults are for easy testing. { system ? builtins.currentSystem , allPackages ? import ../../top-level/all-packages.nix -, platform ? null }: +, platform ? null, config }: rec { @@ -81,7 +81,7 @@ rec { {gcc, extraAttrs ? {}, overrides ? (pkgs: {}), extraPath ? [], fetchurl}: import ../generic { - inherit system; + inherit system config; name = "stdenv-linux-boot"; preHook = '' @@ -261,7 +261,7 @@ rec { # dependency (`nix-store -qR') on bootstrapTools or the # first binutils built. stdenvLinux = import ../generic rec { - inherit system; + inherit system config; preHook = commonPreHook; diff --git a/pkgs/stdenv/native/default.nix b/pkgs/stdenv/native/default.nix index a33a46c8512..524b2a53337 100644 --- a/pkgs/stdenv/native/default.nix +++ b/pkgs/stdenv/native/default.nix @@ -1,4 +1,4 @@ -{ system, allPackages ? import ../../.. }: +{ system, allPackages ? import ../../.., config }: rec { @@ -98,7 +98,7 @@ rec { fetchurlBoot = fetchurl; - inherit system shell gcc overrides; + inherit system shell gcc overrides config; }; diff --git a/pkgs/stdenv/nix/default.nix b/pkgs/stdenv/nix/default.nix index 5e242b6e3a1..668bac5f0ae 100644 --- a/pkgs/stdenv/nix/default.nix +++ b/pkgs/stdenv/nix/default.nix @@ -1,6 +1,8 @@ -{ stdenv, pkgs }: +{ stdenv, pkgs, config }: import ../generic rec { + inherit config; + preHook = '' export NIX_ENFORCE_PURITY=1 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 895d9db36c1..e4001c63258 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -196,7 +196,7 @@ let allStdenvs = import ../stdenv { - inherit system stdenvType platform; + inherit system stdenvType platform config; allPackages = args: import ./all-packages.nix ({ inherit config system; } // args); };