* Started on working towards the fully Nixified build environment, i.e., one
where we don't use any tools from outside the Nix environment. For this we need the basic POSIX utilities (e.g., GNU coreutils), a shell, GCC, and the binutils. Normal packages just need to include stdenv/stdenv.fix, which on Linux will use the Nixified environment. However, for the tools in the build environment itself we have a bootstrapping problem. Therefore, these depend on the external environment (and include stdenv-linux/stdenv-nativetools). The package `baseenv' provides some generic setup and GCC wrappers used by both fully Nixified and native environments. svn path=/nixpkgs/trunk/; revision=305
This commit is contained in:
parent
53fa95e3ad
commit
40bc2cc9b6
|
@ -0,0 +1,28 @@
|
|||
#! /bin/sh
|
||||
|
||||
export PATH=/bin:/usr/bin
|
||||
|
||||
mkdir $out || exit 1
|
||||
mkdir $out/bin || exit 1
|
||||
|
||||
sed \
|
||||
-e s^@OUT\@^$out^g \
|
||||
< $setup > $out/setup || exit 1
|
||||
|
||||
gcc=/usr/bin/gcc
|
||||
|
||||
sed \
|
||||
-e s^@GCC\@^$gcc^g \
|
||||
< $gccwrapper > $out/bin/gcc || exit 1
|
||||
chmod +x $out/bin/gcc || exit 1
|
||||
|
||||
ln -s gcc $out/bin/cc
|
||||
|
||||
gplusplus=/usr/bin/g++
|
||||
|
||||
sed \
|
||||
-e s^@GCC\@^$gplusplus^g \
|
||||
< $gccwrapper > $out/bin/g++ || exit 1
|
||||
chmod +x $out/bin/g++ || exit 1
|
||||
|
||||
ln -s g++ $out/bin/c++
|
|
@ -0,0 +1,8 @@
|
|||
Package(
|
||||
[ ("name", "stdenv-native")
|
||||
, ("build", Relative("baseenv/baseenv-build.sh"))
|
||||
|
||||
, ("setup", Relative("baseenv/setup.sh"))
|
||||
, ("gccwrapper", Relative("baseenv/gcc-wrapper.sh"))
|
||||
]
|
||||
)
|
|
@ -21,12 +21,15 @@ IFS=" "
|
|||
extra=($NIX_CFLAGS)
|
||||
if test "$justcompile" != "1"; then
|
||||
extra=(${extra[@]} $NIX_LDFLAGS)
|
||||
if test "$NIX_STRIP_DEBUG" == "1"; then
|
||||
extra=(${extra[@]} -Wl,-s)
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$NIX_DEBUG" == "1"; then
|
||||
echo "extra gcc flags:"
|
||||
echo "extra gcc flags:" >&2
|
||||
for i in ${extra[@]}; do
|
||||
echo " $i"
|
||||
echo " $i" >&2
|
||||
done
|
||||
fi
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
# Add the directory containing the GCC wrappers to the PATH.
|
||||
export PATH=@OUT@/bin
|
||||
|
||||
# Recursively add all envpkgs to the relevant environment variables.
|
||||
addtoenv()
|
||||
{
|
||||
envpkgs="$envpkgs $1"
|
||||
|
||||
if test -d $1/bin; then
|
||||
export PATH=$1/bin:$PATH
|
||||
fi
|
||||
|
||||
if test -d $1/lib; then
|
||||
export NIX_LDFLAGS="-L $1/lib -Wl,-rpath,$1/lib $NIX_LDFLAGS"
|
||||
fi
|
||||
|
||||
if test -d $1/lib/pkgconfig; then
|
||||
export PKG_CONFIG_PATH=$1/lib/pkgconfig:$PKG_CONFIG_PATH
|
||||
fi
|
||||
|
||||
if test -f $1/envpkgs; then
|
||||
for i in $(cat $1/envpkgs); do
|
||||
addtoenv $i
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
oldenvpkgs=$envpkgs
|
||||
envpkgs=
|
||||
|
||||
for i in $oldenvpkgs; do
|
||||
addtoenv $i
|
||||
done
|
||||
|
||||
# Add the output as an rpath.
|
||||
export NIX_LDFLAGS="-Wl,-rpath,$out/lib $NIX_LDFLAGS"
|
||||
|
||||
# Strip debug information by default.
|
||||
export NIX_STRIP_DEBUG=1
|
|
@ -0,0 +1,9 @@
|
|||
#! /bin/sh
|
||||
|
||||
. $stdenv/setup || exit 1
|
||||
|
||||
tar xvfj $src || exit 1
|
||||
cd coreutils-* || exit 1
|
||||
./configure --prefix=$out || exit 1
|
||||
make || exit 1
|
||||
make install || exit 1
|
|
@ -0,0 +1,13 @@
|
|||
Package(
|
||||
[ ("name", "coreutils-5.0")
|
||||
|
||||
, ("build", Relative("coreutils/coreutils-build.sh"))
|
||||
|
||||
, ("src", Call(IncludeFix("fetchurl/fetchurl.fix"),
|
||||
[ ("url", "ftp://ftp.nluug.nl/pub/gnu/coreutils/coreutils-5.0.tar.bz2")
|
||||
, ("md5", "94e5558ee2a65723d4840bfde2d323f0")
|
||||
]))
|
||||
|
||||
, ("stdenv", IncludeFix("stdenv-linux/stdenv-nativetools.fix"))
|
||||
]
|
||||
)
|
|
@ -0,0 +1,10 @@
|
|||
. @BASEENV@/setup
|
||||
|
||||
export NIX_CFLAGS="-isystem @GLIBC@/include $NIX_CFLAGS"
|
||||
export NIX_LDFLAGS="-L @GLIBC@/lib -Wl,-dynamic-linker,@GLIBC@/lib/ld-linux.so.2,-rpath,@GLIBC@/lib $NIX_LDFLAGS"
|
||||
|
||||
if test "@NATIVETOOLS@"; then
|
||||
export PATH=$PATH:/usr/local/bin:/usr/bin:/bin
|
||||
else
|
||||
export PATH=@COREUTILS@/bin:$PATH
|
||||
fi
|
|
@ -3,26 +3,10 @@
|
|||
export PATH=/bin:/usr/bin
|
||||
|
||||
mkdir $out || exit 1
|
||||
mkdir $out/bin || exit 1
|
||||
|
||||
echo "export PATH=$out/bin:/bin:/usr/bin" >> $out/setup || exit 1
|
||||
echo "export NIX_CFLAGS=\"-isystem $glibc/include \$NIX_CFLAGS\"" >> $out/setup || exit 1
|
||||
echo "export NIX_LDFLAGS=\"-L $glibc/lib -Wl,-dynamic-linker,$glibc/lib/ld-linux.so.2,-rpath,$glibc/lib \$NIX_LDFLAGS\"" >> $out/setup || exit 1
|
||||
|
||||
gcc=/usr/bin/gcc
|
||||
|
||||
sed \
|
||||
-e s^@GCC\@^$gcc^g \
|
||||
< $gccwrapper > $out/bin/gcc || exit 1
|
||||
chmod +x $out/bin/gcc || exit 1
|
||||
|
||||
ln -s gcc $out/bin/cc
|
||||
|
||||
gplusplus=/usr/bin/g++
|
||||
|
||||
sed \
|
||||
-e s^@GCC\@^$gplusplus^g \
|
||||
< $gccwrapper > $out/bin/g++ || exit 1
|
||||
chmod +x $out/bin/g++ || exit 1
|
||||
|
||||
ln -s g++ $out/bin/c++
|
||||
-e s^@GLIBC\@^$glibc^g \
|
||||
-e s^@BASEENV\@^$baseenv^g \
|
||||
-e s^@NATIVETOOLS\@^$nativeTools^g \
|
||||
-e s^@COREUTILS\@^$coreutils^g \
|
||||
< $setup > $out/setup || exit 1
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
Function(["nativeTools"],
|
||||
|
||||
Package(
|
||||
[ ("name", "stdenv-linux")
|
||||
, ("build", Relative("stdenv-linux/stdenv-build.sh"))
|
||||
|
||||
, ("nativeTools", Var("nativeTools"))
|
||||
|
||||
, ("setup", Relative("stdenv-linux/setup.sh"))
|
||||
, ("baseenv", IncludeFix("baseenv/baseenv.fix"))
|
||||
, ("glibc", IncludeFix("glibc/glibc.fix"))
|
||||
|
||||
, ("coreutils", If(Var("nativeTools"), "", IncludeFix("coreutils/coreutils.fix")))
|
||||
]
|
||||
)
|
||||
)
|
|
@ -0,0 +1 @@
|
|||
Call(IncludeFix("stdenv-linux/stdenv-generic.fix"), [("nativeTools", True)])
|
|
@ -1,9 +1 @@
|
|||
Package(
|
||||
[ ("name", "stdenv-linux")
|
||||
, ("build", Relative("stdenv-linux/stdenv-build.sh"))
|
||||
|
||||
, ("gccwrapper", Relative("stdenv-linux/gcc-wrapper.sh"))
|
||||
|
||||
, ("glibc", IncludeFix("glibc/glibc.fix"))
|
||||
]
|
||||
)
|
||||
Call(IncludeFix("stdenv-linux/stdenv-generic.fix"), [("nativeTools", False)])
|
Loading…
Reference in New Issue