mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-01 11:22:58 +00:00
114 lines
2.9 KiB
Bash
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)
|