2014-02-04 17:18:38 +01:00
|
|
|
let lib = import ../../../lib; in lib.makeOverridable (
|
|
|
|
|
2017-05-22 03:37:16 +02:00
|
|
|
{ name ? "stdenv", preHook ? "", initialPath, cc, shell
|
2016-12-19 17:10:47 +01:00
|
|
|
, allowedRequisites ? null, extraAttrs ? {}, overrides ? (self: super: {}), config
|
2009-02-02 16:03:38 +01:00
|
|
|
|
|
|
|
, # The `fetchurl' to use for downloading curl and its dependencies
|
|
|
|
# (see all-packages.nix).
|
|
|
|
fetchurlBoot
|
2014-02-04 17:18:38 +01:00
|
|
|
|
|
|
|
, setupScript ? ./setup.sh
|
|
|
|
|
|
|
|
, extraBuildInputs ? []
|
2015-06-12 02:58:26 +02:00
|
|
|
, __stdenvImpureHostDeps ? []
|
|
|
|
, __extraImpureHostDeps ? []
|
2015-11-21 21:06:41 +01:00
|
|
|
, stdenvSandboxProfile ? ""
|
|
|
|
, extraSandboxProfile ? ""
|
2017-05-22 03:37:16 +02:00
|
|
|
|
|
|
|
, # The platforms here do *not* correspond to the stage the stdenv is
|
|
|
|
# used in, but rather the previous one, in which it was built. We
|
|
|
|
# use the latter two platforms, like a cross compiler, because the
|
|
|
|
# stand environment is a build tool if you squint at it, and because
|
|
|
|
# neither of these are used when building stdenv so we know the
|
|
|
|
# build platform is irrelevant.
|
|
|
|
hostPlatform, targetPlatform
|
2004-07-02 12:05:53 +02:00
|
|
|
}:
|
|
|
|
|
2009-04-25 16:08:29 +02:00
|
|
|
let
|
2017-05-22 03:37:16 +02:00
|
|
|
inherit (targetPlatform) system;
|
2009-04-25 16:08:29 +02:00
|
|
|
|
2014-11-06 12:10:28 +01:00
|
|
|
defaultNativeBuildInputs = extraBuildInputs ++
|
2014-07-08 14:26:35 +02:00
|
|
|
[ ../../build-support/setup-hooks/move-docs.sh
|
|
|
|
../../build-support/setup-hooks/compress-man-pages.sh
|
2014-06-27 13:33:05 +02:00
|
|
|
../../build-support/setup-hooks/strip.sh
|
|
|
|
../../build-support/setup-hooks/patch-shebangs.sh
|
2017-05-06 13:18:28 +02:00
|
|
|
]
|
|
|
|
# FIXME this on Darwin; see
|
|
|
|
# https://github.com/NixOS/nixpkgs/commit/94d164dd7#commitcomment-22030369
|
2017-07-05 23:56:53 +02:00
|
|
|
++ lib.optional hostPlatform.isLinux ../../build-support/setup-hooks/audit-tmpdir.sh
|
2017-05-06 13:18:28 +02:00
|
|
|
++ [
|
2014-08-30 08:27:43 +02:00
|
|
|
../../build-support/setup-hooks/multiple-outputs.sh
|
2014-10-07 14:43:56 +02:00
|
|
|
../../build-support/setup-hooks/move-sbin.sh
|
2014-10-07 15:04:13 +02:00
|
|
|
../../build-support/setup-hooks/move-lib64.sh
|
2016-01-05 15:32:59 +01:00
|
|
|
../../build-support/setup-hooks/set-source-date-epoch-to-latest.sh
|
2014-12-17 19:11:30 +01:00
|
|
|
cc
|
2014-06-27 13:33:05 +02:00
|
|
|
];
|
|
|
|
|
2014-02-04 17:18:38 +01:00
|
|
|
# The stdenv that we are producing.
|
2017-07-05 23:56:53 +02:00
|
|
|
stdenv =
|
2014-08-29 22:09:01 +02:00
|
|
|
derivation (
|
2014-11-06 13:33:08 +01:00
|
|
|
(if isNull allowedRequisites then {} else { allowedRequisites = allowedRequisites ++ defaultNativeBuildInputs; }) //
|
2014-08-29 22:09:01 +02:00
|
|
|
{
|
2014-02-04 17:18:38 +01:00
|
|
|
inherit system name;
|
|
|
|
|
|
|
|
builder = shell;
|
|
|
|
|
|
|
|
args = ["-e" ./builder.sh];
|
|
|
|
|
|
|
|
setup = setupScript;
|
|
|
|
|
2014-11-06 12:10:28 +01:00
|
|
|
inherit preHook initialPath shell defaultNativeBuildInputs;
|
2015-06-18 19:03:32 +02:00
|
|
|
}
|
2017-07-05 23:56:53 +02:00
|
|
|
// lib.optionalAttrs hostPlatform.isDarwin {
|
2015-11-21 21:06:41 +01:00
|
|
|
__sandboxProfile = stdenvSandboxProfile;
|
2015-06-18 19:03:32 +02:00
|
|
|
__impureHostDeps = __stdenvImpureHostDeps;
|
2014-08-29 22:09:01 +02:00
|
|
|
})
|
2014-02-04 17:18:38 +01:00
|
|
|
|
|
|
|
// rec {
|
|
|
|
|
2016-08-28 16:56:31 +02:00
|
|
|
meta = {
|
|
|
|
description = "The default build environment for Unix packages in Nixpkgs";
|
|
|
|
platforms = lib.platforms.all;
|
|
|
|
};
|
2014-02-04 17:18:38 +01:00
|
|
|
|
2017-07-06 01:58:24 +02:00
|
|
|
inherit extraBuildInputs __extraImpureHostDeps extraSandboxProfile;
|
|
|
|
|
2014-02-04 17:18:38 +01:00
|
|
|
# Utility flags to test the type of platform.
|
2017-05-22 03:37:16 +02:00
|
|
|
inherit (hostPlatform)
|
2017-05-22 18:42:03 +02:00
|
|
|
isDarwin isLinux isSunOS isHurd isCygwin isFreeBSD isOpenBSD
|
|
|
|
isi686 isx86_64 is64bit isMips isBigEndian;
|
2017-05-22 03:37:16 +02:00
|
|
|
isArm = hostPlatform.isArm32;
|
|
|
|
isAarch64 = hostPlatform.isArm64;
|
2014-02-04 17:18:38 +01:00
|
|
|
|
2014-06-30 14:26:23 +02:00
|
|
|
# Whether we should run paxctl to pax-mark binaries.
|
|
|
|
needsPax = isLinux;
|
|
|
|
|
2017-07-05 23:56:53 +02:00
|
|
|
inherit (import ./make-derivation.nix {
|
|
|
|
inherit lib config stdenv;
|
|
|
|
# TODO(@Ericson2314): Remove
|
|
|
|
inherit
|
|
|
|
hostPlatform targetPlatform;
|
|
|
|
}) mkDerivation;
|
2014-07-01 16:43:52 +02:00
|
|
|
|
2014-02-04 17:18:38 +01:00
|
|
|
# For convenience, bring in the library functions in lib/ so
|
|
|
|
# packages don't have to do that themselves.
|
|
|
|
inherit lib;
|
|
|
|
|
|
|
|
inherit fetchurlBoot;
|
|
|
|
|
|
|
|
inherit overrides;
|
2014-07-01 16:17:23 +02:00
|
|
|
|
2014-12-17 19:11:30 +01:00
|
|
|
inherit cc;
|
2014-02-04 17:18:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# Propagate any extra attributes. For instance, we use this to
|
|
|
|
# "lift" packages like curl from the final stdenv for Linux to
|
|
|
|
# all-packages.nix for that platform (meaning that it has a line
|
|
|
|
# like curl = if stdenv ? curl then stdenv.curl else ...).
|
|
|
|
// extraAttrs;
|
|
|
|
|
2017-07-05 23:56:53 +02:00
|
|
|
in stdenv)
|