diff --git a/pkgs/os-specific/bsd/netbsd/compat-no-force-native.patch b/pkgs/os-specific/bsd/netbsd/compat-no-force-native.patch new file mode 100644 index 000000000000..3b6548779bdd --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/compat-no-force-native.patch @@ -0,0 +1,100 @@ +commit 5acf3bdea5140e90135d15d6479f29fbf624f75e +Author: John Ericson +Date: Wed Sep 1 15:38:56 2021 +0000 + + Don't force building and installing for the build platform + + Also remove `compat/` subdir from install directories. + +diff --git a/Makefile b/Makefile +index 4bcf227f0e75..9ed1d6eea6ff 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,6 +1,6 @@ + # $NetBSD: Makefile,v 1.87 2019/05/08 02:25:50 thorpej Exp $ + +-HOSTLIB= nbcompat ++LIB= nbcompat + + .include + +@@ -94,63 +94,37 @@ include/.stamp: + + # Install rules + +-HOST_LIBDIR= ${TOOLDIR}/lib +-HOST_INCSDIR= ${TOOLDIR}/include +-HOST_SHAREDIR= ${TOOLDIR}/share +- +-install: .PHONY install.lib includes install.defs.mk +- +-# Install lib${HOSTLIB}.a in ${TOOLDIR}/lib +-install.lib: .PHONY ${HOST_LIBDIR}/lib${HOSTLIB}.a +-${HOST_LIBDIR}/lib${HOSTLIB}.a: lib${HOSTLIB}.a +- ${_MKTARGET_INSTALL} +- ${HOST_INSTALL_DIR} ${HOST_LIBDIR} +- ${HOST_INSTALL_FILE} -m ${LIBMODE} ${.ALLSRC} ${.TARGET} ++install: .PHONY includes install.defs.mk + + .for _f in ${INCFILES} +-HOST_INCINSTFILES+= ${HOST_INCSDIR}/compat/${_f} +-${HOST_INCSDIR}/compat/${_f}: ${_f} ++INCINSTFILES+= ${INCSDIR}/${_f} ++${INCSDIR}/${_f}: ${_f} + ${_MKTARGET_INSTALL} +- ${HOST_INSTALL_FILE} ${.ALLSRC} ${.TARGET} ++ ${INSTALL_FILE} ${.ALLSRC} ${.TARGET} + .endfor + + .for _d in ${INCSUBDIRS} +-HOST_INCINSTDIRS+= ${HOST_INCSDIR}/compat/${_d} +-${HOST_INCSDIR}/compat/${_d}: ++INCINSTDIRS+= ${INCSDIR}/${_d} ++${INCSDIR}/${_d}: + ${_MKTARGET_INSTALL} +- ${HOST_INSTALL_DIR} ${.TARGET} ++ ${INSTALL_DIR} ${.TARGET} + .endfor + +-# Install include files in ${TOOLDIR}/include/compat +-includes: .PHONY ${HOST_INCINSTDIRS} .WAIT ${HOST_INCINSTFILES} ++# Install include files in ${INCSDIR} ++includes: .PHONY ${INCINSTDIRS} .WAIT ${INCINSTFILES} + @(cd include && find . -name '*.h' -print | while read f ; do \ +- ${HOST_INSTALL_FILE} $$f ${HOST_INCSDIR}/compat/$$f ; \ ++ ${INSTALL_FILE} $$f ${INCSDIR}/$$f ; \ + done) + + +-# Install defs.mk in ${TOOLDIR}/share/compat +-install.defs.mk: .PHONY ${HOST_SHAREDIR}/compat/defs.mk +-${HOST_SHAREDIR}/compat/defs.mk: defs.mk ++# Install defs.mk in ${DATADIR} ++install.defs.mk: .PHONY ${DATADIR}/defs.mk ++${DATADIR}/defs.mk: defs.mk + ${_MKTARGET_INSTALL} +- ${HOST_INSTALL_DIR} ${HOST_SHAREDIR} +- ${HOST_INSTALL_DIR} ${HOST_SHAREDIR}/compat +- ${HOST_INSTALL_FILE} ${.ALLSRC} ${.TARGET} +- +-# bsd.hostlib.mk wants HOST_CPPFLAGS, not CPPFLAGS +- +-HOST_CPPFLAGS:= ${CPPFLAGS} +-CPPFLAGS:= # empty +- +-.include +- +-# Use uninstalled copy of host-mkdep +-HOST_MKDEP_OBJ!= cd ${.CURDIR}/../host-mkdep && ${PRINTOBJDIR} +-HOST_MKDEP= ${HOST_MKDEP_OBJ}/host-mkdep +-MKDEP= ${HOST_MKDEP} ++ ${INSTALL_DIR} ${DATADIR} ++ ${INSTALL_FILE} ${.ALLSRC} ${.TARGET} + +-# Use uninstalled copy of the install program +-INSTALL_OBJ!= cd ${NETBSDSRCDIR}/tools/binstall && ${PRINTOBJDIR} +-INSTALL= ${INSTALL_OBJ}/xinstall ++.include + + # Run "${TOOLDIR}/bin/nbmake-${MACHINE} regen" by hand after editing + # configure.ac. See more detailed instructions in configure.ac. diff --git a/pkgs/os-specific/bsd/netbsd/default.nix b/pkgs/os-specific/bsd/netbsd/default.nix index 0e6526c18340..73d5bd26e10a 100644 --- a/pkgs/os-specific/bsd/netbsd/default.nix +++ b/pkgs/os-specific/bsd/netbsd/default.nix @@ -175,11 +175,6 @@ in lib.makeScopeWithSplicing "--cache-file=config.cache" ]; - # the build system re-runs `./configure` with `HOST_CC` (which is their - # name for Build CC) as a compiler to make `defs.mk`, which is installed - depsBuildBuild = [ buildPackages.stdenv.cc ] ++ commonDeps; - HOST_CC = "${buildPackages.stdenv.cc.targetPrefix}cc"; - nativeBuildInputs = with buildPackages.netbsd; commonDeps ++ [ bsdSetupHook netbsdSetupHook makeMinimal @@ -192,19 +187,26 @@ in lib.makeScopeWithSplicing # bsdinstall will be built later makeFlags = [ "INSTALL=${buildPackages.coreutils}/bin/install" - "TOOLDIR=$(out)" + "DATADIR=$(out)/share" + # Can't sort object files yet + "LORDER=echo" + "TSORT=cat" ]; RENAME = "-D"; patches = [ ./compat-cxx-safe-header.patch ./compat-dont-configure-twice.patch + ./compat-no-force-native.patch ]; - postInstall = '' - mv $out/include/compat/* $out/include - rmdir $out/include/compat + preInstall = '' + makeFlagsArray+=('INSTALL_FILE=''${INSTALL} ''${COPY} ''${PRESERVE} ''${RENAME}') + makeFlagsArray+=('INSTALL_DIR=''${INSTALL} -d') + makeFlagsArray+=('INSTALL_SYMLINK=''${INSTALL} ''${SYMLINK} ''${RENAME}') + ''; + postInstall = '' # why aren't these installed by netbsd? install -D compat_defs.h $out/include/compat_defs.h install -D $BSDSRCDIR/include/cdbw.h $out/include/cdbw.h @@ -273,6 +275,7 @@ in lib.makeScopeWithSplicing runHook postInstall ''; + setupHook = ./install-setup-hook.sh; }; fts = mkDerivation { @@ -366,7 +369,41 @@ in lib.makeScopeWithSplicing path = "usr.bin/make"; sha256 = "0vi73yicbmbp522qzqvd979cx6zm5jakhy77xh73c1kygf8klccs"; version = "9.2"; - postPatch = '' + + postPatch = '' + substituteInPlace $BSDSRCDIR/share/mk/bsd.doc.mk \ + --replace '-o ''${DOCOWN}' "" \ + --replace '-g ''${DOCGRP}' "" + for mk in $BSDSRCDIR/share/mk/bsd.inc.mk $BSDSRCDIR/share/mk/bsd.kinc.mk; do + substituteInPlace $mk \ + --replace '-o ''${BINOWN}' "" \ + --replace '-g ''${BINGRP}' "" + done + substituteInPlace $BSDSRCDIR/share/mk/bsd.kmodule.mk \ + --replace '-o ''${KMODULEOWN}' "" \ + --replace '-g ''${KMODULEGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.lib.mk \ + --replace '-o ''${LIBOWN}' "" \ + --replace '-g ''${LIBGRP}' "" \ + --replace '-o ''${DEBUGOWN}' "" \ + --replace '-g ''${DEBUGGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.lua.mk \ + --replace '-o ''${LIBOWN}' "" \ + --replace '-g ''${LIBGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.man.mk \ + --replace '-o ''${MANOWN}' "" \ + --replace '-g ''${MANGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.nls.mk \ + --replace '-o ''${NLSOWN}' "" \ + --replace '-g ''${NLSGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.prog.mk \ + --replace '-o ''${BINOWN}' "" \ + --replace '-g ''${BINGRP}' "" \ + --replace '-o ''${RUMPBINOWN}' "" \ + --replace '-g ''${RUMPBINGRP}' "" \ + --replace '-o ''${DEBUGOWN}' "" \ + --replace '-g ''${DEBUGGRP}' "" + # make needs this to pick up our sys make files export NIX_CFLAGS_COMPILE+=" -D_PATH_DEFSYSPATH=\"$out/share/mk\"" @@ -506,6 +543,22 @@ in lib.makeScopeWithSplicing makeMinimal install mandoc groff rsync nbperf rpcgen ]; + + # The makefiles define INCSDIR per subdirectory, so we have to set + # something else on the command line so those definitions aren't + # overridden. + postPatch = '' + find "$BSDSRCDIR" -name Makefile -exec \ + sed -i -E \ + -e 's_/usr/include_''${INCSDIR0}_' \ + {} \; + ''; + + # multiple header dirs, see above + postConfigure = '' + makeFlags=''${makeFlags/INCSDIR/INCSDIR0} + ''; + extraPaths = with self; [ common ]; headersOnly = true; noCC = true; @@ -521,9 +574,17 @@ in lib.makeScopeWithSplicing version = "9.2"; sha256 = "03s18q8d9giipf05bx199fajc2qwikji0djz7hw63d2lya6bfnpj"; - # Fix this error when building bootia32.efi and bootx64.efi: - # error: PHDR segment not covered by LOAD segment - patches = [ ./no-dynamic-linker.patch ]; + patches = [ + # Fix this error when building bootia32.efi and bootx64.efi: + # error: PHDR segment not covered by LOAD segment + ./no-dynamic-linker.patch + + # multiple header dirs, see above + ./sys-headers-incsdir.patch + ]; + + # multiple header dirs, see above + inherit (self.include) postPatch; CONFIG = "GENERIC"; @@ -537,7 +598,9 @@ in lib.makeScopeWithSplicing pushd arch/$MACHINE/conf config $CONFIG popd - ''; + '' + # multiple header dirs, see above + + self.include.postConfigure; makeFlags = [ "FIRMWAREDIR=$(out)/libdata/firmware" ]; hardeningDisable = [ "pic" ]; diff --git a/pkgs/os-specific/bsd/netbsd/install-setup-hook.sh b/pkgs/os-specific/bsd/netbsd/install-setup-hook.sh new file mode 100644 index 000000000000..4bfd4d785fac --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/install-setup-hook.sh @@ -0,0 +1,8 @@ +addNetBSDInstallMakeFlags() { + export INSTALL_FILE="install -U -c" + export INSTALL_DIR="install -U -d" + export INSTALL_LINK="install -U -l h" + export INSTALL_SYMLINK="install -U -l s" +} + +preConfigureHooks+=(addNetBSDInstallMakeFlags) diff --git a/pkgs/os-specific/bsd/netbsd/setup-hook.sh b/pkgs/os-specific/bsd/netbsd/setup-hook.sh index 17a8d6fca84a..fa8b19e7d8ce 100644 --- a/pkgs/os-specific/bsd/netbsd/setup-hook.sh +++ b/pkgs/os-specific/bsd/netbsd/setup-hook.sh @@ -7,4 +7,9 @@ mergeNetBSDSourceDir() { done } +addNetBSDMakeFlags() { + makeFlags="INCSDIR=${!outputDev}/include $makeFlags" +} + postUnpackHooks+=(mergeNetBSDSourceDir) +preConfigureHooks+=(addNetBSDMakeFlags) diff --git a/pkgs/os-specific/bsd/netbsd/sys-headers-incsdir.patch b/pkgs/os-specific/bsd/netbsd/sys-headers-incsdir.patch new file mode 100644 index 000000000000..ed85f8ea5b0c --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/sys-headers-incsdir.patch @@ -0,0 +1,13 @@ +diff --git a/Makefile b/Makefile +index 3f1e18dc659d..163362b82f94 100644 +--- a/Makefile ++++ b/Makefile +@@ -2,6 +2,8 @@ + + .include + ++INCSDIR= ${INCSDIR0} ++ + SUBDIR= altq arch compat dev fs miscfs \ + net net80211 netatalk netbt netcan netipsec netinet netinet6 \ + netmpls netsmb \ diff --git a/pkgs/os-specific/bsd/setup-hook.sh b/pkgs/os-specific/bsd/setup-hook.sh index ec23620b194b..4bdfde68b62e 100644 --- a/pkgs/os-specific/bsd/setup-hook.sh +++ b/pkgs/os-specific/bsd/setup-hook.sh @@ -36,11 +36,6 @@ addMakeFlags() { export MKUNPRIVED=yes export EXTERNAL_TOOLCHAIN=yes - export INSTALL_FILE="install -U -c" - export INSTALL_DIR="xinstall -U -d" - export INSTALL_LINK="install -U -l h" - export INSTALL_SYMLINK="install -U -l s" - makeFlags="MACHINE=$MACHINE $makeFlags" makeFlags="MACHINE_ARCH=$MACHINE_ARCH $makeFlags" makeFlags="AR=$AR $makeFlags" @@ -79,7 +74,7 @@ includesPhase() { local flagsArray=( $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"} - DESTDIR=${!outputInclude} includes + includes ) echoCmd 'includes flags' "${flagsArray[@]}"