nixpkgs/pkgs/os-specific/bsd/setup-hook.sh
2024-09-08 22:11:10 +02:00

114 lines
2.9 KiB
Bash

# shellcheck shell=bash disable=SC2154,SC2164
# BSD makefiles should be able to detect this
# but without they end up using gcc on Darwin stdenv
addMakeFlags() {
export setOutputFlags=
export LIBCRT0=
export LIBCRTI=
export LIBCRTEND=
export LIBCRTBEGIN=
export LIBC=
export LIBUTIL=
export LIBSSL=
export LIBCRYPTO=
export LIBCRYPT=
export LIBCURSES=
export LIBTERMINFO=
export LIBM=
export LIBL=
export _GCC_CRTBEGIN=
export _GCC_CRTBEGINS=
export _GCC_CRTEND=
export _GCC_CRTENDS=
export _GCC_LIBGCCDIR=
export _GCC_CRTI=
export _GCC_CRTN=
export _GCC_CRTDIR=
# Definitions passed to share/mk/*.mk. Should be pretty simple -
# eventually maybe move it to a configure script.
export USETOOLS=never
export NOCLANGERROR=yes
export NOGCCERROR=yes
export LEX=flex
export MKUNPRIVED=yes
export EXTERNAL_TOOLCHAIN=yes
prependToVar makeFlags "MACHINE=$MACHINE"
prependToVar makeFlags "MACHINE_ARCH=$MACHINE_ARCH"
prependToVar makeFlags "AR=$AR"
prependToVar makeFlags "CC=$CC"
prependToVar makeFlags "CPP=$CPP"
prependToVar makeFlags "CXX=$CXX"
prependToVar makeFlags "LD=$LD"
prependToVar makeFlags "STRIP=$STRIP"
prependToVar makeFlags "BINDIR=${!outputBin}/bin"
prependToVar makeFlags "LIBDIR=${!outputLib}/lib"
prependToVar makeFlags "SHLIBDIR=${!outputLib}/lib"
prependToVar makeFlags "SHAREDIR=${!outputLib}/share"
prependToVar makeFlags "INFODIR=${!outputInfo}/share/info"
prependToVar makeFlags "DOCDIR=${!outputDoc}/share/doc"
prependToVar makeFlags "LOCALEDIR=${!outputLib}/share/locale"
# Parallel building. Needs the space.
prependToVar makeFlags "-j $NIX_BUILD_CORES"
}
setBSDSourceDir() {
sourceRoot=$PWD/$sourceRoot
export BSDSRCDIR=$sourceRoot
export _SRC_TOP_=$BSDSRCDIR
cd "$sourceRoot"
}
cdBSDPath() {
if [ -d "$COMPONENT_PATH" ]
then sourceRoot=$sourceRoot/$COMPONENT_PATH
cd "$COMPONENT_PATH"
fi
}
includesPhase() {
if [ -z "${skipIncludesPhase:-}" ]; then
runHook preIncludes
local flagsArray=()
concatTo flagsArray makeFlags makeFlagsArray
flagsArray+=(includes)
echoCmd 'includes flags' "${flagsArray[@]}"
make ${makefile:+-f $makefile} "${flagsArray[@]}"
moveUsrDir
runHook postIncludes
fi
}
moveUsrDir() {
if [ -d "$prefix" ]; then
# Remove lingering /usr references
if [ -d "$prefix/usr" ]; then
# Didn't try using rsync yet because per
# https://unix.stackexchange.com/questions/127712/merging-folders-with-mv,
# it's not neessarily better.
pushd "$prefix/usr"
find . -type d -exec mkdir -p "$out/{}" \;
find . \( -type f -o -type l \) -exec mv "{}" "$out/{}" \;
popd
fi
find "$prefix" -type d -empty -delete
fi
}
postUnpackHooks+=(setBSDSourceDir)
postPatchHooks+=(cdBSDPath)
preConfigureHooks+=(addMakeFlags)
preInstallHooks+=(includesPhase)
fixupOutputHooks+=(moveUsrDir)