summaryrefslogtreecommitdiff
path: root/pkgs/os-specific/bsd/setup-hook.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/os-specific/bsd/setup-hook.sh')
-rw-r--r--pkgs/os-specific/bsd/setup-hook.sh120
1 files changed, 120 insertions, 0 deletions
diff --git a/pkgs/os-specific/bsd/setup-hook.sh b/pkgs/os-specific/bsd/setup-hook.sh
new file mode 100644
index 000000000000..45babc38d7a5
--- /dev/null
+++ b/pkgs/os-specific/bsd/setup-hook.sh
@@ -0,0 +1,120 @@
+# 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 DESTDIR=
+ export USETOOLS=never
+ export NOCLANGERROR=yes
+ export NOGCCERROR=yes
+ export LEX=flex
+ 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"
+ makeFlags="CC=$CC $makeFlags"
+ makeFlags="CPP=$CPP $makeFlags"
+ makeFlags="CXX=$CXX $makeFlags"
+ makeFlags="LD=$LD $makeFlags"
+ makeFlags="STRIP=$STRIP $makeFlags"
+
+ makeFlags="BINDIR=${!outputBin}/bin $makeFlags"
+ makeFlags="LIBDIR=${!outputLib}/lib $makeFlags"
+ makeFlags="SHLIBDIR=${!outputLib}/lib $makeFlags"
+ makeFlags="MANDIR=${!outputMan}/share/man $makeFlags"
+ makeFlags="INFODIR=${!outputInfo}/share/info $makeFlags"
+ makeFlags="DOCDIR=${!outputDoc}/share/doc $makeFlags"
+ makeFlags="LOCALEDIR=${!outputLib}/share/locale $makeFlags"
+
+ # Parallel building. Needs the space.
+ makeFlags="-j $NIX_BUILD_CORES $makeFlags"
+}
+
+setBSDSourceDir() {
+ # merge together all extra paths
+ # there should be a better way to do this
+ sourceRoot=$PWD/$sourceRoot
+ export BSDSRCDIR=$sourceRoot
+ export _SRC_TOP_=$BSDSRCDIR
+ chmod -R u+w $sourceRoot
+ for path in $extraPaths; do
+ cd $path
+ find . -type d -exec mkdir -p $sourceRoot/\{} \;
+ find . -type f -exec cp -pr \{} $sourceRoot/\{} \;
+ chmod -R u+w $sourceRoot
+ done
+
+ cd $sourceRoot
+ if [ -d "$BSD_PATH" ]
+ then sourceRoot=$sourceRoot/$BSD_PATH
+ fi
+}
+
+includesPhase() {
+ if [ -z "${skipIncludesPhase:-}" ]; then
+ runHook preIncludes
+
+ local flagsArray=(
+ $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"}
+ DESTDIR=${!outputInclude} 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
+ 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)
+preConfigureHooks+=(addMakeFlags)
+preInstallHooks+=(includesPhase)
+fixupOutputHooks+=(moveUsrDir)