Add an option ‘stdenv.userHook’ to set a global stdenv setup hook
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. :-)
This commit is contained in:
parent
6fd4f63530
commit
cf8daf6312
7 changed files with 21 additions and 11 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
{ stdenv, pkgs }:
|
||||
{ stdenv, pkgs, config }:
|
||||
|
||||
import ../generic rec {
|
||||
inherit config;
|
||||
|
||||
preHook =
|
||||
''
|
||||
export NIX_ENFORCE_PURITY=1
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue