70 lines
2.6 KiB
Nix
70 lines
2.6 KiB
Nix
{ fetchurl, mkDerivationStage2, stage1 }:
|
|
|
|
let
|
|
source-tarball-gnumake = fetchurl {
|
|
# local = /downloads/make-4.4.1.tar.gz;
|
|
url = "http://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz";
|
|
sha256 = "dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3";
|
|
};
|
|
in
|
|
mkDerivationStage2 {
|
|
name = "bootstrap-2a0-static-gnumake";
|
|
buildInputPaths = [
|
|
"${stage1.tinycc}/wrappers"
|
|
"${stage1.protobusybox}/bin"
|
|
];
|
|
script = ''
|
|
mkdir build-dir; cd build-dir
|
|
# unpack:
|
|
unpack ${source-tarball-gnumake}
|
|
# fixup:
|
|
sed -i 's|/bin/sh|${stage1.protobusybox}/bin/ash|' \
|
|
src/job.c build-aux/install-sh po/Makefile.in.in
|
|
# this is part of stdlib, no idea how it's supposed to not clash
|
|
rm src/getopt.h
|
|
for f in src/getopt.c src/getopt1.c lib/fnmatch.c; do :> $f; done
|
|
for f in lib/glob.c lib/xmalloc.c lib/error.c; do :> $f; done
|
|
# embrace chaos
|
|
shuffle_comment='\/\* Handle shuffle mode argument. \*\/'
|
|
shuffle_default='if (!shuffle_mode) shuffle_mode = xstrdup(\"random\");'
|
|
sed -i "s|$shuffle_comment|$shuffle_comment\n$shuffle_default|" \
|
|
src/main.c
|
|
grep 'if (!shuffle_mode) shuffle_mode = xstrdup("random");' src/main.c
|
|
# configure:
|
|
ash ./configure \
|
|
--build x86_64-linux \
|
|
--disable-dependency-tracking \
|
|
--prefix=$out \
|
|
CONFIG_SHELL='${stage1.protobusybox}/bin/ash' \
|
|
SHELL='${stage1.protobusybox}/bin/ash'
|
|
# bootstrap build:
|
|
ash ./build.sh
|
|
# test static GNU Make by remaking it with itself:
|
|
mv make make-intermediate
|
|
./make-intermediate -j $NPROC clean
|
|
./make-intermediate -j $NPROC
|
|
# reconfigure:
|
|
ash ./configure \
|
|
--build x86_64-linux \
|
|
--disable-dependency-tracking \
|
|
--prefix=$out \
|
|
CONFIG_SHELL='${stage1.protobusybox}/bin/ash' \
|
|
SHELL='${stage1.protobusybox}/bin/ash'
|
|
# rebuild:
|
|
ash ./build.sh
|
|
# test:
|
|
mv make make-intermediate
|
|
./make-intermediate -j $NPROC clean
|
|
./make-intermediate -j $NPROC CFLAGS=-O2
|
|
# install:
|
|
./make -j $NPROC install
|
|
# check for build path leaks:
|
|
( ! grep -rF $(pwd) $out )
|
|
# wrap:
|
|
# FIXME: patch make to use getenv?
|
|
mkdir -p $out/wrappers; cd $out/wrappers
|
|
echo "#!${stage1.protobusybox}/bin/ash" > make
|
|
echo "exec $out/bin/make SHELL=\$SHELL \"\$@\"" \ >> make
|
|
chmod +x make
|
|
'';
|
|
}
|