diff --git a/pkgs/os-specific/bsd/netbsd/default.nix b/pkgs/os-specific/bsd/netbsd/default.nix index 188d9709ee08..2b6956a63357 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 ' 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 = [