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
|
# system, e.g., cygwin and mingw builds on i686-cygwin. Most people
|
||||||
# can ignore it.
|
# can ignore it.
|
||||||
|
|
||||||
{system, stdenvType ? system, allPackages ? import ../.., platform}:
|
{ system, stdenvType ? system, allPackages ? import ../.., platform, config }:
|
||||||
|
|
||||||
assert system != "i686-cygwin" -> system == stdenvType;
|
assert system != "i686-cygwin" -> system == stdenvType;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ rec {
|
||||||
# be used with care, since many Nix packages will not build properly
|
# be used with care, since many Nix packages will not build properly
|
||||||
# with it (e.g., because they require GNU Make).
|
# with it (e.g., because they require GNU Make).
|
||||||
stdenvNative = (import ./native {
|
stdenvNative = (import ./native {
|
||||||
inherit system allPackages;
|
inherit system allPackages config;
|
||||||
}).stdenv;
|
}).stdenv;
|
||||||
|
|
||||||
stdenvNativePkgs = allPackages {
|
stdenvNativePkgs = allPackages {
|
||||||
|
@ -35,13 +35,14 @@ rec {
|
||||||
|
|
||||||
# The Nix build environment.
|
# The Nix build environment.
|
||||||
stdenvNix = import ./nix {
|
stdenvNix = import ./nix {
|
||||||
|
inherit config;
|
||||||
stdenv = stdenvNative;
|
stdenv = stdenvNative;
|
||||||
pkgs = stdenvNativePkgs;
|
pkgs = stdenvNativePkgs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# Linux standard environment.
|
# Linux standard environment.
|
||||||
stdenvLinux = (import ./linux {inherit system allPackages platform;}).stdenvLinux;
|
stdenvLinux = (import ./linux { inherit system allPackages platform config;}).stdenvLinux;
|
||||||
|
|
||||||
|
|
||||||
# MinGW/MSYS standard environment.
|
# MinGW/MSYS standard environment.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{ system, name ? "stdenv", preHook ? "", initialPath, gcc, shell
|
{ system, name ? "stdenv", preHook ? "", initialPath, gcc, shell
|
||||||
, extraAttrs ? {}, overrides ? (pkgs: {})
|
, extraAttrs ? {}, overrides ? (pkgs: {}), config
|
||||||
|
|
||||||
, # The `fetchurl' to use for downloading curl and its dependencies
|
, # The `fetchurl' to use for downloading curl and its dependencies
|
||||||
# (see all-packages.nix).
|
# (see all-packages.nix).
|
||||||
|
@ -58,6 +58,7 @@ let
|
||||||
args = attrs.args or ["-e" (attrs.builder or ./default-builder.sh)];
|
args = attrs.args or ["-e" (attrs.builder or ./default-builder.sh)];
|
||||||
stdenv = result;
|
stdenv = result;
|
||||||
system = result.system;
|
system = result.system;
|
||||||
|
userHook = config.stdenv.userHook or null;
|
||||||
|
|
||||||
# Inputs built by the cross compiler.
|
# Inputs built by the cross compiler.
|
||||||
buildInputs = lib.optionals (crossConfig != null) buildInputs;
|
buildInputs = lib.optionals (crossConfig != null) buildInputs;
|
||||||
|
|
|
@ -869,4 +869,10 @@ genericBuild() {
|
||||||
runHook postHook
|
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
|
dumpVars
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# The function defaults are for easy testing.
|
# The function defaults are for easy testing.
|
||||||
{ system ? builtins.currentSystem
|
{ system ? builtins.currentSystem
|
||||||
, allPackages ? import ../../top-level/all-packages.nix
|
, allPackages ? import ../../top-level/all-packages.nix
|
||||||
, platform ? null }:
|
, platform ? null, config }:
|
||||||
|
|
||||||
rec {
|
rec {
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ rec {
|
||||||
{gcc, extraAttrs ? {}, overrides ? (pkgs: {}), extraPath ? [], fetchurl}:
|
{gcc, extraAttrs ? {}, overrides ? (pkgs: {}), extraPath ? [], fetchurl}:
|
||||||
|
|
||||||
import ../generic {
|
import ../generic {
|
||||||
inherit system;
|
inherit system config;
|
||||||
name = "stdenv-linux-boot";
|
name = "stdenv-linux-boot";
|
||||||
preHook =
|
preHook =
|
||||||
''
|
''
|
||||||
|
@ -261,7 +261,7 @@ rec {
|
||||||
# dependency (`nix-store -qR') on bootstrapTools or the
|
# dependency (`nix-store -qR') on bootstrapTools or the
|
||||||
# first binutils built.
|
# first binutils built.
|
||||||
stdenvLinux = import ../generic rec {
|
stdenvLinux = import ../generic rec {
|
||||||
inherit system;
|
inherit system config;
|
||||||
|
|
||||||
preHook = commonPreHook;
|
preHook = commonPreHook;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ system, allPackages ? import ../../.. }:
|
{ system, allPackages ? import ../../.., config }:
|
||||||
|
|
||||||
rec {
|
rec {
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ rec {
|
||||||
|
|
||||||
fetchurlBoot = fetchurl;
|
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 {
|
import ../generic rec {
|
||||||
|
inherit config;
|
||||||
|
|
||||||
preHook =
|
preHook =
|
||||||
''
|
''
|
||||||
export NIX_ENFORCE_PURITY=1
|
export NIX_ENFORCE_PURITY=1
|
||||||
|
|
|
@ -196,7 +196,7 @@ let
|
||||||
|
|
||||||
|
|
||||||
allStdenvs = import ../stdenv {
|
allStdenvs = import ../stdenv {
|
||||||
inherit system stdenvType platform;
|
inherit system stdenvType platform config;
|
||||||
allPackages = args: import ./all-packages.nix ({ inherit config system; } // args);
|
allPackages = args: import ./all-packages.nix ({ inherit config system; } // args);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue