summary refs log tree commit diff
path: root/pkgs/os-specific/bsd
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2018-05-01 22:19:33 -0500
committerMatthew Bauer <mjbauer95@gmail.com>2018-05-02 14:38:21 -0500
commit0943b76dc812d5db1e95d61a01ee6f0695f8c871 (patch)
treeba3ce1d5ab83f3522c9afdeec8943aca51d2b591 /pkgs/os-specific/bsd
parente53b92247f6f6910d8067e74bcca73ec5d694641 (diff)
downloadnixpkgs-0943b76dc812d5db1e95d61a01ee6f0695f8c871.tar
nixpkgs-0943b76dc812d5db1e95d61a01ee6f0695f8c871.tar.gz
nixpkgs-0943b76dc812d5db1e95d61a01ee6f0695f8c871.tar.bz2
nixpkgs-0943b76dc812d5db1e95d61a01ee6f0695f8c871.tar.lz
nixpkgs-0943b76dc812d5db1e95d61a01ee6f0695f8c871.tar.xz
nixpkgs-0943b76dc812d5db1e95d61a01ee6f0695f8c871.tar.zst
nixpkgs-0943b76dc812d5db1e95d61a01ee6f0695f8c871.zip
netbsd: remove mkdir -p calls
install is now hacked to ensure the parent directory exists before
running.
Diffstat (limited to 'pkgs/os-specific/bsd')
-rw-r--r--pkgs/os-specific/bsd/netbsd/default.nix69
1 files changed, 25 insertions, 44 deletions
diff --git a/pkgs/os-specific/bsd/netbsd/default.nix b/pkgs/os-specific/bsd/netbsd/default.nix
index 188d9709ee0..2b6956a6335 100644
--- a/pkgs/os-specific/bsd/netbsd/default.nix
+++ b/pkgs/os-specific/bsd/netbsd/default.nix
@@ -1,5 +1,5 @@
 { stdenv, hostPlatform, fetchcvs, lib, groff, mandoc, zlib, coreutils
-, yacc, flex, libressl, bash, more }:
+, yacc, flex, libressl, bash, less, writeText }:
 
 let
   fetchNetBSD = path: version: sha256: fetchcvs {
@@ -30,13 +30,16 @@ let
     NOGCCERROR = "yes";
     LEX = "flex";
     MKUNPRIVED = "yes";
-    INSTPRIV = '' ''${INSTPRIV.unpriv}'';
     HOST_SH = "${bash}/bin/sh";
     OBJCOPY = if stdenv.isDarwin then "true" else "objcopy";
-    PRESERVE = "-p";
     MACHINE_ARCH = hostPlatform.parsed.cpu.name;
     MACHINE_CPU = hostPlatform.parsed.cpu.name;
 
+    INSTALL_FILE = "install -U -c";
+    INSTALL_DIR = "xinstall -U -d";
+    INSTALL_LINK = "install -U -l h";
+    INSTALL_SYMLINK = "install -U -l s";
+
     # libs will be provided by cc-wrapper
     LIBCRT0 = "";
     LIBCRTI = "";
@@ -106,17 +109,6 @@ let
       fi
     '';
 
-    # Need to create directories for xinstall to work. Unused ones
-    # will be removed in the postInstall.
-    preInstall = ''
-      mkdir -p $out$BINDIR $out$LIBDIR $out$INFODIR \
-               $out$DOCDIR $out$LOCALEDIR $out$INCSDIR
-      for i in 1 2 3 4 5 6 7 8 9; do
-        mkdir -p $out$MANDIR/man$i $out$MANDIR/html$i \
-                 $out$DOCDIR/reference/ref$i
-      done
-    '';
-
     preFixup = ''
       # Remove lingering /usr references
       if [ -d $out/usr ]; then
@@ -125,10 +117,6 @@ let
         find . -type f -exec mv \{} $out/\{} \;
       fi
 
-      if [ -f $out/METALOG ]; then
-        rm $out/METALOG
-      fi
-
       find $out -type d -empty -delete
     '';
 
@@ -155,11 +143,11 @@ let
       ${make.postPatch}
     '';
     buildPhase = ''
-      runHook prePatch
+      runHook preBuild
 
       sh ./buildmake.sh
 
-      runHook postPatch
+      runHook postBuild
     '';
     installPhase = ''
       runHook preInstall
@@ -229,7 +217,14 @@ let
     ] ++ libutil.extraPaths ++ libc.extraPaths;
   };
 
-  install = netBSDDerivation {
+  # HACK to ensure parent directories exist. This emulates GNU
+  # install’s -D option. No alternative seems to exist in BSD install.
+  install = let binstall = writeText "binstall" ''
+    #!/usr/bin/env sh
+    for last in $@; do true; done
+    mkdir -p $(dirname $last)
+    xinstall "$@"
+  ''; in netBSDDerivation {
     path = "usr.bin/xinstall";
     version = "7.1.2";
     sha256 = "0nzhyh714m19h61m45gzc5dszkbafp5iaphbp5mza6w020fzf2y8";
@@ -240,13 +235,12 @@ let
       runHook preInstall
 
       install -D install.1 $out/share/man/man1/install.1
-      install -D xinstall $out/bin/install
-      ln -s $out/bin/install $out/bin/xinstall
-      ln -s $out/bin/install $out/bin/binstall
+      install -D xinstall $out/bin/xinstall
+      install -D -m 0550 ${binstall} $out/bin/binstall
+      ln -s $out/bin/binstall $out/bin/install
 
       runHook postInstall
     '';
-    # INSTALL_FILE = "install -D";
   };
 
   fts = netBSDDerivation {
@@ -332,6 +326,8 @@ let
       substituteInPlace $NETBSDSRCDIR/share/mk/bsd.prog.mk \
         --replace '-Wl,-dynamic-linker=''${_SHLINKER}' "" \
         --replace '-Wl,-rpath,''${SHLIBDIR}' ""
+      substituteInPlace $NETBSDSRCDIR/share/mk/bsd.lib.mk \
+        --replace '_INSTRANLIB=''${empty(PRESERVE):?-a "''${RANLIB} -t":}' '_INSTRANLIB='
     '' + lib.optionalString stdenv.isDarwin ''
       substituteInPlace $NETBSDSRCDIR/share/mk/bsd.sys.mk \
         --replace '-Wl,--fatal-warnings' "" \
@@ -344,10 +340,6 @@ let
         --replace '-Wl,-Map=''${_LIB}.so.''${SHLIB_SOVERSION}.map' "" \
         --replace '-Wl,-rpath,''${SHLIBDIR}' ""
     '';
-    preInstall = ''
-      mkdir -p $out$BINDIR $out$DOCDIR/reference/ref1/make \
-               $out$MANDIR/man1 $out$MANDIR/html1 $out/share/mk
-    '';
     postInstall = ''
       (cd $NETBSDSRCDIR/share/mk && make FILESDIR=/share/mk install)
     '';
@@ -402,7 +394,6 @@ in rec {
     version = "7.1.2";
     sha256 = "0nickhsjwgnr2h9nvwflvgfz93kqms5hzdnpyq02crpj35w98bh4";
     makeFlags = [ "BINDIR=/share" ];
-    preInstall = "mkdir -p $out/share/dict";
   };
 
   games = netBSDDerivation {
@@ -410,20 +401,20 @@ in rec {
     sha256 = "04wjsang8f8kxsifiayklbxaaxmm3vx9rfr91hfbxj4hk8gkqzy1";
     version = "7.1.2";
     makeFlags = [ "BINDIR=/bin"
-                  "SCRIPTSDIR=/bin"
-                  "FILESDIR=/share/games" ];
+                  "SCRIPTSDIR=/bin" ];
     postPatch = ''
       sed -i '1i #include <time.h>' adventure/save.c
 
       for f in $(find . -name pathnames.h); do
         substituteInPlace $f \
-          --replace /usr/share/games/fortune $out/share/games \
           --replace /usr/share/games $out/share/games \
           --replace /usr/games $out/bin \
           --replace /usr/libexec $out/libexec \
-          --replace /usr/bin/more ${more}/bin/more \
+          --replace /usr/bin/more ${less}/bin/less \
           --replace /usr/share/dict ${dict}/share/dict
       done
+      substituteInPlace boggle/boggle/bog.h \
+        --replace /usr/share/games $out/share/games
       substituteInPlace ching/ching/ching.sh \
         --replace /usr/share $out/share \
         --replace /usr/libexec $out/libexec
@@ -457,7 +448,6 @@ in rec {
     # HACK strfile needs to be installed first & in the path. The
     # Makefile should do this for us but haven't gotten it to work
     preBuild = ''
-      mkdir -p $out/bin $out/share/man/man8 $out/share/man/html8
       (cd fortune/strfile && make && make BINDIR=/bin install)
       export PATH=$out/bin:$PATH
     '';
@@ -475,14 +465,6 @@ in rec {
       "-D__c99inline=__inline"
     ];
 
-    preInstall = ''
-      mkdir -p $out/var/games/hackdir \
-               $out/share/games \
-               $out$DOCDIR/reference/ref6/rogue \
-               $out$MANDIR/man6 $out$MANDIR/html6
-      touch $out/var/games/hackdir/perm
-    '';
-
     buildInputs = [ compat libcurses libterminfo libressl ];
     extraPaths = [ dict.src who.src ];
   };
@@ -543,7 +525,6 @@ in rec {
       substituteInPlace term.c --replace /usr/share $out/share
     '';
     postInstall = ''
-      mkdir -p $out/share/misc
       (cd $NETBSDSRCDIR/share/terminfo && make && make BINDIR=/share install)
     '';
     extraPaths = [