Skip to content

Commit

Permalink
Merge pull request #119916 from Ericson2314/bsd-setup-hook
Browse files Browse the repository at this point in the history
netbsd: Generalize builder to any-bsd setup hook
  • Loading branch information
Ericson2314 committed Apr 22, 2021
2 parents a2d88c6 + 82c231d commit a16384e
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 74 deletions.
172 changes: 110 additions & 62 deletions pkgs/os-specific/bsd/netbsd/default.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
{ stdenv, stdenvNoCC, fetchcvs, lib, groff, mandoc, zlib, byacc, flex
, makeSetupHook, writeText, buildPackages, splicePackages, symlinkJoin }:
{ stdenv, lib, stdenvNoCC
, buildPackages, splicePackages
, bsdSetupHook, makeSetupHook, fetchcvs, groff, mandoc, byacc, flex
, zlib
, writeText, symlinkJoin
}:

let
fetchNetBSD = path: version: sha256: fetchcvs {
Expand Down Expand Up @@ -30,7 +34,10 @@ let

extraPaths = [ ];

nativeBuildInputs = [ makeMinimal install tsort lorder mandoc groff statHook ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal install tsort lorder mandoc groff statHook
];
buildInputs = [ compat ];
# depsBuildBuild = [ buildPackages.stdenv.cc ];

Expand All @@ -56,9 +63,7 @@ let
LD = "${stdenv'.cc.targetPrefix or ""}ld";
STRIP = "${stdenv'.cc.targetPrefix or ""}strip";

NETBSD_PATH = attrs.path;

builder = ./builder.sh;
BSD_PATH = attrs.path;

meta = with lib; {
maintainers = with maintainers; [ matthewbauer qyliss ];
Expand All @@ -85,7 +90,7 @@ let
version = "8.0";

buildInputs = [];
nativeBuildInputs = [];
nativeBuildInputs = [ bsdSetupHook ];

skipIncludesPhase = true;

Expand All @@ -106,7 +111,7 @@ let
install -D nbmake $out/bin/nbmake
ln -s $out/bin/nbmake $out/bin/make
mkdir -p $out/share
cp -r $NETBSDSRCDIR/share/mk $out/share/mk
cp -r $BSDSRCDIR/share/mk $out/share/mk
runHook postInstall
'';
Expand All @@ -124,7 +129,10 @@ let
];

# override defaults to prevent infinite recursion
nativeBuildInputs = [ makeMinimal ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
];
buildInputs = [ zlib ];

# the build system re-runs `./configure` with `HOST_CC` (which is their
Expand All @@ -148,24 +156,24 @@ let
# why aren't these installed by netbsd?
install -D compat_defs.h $out/include/compat_defs.h
install -D $NETBSDSRCDIR/include/cdbw.h $out/include/cdbw.h
install -D $NETBSDSRCDIR/sys/sys/cdbr.h $out/include/cdbr.h
install -D $NETBSDSRCDIR/sys/sys/featuretest.h \
install -D $BSDSRCDIR/include/cdbw.h $out/include/cdbw.h
install -D $BSDSRCDIR/sys/sys/cdbr.h $out/include/cdbr.h
install -D $BSDSRCDIR/sys/sys/featuretest.h \
$out/include/sys/featuretest.h
install -D $NETBSDSRCDIR/sys/sys/md5.h $out/include/md5.h
install -D $NETBSDSRCDIR/sys/sys/rmd160.h $out/include/rmd160.h
install -D $NETBSDSRCDIR/sys/sys/sha1.h $out/include/sha1.h
install -D $NETBSDSRCDIR/sys/sys/sha2.h $out/include/sha2.h
install -D $NETBSDSRCDIR/sys/sys/queue.h $out/include/sys/queue.h
install -D $NETBSDSRCDIR/include/vis.h $out/include/vis.h
install -D $NETBSDSRCDIR/include/db.h $out/include/db.h
install -D $NETBSDSRCDIR/include/netconfig.h $out/include/netconfig.h
install -D $NETBSDSRCDIR/include/rpc/types.h $out/include/rpc/types.h
install -D $NETBSDSRCDIR/include/utmpx.h $out/include/utmpx.h
install -D $NETBSDSRCDIR/include/tzfile.h $out/include/tzfile.h
install -D $NETBSDSRCDIR/sys/sys/tree.h $out/include/sys/tree.h
install -D $NETBSDSRCDIR/include/nl_types.h $out/include/nl_types.h
install -D $NETBSDSRCDIR/include/stringlist.h $out/include/stringlist.h
install -D $BSDSRCDIR/sys/sys/md5.h $out/include/md5.h
install -D $BSDSRCDIR/sys/sys/rmd160.h $out/include/rmd160.h
install -D $BSDSRCDIR/sys/sys/sha1.h $out/include/sha1.h
install -D $BSDSRCDIR/sys/sys/sha2.h $out/include/sha2.h
install -D $BSDSRCDIR/sys/sys/queue.h $out/include/sys/queue.h
install -D $BSDSRCDIR/include/vis.h $out/include/vis.h
install -D $BSDSRCDIR/include/db.h $out/include/db.h
install -D $BSDSRCDIR/include/netconfig.h $out/include/netconfig.h
install -D $BSDSRCDIR/include/rpc/types.h $out/include/rpc/types.h
install -D $BSDSRCDIR/include/utmpx.h $out/include/utmpx.h
install -D $BSDSRCDIR/include/tzfile.h $out/include/tzfile.h
install -D $BSDSRCDIR/sys/sys/tree.h $out/include/sys/tree.h
install -D $BSDSRCDIR/include/nl_types.h $out/include/nl_types.h
install -D $BSDSRCDIR/include/stringlist.h $out/include/stringlist.h
'' + lib.optionalString stdenv.isDarwin ''
mkdir -p $out/include/ssp
touch $out/include/ssp/ssp.h
Expand Down Expand Up @@ -194,7 +202,11 @@ let
version = "8.0";
sha256 = "1f6pbz3qv1qcrchdxif8p5lbmnwl8b9nq615hsd3cyl4avd5bfqj";
extraPaths = [ mtree.src make.src ];
nativeBuildInputs = [ makeMinimal mandoc groff ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
mandoc groff
];
skipIncludesPhase = true;
buildInputs = [ compat fts ];
installPhase = ''
Expand All @@ -214,7 +226,9 @@ let
path = "include/fts.h";
sha256 = "01d4fpxvz1pgzfk5xznz5dcm0x0gdzwcsfm1h3d0xc9kc6hj2q77";
version = "8.0";
nativeBuildInputs = [ ];
nativeBuildInputs = [
bsdSetupHook
];
propagatedBuildInputs = [ compat ];
extraPaths = [
(fetchNetBSD "lib/libc/gen/fts.c" "8.0" "1a8hmf26242nmv05ipn3ircxb0jqmmi66rh78kkyi9vjwkfl3qn7")
Expand Down Expand Up @@ -248,7 +262,11 @@ let
path = "usr.bin/stat";
version = "8.0";
sha256 = "0z4r96id2r4cfy443rw2s1n52n186xm0lqvs8s3qjf4314z7r7yh";
nativeBuildInputs = [ makeMinimal install mandoc groff ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
install mandoc groff
];
};

# stat isn't in POSIX, and NetBSD stat supports a completely
Expand All @@ -266,14 +284,22 @@ let
path = "usr.bin/tsort";
version = "8.0";
sha256 = "1dqvf9gin29nnq3c4byxc7lfd062pg7m84843zdy6n0z63hnnwiq";
nativeBuildInputs = [ makeMinimal install mandoc groff ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
install mandoc groff
];
};

lorder = mkDerivation {
path = "usr.bin/lorder";
version = "8.0";
sha256 = "0rjf9blihhm0n699vr2bg88m4yjhkbxh6fxliaay3wxkgnydjwn2";
nativeBuildInputs = [ makeMinimal install mandoc groff ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
install mandoc groff
];
};
##
## END BOOTSTRAPPING
Expand All @@ -290,17 +316,17 @@ let
# make needs this to pick up our sys make files
export NIX_CFLAGS_COMPILE+=" -D_PATH_DEFSYSPATH=\"$out/share/mk\""
substituteInPlace $NETBSDSRCDIR/share/mk/bsd.lib.mk \
substituteInPlace $BSDSRCDIR/share/mk/bsd.lib.mk \
--replace '_INSTRANLIB=''${empty(PRESERVE):?-a "''${RANLIB} -t":}' '_INSTRANLIB='
substituteInPlace $NETBSDSRCDIR/share/mk/bsd.kinc.mk \
substituteInPlace $BSDSRCDIR/share/mk/bsd.kinc.mk \
--replace /bin/rm rm
'' + lib.optionalString stdenv.isDarwin ''
substituteInPlace $NETBSDSRCDIR/share/mk/bsd.sys.mk \
substituteInPlace $BSDSRCDIR/share/mk/bsd.sys.mk \
--replace '-Wl,--fatal-warnings' "" \
--replace '-Wl,--warn-shared-textrel' ""
'';
postInstall = ''
make -C $NETBSDSRCDIR/share/mk FILESDIR=$out/share/mk install
make -C $BSDSRCDIR/share/mk FILESDIR=$out/share/mk install
'';
extraPaths = [
(fetchNetBSD "share/mk" "8.0" "033q4w3rmvwznz6m7fn9xcf13chyhwwl8ijj3a9mrn80fkwm55qs")
Expand Down Expand Up @@ -371,7 +397,11 @@ let
sha256 = "092y7db7k4kh2jq8qc55126r5qqvlb8lq8mhmy5ipbi36hwb4zrz";
HOSTPROG = "tic";
buildInputs = [ compat ];
nativeBuildInputs = [ makeMinimal install mandoc groff nbperf ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
install mandoc groff nbperf
];
makeFlags = [ "TOOLDIR=$(out)" ];
extraPaths = [
libterminfo.src
Expand Down Expand Up @@ -399,8 +429,11 @@ let
version = "8.0";
sha256 = "0piyn8lgdqxwz9wkgc2plzp2xpj93fs4xncri8l0jfas9rv5j2m5";
NIX_CFLAGS_COMPILE = [ "-DMAKE_BOOTSTRAP" ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal install mandoc byacc flex
];
buildInputs = [ compat ];
nativeBuildInputs = [ makeMinimal install mandoc byacc flex ];
extraPaths = [ cksum.src ];
};
##
Expand All @@ -414,7 +447,11 @@ let
path = "include";
version = "8.0";
sha256 = "128m77k16i7frvk8kifhmxzk7a37m7z1s0bbmja3ywga6sx6v6sq";
nativeBuildInputs = [ makeMinimal install mandoc groff nbperf rpcgen ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
install mandoc groff nbperf rpcgen
];
extraPaths = [ common.src ];
headersOnly = true;
noCC = true;
Expand All @@ -438,6 +475,7 @@ let

propagatedBuildInputs = [ include ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal install tsort lorder statHook uudecode config genassym
];

Expand Down Expand Up @@ -524,7 +562,7 @@ let
make -C $NETBSDSRCDIR/share/terminfo BINDIR=$out/share
'';
postInstall = ''
make -C $NETBSDSRCDIR/share/terminfo BINDIR=$out/share install
make -C $BSDSRCDIR/share/terminfo BINDIR=$out/share install
'';
extraPaths = [
(fetchNetBSD "share/terminfo" "8.0" "18db0fk1dw691vk6lsm6dksm4cf08g8kdm0gc4052ysdagg2m6sm")
Expand Down Expand Up @@ -627,8 +665,12 @@ let
version = "8.0";
sha256 = "0630lbvz6v4ic13bfg8ccwfhqkgcv76bfdw9f36rfsnwfgpxqsmq";
meta.platforms = lib.platforms.netbsd;
nativeBuildInputs = [ makeMinimal install mandoc groff flex
byacc genassym gencat lorder tsort statHook ];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
install mandoc groff flex
byacc genassym gencat lorder tsort statHook
];
extraPaths = [ sys.src ld_elf_so.src ];
};

Expand All @@ -651,12 +693,18 @@ let
sha256 = "0lgbc58qgn8kwm3l011x1ml1kgcf7jsgq7hbf0hxhlbvxq5bljl3";
USE_FORT = "yes";
MKPROFILE = "no";
extraPaths = [ common.src i18n_module.src sys.src
ld_elf_so.src libpthread.src libm.src libresolv.src
librpcsvc.src libutil.src librt.src libcrypt.src ];
extraPaths = [
common.src i18n_module.src sys.src
ld_elf_so.src libpthread.src libm.src libresolv.src
librpcsvc.src libutil.src librt.src libcrypt.src
];
nativeBuildInputs = [
bsdSetupHook
makeMinimal
install mandoc groff flex
byacc genassym gencat lorder tsort statHook rpcgen
];
buildInputs = [ buildPackages.netbsd.headers csu ];
nativeBuildInputs = [ makeMinimal install mandoc groff flex
byacc genassym gencat lorder tsort statHook rpcgen ];
NIX_CFLAGS_COMPILE = "-B${csu}/lib";
meta.platforms = lib.platforms.netbsd;
SHLIBINSTALLDIR = "$(out)/lib";
Expand All @@ -677,29 +725,29 @@ let
NIX_CFLAGS_COMPILE+=" -I$out/include"
NIX_LDFLAGS+=" -L$out/lib"
make -C $NETBSDSRCDIR/lib/libpthread $makeFlags
make -C $NETBSDSRCDIR/lib/libpthread $makeFlags install
make -C $BSDSRCDIR/lib/libpthread $makeFlags
make -C $BSDSRCDIR/lib/libpthread $makeFlags install
make -C $NETBSDSRCDIR/lib/libm $makeFlags
make -C $NETBSDSRCDIR/lib/libm $makeFlags install
make -C $BSDSRCDIR/lib/libm $makeFlags
make -C $BSDSRCDIR/lib/libm $makeFlags install
make -C $NETBSDSRCDIR/lib/libresolv $makeFlags
make -C $NETBSDSRCDIR/lib/libresolv $makeFlags install
make -C $BSDSRCDIR/lib/libresolv $makeFlags
make -C $BSDSRCDIR/lib/libresolv $makeFlags install
make -C $NETBSDSRCDIR/lib/librpcsvc $makeFlags
make -C $NETBSDSRCDIR/lib/librpcsvc $makeFlags install
make -C $BSDSRCDIR/lib/librpcsvc $makeFlags
make -C $BSDSRCDIR/lib/librpcsvc $makeFlags install
make -C $NETBSDSRCDIR/lib/i18n_module $makeFlags
make -C $NETBSDSRCDIR/lib/i18n_module $makeFlags install
make -C $BSDSRCDIR/lib/i18n_module $makeFlags
make -C $BSDSRCDIR/lib/i18n_module $makeFlags install
make -C $NETBSDSRCDIR/lib/libutil $makeFlags
make -C $NETBSDSRCDIR/lib/libutil $makeFlags install
make -C $BSDSRCDIR/lib/libutil $makeFlags
make -C $BSDSRCDIR/lib/libutil $makeFlags install
make -C $NETBSDSRCDIR/lib/librt $makeFlags
make -C $NETBSDSRCDIR/lib/librt $makeFlags install
make -C $BSDSRCDIR/lib/librt $makeFlags
make -C $BSDSRCDIR/lib/librt $makeFlags install
make -C $NETBSDSRCDIR/lib/libcrypt $makeFlags
make -C $NETBSDSRCDIR/lib/libcrypt $makeFlags install
make -C $BSDSRCDIR/lib/libcrypt $makeFlags
make -C $BSDSRCDIR/lib/libcrypt $makeFlags install
'';
postPatch = ''
sed -i 's,/usr\(/include/sys/syscall.h\),${buildPackages.netbsd.headers}\1,g' \
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
source $stdenv/setup

# NetBSD makefiles should be able to detect this
# BSD makefiles should be able to detect this
# but without they end up using gcc on Darwin stdenv
addMakeFlags() {
export setOutputFlags=
Expand Down Expand Up @@ -64,13 +62,12 @@ addMakeFlags() {
makeFlags="-j $NIX_BUILD_CORES $makeFlags"
}

setNetBSDSourceDir() {
setBSDSourceDir() {
# merge together all extra paths
# there should be a better way to do this
sourceRoot=$PWD/$sourceRoot
export NETBSDSRCDIR=$sourceRoot
export BSDSRCDIR=$NETBSDSRCDIR
export _SRC_TOP_=$NETBSDSRCDIR
export BSDSRCDIR=$sourceRoot
export _SRC_TOP_=$BSDSRCDIR
chmod -R u+w $sourceRoot
for path in $extraPaths; do
cd $path
Expand All @@ -80,13 +77,14 @@ setNetBSDSourceDir() {
done

cd $sourceRoot
if [ -d "$NETBSD_PATH" ]
then sourceRoot=$sourceRoot/$NETBSD_PATH
if [ -d "$BSD_PATH" ]
then sourceRoot=$sourceRoot/$BSD_PATH
fi
}

includesPhase() {
if [ -z "${skipIncludesPhase:-}" ]; then
runHook preIncludes

local flagsArray=(
$makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"}
Expand All @@ -98,6 +96,7 @@ includesPhase() {

moveUsrDir

runHook postIncludes
fi
}

Expand All @@ -115,9 +114,7 @@ moveUsrDir() {
fi
}

postUnpackHooks+=(setNetBSDSourceDir)
postUnpackHooks+=(setBSDSourceDir)
preConfigureHooks+=(addMakeFlags)
preInstallHooks+=(includesPhase)
fixupOutputHooks+=(moveUsrDir)

genericBuild

0 comments on commit a16384e

Please sign in to comment.