* The `patch' command is now part of stdenv, so it no longer needs to

be passed to derivations that need to apply patches.
* GCC 3.4 is now the default compiler (old GCC renamed to `gcc-3.3').
* The temporary GCCs built during the stdenvLinux bootstrap are now
  built without C++ support and without profiling.
* Remove fixincl in GCC 3.4 to prevent a retained dependency on the
  previous GCC.
* Always set $prefix in setup.sh, even when there is no configure
  script.

svn path=/nixpkgs/trunk/; revision=1444
This commit is contained in:
Eelco Dolstra 2004-09-18 17:23:18 +00:00
parent e31d1dd960
commit 1ab4a9324c
15 changed files with 65 additions and 79 deletions

View File

@ -14,22 +14,6 @@
... ...
* Subtle problems can occur if the Nix store directory or one of its
parents is a symlink. E.g., purity checks can barf:
impure path `/data/nix/store/099cd9aee7d056a9922fd6dd116a3f5c-gcc-3.3.3/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.3/crtbegin.o' used in link
(This happened because /nix was a symlink to /data/nix.) Maybe we
should disallow this entirely, since, exactly because it is
perfectly legal for a builder to expand a symlink, we can end up
with derivates referring to paths that existed in the build
environment but not in the target environment.
Disallowing this can be highly inconvenient, since it makes it
harder to move the Nix store to a different file system. (On Linux,
`bind' mounts can help here.)
* In libXt: * In libXt:
/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -DXTHREADS -DXUSE_MTSAFE_API -I/nix/store/aadf0bd4a908da11d14f6538503b8408-libX11-6.2.1/include -I/nix/store/ba366e3b944ead64ec9b0490bb615874-xproto-6.6.1/include -I./include/X11 -g -O2 -c -o ActionHook.lo `test -f 'ActionHook.c' || echo './'`ActionHook.c /bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -DXTHREADS -DXUSE_MTSAFE_API -I/nix/store/aadf0bd4a908da11d14f6538503b8408-libX11-6.2.1/include -I/nix/store/ba366e3b944ead64ec9b0490bb615874-xproto-6.6.1/include -I./include/X11 -g -O2 -c -o ActionHook.lo `test -f 'ActionHook.c' || echo './'`ActionHook.c
@ -69,4 +53,9 @@ stdenv.mkDerivation {
* Add "exit 0" at the end of configure of rte package. * Add "exit 0" at the end of configure of rte package.
* In stdenv/nix/path.nix: remove gcc. * Starting at gcc 3.4, all C programs incur a retained dependency on
gcc through the rpath stored in the executable, even though the
executable doesn't use against any library in gcc. The reason is
that the gcc passes a `-lgcc_s' switch to the linker. Solution:
patch the linker so that rpaths are only added for libraries that we
actually use.

View File

@ -11,10 +11,6 @@
* After building gcc, filter out references to /tmp/nix... in * After building gcc, filter out references to /tmp/nix... in
.../lib/libsupc++.la and .../lib/libstdc++.la .../lib/libsupc++.la and .../lib/libstdc++.la
* diffutils retains a dependency on coreutils/bin/pr; causes stdenv to
depend on 2 copies of coreutils (the first one impure in
stdenv-nix-linux!)
* change dontMake & dontMakeInstall into dontBuild and dontInstall in * change dontMake & dontMakeInstall into dontBuild and dontInstall in

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, patch, noSysDirs { stdenv, fetchurl, noSysDirs
, langC ? true, langCC ? true, langF77 ? false , langC ? true, langCC ? true, langF77 ? false
}: }:
@ -13,6 +13,5 @@ stdenv.mkDerivation {
}; };
# !!! apply only if noSysDirs is set # !!! apply only if noSysDirs is set
patches = [./no-sys-dirs.patch]; patches = [./no-sys-dirs.patch];
buildInputs = [patch];
inherit noSysDirs langC langCC langF77; inherit noSysDirs langC langCC langF77;
} }

View File

@ -71,6 +71,10 @@ postInstall() {
# Remove precompiled headers for now. They are very big and # Remove precompiled headers for now. They are very big and
# probably not very useful yet. # probably not very useful yet.
find $out/include -name "*.gch" -exec rm -rf {} \; -prune find $out/include -name "*.gch" -exec rm -rf {} \; -prune
# Remove `fixincl' to prevent a retained dependency on the
# previous gcc.
rm -rf $out/libexec/gcc/*/*/install-tools
} }

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, patch, noSysDirs { stdenv, fetchurl, noSysDirs
, langC ? true, langCC ? true, langF77 ? false , langC ? true, langCC ? true, langF77 ? false
, profiledCompiler ? false , profiledCompiler ? false
}: }:
@ -14,6 +14,5 @@ stdenv.mkDerivation {
}; };
# !!! apply only if noSysDirs is set # !!! apply only if noSysDirs is set
patches = [./no-sys-dirs.patch]; patches = [./no-sys-dirs.patch];
buildInputs = [patch];
inherit noSysDirs langC langCC langF77 profiledCompiler; inherit noSysDirs langC langCC langF77 profiledCompiler;
} }

View File

@ -1,4 +1,4 @@
{stdenv, fetchurl, patch}: {stdenv, fetchurl}:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "gnumake-3.80"; name = "gnumake-3.80";
@ -7,5 +7,4 @@ stdenv.mkDerivation {
md5 = "0bbd1df101bc0294d440471e50feca71"; md5 = "0bbd1df101bc0294d440471e50feca71";
}; };
patches = [./log.diff]; patches = [./log.diff];
buildInputs = [patch];
} }

View File

@ -424,6 +424,14 @@ configureW() {
$preConfigure $preConfigure
fi fi
if test -z "$prefix"; then
prefix="$out";
fi
if test "$useTempPrefix" = "1"; then
prefix="$NIX_BUILD_TOP/tmp_prefix";
fi
if test -z "$configureScript"; then if test -z "$configureScript"; then
configureScript=./configure configureScript=./configure
if ! test -x $configureScript; then if ! test -x $configureScript; then
@ -439,14 +447,6 @@ configureW() {
done done
fi fi
if test -z "$prefix"; then
prefix="$out";
fi
if test "$useTempPrefix" = "1"; then
prefix="$NIX_BUILD_TOP/tmp_prefix";
fi
if test -z "$dontAddPrefix"; then if test -z "$dontAddPrefix"; then
configureFlags="--prefix=$prefix $configureFlags" configureFlags="--prefix=$prefix $configureFlags"
fi fi

View File

@ -2,7 +2,10 @@
# identifier and a standard build environment, returns the set of all # identifier and a standard build environment, returns the set of all
# packages provided by the Nix Package Collection. # packages provided by the Nix Package Collection.
{stdenv, bootCurl, noSysDirs ? true}: { stdenv, bootCurl, noSysDirs ? true
, gccWithCC ? true
, gccWithProfiling ? true
}:
rec { rec {
@ -41,7 +44,7 @@ rec {
}; };
diffutils = (import ../tools/text/diffutils) { diffutils = (import ../tools/text/diffutils) {
inherit fetchurl stdenv; inherit fetchurl stdenv coreutils;
}; };
gnupatch = (import ../tools/text/gnupatch) { gnupatch = (import ../tools/text/gnupatch) {
@ -218,7 +221,7 @@ rec {
}; };
gnumake = (import ../development/tools/build-managers/gnumake) { gnumake = (import ../development/tools/build-managers/gnumake) {
inherit fetchurl stdenv patch; inherit fetchurl stdenv;
}; };
bison = (import ../development/tools/parsing/bison) { bison = (import ../development/tools/parsing/bison) {
@ -242,8 +245,10 @@ rec {
m4 = gnum4; m4 = gnum4;
}; };
gcc = (import ../development/compilers/gcc) { gcc = (import ../development/compilers/gcc-3.4) {
inherit fetchurl stdenv noSysDirs; inherit fetchurl stdenv noSysDirs;
langCC = gccWithCC;
profiledCompiler = gccWithProfiling;
}; };
gcc_static = (import ../stdenv/nix-linux/gcc-static) { gcc_static = (import ../stdenv/nix-linux/gcc-static) {
@ -254,7 +259,7 @@ rec {
nativeTools = false; nativeTools = false;
nativeGlibc = false; nativeGlibc = false;
gcc = (import ../development/compilers/gcc-3.4) { gcc = (import ../development/compilers/gcc-3.4) {
inherit fetchurl stdenv patch noSysDirs; inherit fetchurl stdenv noSysDirs;
profiledCompiler = true; profiledCompiler = true;
}; };
binutils = stdenv.gcc.binutils; binutils = stdenv.gcc.binutils;
@ -266,7 +271,7 @@ rec {
nativeTools = false; nativeTools = false;
nativeGlibc = false; nativeGlibc = false;
gcc = (import ../development/compilers/gcc-2.95) { gcc = (import ../development/compilers/gcc-2.95) {
inherit fetchurl stdenv patch noSysDirs; inherit fetchurl stdenv noSysDirs;
}; };
binutils = stdenv.gcc.binutils; binutils = stdenv.gcc.binutils;
glibc = stdenv.gcc.glibc; glibc = stdenv.gcc.glibc;
@ -277,7 +282,7 @@ rec {
name = "g77"; name = "g77";
nativeTools = false; nativeTools = false;
nativeGlibc = false; nativeGlibc = false;
gcc = (import ../development/compilers/gcc) { gcc = (import ../development/compilers/gcc-3.3) {
inherit fetchurl stdenv noSysDirs; inherit fetchurl stdenv noSysDirs;
langF77 = true; langF77 = true;
langCC = false; langCC = false;
@ -399,7 +404,7 @@ rec {
}; };
realPerl = (import ../development/interpreters/perl) { realPerl = (import ../development/interpreters/perl) {
inherit fetchurl stdenv patch; inherit fetchurl stdenv;
}; };
sysPerl = (import ../development/interpreters/sys-perl) { sysPerl = (import ../development/interpreters/sys-perl) {
@ -451,7 +456,8 @@ rec {
}; };
glibc = (import ../development/libraries/glibc) { glibc = (import ../development/libraries/glibc) {
inherit fetchurl stdenv kernelHeaders patch; inherit fetchurl stdenv kernelHeaders;
installLocales = false;
}; };
aterm = (import ../development/libraries/aterm) { aterm = (import ../development/libraries/aterm) {
@ -504,7 +510,7 @@ rec {
zlib = if stdenv.system == "powerpc-darwin" then zlib = if stdenv.system == "powerpc-darwin" then
(import ../development/libraries/zlib-mac-fix) { (import ../development/libraries/zlib-mac-fix) {
inherit fetchurl stdenv patch; inherit fetchurl stdenv;
} }
else else
(import ../development/libraries/zlib) { (import ../development/libraries/zlib) {
@ -609,7 +615,7 @@ rec {
}; };
xlibs = (import ../development/libraries/xlibs) { xlibs = (import ../development/libraries/xlibs) {
inherit fetchurl stdenv pkgconfig freetype expat patch; inherit fetchurl stdenv pkgconfig freetype expat;
}; };
mesa = (import ../development/libraries/mesa) { mesa = (import ../development/libraries/mesa) {
@ -672,11 +678,11 @@ rec {
}; };
utillinux = (import ../os-specific/linux/util-linux) { utillinux = (import ../os-specific/linux/util-linux) {
inherit fetchurl stdenv patch; inherit fetchurl stdenv;
}; };
sysvinit = (import ../os-specific/linux/sysvinit) { sysvinit = (import ../os-specific/linux/sysvinit) {
inherit fetchurl stdenv patch; inherit fetchurl stdenv;
}; };
e2fsprogs = (import ../os-specific/linux/e2fsprogs) { e2fsprogs = (import ../os-specific/linux/e2fsprogs) {
@ -726,7 +732,7 @@ rec {
}; };
subversionWithJava = (import ../applications/version-management/subversion-1.1rc) { subversionWithJava = (import ../applications/version-management/subversion-1.1rc) {
inherit fetchurl stdenv openssl db4 expat patch; inherit fetchurl stdenv openssl db4 expat;
swig = swigWithJava; swig = swigWithJava;
localServer = true; localServer = true;
httpServer = false; httpServer = false;
@ -841,7 +847,7 @@ rec {
### MISC ### MISC
uml = (import ../misc/uml) { uml = (import ../misc/uml) {
inherit fetchurl stdenv perl patch; inherit fetchurl stdenv perl;
m4 = gnum4; m4 = gnum4;
}; };

View File

@ -28,33 +28,41 @@
inherit genericStdenv gccWrapper; inherit genericStdenv gccWrapper;
}; };
stdenvNativePkgs = allPackages { stdenvNativePkgsFun = bootstrap: allPackages {
stdenv = stdenvNative; stdenv = stdenvNative;
bootCurl = null; bootCurl = null;
noSysDirs = false; noSysDirs = false;
gccWithCC = !bootstrap;
gccWithProfiling = !bootstrap;
}; };
stdenvNativePkgs = stdenvNativePkgsFun false;
# The Nix build environment. # The Nix build environment.
stdenvNix = (import ../stdenv/nix) { stdenvNixFun = bootstrap: (import ../stdenv/nix) {
stdenv = stdenvNative; stdenv = stdenvNative;
pkgs = stdenvNativePkgs; pkgs = stdenvNativePkgsFun bootstrap;
inherit genericStdenv gccWrapper; inherit genericStdenv gccWrapper;
}; };
stdenvNixPkgs = allPackages { stdenvNix = stdenvNixFun false;
stdenv = stdenvNix;
bootCurl = stdenvNativePkgs.curl; stdenvNixPkgsFun = bootstrap: allPackages {
stdenv = stdenvNixFun bootstrap;
bootCurl = (stdenvNativePkgsFun bootstrap).curl;
noSysDirs = false; noSysDirs = false;
}; };
stdenvNixPkgs = stdenvNixPkgs false;
# The Linux build environment is a fully bootstrapped Nix # The Linux build environment is a fully bootstrapped Nix
# environment, that is, it should contain no external references. # environment, that is, it should contain no external references.
# 1) Build glibc in the Nix build environment. The result is # 1) Build glibc in the Nix build environment. The result is
# pure. # pure.
stdenvLinuxGlibc = stdenvNixPkgs.glibc; stdenvLinuxGlibc = (stdenvNixPkgsFun true).glibc;
# 2) Construct a stdenv consisting of the Nix build environment, but # 2) Construct a stdenv consisting of the Nix build environment, but
# with a gcc-wrapper that causes linking against the glibc from # with a gcc-wrapper that causes linking against the glibc from
@ -64,7 +72,7 @@
# `-lncurses'). # `-lncurses').
stdenvLinuxBoot1 = (import ../stdenv/nix-linux) { stdenvLinuxBoot1 = (import ../stdenv/nix-linux) {
stdenv = stdenvNative; stdenv = stdenvNative;
pkgs = stdenvNativePkgs; pkgs = stdenvNativePkgsFun true;
glibc = stdenvLinuxGlibc; glibc = stdenvLinuxGlibc;
inherit genericStdenv gccWrapper; inherit genericStdenv gccWrapper;
}; };
@ -76,8 +84,10 @@
# *doesn't* search in `/lib' etc. So these programs won't work. # *doesn't* search in `/lib' etc. So these programs won't work.
stdenvLinuxBoot1Pkgs = allPackages { stdenvLinuxBoot1Pkgs = allPackages {
stdenv = stdenvLinuxBoot1; stdenv = stdenvLinuxBoot1;
bootCurl = stdenvNativePkgs.curl; bootCurl = (stdenvNativePkgsFun true).curl;
noSysDirs = true; noSysDirs = true;
gccWithCC = false;
gccWithProfiling = false;
}; };
# 4) Therefore we build a new standard environment which is the same # 4) Therefore we build a new standard environment which is the same
@ -86,7 +96,7 @@
# system directories), things built by this stdenv should be pure. # system directories), things built by this stdenv should be pure.
stdenvLinuxBoot2 = (import ../stdenv/nix-linux) { stdenvLinuxBoot2 = (import ../stdenv/nix-linux) {
stdenv = stdenvLinuxBoot1; stdenv = stdenvLinuxBoot1;
pkgs = stdenvNativePkgs // { pkgs = (stdenvNativePkgsFun true) // {
inherit (stdenvLinuxBoot1Pkgs) gcc binutils; inherit (stdenvLinuxBoot1Pkgs) gcc binutils;
}; };
glibc = stdenvLinuxGlibc; glibc = stdenvLinuxGlibc;
@ -96,7 +106,7 @@
# 5) So these packages should be pure. # 5) So these packages should be pure.
stdenvLinuxBoot2Pkgs = allPackages { stdenvLinuxBoot2Pkgs = allPackages {
stdenv = stdenvLinuxBoot2; stdenv = stdenvLinuxBoot2;
bootCurl = stdenvNativePkgs.curl; bootCurl = (stdenvNativePkgsFun true).curl;
}; };
# 6) Finally we can construct the Nix build environment from the # 6) Finally we can construct the Nix build environment from the
@ -138,7 +148,7 @@
# (essentially it's just the native environment). # (essentially it's just the native environment).
stdenvDarwin = (import ../stdenv/darwin) { stdenvDarwin = (import ../stdenv/darwin) {
stdenv = stdenvInitial; stdenv = stdenvInitial;
genericStdenv = import ../stdenv/generic-branch; genericStdenv = import ../stdenv/generic;
inherit gccWrapper; inherit gccWrapper;
}; };
@ -147,21 +157,5 @@
bootCurl = null; bootCurl = null;
noSysDirs = false; noSysDirs = false;
}; };
# Testing the new stdenv-linux (TODO: remove this eventually).
stdenvLinuxTest = (import ../stdenv/nix-linux) {
stdenv = stdenvLinuxBoot2;
pkgs = stdenvLinuxBoot2Pkgs;
glibc = stdenvLinuxGlibc;
genericStdenv = import ../stdenv/generic-branch;
inherit gccWrapper;
};
stdenvDarwinTest = (import ../stdenv/darwin) {
stdenv = stdenvInitial;
genericStdenv = import ../stdenv/generic-branch;
inherit gccWrapper;
};
} }