diff --git a/pkgs/os-specific/bsd/freebsd/default.nix b/pkgs/os-specific/bsd/freebsd/default.nix index 1f321f032516f..b7cf5484c9e94 100644 --- a/pkgs/os-specific/bsd/freebsd/default.nix +++ b/pkgs/os-specific/bsd/freebsd/default.nix @@ -25,16 +25,11 @@ in makeScopeWithSplicing' { sha256 = "BpHqJfnGOeTE7tkFJBx0Wk8ryalmf4KNTit/Coh026E="; }; - # Why do we have splicing and yet do `nativeBuildInputs = with self; ...`? - # See note in ../netbsd/default.nix. - compatIfNeeded = lib.optional (!stdenvNoCC.hostPlatform.isFreeBSD) self.compat; - freebsd-lib = import ./lib { inherit version; }; - # Overridden arguments avoid cross package-set splicing issues, - # otherwise would just use implicit - # `lib.packagesFromDirectoryRecursive` auto-call. + # The manual callPackages below should in principle be unnecessary, but are + # necessary. See note in ../netbsd/default.nix compat = self.callPackage ./pkgs/compat/package.nix { inherit stdenv; diff --git a/pkgs/os-specific/bsd/netbsd/default.nix b/pkgs/os-specific/bsd/netbsd/default.nix index 79d46732bd6c2..ff01c2ce62eb6 100644 --- a/pkgs/os-specific/bsd/netbsd/default.nix +++ b/pkgs/os-specific/bsd/netbsd/default.nix @@ -1,1028 +1,133 @@ { stdenv, lib, stdenvNoCC , makeScopeWithSplicing', generateSplicesForMkScope , buildPackages -, bsdSetupHook, makeSetupHook, fetchcvs, groff, mandoc, byacc, flex -, zlib -, writeShellScript, writeText, runtimeShell, symlinkJoin +, fetchcvs }: -let - inherit (buildPackages.buildPackages) rsync; - - fetchNetBSD = path: version: sha256: fetchcvs { - cvsRoot = ":pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot"; - module = "src/${path}"; - inherit sha256; - tag = "netbsd-${lib.replaceStrings ["."] ["-"] version}-RELEASE"; - }; - - netbsdSetupHook = makeSetupHook { - name = "netbsd-setup-hook"; - } ./setup-hook.sh; - - defaultMakeFlags = [ - "MKSOFTFLOAT=${if stdenv.hostPlatform.gcc.float or (stdenv.hostPlatform.parsed.abi.float or "hard") == "soft" - then "yes" - else "no"}" - ]; - -in makeScopeWithSplicing' { +makeScopeWithSplicing' { otherSplices = generateSplicesForMkScope "netbsd"; - f = (self: let - inherit (self) mkDerivation; - in { - - # Why do we have splicing and yet do `nativeBuildInputs = with self; ...`? - # - # We use `makeScopeWithSplicing'` because this should be used for all - # nested package sets which support cross, so the inner `callPackage` works - # correctly. But for the inline packages we don't bother to use - # `callPackage`. - # - # We still could have tried to `with` a big spliced packages set, but - # splicing is jank and causes a number of bootstrapping infinite recursions - # if one is not careful. Pulling deps out of the right package set directly - # side-steps splicing entirely and avoids those footguns. - # - # For non-bootstrap-critical packages, we might as well use `callPackage` for - # consistency with everything else, and maybe put in separate files too. - - compatIfNeeded = lib.optional (!stdenvNoCC.hostPlatform.isNetBSD) self.compat; - - mkDerivation = lib.makeOverridable (attrs: let - stdenv' = if attrs.noCC or false then stdenvNoCC else stdenv; - in stdenv'.mkDerivation ({ - pname = "${attrs.pname or (baseNameOf attrs.path)}-netbsd"; - inherit (attrs) version; - src = fetchNetBSD attrs.path attrs.version attrs.sha256; - - extraPaths = [ ]; - - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install tsort lorder buildPackages.mandoc groff statHook rsync - ]; - buildInputs = with self; compatIfNeeded; - - HOST_SH = stdenv'.shell; - - MACHINE_ARCH = { - i486 = "i386"; - i586 = "i386"; - i686 = "i386"; - }.${stdenv'.hostPlatform.parsed.cpu.name} - or stdenv'.hostPlatform.parsed.cpu.name; - - MACHINE = { - x86_64 = "amd64"; - aarch64 = "evbarm64"; - i486 = "i386"; - i586 = "i386"; - i686 = "i386"; - }.${stdenv'.hostPlatform.parsed.cpu.name} - or stdenv'.hostPlatform.parsed.cpu.name; - - COMPONENT_PATH = attrs.path; - - makeFlags = defaultMakeFlags; - - strictDeps = true; - - meta = with lib; { - maintainers = with maintainers; [ matthewbauer qyliss ]; - platforms = platforms.unix; - license = licenses.bsd2; + f = (self: lib.packagesFromDirectoryRecursive { + callPackage = self.callPackage; + directory = ./pkgs; + } // (let inherit (self) mkDerivation; in { + + fetchNetBSD = path: version: sha256: fetchcvs { + cvsRoot = ":pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot"; + module = "src/${path}"; + inherit sha256; + tag = "netbsd-${lib.replaceStrings ["."] ["-"] version}-RELEASE"; }; - } // lib.optionalAttrs stdenv'.hasCC { - # TODO should CC wrapper set this? - CPP = "${stdenv'.cc.targetPrefix}cpp"; - } // lib.optionalAttrs stdenv'.isDarwin { - MKRELRO = "no"; - } // lib.optionalAttrs (stdenv'.cc.isClang or false) { - HAVE_LLVM = lib.versions.major (lib.getVersion stdenv'.cc.cc); - } // lib.optionalAttrs (stdenv'.cc.isGNU or false) { - HAVE_GCC = lib.versions.major (lib.getVersion stdenv'.cc.cc); - } // lib.optionalAttrs (stdenv'.isx86_32) { - USE_SSP = "no"; - } // lib.optionalAttrs (attrs.headersOnly or false) { - installPhase = "includesPhase"; - dontBuild = true; - } // attrs // { - # Files that use NetBSD-specific macros need to have nbtool_config.h - # included ahead of them on non-NetBSD platforms. - postPatch = lib.optionalString (!stdenv'.hostPlatform.isNetBSD) '' - set +e - grep -Zlr "^__RCSID - ^__BEGIN_DECLS" $COMPONENT_PATH | xargs -0r grep -FLZ nbtool_config.h | - xargs -0tr sed -i '0,/^#/s//#include \n\0/' - set -e - '' + attrs.postPatch or ""; - })); - - ## - ## START BOOTSTRAPPING - ## - makeMinimal = mkDerivation { - path = "tools/make"; - sha256 = "0fh0nrnk18m613m5blrliq2aydciv51qhc0ihsj4k63incwbk90n"; - version = "9.2"; - - buildInputs = with self; []; - nativeBuildInputs = with buildPackages.netbsd; [ bsdSetupHook netbsdSetupHook rsync ]; - - skipIncludesPhase = true; - - postPatch = '' - patchShebangs $COMPONENT_PATH/configure - ${self.make.postPatch} - ''; - - buildPhase = '' - runHook preBuild - - sh ./buildmake.sh - - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - - install -D nbmake $out/bin/nbmake - ln -s $out/bin/nbmake $out/bin/make - mkdir -p $out/share - cp -r $BSDSRCDIR/share/mk $out/share/mk - - runHook postInstall - ''; - - extraPaths = with self; [ make.src ] ++ make.extraPaths; - }; - - compat = mkDerivation (let - version = "9.2"; - commonDeps = [ zlib ]; - in { - path = "tools/compat"; - sha256 = "1vsxg7136nlhc72vpa664vs22874xh7ila95nkmsd8crn3z3cyn0"; - inherit version; - - setupHooks = [ - ../../../build-support/setup-hooks/role.bash - ./compat-setup-hook.sh - ]; - - preConfigure = '' - make include/.stamp configure nbtool_config.h.in defs.mk.in - ''; - - configurePlatforms = [ "build" "host" ]; - configureFlags = [ - "--cache-file=config.cache" - ] ++ lib.optionals stdenv.hostPlatform.isMusl [ - # We include this header in our musl package only for legacy - # compatibility, and compat works fine without it (and having it - # know about sys/cdefs.h breaks packages like glib when built - # statically). - "ac_cv_header_sys_cdefs_h=no" - ]; - - nativeBuildInputs = with buildPackages.netbsd; commonDeps ++ [ - bsdSetupHook netbsdSetupHook - makeMinimal - rsync - ]; - - buildInputs = with self; commonDeps; - - # temporarily use gnuinstall for bootstrapping - # bsdinstall will be built later - makeFlags = defaultMakeFlags ++ [ - "INSTALL=${buildPackages.coreutils}/bin/install" - "DATADIR=$(out)/share" - # Can't sort object files yet - "LORDER=echo" - "TSORT=cat" - # Can't process man pages yet - "MKSHARE=no" - ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ - # GNU objcopy produces broken .a libs which won't link into dependers. - # Makefiles only invoke `$OBJCOPY -x/-X`, so cctools strip works here. - "OBJCOPY=${buildPackages.darwin.cctools-port}/bin/strip" - ]; - RENAME = "-D"; - - passthru.tests = { netbsd-install = self.install; }; - - patches = [ - ./compat-cxx-safe-header.patch - ./compat-dont-configure-twice.patch - ./compat-no-force-native.patch - ]; - - preInstall = '' - makeFlagsArray+=('INSTALL_FILE=''${INSTALL} ''${COPY} ''${PRESERVE} ''${RENAME}') - makeFlagsArray+=('INSTALL_DIR=''${INSTALL} -d') - makeFlagsArray+=('INSTALL_SYMLINK=''${INSTALL} ''${SYMLINK} ''${RENAME}') - ''; - - postInstall = '' - # why aren't these installed by netbsd? - install -D compat_defs.h $out/include/compat_defs.h - install -D $BSDSRCDIR/include/cdbw.h $out/include/cdbw.h - install -D $BSDSRCDIR/sys/sys/cdbr.h $out/include/cdbr.h - install -D $BSDSRCDIR/sys/sys/featuretest.h \ - $out/include/sys/featuretest.h - install -D $BSDSRCDIR/sys/sys/md5.h $out/include/md5.h - install -D $BSDSRCDIR/sys/sys/rmd160.h $out/include/rmd160.h - install -D $BSDSRCDIR/sys/sys/sha1.h $out/include/sha1.h - install -D $BSDSRCDIR/sys/sys/sha2.h $out/include/sha2.h - install -D $BSDSRCDIR/sys/sys/queue.h $out/include/sys/queue.h - install -D $BSDSRCDIR/include/vis.h $out/include/vis.h - install -D $BSDSRCDIR/include/db.h $out/include/db.h - install -D $BSDSRCDIR/include/netconfig.h $out/include/netconfig.h - install -D $BSDSRCDIR/include/utmpx.h $out/include/utmpx.h - install -D $BSDSRCDIR/include/tzfile.h $out/include/tzfile.h - install -D $BSDSRCDIR/sys/sys/tree.h $out/include/sys/tree.h - install -D $BSDSRCDIR/include/nl_types.h $out/include/nl_types.h - install -D $BSDSRCDIR/include/stringlist.h $out/include/stringlist.h - - # Collapse includes slightly to fix dangling reference - install -D $BSDSRCDIR/common/include/rpc/types.h $out/include/rpc/types.h - sed -i '1s;^;#include "nbtool_config.h"\n;' $out/include/rpc/types.h - '' + lib.optionalString stdenv.isDarwin '' - mkdir -p $out/include/ssp - touch $out/include/ssp/ssp.h - '' + '' - mkdir -p $out/lib/pkgconfig - substitute ${./libbsd-overlay.pc} $out/lib/pkgconfig/libbsd-overlay.pc \ - --subst-var-by out $out \ - --subst-var-by version ${version} - ''; - extraPaths = with self; [ include.src libc.src libutil.src - (fetchNetBSD "external/bsd/flex" "9.2" "0h98jpfj7vx5zh7vd7bk6b1hmzgkcb757a8j6d9zgygxxv13v43m") - (fetchNetBSD "sys/sys" "9.2" "0zawhw51klaigqqwkx0lzrx3mim2jywrc24cm7c66qsf1im9awgd") - (fetchNetBSD "common/include/rpc/types.h" "9.2" "0n2df12mlc3cbc48jxq35yzl1y7ghgpykvy7jnfh898rdhac7m9a") - ] ++ libutil.extraPaths ++ _mainLibcExtraPaths; - }); - - # HACK: to ensure parent directories exist. This emulates GNU - # install’s -D option. No alternative seems to exist in BSD install. - install = let binstall = writeShellScript "binstall" '' - set -eu - for last in "$@"; do true; done - mkdir -p $(dirname $last) - @out@/bin/xinstall "$@" - ''; in mkDerivation { - path = "usr.bin/xinstall"; - version = "9.2"; - sha256 = "1f6pbz3qv1qcrchdxif8p5lbmnwl8b9nq615hsd3cyl4avd5bfqj"; - extraPaths = with self; [ mtree.src make.src ]; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - mandoc groff rsync - ]; - skipIncludesPhase = true; - buildInputs = with self; compatIfNeeded - # fts header is needed. glibc already has this header, but musl doesn't, - # so make sure pkgsMusl.netbsd.install still builds in case you want to - # remove it! - ++ [ fts ]; - installPhase = '' - runHook preInstall - - install -D install.1 $out/share/man/man1/install.1 - install -D xinstall $out/bin/xinstall - install -D -m 0550 ${binstall} $out/bin/binstall - substituteInPlace $out/bin/binstall --subst-var out - ln -s $out/bin/binstall $out/bin/install - - runHook postInstall - ''; - setupHook = ./install-setup-hook.sh; - }; - - fts = mkDerivation { - pname = "fts"; - path = "include/fts.h"; - sha256 = "01d4fpxvz1pgzfk5xznz5dcm0x0gdzwcsfm1h3d0xc9kc6hj2q77"; - version = "9.2"; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook rsync - ]; - propagatedBuildInputs = with self; compatIfNeeded; - extraPaths = with self; [ - (fetchNetBSD "lib/libc/gen/fts.c" "9.2" "1a8hmf26242nmv05ipn3ircxb0jqmmi66rh78kkyi9vjwkfl3qn7") - (fetchNetBSD "lib/libc/include/namespace.h" "9.2" "0kksr3pdwdc1cplqf5z12ih4cml6l11lqrz91f7hjjm64y7785kc") - (fetchNetBSD "lib/libc/gen/fts.3" "9.2" "1asxw0n3fhjdadwkkq3xplfgqgl3q32w1lyrvbakfa3gs0wz5zc1") - ]; - skipIncludesPhase = true; - buildPhase = '' - "$CC" -c -Iinclude -Ilib/libc/include lib/libc/gen/fts.c \ - -o lib/libc/gen/fts.o - "$AR" -rsc libfts.a lib/libc/gen/fts.o - ''; - installPhase = '' - runHook preInstall - - install -D lib/libc/gen/fts.3 $out/share/man/man3/fts.3 - install -D include/fts.h $out/include/fts.h - install -D lib/libc/include/namespace.h $out/include/namespace.h - install -D libfts.a $out/lib/libfts.a - - runHook postInstall - ''; - setupHooks = [ - ../../../build-support/setup-hooks/role.bash - ./fts-setup-hook.sh - ]; - }; - - # Don't add this to nativeBuildInputs directly. Use statHook instead. - stat = mkDerivation { - path = "usr.bin/stat"; - version = "9.2"; - sha256 = "18nqwlndfc34qbbgqx5nffil37jfq9aw663ippasfxd2hlyc106x"; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install mandoc groff rsync - ]; - }; - - # stat isn't in POSIX, and NetBSD stat supports a completely - # different range of flags than GNU stat, so including it in PATH - # breaks stdenv. Work around that with a hook that will point - # NetBSD's build system and NetBSD stat without including it in - # PATH. - statHook = makeSetupHook { - name = "netbsd-stat-hook"; - } (writeText "netbsd-stat-hook-impl" '' - makeFlagsArray+=(TOOL_STAT=${self.stat}/bin/stat) - ''); - - tsort = mkDerivation { - path = "usr.bin/tsort"; - version = "9.2"; - sha256 = "1dqvf9gin29nnq3c4byxc7lfd062pg7m84843zdy6n0z63hnnwiq"; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install mandoc groff rsync - ]; - }; - - lorder = mkDerivation { - path = "usr.bin/lorder"; - version = "9.2"; - sha256 = "0rjf9blihhm0n699vr2bg88m4yjhkbxh6fxliaay3wxkgnydjwn2"; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install mandoc groff rsync - ]; - }; - - ## - ## END BOOTSTRAPPING - ## - - ## - ## START COMMAND LINE TOOLS - ## - make = mkDerivation { - path = "usr.bin/make"; - sha256 = "0vi73yicbmbp522qzqvd979cx6zm5jakhy77xh73c1kygf8klccs"; - version = "9.2"; - - postPatch = '' - substituteInPlace $BSDSRCDIR/share/mk/bsd.doc.mk \ - --replace '-o ''${DOCOWN}' "" \ - --replace '-g ''${DOCGRP}' "" - for mk in $BSDSRCDIR/share/mk/bsd.inc.mk $BSDSRCDIR/share/mk/bsd.kinc.mk; do - substituteInPlace $mk \ - --replace '-o ''${BINOWN}' "" \ - --replace '-g ''${BINGRP}' "" - done - substituteInPlace $BSDSRCDIR/share/mk/bsd.kmodule.mk \ - --replace '-o ''${KMODULEOWN}' "" \ - --replace '-g ''${KMODULEGRP}' "" - substituteInPlace $BSDSRCDIR/share/mk/bsd.lib.mk \ - --replace '-o ''${LIBOWN}' "" \ - --replace '-g ''${LIBGRP}' "" \ - --replace '-o ''${DEBUGOWN}' "" \ - --replace '-g ''${DEBUGGRP}' "" - substituteInPlace $BSDSRCDIR/share/mk/bsd.lua.mk \ - --replace '-o ''${LIBOWN}' "" \ - --replace '-g ''${LIBGRP}' "" - substituteInPlace $BSDSRCDIR/share/mk/bsd.man.mk \ - --replace '-o ''${MANOWN}' "" \ - --replace '-g ''${MANGRP}' "" - substituteInPlace $BSDSRCDIR/share/mk/bsd.nls.mk \ - --replace '-o ''${NLSOWN}' "" \ - --replace '-g ''${NLSGRP}' "" - substituteInPlace $BSDSRCDIR/share/mk/bsd.prog.mk \ - --replace '-o ''${BINOWN}' "" \ - --replace '-g ''${BINGRP}' "" \ - --replace '-o ''${RUMPBINOWN}' "" \ - --replace '-g ''${RUMPBINGRP}' "" \ - --replace '-o ''${DEBUGOWN}' "" \ - --replace '-g ''${DEBUGGRP}' "" - - # make needs this to pick up our sys make files - export NIX_CFLAGS_COMPILE+=" -D_PATH_DEFSYSPATH=\"$out/share/mk\"" - - substituteInPlace $BSDSRCDIR/share/mk/bsd.lib.mk \ - --replace '_INSTRANLIB=''${empty(PRESERVE):?-a "''${RANLIB} -t":}' '_INSTRANLIB=' - substituteInPlace $BSDSRCDIR/share/mk/bsd.kinc.mk \ - --replace /bin/rm rm - '' + lib.optionalString stdenv.isDarwin '' - substituteInPlace $BSDSRCDIR/share/mk/bsd.sys.mk \ - --replace '-Wl,--fatal-warnings' "" \ - --replace '-Wl,--warn-shared-textrel' "" - ''; - postInstall = '' - make -C $BSDSRCDIR/share/mk FILESDIR=$out/share/mk install - ''; - extraPaths = [ - (fetchNetBSD "share/mk" "9.2" "0w9x77cfnm6zwy40slradzi0ip9gz80x6lk7pvnlxzsr2m5ra5sy") - ]; - }; - - mtree = mkDerivation { - path = "usr.sbin/mtree"; - version = "9.2"; - sha256 = "04p7w540vz9npvyb8g8hcf2xa05phn1y88hsyrcz3vwanvpc0yv9"; - extraPaths = with self; [ mknod.src ]; - }; - - mknod = mkDerivation { - path = "sbin/mknod"; - version = "9.2"; - sha256 = "1d9369shzwgixz3nph991i8q5vk7hr04py3n9avbfbhzy4gndqs2"; - }; - - getent = mkDerivation { - path = "usr.bin/getent"; - sha256 = "1qngywcmm0y7nl8h3n8brvkxq4jw63szbci3kc1q6a6ndhycbbvr"; - version = "9.2"; - patches = [ ./getent.patch ]; - }; - - getconf = mkDerivation { - path = "usr.bin/getconf"; - sha256 = "122vslz4j3h2mfs921nr2s6m078zcj697yrb75rwp2hnw3qz4s8q"; - version = "9.2"; - }; - - locale = mkDerivation { - path = "usr.bin/locale"; - version = "9.2"; - sha256 = "0kk6v9k2bygq0wf9gbinliqzqpzs9bgxn0ndyl2wcv3hh2bmsr9p"; - patches = [ ./locale.patch ]; - env.NIX_CFLAGS_COMPILE = "-DYESSTR=__YESSTR -DNOSTR=__NOSTR"; - }; - - rpcgen = mkDerivation { - path = "usr.bin/rpcgen"; - version = "9.2"; - sha256 = "1kfgfx54jg98wbg0d95p0rvf4w0302v8fz724b0bdackdsrd4988"; - }; - - genassym = mkDerivation { - path = "usr.bin/genassym"; - version = "9.2"; - sha256 = "1acl1dz5kvh9h5806vkz2ap95rdsz7phmynh5i3x5y7agbki030c"; - }; - - gencat = mkDerivation { - path = "usr.bin/gencat"; - version = "9.2"; - sha256 = "0gd463x1hg36bhr7y0xryb5jyxk0z0g7xvy8rgk82nlbnlnsbbwb"; - }; - - nbperf = mkDerivation { - path = "usr.bin/nbperf"; - version = "9.2"; - sha256 = "1nxc302vgmjhm3yqdivqyfzslrg0vjpbss44s74rcryrl19mma9r"; - }; - - tic = mkDerivation { - path = "tools/tic"; - version = "9.2"; - sha256 = "092y7db7k4kh2jq8qc55126r5qqvlb8lq8mhmy5ipbi36hwb4zrz"; - HOSTPROG = "tic"; - buildInputs = with self; compatIfNeeded; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install mandoc groff nbperf rsync - ]; - makeFlags = defaultMakeFlags ++ [ "TOOLDIR=$(out)" ]; - extraPaths = with self; [ - libterminfo.src - (fetchNetBSD "usr.bin/tic" "9.2" "1mwdfg7yx1g43ss378qsgl5rqhsxskqvsd2mqvrn38qw54i8v5i1") - (fetchNetBSD "tools/Makefile.host" "9.2" "15b4ab0n36lqj00j5lz2xs83g7l8isk3wx1wcapbrn66qmzz2sxy") + defaultMakeFlags = [ + "MKSOFTFLOAT=${if stdenv.hostPlatform.gcc.float or (stdenv.hostPlatform.parsed.abi.float or "hard") == "soft" + then "yes" + else "no"}" ]; - }; - uudecode = mkDerivation { - path = "usr.bin/uudecode"; - version = "9.2"; - sha256 = "00a3zmh15pg4vx6hz0kaa5mi8d2b1sj4h512d7p6wbvxq6mznwcn"; - env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isLinux "-DNO_BASE64"; - NIX_LDFLAGS = lib.optional stdenv.isDarwin "-lresolv"; - }; + compatIfNeeded = lib.optional (!stdenvNoCC.hostPlatform.isNetBSD) self.compat; - cksum = mkDerivation { - path = "usr.bin/cksum"; - version = "9.2"; - sha256 = "0msfhgyvh5c2jmc6qjnf12c378dhw32ffsl864qz4rdb2b98rfcq"; - meta.platforms = lib.platforms.netbsd; - }; + # The manual callPackages below should in principle be unnecessary because + # they're just selecting arguments that would be selected anyway. However, + # if we don't perform these manual calls, we get infinite recursion issues + # because of the splices. - config = mkDerivation { - path = "usr.bin/config"; - version = "9.2"; - sha256 = "1yz3n4hncdkk6kp595fh2q5lg150vpqg8iw2dccydkyw4y3hgsjj"; - env.NIX_CFLAGS_COMPILE = toString [ "-DMAKE_BOOTSTRAP" ]; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal install mandoc byacc flex rsync - ]; - buildInputs = with self; compatIfNeeded; - extraPaths = with self; [ cksum.src ]; - }; - ## - ## END COMMAND LINE TOOLS - ## - - ## - ## START HEADERS - ## - include = mkDerivation { - path = "include"; - version = "9.2"; - sha256 = "0nxnmj4c8s3hb9n3fpcmd0zl3l1nmhivqgi9a35sis943qvpgl9h"; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install mandoc groff rsync nbperf rpcgen - ]; - - # The makefiles define INCSDIR per subdirectory, so we have to set - # something else on the command line so those definitions aren't - # overridden. - postPatch = '' - find "$BSDSRCDIR" -name Makefile -exec \ - sed -i -E \ - -e 's_/usr/include_''${INCSDIR0}_' \ - {} \; - ''; - - # multiple header dirs, see above - postConfigure = '' - makeFlags=''${makeFlags/INCSDIR/INCSDIR0} - ''; - - extraPaths = with self; [ common ]; - headersOnly = true; - noCC = true; - meta.platforms = lib.platforms.netbsd; - makeFlags = defaultMakeFlags ++ [ "RPCGEN_CPP=${buildPackages.stdenv.cc.cc}/bin/cpp" ]; - }; - - common = fetchNetBSD "common" "9.2" "1pfylz9r3ap5wnwwbwczbfjb1m5qdyspzbnmxmcdkpzz2zgj64b9"; - - sys-headers = mkDerivation { - pname = "sys-headers"; - path = "sys"; - version = "9.2"; - sha256 = "03s18q8d9giipf05bx199fajc2qwikji0djz7hw63d2lya6bfnpj"; - - # Make the build ignore linker warnings - prePatch = '' - substituteInPlace sys/conf/Makefile.kern.inc \ - --replace "-Wa,--fatal-warnings" "" - ''; - - patches = [ - # Fix this error when building bootia32.efi and bootx64.efi: - # error: PHDR segment not covered by LOAD segment - ./no-dynamic-linker.patch - - # multiple header dirs, see above - ./sys-headers-incsdir.patch - ]; + mkDerivation = self.callPackage ./pkgs/mkDerivation.nix { + inherit stdenv stdenvNoCC; + inherit (buildPackages.netbsd) netbsdSetupHook makeMinimal install tsort lorder; + inherit (buildPackages) mandoc; + inherit (buildPackages.buildPackages) rsync; - postPatch = - '' - substituteInPlace sys/arch/i386/stand/efiboot/Makefile.efiboot \ - --replace "-nocombreloc" "-z nocombreloc" - '' + - # multiple header dirs, see above - self.include.postPatch; - - CONFIG = "GENERIC"; - - propagatedBuildInputs = with self; [ include ]; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal install tsort lorder statHook rsync uudecode config genassym - ]; - - postConfigure = '' - pushd arch/$MACHINE/conf - config $CONFIG - popd - '' - # multiple header dirs, see above - + self.include.postConfigure; - - makeFlags = defaultMakeFlags ++ [ "FIRMWAREDIR=$(out)/libdata/firmware" ]; - hardeningDisable = [ "pic" ]; - MKKMOD = "no"; - env.NIX_CFLAGS_COMPILE = toString [ - "-Wno-error=array-parameter" - "-Wno-error=array-bounds" - "-Wa,--no-warn" - ]; - - postBuild = '' - make -C arch/$MACHINE/compile/$CONFIG $makeFlags - ''; - - postInstall = '' - cp arch/$MACHINE/compile/$CONFIG/netbsd $out - ''; - - meta.platforms = lib.platforms.netbsd; - extraPaths = with self; [ common ]; - - installPhase = "includesPhase"; - dontBuild = true; - noCC = true; - }; - - # The full kernel. We do the funny thing of overridding the headers to the - # full kernal and not vice versa to avoid infinite recursion -- the headers - # come earlier in the bootstrap. - sys = self.sys-headers.override { - pname = "sys"; - installPhase = null; - noCC = false; - dontBuild = false; - }; - - headers = symlinkJoin { - name = "netbsd-headers-9.2"; - paths = with self; [ - include - sys-headers - libpthread-headers - ]; - meta.platforms = lib.platforms.netbsd; - }; - ## - ## END HEADERS - ## - - ## - ## START LIBRARIES - ## - libarch = mkDerivation { - path = "lib/libarch"; - version = "9.2"; - sha256 = "6ssenRhuSwp0Jn71ErT0PrEoCJ+cIYRztwdL4QTDZsQ="; - meta.platforms = lib.platforms.netbsd; - }; - - libutil = mkDerivation { - path = "lib/libutil"; - version = "9.2"; - sha256 = "02gm5a5zhh8qp5r5q5r7x8x6x50ir1i0ncgsnfwh1vnrz6mxbq7z"; - extraPaths = with self; [ common libc.src sys.src ]; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - byacc install tsort lorder mandoc statHook rsync - ]; - buildInputs = with self; [ headers ]; - SHLIBINSTALLDIR = "$(out)/lib"; - }; - - libedit = mkDerivation { - path = "lib/libedit"; - version = "9.2"; - sha256 = "1wqhngraxwqk4jgrf5f18jy195yrp7c06n1gf31pbplq79mg1bcj"; - buildInputs = with self; [ libterminfo libcurses ]; - propagatedBuildInputs = with self; compatIfNeeded; - SHLIBINSTALLDIR = "$(out)/lib"; - makeFlags = defaultMakeFlags ++ [ "LIBDO.terminfo=${self.libterminfo}/lib" ]; - postPatch = '' - sed -i '1i #undef bool_t' $COMPONENT_PATH/el.h - substituteInPlace $COMPONENT_PATH/config.h \ - --replace "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" "" - substituteInPlace $COMPONENT_PATH/readline/Makefile --replace /usr/include "$out/include" - ''; - env.NIX_CFLAGS_COMPILE = toString [ - "-D__noinline=" - "-D__scanflike(a,b)=" - "-D__va_list=va_list" - ]; - }; - - libterminfo = mkDerivation { - path = "lib/libterminfo"; - version = "9.2"; - sha256 = "0pq05k3dj0dfsczv07frnnji92mazmy2qqngqbx2zgqc1x251414"; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal install tsort lorder mandoc statHook nbperf tic rsync - ]; - buildInputs = with self; compatIfNeeded; - SHLIBINSTALLDIR = "$(out)/lib"; - postPatch = '' - substituteInPlace $COMPONENT_PATH/term.c --replace /usr/share $out/share - substituteInPlace $COMPONENT_PATH/setupterm.c \ - --replace '#include ' 'void use_env(bool);' - ''; - postBuild = '' - make -C $BSDSRCDIR/share/terminfo $makeFlags BINDIR=$out/share - ''; - postInstall = '' - make -C $BSDSRCDIR/share/terminfo $makeFlags BINDIR=$out/share install - ''; - extraPaths = with self; [ - (fetchNetBSD "share/terminfo" "9.2" "1vh9rl4w8118a9qdpblfxmv1wkpm83rm9gb4rzz5bpm56i6d7kk7") - ]; - }; - - libcurses = mkDerivation { - path = "lib/libcurses"; - version = "9.2"; - sha256 = "0pd0dggl3w4bv5i5h0s1wrc8hr66n4hkv3zlklarwfdhc692fqal"; - buildInputs = with self; [ libterminfo ]; - env.NIX_CFLAGS_COMPILE = toString ([ - "-D__scanflike(a,b)=" - "-D__va_list=va_list" - "-D__warn_references(a,b)=" - ] ++ lib.optional stdenv.isDarwin "-D__strong_alias(a,b)="); - propagatedBuildInputs = with self; compatIfNeeded; - MKDOC = "no"; # missing vfontedpr - makeFlags = defaultMakeFlags ++ [ "LIBDO.terminfo=${self.libterminfo}/lib" ]; - postPatch = lib.optionalString (!stdenv.isDarwin) '' - substituteInPlace $COMPONENT_PATH/printw.c \ - --replace "funopen(win, NULL, __winwrite, NULL, NULL)" NULL \ - --replace "__strong_alias(vwprintw, vw_printw)" 'extern int vwprintw(WINDOW*, const char*, va_list) __attribute__ ((alias ("vw_printw")));' - substituteInPlace $COMPONENT_PATH/scanw.c \ - --replace "__strong_alias(vwscanw, vw_scanw)" 'extern int vwscanw(WINDOW*, const char*, va_list) __attribute__ ((alias ("vw_scanw")));' - ''; - }; - - column = mkDerivation { - path = "usr.bin/column"; - version = "9.2"; - sha256 = "0r6b0hjn5ls3j3sv6chibs44fs32yyk2cg8kh70kb4cwajs4ifyl"; - }; + }; - libossaudio = mkDerivation { - path = "lib/libossaudio"; - version = "9.2"; - sha256 = "16l3bfy6dcwqnklvh3x0ps8ld1y504vf57v9rx8f9adzhb797jh0"; - meta.platforms = lib.platforms.netbsd; - }; + makeMinimal = self.callPackage ./pkgs/makeMinimal.nix { + inherit (self) make; + }; - librpcsvc = mkDerivation { - path = "lib/librpcsvc"; - version = "9.2"; - sha256 = "1q34pfiyjbrgrdqm46jwrsqms49ly6z3b0xh1wg331zga900vq5n"; - makeFlags = defaultMakeFlags ++ [ "INCSDIR=$(out)/include/rpcsvc" ]; - meta.platforms = lib.platforms.netbsd; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install tsort lorder rpcgen statHook - ]; - }; + compat = self.callPackage ./pkgs/compat/package.nix { + inherit (buildPackages) coreutils; + inherit (buildPackages.darwin) cctools-port; + inherit (buildPackages.buildPackages) rsync; + inherit (buildPackages.netbsd) makeMinimal; + inherit (self) install include libc libutil; + }; - librt = mkDerivation { - path = "lib/librt"; - version = "9.2"; - sha256 = "07f8mpjcqh5kig5z5sp97fg55mc4dz6aa1x5g01nv2pvbmqczxc6"; - meta.platforms = lib.platforms.netbsd; - extraPaths = with self; [ libc.src ] ++ libc.extraPaths; - postPatch = '' - sed -i 's,/usr\(/include/sys/syscall.h\),${self.headers}\1,g' \ - $BSDSRCDIR/lib/{libc,librt}/sys/Makefile.inc - ''; - }; + install = self.callPackage ./pkgs/install/package.nix { + inherit (self) fts mtree make compatIfNeeded; + inherit (buildPackages.buildPackages) rsync; + inherit (buildPackages.netbsd) makeMinimal; + }; - libcrypt = mkDerivation { - path = "lib/libcrypt"; - version = "9.2"; - sha256 = "0siqan1wdqmmhchh2n8w6a8x1abbff8n4yb6jrqxap3hqn8ay54g"; - SHLIBINSTALLDIR = "$(out)/lib"; - meta.platforms = lib.platforms.netbsd; - }; + # See note in pkgs/stat/package.nix + stat = self.callPackage ./pkgs/stat/package.nix { + inherit (buildPackages.netbsd) makeMinimal install; + inherit (buildPackages.buildPackages) rsync; + }; - libpci = mkDerivation { - pname = "libpci"; - path = "lib/libpci"; - version = "9.2"; - sha256 = "+IOEO1Bw3/H3iCp3uk3bwsFZbvCqN5Ciz70irnPl8E8="; - env.NIX_CFLAGS_COMPILE = toString [ "-I." ]; - meta.platforms = lib.platforms.netbsd; - extraPaths = with self; [ sys.src ]; - }; + # See note in pkgs/stat/hook.nix + statHook = self.callPackage ./pkgs/stat/hook.nix { + inherit (self) stat; + }; - libpthread-headers = mkDerivation { - pname = "libpthread-headers"; - path = "lib/libpthread"; - version = "9.2"; - sha256 = "0mlmc31k509dwfmx5s2x010wxjc44mr6y0cbmk30cfipqh8c962h"; - installPhase = "includesPhase"; - dontBuild = true; - noCC = true; - meta.platforms = lib.platforms.netbsd; - }; + tsort = self.callPackage ./pkgs/tsort.nix { + inherit (buildPackages.netbsd) makeMinimal install; + inherit (buildPackages.buildPackages) rsync; + }; - libpthread = self.libpthread-headers.override { - pname = "libpthread"; - installPhase = null; - noCC = false; - dontBuild = false; - buildInputs = with self; [ headers ]; - SHLIBINSTALLDIR = "$(out)/lib"; - extraPaths = with self; [ common libc.src librt.src sys.src ]; - }; + lorder = self.callPackage ./pkgs/lorder.nix { + inherit (buildPackages.netbsd) makeMinimal install; + inherit (buildPackages.buildPackages) rsync; + }; - libresolv = mkDerivation { - path = "lib/libresolv"; - version = "9.2"; - sha256 = "1am74s74mf1ynwz3p4ncjkg63f78a1zjm983q166x4sgzps15626"; - meta.platforms = lib.platforms.netbsd; - extraPaths = with self; [ libc.src ]; - }; + config = self.callPackage ./pkgs/config.nix { + inherit (buildPackages.netbsd) makeMinimal install; + inherit (buildPackages.buildPackages) rsync; + inherit (self) cksum; + }; - libm = mkDerivation { - path = "lib/libm"; - version = "9.2"; - sha256 = "1apwfr26shdmbqqnmg7hxf7bkfxw44ynqnnnghrww9bnhqdnsy92"; - SHLIBINSTALLDIR = "$(out)/lib"; - meta.platforms = lib.platforms.netbsd; - extraPaths = with self; [ sys.src ]; - }; + include = self.callPackage ./pkgs/include.nix { + inherit (buildPackages.netbsd) + makeMinimal install nbperf rpcgen; + inherit (buildPackages) stdenv; + inherit (buildPackages.buildPackages) rsync; + }; - i18n_module = mkDerivation { - path = "lib/i18n_module"; - version = "9.2"; - sha256 = "0w6y5v3binm7gf2kn7y9jja8k18rhnyl55cvvfnfipjqdxvxd9jd"; - meta.platforms = lib.platforms.netbsd; - extraPaths = with self; [ libc.src ]; - }; + sys-headers = self.callPackage ./pkgs/sys/headers.nix { + inherit (buildPackages.netbsd) + makeMinimal install tsort lorder statHook uudecode config genassym; + inherit (buildPackages.buildPackages) rsync; + }; - csu = mkDerivation { - path = "lib/csu"; - version = "9.2"; - sha256 = "0al5jfazvhlzn9hvmnrbchx4d0gm282hq5gp4xs2zmj9ycmf6d03"; - meta.platforms = lib.platforms.netbsd; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install mandoc groff flex - byacc genassym gencat lorder tsort statHook rsync - ]; - buildInputs = with self; [ headers ]; - extraPaths = with self; [ sys.src ld_elf_so.src ]; - }; + libutil = self.callPackage ./pkgs/libutil.nix { + inherit (self) libc sys; + }; - ld_elf_so = mkDerivation { - path = "libexec/ld.elf_so"; - version = "9.2"; - sha256 = "0ia9mqzdljly0vqfwflm5mzz55k7qsr4rw2bzhivky6k30vgirqa"; - meta.platforms = lib.platforms.netbsd; - LIBC_PIC = "${self.libc}/lib/libc_pic.a"; - # Hack to prevent a symlink being installed here for compatibility. - SHLINKINSTALLDIR = "/usr/libexec"; - USE_FORT = "yes"; - makeFlags = defaultMakeFlags ++ [ "BINDIR=$(out)/libexec" "CLIBOBJ=${self.libc}/lib" ]; - extraPaths = with self; [ libc.src ] ++ libc.extraPaths; - }; + libpthread-headers = self.callPackage ./pkgs/libpthread/headers.nix { }; - _mainLibcExtraPaths = with self; [ - common i18n_module.src sys.src - ld_elf_so.src libpthread.src libm.src libresolv.src - librpcsvc.src libutil.src librt.src libcrypt.src - ]; + csu = self.callPackage ./pkgs/csu.nix { + inherit (self) headers sys ld_elf_so; + inherit (buildPackages.netbsd) + netbsdSetupHook + makeMinimal + install + genassym gencat lorder tsort statHook; + inherit (buildPackages.buildPackages) rsync; + }; - libc = mkDerivation { - path = "lib/libc"; - version = "9.2"; - sha256 = "1y9c13igg0kai07sqvf9cm6yqmd8lhfd8hq3q7biilbgs1l99as3"; - USE_FORT = "yes"; - MKPROFILE = "no"; - extraPaths = with self; _mainLibcExtraPaths ++ [ - (fetchNetBSD "external/bsd/jemalloc" "9.2" "0cq704swa0h2yxv4gc79z2lwxibk9k7pxh3q5qfs7axx3jx3n8kb") - ]; - nativeBuildInputs = with buildPackages.netbsd; [ - bsdSetupHook netbsdSetupHook - makeMinimal - install mandoc groff flex - byacc genassym gencat lorder tsort statHook rsync rpcgen + _mainLibcExtraPaths = with self; [ + common i18n_module.src sys.src + ld_elf_so.src libpthread.src libm.src libresolv.src + librpcsvc.src libutil.src librt.src libcrypt.src ]; - buildInputs = with self; [ headers csu ]; - env.NIX_CFLAGS_COMPILE = "-B${self.csu}/lib -fcommon"; - meta.platforms = lib.platforms.netbsd; - SHLIBINSTALLDIR = "$(out)/lib"; - MKPICINSTALL = "yes"; - NLSDIR = "$(out)/share/nls"; - makeFlags = defaultMakeFlags ++ [ "FILESDIR=$(out)/var/db"]; - postInstall = '' - pushd ${self.headers} - find . -type d -exec mkdir -p $out/\{} \; - find . \( -type f -o -type l \) -exec cp -pr \{} $out/\{} \; - popd - - pushd ${self.csu} - find . -type d -exec mkdir -p $out/\{} \; - find . \( -type f -o -type l \) -exec cp -pr \{} $out/\{} \; - popd - - NIX_CFLAGS_COMPILE+=" -B$out/lib" - NIX_CFLAGS_COMPILE+=" -I$out/include" - NIX_LDFLAGS+=" -L$out/lib" - - make -C $BSDSRCDIR/lib/libpthread $makeFlags - make -C $BSDSRCDIR/lib/libpthread $makeFlags install - - make -C $BSDSRCDIR/lib/libm $makeFlags - make -C $BSDSRCDIR/lib/libm $makeFlags install - - make -C $BSDSRCDIR/lib/libresolv $makeFlags - make -C $BSDSRCDIR/lib/libresolv $makeFlags install - - make -C $BSDSRCDIR/lib/librpcsvc $makeFlags - make -C $BSDSRCDIR/lib/librpcsvc $makeFlags install - make -C $BSDSRCDIR/lib/i18n_module $makeFlags - make -C $BSDSRCDIR/lib/i18n_module $makeFlags install - - make -C $BSDSRCDIR/lib/libutil $makeFlags - make -C $BSDSRCDIR/lib/libutil $makeFlags install - - make -C $BSDSRCDIR/lib/librt $makeFlags - make -C $BSDSRCDIR/lib/librt $makeFlags install - - make -C $BSDSRCDIR/lib/libcrypt $makeFlags - make -C $BSDSRCDIR/lib/libcrypt $makeFlags install - ''; - inherit (self.librt) postPatch; - }; - # - # END LIBRARIES - # - - # - # START MISCELLANEOUS - # - dict = mkDerivation { - path = "share/dict"; - noCC = true; - version = "9.2"; - sha256 = "0svfc0byk59ri37pyjslv4c4rc7zw396r73mr593i78d39q5g3ad"; - makeFlags = defaultMakeFlags ++ [ "BINDIR=$(out)/share" ]; - }; - - misc = mkDerivation { - path = "share/misc"; - noCC = true; - version = "9.2"; - sha256 = "1j2cdssdx6nncv8ffj7f7ybl7m9hadjj8vm8611skqdvxnjg6nbc"; - makeFlags = defaultMakeFlags ++ [ "BINDIR=$(out)/share" ]; - }; - - man = mkDerivation { - path = "share/man"; - noCC = true; - version = "9.2"; - sha256 = "1l4lmj4kmg8dl86x94sr45w0xdnkz8dn4zjx0ipgr9bnq98663zl"; - # man0 generates a man.pdf using ps2pdf, but doesn't install it later, - # so we can avoid the dependency on ghostscript - postPatch = '' - substituteInPlace $COMPONENT_PATH/man0/Makefile --replace "ps2pdf" "echo noop " - ''; - makeFlags = defaultMakeFlags ++ [ - "FILESDIR=$(out)/share" - "MKRUMP=no" # would require to have additional path sys/rump/share/man - ]; - }; - # - # END MISCELLANEOUS - # + libc = self.callPackage ./pkgs/libc.nix { + inherit (self) headers csu librt; + inherit (buildPackages.netbsd) + netbsdSetupHook + makeMinimal + install + genassym gencat lorder tsort statHook rpcgen; + inherit (buildPackages.buildPackages) rsync; + }; -}); + })); } diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/cksum.nix b/pkgs/os-specific/bsd/netbsd/pkgs/cksum.nix new file mode 100644 index 0000000000000..a2ec387501ae1 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/cksum.nix @@ -0,0 +1,8 @@ +{ lib, mkDerivation }: + +mkDerivation { + path = "usr.bin/cksum"; + version = "9.2"; + sha256 = "0msfhgyvh5c2jmc6qjnf12c378dhw32ffsl864qz4rdb2b98rfcq"; + meta.platforms = lib.platforms.netbsd; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/column.nix b/pkgs/os-specific/bsd/netbsd/pkgs/column.nix new file mode 100644 index 0000000000000..f3cebfa9ab261 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/column.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation { + path = "usr.bin/column"; + version = "9.2"; + sha256 = "0r6b0hjn5ls3j3sv6chibs44fs32yyk2cg8kh70kb4cwajs4ifyl"; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/common.nix b/pkgs/os-specific/bsd/netbsd/pkgs/common.nix new file mode 100644 index 0000000000000..464fc1c9e0c26 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/common.nix @@ -0,0 +1,3 @@ +{ fetchNetBSD }: + +fetchNetBSD "common" "9.2" "1pfylz9r3ap5wnwwbwczbfjb1m5qdyspzbnmxmcdkpzz2zgj64b9" diff --git a/pkgs/os-specific/bsd/netbsd/compat-cxx-safe-header.patch b/pkgs/os-specific/bsd/netbsd/pkgs/compat/compat-cxx-safe-header.patch similarity index 100% rename from pkgs/os-specific/bsd/netbsd/compat-cxx-safe-header.patch rename to pkgs/os-specific/bsd/netbsd/pkgs/compat/compat-cxx-safe-header.patch diff --git a/pkgs/os-specific/bsd/netbsd/compat-dont-configure-twice.patch b/pkgs/os-specific/bsd/netbsd/pkgs/compat/compat-dont-configure-twice.patch similarity index 100% rename from pkgs/os-specific/bsd/netbsd/compat-dont-configure-twice.patch rename to pkgs/os-specific/bsd/netbsd/pkgs/compat/compat-dont-configure-twice.patch diff --git a/pkgs/os-specific/bsd/netbsd/compat-no-force-native.patch b/pkgs/os-specific/bsd/netbsd/pkgs/compat/compat-no-force-native.patch similarity index 100% rename from pkgs/os-specific/bsd/netbsd/compat-no-force-native.patch rename to pkgs/os-specific/bsd/netbsd/pkgs/compat/compat-no-force-native.patch diff --git a/pkgs/os-specific/bsd/netbsd/compat-setup-hook.sh b/pkgs/os-specific/bsd/netbsd/pkgs/compat/compat-setup-hook.sh similarity index 100% rename from pkgs/os-specific/bsd/netbsd/compat-setup-hook.sh rename to pkgs/os-specific/bsd/netbsd/pkgs/compat/compat-setup-hook.sh diff --git a/pkgs/os-specific/bsd/netbsd/libbsd-overlay.pc b/pkgs/os-specific/bsd/netbsd/pkgs/compat/libbsd-overlay.pc similarity index 100% rename from pkgs/os-specific/bsd/netbsd/libbsd-overlay.pc rename to pkgs/os-specific/bsd/netbsd/pkgs/compat/libbsd-overlay.pc diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/compat/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/compat/package.nix new file mode 100644 index 0000000000000..a1336ad52f6dc --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/compat/package.nix @@ -0,0 +1,120 @@ +{ lib, mkDerivation, stdenv +, zlib +, defaultMakeFlags +, coreutils +, cctools-port +, include, libc, libutil +, install +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, rsync +, fetchNetBSD +, _mainLibcExtraPaths +}: + +mkDerivation (let + version = "9.2"; + commonDeps = [ zlib ]; + in { + path = "tools/compat"; + sha256 = "1vsxg7136nlhc72vpa664vs22874xh7ila95nkmsd8crn3z3cyn0"; + inherit version; + + setupHooks = [ + ../../../../../build-support/setup-hooks/role.bash + ./compat-setup-hook.sh + ]; + + preConfigure = '' + make include/.stamp configure nbtool_config.h.in defs.mk.in + ''; + + configurePlatforms = [ "build" "host" ]; + configureFlags = [ + "--cache-file=config.cache" + ] ++ lib.optionals stdenv.hostPlatform.isMusl [ + # We include this header in our musl package only for legacy + # compatibility, and compat works fine without it (and having it + # know about sys/cdefs.h breaks packages like glib when built + # statically). + "ac_cv_header_sys_cdefs_h=no" + ]; + + nativeBuildInputs = commonDeps ++ [ + bsdSetupHook netbsdSetupHook + makeMinimal + rsync + ]; + + buildInputs = commonDeps; + + # temporarily use gnuinstall for bootstrapping + # bsdinstall will be built later + makeFlags = defaultMakeFlags ++ [ + "INSTALL=${coreutils}/bin/install" + "DATADIR=$(out)/share" + # Can't sort object files yet + "LORDER=echo" + "TSORT=cat" + # Can't process man pages yet + "MKSHARE=no" + ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ + # GNU objcopy produces broken .a libs which won't link into dependers. + # Makefiles only invoke `$OBJCOPY -x/-X`, so cctools strip works here. + "OBJCOPY=${cctools-port}/bin/strip" + ]; + RENAME = "-D"; + + passthru.tests = { netbsd-install = install; }; + + patches = [ + ./compat-cxx-safe-header.patch + ./compat-dont-configure-twice.patch + ./compat-no-force-native.patch + ]; + + preInstall = '' + makeFlagsArray+=('INSTALL_FILE=''${INSTALL} ''${COPY} ''${PRESERVE} ''${RENAME}') + makeFlagsArray+=('INSTALL_DIR=''${INSTALL} -d') + makeFlagsArray+=('INSTALL_SYMLINK=''${INSTALL} ''${SYMLINK} ''${RENAME}') + ''; + + postInstall = '' + # why aren't these installed by netbsd? + install -D compat_defs.h $out/include/compat_defs.h + install -D $BSDSRCDIR/include/cdbw.h $out/include/cdbw.h + install -D $BSDSRCDIR/sys/sys/cdbr.h $out/include/cdbr.h + install -D $BSDSRCDIR/sys/sys/featuretest.h \ + $out/include/sys/featuretest.h + install -D $BSDSRCDIR/sys/sys/md5.h $out/include/md5.h + install -D $BSDSRCDIR/sys/sys/rmd160.h $out/include/rmd160.h + install -D $BSDSRCDIR/sys/sys/sha1.h $out/include/sha1.h + install -D $BSDSRCDIR/sys/sys/sha2.h $out/include/sha2.h + install -D $BSDSRCDIR/sys/sys/queue.h $out/include/sys/queue.h + install -D $BSDSRCDIR/include/vis.h $out/include/vis.h + install -D $BSDSRCDIR/include/db.h $out/include/db.h + install -D $BSDSRCDIR/include/netconfig.h $out/include/netconfig.h + install -D $BSDSRCDIR/include/utmpx.h $out/include/utmpx.h + install -D $BSDSRCDIR/include/tzfile.h $out/include/tzfile.h + install -D $BSDSRCDIR/sys/sys/tree.h $out/include/sys/tree.h + install -D $BSDSRCDIR/include/nl_types.h $out/include/nl_types.h + install -D $BSDSRCDIR/include/stringlist.h $out/include/stringlist.h + + # Collapse includes slightly to fix dangling reference + install -D $BSDSRCDIR/common/include/rpc/types.h $out/include/rpc/types.h + sed -i '1s;^;#include "nbtool_config.h"\n;' $out/include/rpc/types.h + '' + lib.optionalString stdenv.isDarwin '' + mkdir -p $out/include/ssp + touch $out/include/ssp/ssp.h + '' + '' + mkdir -p $out/lib/pkgconfig + substitute ${./libbsd-overlay.pc} $out/lib/pkgconfig/libbsd-overlay.pc \ + --subst-var-by out $out \ + --subst-var-by version ${version} + ''; + extraPaths = [ include.src libc.src libutil.src + (fetchNetBSD "external/bsd/flex" "9.2" "0h98jpfj7vx5zh7vd7bk6b1hmzgkcb757a8j6d9zgygxxv13v43m") + (fetchNetBSD "sys/sys" "9.2" "0zawhw51klaigqqwkx0lzrx3mim2jywrc24cm7c66qsf1im9awgd") + (fetchNetBSD "common/include/rpc/types.h" "9.2" "0n2df12mlc3cbc48jxq35yzl1y7ghgpykvy7jnfh898rdhac7m9a") + ] ++ libutil.extraPaths ++ _mainLibcExtraPaths; + }) diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/config.nix b/pkgs/os-specific/bsd/netbsd/pkgs/config.nix new file mode 100644 index 0000000000000..277d70129e6f7 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/config.nix @@ -0,0 +1,18 @@ +{ mkDerivation +, bsdSetupHook, netbsdSetupHook +, makeMinimal, install, mandoc, byacc, flex, rsync +, compatIfNeeded +, cksum +}: +mkDerivation { + path = "usr.bin/config"; + version = "9.2"; + sha256 = "1yz3n4hncdkk6kp595fh2q5lg150vpqg8iw2dccydkyw4y3hgsjj"; + env.NIX_CFLAGS_COMPILE = toString [ "-DMAKE_BOOTSTRAP" ]; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal install mandoc byacc flex rsync + ]; + buildInputs = compatIfNeeded; + extraPaths = [ cksum.src ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/csu.nix b/pkgs/os-specific/bsd/netbsd/pkgs/csu.nix new file mode 100644 index 0000000000000..2d13ced6d5ed5 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/csu.nix @@ -0,0 +1,24 @@ +{ lib, mkDerivation +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, mandoc, groff, flex +, byacc, genassym, gencat, lorder, tsort, statHook, rsync +, headers +, sys +, ld_elf_so +}: + +mkDerivation { + path = "lib/csu"; + version = "9.2"; + sha256 = "0al5jfazvhlzn9hvmnrbchx4d0gm282hq5gp4xs2zmj9ycmf6d03"; + meta.platforms = lib.platforms.netbsd; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install mandoc groff flex + byacc genassym gencat lorder tsort statHook rsync + ]; + buildInputs = [ headers ]; + extraPaths = [ sys.src ld_elf_so.src ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/dict.nix b/pkgs/os-specific/bsd/netbsd/pkgs/dict.nix new file mode 100644 index 0000000000000..0d7d026dd21d2 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/dict.nix @@ -0,0 +1,9 @@ +{ mkDerivation, defaultMakeFlags }: + +mkDerivation { + path = "share/dict"; + noCC = true; + version = "9.2"; + sha256 = "0svfc0byk59ri37pyjslv4c4rc7zw396r73mr593i78d39q5g3ad"; + makeFlags = defaultMakeFlags ++ [ "BINDIR=$(out)/share" ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/fts-setup-hook.sh b/pkgs/os-specific/bsd/netbsd/pkgs/fts/fts-setup-hook.sh similarity index 100% rename from pkgs/os-specific/bsd/netbsd/fts-setup-hook.sh rename to pkgs/os-specific/bsd/netbsd/pkgs/fts/fts-setup-hook.sh diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/fts/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/fts/package.nix new file mode 100644 index 0000000000000..0393d36357f6e --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/fts/package.nix @@ -0,0 +1,41 @@ +{ mkDerivation +, bsdSetupHook, netbsdSetupHook, rsync +, compatIfNeeded +, fetchNetBSD +}: + +mkDerivation { + pname = "fts"; + path = "include/fts.h"; + sha256 = "01d4fpxvz1pgzfk5xznz5dcm0x0gdzwcsfm1h3d0xc9kc6hj2q77"; + version = "9.2"; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook rsync + ]; + propagatedBuildInputs = compatIfNeeded; + extraPaths = [ + (fetchNetBSD "lib/libc/gen/fts.c" "9.2" "1a8hmf26242nmv05ipn3ircxb0jqmmi66rh78kkyi9vjwkfl3qn7") + (fetchNetBSD "lib/libc/include/namespace.h" "9.2" "0kksr3pdwdc1cplqf5z12ih4cml6l11lqrz91f7hjjm64y7785kc") + (fetchNetBSD "lib/libc/gen/fts.3" "9.2" "1asxw0n3fhjdadwkkq3xplfgqgl3q32w1lyrvbakfa3gs0wz5zc1") + ]; + skipIncludesPhase = true; + buildPhase = '' + "$CC" -c -Iinclude -Ilib/libc/include lib/libc/gen/fts.c \ + -o lib/libc/gen/fts.o + "$AR" -rsc libfts.a lib/libc/gen/fts.o + ''; + installPhase = '' + runHook preInstall + + install -D lib/libc/gen/fts.3 $out/share/man/man3/fts.3 + install -D include/fts.h $out/include/fts.h + install -D lib/libc/include/namespace.h $out/include/namespace.h + install -D libfts.a $out/lib/libfts.a + + runHook postInstall + ''; + setupHooks = [ + ../../../../../build-support/setup-hooks/role.bash + ./fts-setup-hook.sh + ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/genassym.nix b/pkgs/os-specific/bsd/netbsd/pkgs/genassym.nix new file mode 100644 index 0000000000000..7f81a77a02dd2 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/genassym.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation { + path = "usr.bin/genassym"; + version = "9.2"; + sha256 = "1acl1dz5kvh9h5806vkz2ap95rdsz7phmynh5i3x5y7agbki030c"; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/gencat.nix b/pkgs/os-specific/bsd/netbsd/pkgs/gencat.nix new file mode 100644 index 0000000000000..411be85e91e2f --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/gencat.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation { + path = "usr.bin/gencat"; + version = "9.2"; + sha256 = "0gd463x1hg36bhr7y0xryb5jyxk0z0g7xvy8rgk82nlbnlnsbbwb"; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/getconf.nix b/pkgs/os-specific/bsd/netbsd/pkgs/getconf.nix new file mode 100644 index 0000000000000..c8483d454b877 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/getconf.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation { + path = "usr.bin/getconf"; + sha256 = "122vslz4j3h2mfs921nr2s6m078zcj697yrb75rwp2hnw3qz4s8q"; + version = "9.2"; +} diff --git a/pkgs/os-specific/bsd/netbsd/getent.patch b/pkgs/os-specific/bsd/netbsd/pkgs/getent/getent.patch similarity index 100% rename from pkgs/os-specific/bsd/netbsd/getent.patch rename to pkgs/os-specific/bsd/netbsd/pkgs/getent/getent.patch diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/getent/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/getent/package.nix new file mode 100644 index 0000000000000..7a9acb1e0a9e8 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/getent/package.nix @@ -0,0 +1,8 @@ +{ mkDerivation }: + +mkDerivation { + path = "usr.bin/getent"; + sha256 = "1qngywcmm0y7nl8h3n8brvkxq4jw63szbci3kc1q6a6ndhycbbvr"; + version = "9.2"; + patches = [ ./getent.patch ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/headers.nix b/pkgs/os-specific/bsd/netbsd/pkgs/headers.nix new file mode 100644 index 0000000000000..646e5675130bb --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/headers.nix @@ -0,0 +1,11 @@ +{ lib, symlinkJoin, include, sys-headers, libpthread-headers }: + +symlinkJoin { + name = "netbsd-headers-9.2"; + paths = [ + include + sys-headers + libpthread-headers + ]; + meta.platforms = lib.platforms.netbsd; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/i18n_module.nix b/pkgs/os-specific/bsd/netbsd/pkgs/i18n_module.nix new file mode 100644 index 0000000000000..60b091ef0b718 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/i18n_module.nix @@ -0,0 +1,9 @@ +{ lib, mkDerivation, libc }: + +mkDerivation { + path = "lib/i18n_module"; + version = "9.2"; + sha256 = "0w6y5v3binm7gf2kn7y9jja8k18rhnyl55cvvfnfipjqdxvxd9jd"; + meta.platforms = lib.platforms.netbsd; + extraPaths = [ libc.src ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/include.nix b/pkgs/os-specific/bsd/netbsd/pkgs/include.nix new file mode 100644 index 0000000000000..1ecdec90ae095 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/include.nix @@ -0,0 +1,40 @@ +{ lib, mkDerivation +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, mandoc, groff, rsync, nbperf, rpcgen +, common +, defaultMakeFlags +, stdenv +}: + +mkDerivation { + path = "include"; + version = "9.2"; + sha256 = "0nxnmj4c8s3hb9n3fpcmd0zl3l1nmhivqgi9a35sis943qvpgl9h"; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install mandoc groff rsync nbperf rpcgen + ]; + + # The makefiles define INCSDIR per subdirectory, so we have to set + # something else on the command line so those definitions aren't + # overridden. + postPatch = '' + find "$BSDSRCDIR" -name Makefile -exec \ + sed -i -E \ + -e 's_/usr/include_''${INCSDIR0}_' \ + {} \; + ''; + + # multiple header dirs, see above + postConfigure = '' + makeFlags=''${makeFlags/INCSDIR/INCSDIR0} + ''; + + extraPaths = [ common ]; + headersOnly = true; + noCC = true; + meta.platforms = lib.platforms.netbsd; + makeFlags = defaultMakeFlags ++ [ "RPCGEN_CPP=${stdenv.cc.cc}/bin/cpp" ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/install-setup-hook.sh b/pkgs/os-specific/bsd/netbsd/pkgs/install/install-setup-hook.sh similarity index 100% rename from pkgs/os-specific/bsd/netbsd/install-setup-hook.sh rename to pkgs/os-specific/bsd/netbsd/pkgs/install/install-setup-hook.sh diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/install/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/install/package.nix new file mode 100644 index 0000000000000..991517ac2d486 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/install/package.nix @@ -0,0 +1,49 @@ +{ mkDerivation +, writeShellScript +, mtree, make +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, mandoc, groff, rsync +, compatIfNeeded, fts + +}: + +# HACK: to ensure parent directories exist. This emulates GNU +# install’s -D option. No alternative seems to exist in BSD install. +let + binstall = writeShellScript "binstall" '' + set -eu + for last in "$@"; do true; done + mkdir -p $(dirname $last) + @out@/bin/xinstall "$@" + ''; +in + mkDerivation { + path = "usr.bin/xinstall"; + version = "9.2"; + sha256 = "1f6pbz3qv1qcrchdxif8p5lbmnwl8b9nq615hsd3cyl4avd5bfqj"; + extraPaths = [ mtree.src make.src ]; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + mandoc groff rsync + ]; + skipIncludesPhase = true; + buildInputs = compatIfNeeded + # fts header is needed. glibc already has this header, but musl doesn't, + # so make sure pkgsMusl.netbsd.install still builds in case you want to + # remove it! + ++ [ fts ]; + installPhase = '' + runHook preInstall + + install -D install.1 $out/share/man/man1/install.1 + install -D xinstall $out/bin/xinstall + install -D -m 0550 ${binstall} $out/bin/binstall + substituteInPlace $out/bin/binstall --subst-var out + ln -s $out/bin/binstall $out/bin/install + + runHook postInstall + ''; + setupHook = ./install-setup-hook.sh; + } diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/ld_elf_so.nix b/pkgs/os-specific/bsd/netbsd/pkgs/ld_elf_so.nix new file mode 100644 index 0000000000000..1496ad6a0e884 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/ld_elf_so.nix @@ -0,0 +1,18 @@ +{ lib +, mkDerivation +, libc +, defaultMakeFlags +}: + +mkDerivation { + path = "libexec/ld.elf_so"; + version = "9.2"; + sha256 = "0ia9mqzdljly0vqfwflm5mzz55k7qsr4rw2bzhivky6k30vgirqa"; + meta.platforms = lib.platforms.netbsd; + LIBC_PIC = "${libc}/lib/libc_pic.a"; + # Hack to prevent a symlink being installed here for compatibility. + SHLINKINSTALLDIR = "/usr/libexec"; + USE_FORT = "yes"; + makeFlags = defaultMakeFlags ++ [ "BINDIR=$(out)/libexec" "CLIBOBJ=${libc}/lib" ]; + extraPaths = [ libc.src ] ++ libc.extraPaths; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libarch.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libarch.nix new file mode 100644 index 0000000000000..93ea02f8a17c1 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libarch.nix @@ -0,0 +1,8 @@ +{ lib, mkDerivation }: + +mkDerivation { + path = "lib/libarch"; + version = "9.2"; + sha256 = "6ssenRhuSwp0Jn71ErT0PrEoCJ+cIYRztwdL4QTDZsQ="; + meta.platforms = lib.platforms.netbsd; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libc.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libc.nix new file mode 100644 index 0000000000000..ebc01a11668a6 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libc.nix @@ -0,0 +1,76 @@ +{ lib +, mkDerivation +, defaultMakeFlags +, _mainLibcExtraPaths +, fetchNetBSD +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, mandoc, groff, flex +, byacc, genassym, gencat, lorder, tsort, statHook, rsync, rpcgen +, csu, headers +, librt +}: + +mkDerivation { + path = "lib/libc"; + version = "9.2"; + sha256 = "1y9c13igg0kai07sqvf9cm6yqmd8lhfd8hq3q7biilbgs1l99as3"; + USE_FORT = "yes"; + MKPROFILE = "no"; + extraPaths = _mainLibcExtraPaths ++ [ + (fetchNetBSD "external/bsd/jemalloc" "9.2" "0cq704swa0h2yxv4gc79z2lwxibk9k7pxh3q5qfs7axx3jx3n8kb") + ]; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install mandoc groff flex + byacc genassym gencat lorder tsort statHook rsync rpcgen + ]; + buildInputs = [ headers csu ]; + env.NIX_CFLAGS_COMPILE = "-B${csu}/lib -fcommon"; + meta.platforms = lib.platforms.netbsd; + SHLIBINSTALLDIR = "$(out)/lib"; + MKPICINSTALL = "yes"; + NLSDIR = "$(out)/share/nls"; + makeFlags = defaultMakeFlags ++ [ "FILESDIR=$(out)/var/db"]; + postInstall = '' + pushd ${headers} + find . -type d -exec mkdir -p $out/\{} \; + find . \( -type f -o -type l \) -exec cp -pr \{} $out/\{} \; + popd + + pushd ${csu} + find . -type d -exec mkdir -p $out/\{} \; + find . \( -type f -o -type l \) -exec cp -pr \{} $out/\{} \; + popd + + NIX_CFLAGS_COMPILE+=" -B$out/lib" + NIX_CFLAGS_COMPILE+=" -I$out/include" + NIX_LDFLAGS+=" -L$out/lib" + + make -C $BSDSRCDIR/lib/libpthread $makeFlags + make -C $BSDSRCDIR/lib/libpthread $makeFlags install + + make -C $BSDSRCDIR/lib/libm $makeFlags + make -C $BSDSRCDIR/lib/libm $makeFlags install + + make -C $BSDSRCDIR/lib/libresolv $makeFlags + make -C $BSDSRCDIR/lib/libresolv $makeFlags install + + make -C $BSDSRCDIR/lib/librpcsvc $makeFlags + make -C $BSDSRCDIR/lib/librpcsvc $makeFlags install + + make -C $BSDSRCDIR/lib/i18n_module $makeFlags + make -C $BSDSRCDIR/lib/i18n_module $makeFlags install + + make -C $BSDSRCDIR/lib/libutil $makeFlags + make -C $BSDSRCDIR/lib/libutil $makeFlags install + + make -C $BSDSRCDIR/lib/librt $makeFlags + make -C $BSDSRCDIR/lib/librt $makeFlags install + + make -C $BSDSRCDIR/lib/libcrypt $makeFlags + make -C $BSDSRCDIR/lib/libcrypt $makeFlags install + ''; + inherit (librt) postPatch; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libcrypt.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libcrypt.nix new file mode 100644 index 0000000000000..c5f9deff589c4 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libcrypt.nix @@ -0,0 +1,9 @@ +{ lib, mkDerivation }: + +mkDerivation { + path = "lib/libcrypt"; + version = "9.2"; + sha256 = "0siqan1wdqmmhchh2n8w6a8x1abbff8n4yb6jrqxap3hqn8ay54g"; + SHLIBINSTALLDIR = "$(out)/lib"; + meta.platforms = lib.platforms.netbsd; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libcurses.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libcurses.nix new file mode 100644 index 0000000000000..2409879640a90 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libcurses.nix @@ -0,0 +1,27 @@ +{ lib, mkDerivation, stdenv +, libterminfo +, compatIfNeeded +, defaultMakeFlags +}: + +mkDerivation { + path = "lib/libcurses"; + version = "9.2"; + sha256 = "0pd0dggl3w4bv5i5h0s1wrc8hr66n4hkv3zlklarwfdhc692fqal"; + buildInputs = [ libterminfo ]; + env.NIX_CFLAGS_COMPILE = toString ([ + "-D__scanflike(a,b)=" + "-D__va_list=va_list" + "-D__warn_references(a,b)=" + ] ++ lib.optional stdenv.isDarwin "-D__strong_alias(a,b)="); + propagatedBuildInputs = compatIfNeeded; + MKDOC = "no"; # missing vfontedpr + makeFlags = defaultMakeFlags ++ [ "LIBDO.terminfo=${libterminfo}/lib" ]; + postPatch = lib.optionalString (!stdenv.isDarwin) '' + substituteInPlace $COMPONENT_PATH/printw.c \ + --replace "funopen(win, NULL, __winwrite, NULL, NULL)" NULL \ + --replace "__strong_alias(vwprintw, vw_printw)" 'extern int vwprintw(WINDOW*, const char*, va_list) __attribute__ ((alias ("vw_printw")));' + substituteInPlace $COMPONENT_PATH/scanw.c \ + --replace "__strong_alias(vwscanw, vw_scanw)" 'extern int vwscanw(WINDOW*, const char*, va_list) __attribute__ ((alias ("vw_scanw")));' + ''; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libedit.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libedit.nix new file mode 100644 index 0000000000000..eb734f34c3d49 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libedit.nix @@ -0,0 +1,26 @@ +{ lib, mkDerivation +, libterminfo, libcurses +, compatIfNeeded +, defaultMakeFlags +}: + +mkDerivation { + path = "lib/libedit"; + version = "9.2"; + sha256 = "1wqhngraxwqk4jgrf5f18jy195yrp7c06n1gf31pbplq79mg1bcj"; + buildInputs = [ libterminfo libcurses ]; + propagatedBuildInputs = compatIfNeeded; + SHLIBINSTALLDIR = "$(out)/lib"; + makeFlags = defaultMakeFlags ++ [ "LIBDO.terminfo=${libterminfo}/lib" ]; + postPatch = '' + sed -i '1i #undef bool_t' $COMPONENT_PATH/el.h + substituteInPlace $COMPONENT_PATH/config.h \ + --replace "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" "" + substituteInPlace $COMPONENT_PATH/readline/Makefile --replace /usr/include "$out/include" + ''; + env.NIX_CFLAGS_COMPILE = toString [ + "-D__noinline=" + "-D__scanflike(a,b)=" + "-D__va_list=va_list" + ]; + } diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libm.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libm.nix new file mode 100644 index 0000000000000..86990088adf28 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libm.nix @@ -0,0 +1,10 @@ +{ lib, mkDerivation, sys }: + +mkDerivation { + path = "lib/libm"; + version = "9.2"; + sha256 = "1apwfr26shdmbqqnmg7hxf7bkfxw44ynqnnnghrww9bnhqdnsy92"; + SHLIBINSTALLDIR = "$(out)/lib"; + meta.platforms = lib.platforms.netbsd; + extraPaths = [ sys.src ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libossaudio.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libossaudio.nix new file mode 100644 index 0000000000000..51bbc216e2046 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libossaudio.nix @@ -0,0 +1,8 @@ +{ lib, mkDerivation }: + +mkDerivation { + path = "lib/libossaudio"; + version = "9.2"; + sha256 = "16l3bfy6dcwqnklvh3x0ps8ld1y504vf57v9rx8f9adzhb797jh0"; + meta.platforms = lib.platforms.netbsd; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libpci.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libpci.nix new file mode 100644 index 0000000000000..21ca0f62fd4e4 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libpci.nix @@ -0,0 +1,11 @@ +{ lib, mkDerivation, sys }: + +mkDerivation { + pname = "libpci"; + path = "lib/libpci"; + version = "9.2"; + sha256 = "+IOEO1Bw3/H3iCp3uk3bwsFZbvCqN5Ciz70irnPl8E8="; + env.NIX_CFLAGS_COMPILE = toString [ "-I." ]; + meta.platforms = lib.platforms.netbsd; + extraPaths = [ sys.src ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/base.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/base.nix new file mode 100644 index 0000000000000..485a12837bcb4 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/base.nix @@ -0,0 +1,6 @@ +{ + path = "lib/libpthread"; + version = "9.2"; + sha256 = "0mlmc31k509dwfmx5s2x010wxjc44mr6y0cbmk30cfipqh8c962h"; +} + diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/headers.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/headers.nix new file mode 100644 index 0000000000000..3896562501fc5 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/headers.nix @@ -0,0 +1,9 @@ +{ lib, mkDerivation }: + +mkDerivation (import ./base.nix // { + pname = "libpthread-headers"; + installPhase = "includesPhase"; + dontBuild = true; + noCC = true; + meta.platforms = lib.platforms.netbsd; +}) diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/package.nix new file mode 100644 index 0000000000000..c2a0d407718e9 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libpthread/package.nix @@ -0,0 +1,15 @@ +{ lib, mkDerivation +, headers +, common, libc, librt, sys +}: + +mkDerivation (import ./base.nix // { + pname = "libpthread"; + installPhase = null; + noCC = false; + dontBuild = false; + buildInputs = [ headers ]; + SHLIBINSTALLDIR = "$(out)/lib"; + extraPaths = [ common libc.src librt.src sys.src ]; + meta.platforms = lib.platforms.netbsd; +}) diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libresolv.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libresolv.nix new file mode 100644 index 0000000000000..2427592e4aa9a --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libresolv.nix @@ -0,0 +1,9 @@ +{ lib, mkDerivation, libc }: + +mkDerivation { + path = "lib/libresolv"; + version = "9.2"; + sha256 = "1am74s74mf1ynwz3p4ncjkg63f78a1zjm983q166x4sgzps15626"; + meta.platforms = lib.platforms.netbsd; + extraPaths = [ libc.src ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/librpcsvc.nix b/pkgs/os-specific/bsd/netbsd/pkgs/librpcsvc.nix new file mode 100644 index 0000000000000..87524339e268f --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/librpcsvc.nix @@ -0,0 +1,21 @@ +{ lib +, mkDerivation +, defaultMakeFlags +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, tsort, lorder, rpcgen, statHook +}: + +mkDerivation { + path = "lib/librpcsvc"; + version = "9.2"; + sha256 = "1q34pfiyjbrgrdqm46jwrsqms49ly6z3b0xh1wg331zga900vq5n"; + makeFlags = defaultMakeFlags ++ [ "INCSDIR=$(out)/include/rpcsvc" ]; + meta.platforms = lib.platforms.netbsd; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install tsort lorder rpcgen statHook + ]; +} + diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/librt.nix b/pkgs/os-specific/bsd/netbsd/pkgs/librt.nix new file mode 100644 index 0000000000000..2ffe0787004a5 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/librt.nix @@ -0,0 +1,13 @@ +{ lib, mkDerivation, libc, headers }: + +mkDerivation { + path = "lib/librt"; + version = "9.2"; + sha256 = "07f8mpjcqh5kig5z5sp97fg55mc4dz6aa1x5g01nv2pvbmqczxc6"; + meta.platforms = lib.platforms.netbsd; + extraPaths = [ libc.src ] ++ libc.extraPaths; + postPatch = '' + sed -i 's,/usr\(/include/sys/syscall.h\),${headers}\1,g' \ + $BSDSRCDIR/lib/{libc,librt}/sys/Makefile.inc + ''; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libterminfo.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libterminfo.nix new file mode 100644 index 0000000000000..b9268cc7ba333 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libterminfo.nix @@ -0,0 +1,32 @@ +{ mkDerivation +, bsdSetupHook, netbsdSetupHook +, makeMinimal, install, tsort, lorder, mandoc, statHook, nbperf, tic, rsync +, compatIfNeeded +, fetchNetBSD +}: + +mkDerivation { + path = "lib/libterminfo"; + version = "9.2"; + sha256 = "0pq05k3dj0dfsczv07frnnji92mazmy2qqngqbx2zgqc1x251414"; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal install tsort lorder mandoc statHook nbperf tic rsync + ]; + buildInputs = compatIfNeeded; + SHLIBINSTALLDIR = "$(out)/lib"; + postPatch = '' + substituteInPlace $COMPONENT_PATH/term.c --replace /usr/share $out/share + substituteInPlace $COMPONENT_PATH/setupterm.c \ + --replace '#include ' 'void use_env(bool);' + ''; + postBuild = '' + make -C $BSDSRCDIR/share/terminfo $makeFlags BINDIR=$out/share + ''; + postInstall = '' + make -C $BSDSRCDIR/share/terminfo $makeFlags BINDIR=$out/share install + ''; + extraPaths = [ + (fetchNetBSD "share/terminfo" "9.2" "1vh9rl4w8118a9qdpblfxmv1wkpm83rm9gb4rzz5bpm56i6d7kk7") + ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/libutil.nix b/pkgs/os-specific/bsd/netbsd/pkgs/libutil.nix new file mode 100644 index 0000000000000..4aaf8f0e7ab63 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/libutil.nix @@ -0,0 +1,21 @@ +{ mkDerivation +, common, libc, sys +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, byacc, install, tsort, lorder, mandoc, statHook, rsync +, headers +}: + +mkDerivation { + path = "lib/libutil"; + version = "9.2"; + sha256 = "02gm5a5zhh8qp5r5q5r7x8x6x50ir1i0ncgsnfwh1vnrz6mxbq7z"; + extraPaths = [ common libc.src sys.src ]; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + byacc install tsort lorder mandoc statHook rsync + ]; + buildInputs = [ headers ]; + SHLIBINSTALLDIR = "$(out)/lib"; +} diff --git a/pkgs/os-specific/bsd/netbsd/locale.patch b/pkgs/os-specific/bsd/netbsd/pkgs/locale/locale.patch similarity index 100% rename from pkgs/os-specific/bsd/netbsd/locale.patch rename to pkgs/os-specific/bsd/netbsd/pkgs/locale/locale.patch diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/locale/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/locale/package.nix new file mode 100644 index 0000000000000..3c61e8517b35b --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/locale/package.nix @@ -0,0 +1,9 @@ +{ mkDerivation }: + +mkDerivation { + path = "usr.bin/locale"; + version = "9.2"; + sha256 = "0kk6v9k2bygq0wf9gbinliqzqpzs9bgxn0ndyl2wcv3hh2bmsr9p"; + patches = [ ./locale.patch ]; + env.NIX_CFLAGS_COMPILE = "-DYESSTR=__YESSTR -DNOSTR=__NOSTR"; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/lorder.nix b/pkgs/os-specific/bsd/netbsd/pkgs/lorder.nix new file mode 100644 index 0000000000000..d3109601382a0 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/lorder.nix @@ -0,0 +1,16 @@ +{ mkDerivation +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, mandoc, groff, rsync +}: + +mkDerivation { + path = "usr.bin/lorder"; + version = "9.2"; + sha256 = "0rjf9blihhm0n699vr2bg88m4yjhkbxh6fxliaay3wxkgnydjwn2"; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install mandoc groff rsync + ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/make.nix b/pkgs/os-specific/bsd/netbsd/pkgs/make.nix new file mode 100644 index 0000000000000..dcd80ef004678 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/make.nix @@ -0,0 +1,60 @@ +{ lib, mkDerivation, fetchNetBSD, stdenv }: + +mkDerivation { + path = "usr.bin/make"; + sha256 = "0vi73yicbmbp522qzqvd979cx6zm5jakhy77xh73c1kygf8klccs"; + version = "9.2"; + + postPatch = '' + substituteInPlace $BSDSRCDIR/share/mk/bsd.doc.mk \ + --replace '-o ''${DOCOWN}' "" \ + --replace '-g ''${DOCGRP}' "" + for mk in $BSDSRCDIR/share/mk/bsd.inc.mk $BSDSRCDIR/share/mk/bsd.kinc.mk; do + substituteInPlace $mk \ + --replace '-o ''${BINOWN}' "" \ + --replace '-g ''${BINGRP}' "" + done + substituteInPlace $BSDSRCDIR/share/mk/bsd.kmodule.mk \ + --replace '-o ''${KMODULEOWN}' "" \ + --replace '-g ''${KMODULEGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.lib.mk \ + --replace '-o ''${LIBOWN}' "" \ + --replace '-g ''${LIBGRP}' "" \ + --replace '-o ''${DEBUGOWN}' "" \ + --replace '-g ''${DEBUGGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.lua.mk \ + --replace '-o ''${LIBOWN}' "" \ + --replace '-g ''${LIBGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.man.mk \ + --replace '-o ''${MANOWN}' "" \ + --replace '-g ''${MANGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.nls.mk \ + --replace '-o ''${NLSOWN}' "" \ + --replace '-g ''${NLSGRP}' "" + substituteInPlace $BSDSRCDIR/share/mk/bsd.prog.mk \ + --replace '-o ''${BINOWN}' "" \ + --replace '-g ''${BINGRP}' "" \ + --replace '-o ''${RUMPBINOWN}' "" \ + --replace '-g ''${RUMPBINGRP}' "" \ + --replace '-o ''${DEBUGOWN}' "" \ + --replace '-g ''${DEBUGGRP}' "" + + # make needs this to pick up our sys make files + export NIX_CFLAGS_COMPILE+=" -D_PATH_DEFSYSPATH=\"$out/share/mk\"" + + substituteInPlace $BSDSRCDIR/share/mk/bsd.lib.mk \ + --replace '_INSTRANLIB=''${empty(PRESERVE):?-a "''${RANLIB} -t":}' '_INSTRANLIB=' + substituteInPlace $BSDSRCDIR/share/mk/bsd.kinc.mk \ + --replace /bin/rm rm + '' + lib.optionalString stdenv.isDarwin '' + substituteInPlace $BSDSRCDIR/share/mk/bsd.sys.mk \ + --replace '-Wl,--fatal-warnings' "" \ + --replace '-Wl,--warn-shared-textrel' "" + ''; + postInstall = '' + make -C $BSDSRCDIR/share/mk FILESDIR=$out/share/mk install + ''; + extraPaths = [ + (fetchNetBSD "share/mk" "9.2" "0w9x77cfnm6zwy40slradzi0ip9gz80x6lk7pvnlxzsr2m5ra5sy") + ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/makeMinimal.nix b/pkgs/os-specific/bsd/netbsd/pkgs/makeMinimal.nix new file mode 100644 index 0000000000000..18655b3bf863e --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/makeMinimal.nix @@ -0,0 +1,43 @@ +{ mkDerivation +, bsdSetupHook, netbsdSetupHook, rsync +, make +}: + +mkDerivation { + path = "tools/make"; + sha256 = "0fh0nrnk18m613m5blrliq2aydciv51qhc0ihsj4k63incwbk90n"; + version = "9.2"; + + buildInputs = []; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook rsync + ]; + + skipIncludesPhase = true; + + postPatch = '' + patchShebangs $COMPONENT_PATH/configure + ${make.postPatch} + ''; + + buildPhase = '' + runHook preBuild + + sh ./buildmake.sh + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + install -D nbmake $out/bin/nbmake + ln -s $out/bin/nbmake $out/bin/make + mkdir -p $out/share + cp -r $BSDSRCDIR/share/mk $out/share/mk + + runHook postInstall + ''; + + extraPaths = [ make.src ] ++ make.extraPaths; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/man.nix b/pkgs/os-specific/bsd/netbsd/pkgs/man.nix new file mode 100644 index 0000000000000..bce5bcee66946 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/man.nix @@ -0,0 +1,17 @@ +{ mkDerivation, defaultMakeFlags }: + +mkDerivation { + path = "share/man"; + noCC = true; + version = "9.2"; + sha256 = "1l4lmj4kmg8dl86x94sr45w0xdnkz8dn4zjx0ipgr9bnq98663zl"; + # man0 generates a man.pdf using ps2pdf, but doesn't install it later, + # so we can avoid the dependency on ghostscript + postPatch = '' + substituteInPlace $COMPONENT_PATH/man0/Makefile --replace "ps2pdf" "echo noop " + ''; + makeFlags = defaultMakeFlags ++ [ + "FILESDIR=$(out)/share" + "MKRUMP=no" # would require to have additional path sys/rump/share/man + ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/misc.nix b/pkgs/os-specific/bsd/netbsd/pkgs/misc.nix new file mode 100644 index 0000000000000..7f96f4d1495ad --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/misc.nix @@ -0,0 +1,9 @@ +{ mkDerivation, defaultMakeFlags }: + +mkDerivation { + path = "share/misc"; + noCC = true; + version = "9.2"; + sha256 = "1j2cdssdx6nncv8ffj7f7ybl7m9hadjj8vm8611skqdvxnjg6nbc"; + makeFlags = defaultMakeFlags ++ [ "BINDIR=$(out)/share" ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/mkDerivation.nix b/pkgs/os-specific/bsd/netbsd/pkgs/mkDerivation.nix new file mode 100644 index 0000000000000..82e8889f6cf4d --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/mkDerivation.nix @@ -0,0 +1,82 @@ +{ lib +, stdenvNoCC, stdenv +, fetchNetBSD +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, tsort, lorder +, mandoc, groff, statHook, rsync +, compatIfNeeded +, defaultMakeFlags +}: + +lib.makeOverridable (attrs: let + stdenv' = if attrs.noCC or false then stdenvNoCC else stdenv; +in stdenv'.mkDerivation ({ + pname = "${attrs.pname or (baseNameOf attrs.path)}-netbsd"; + inherit (attrs) version; + src = fetchNetBSD attrs.path attrs.version attrs.sha256; + + extraPaths = [ ]; + + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install tsort lorder mandoc groff statHook rsync + ]; + buildInputs = compatIfNeeded; + + HOST_SH = stdenv'.shell; + + MACHINE_ARCH = { + i486 = "i386"; + i586 = "i386"; + i686 = "i386"; + }.${stdenv'.hostPlatform.parsed.cpu.name} + or stdenv'.hostPlatform.parsed.cpu.name; + + MACHINE = { + x86_64 = "amd64"; + aarch64 = "evbarm64"; + i486 = "i386"; + i586 = "i386"; + i686 = "i386"; + }.${stdenv'.hostPlatform.parsed.cpu.name} + or stdenv'.hostPlatform.parsed.cpu.name; + + COMPONENT_PATH = attrs.path; + + makeFlags = defaultMakeFlags; + + strictDeps = true; + + meta = with lib; { + maintainers = with maintainers; [ matthewbauer qyliss ]; + platforms = platforms.unix; + license = licenses.bsd2; + }; + +} // lib.optionalAttrs stdenv'.hasCC { + # TODO should CC wrapper set this? + CPP = "${stdenv'.cc.targetPrefix}cpp"; +} // lib.optionalAttrs stdenv'.isDarwin { + MKRELRO = "no"; +} // lib.optionalAttrs (stdenv'.cc.isClang or false) { + HAVE_LLVM = lib.versions.major (lib.getVersion stdenv'.cc.cc); +} // lib.optionalAttrs (stdenv'.cc.isGNU or false) { + HAVE_GCC = lib.versions.major (lib.getVersion stdenv'.cc.cc); +} // lib.optionalAttrs (stdenv'.isx86_32) { + USE_SSP = "no"; +} // lib.optionalAttrs (attrs.headersOnly or false) { + installPhase = "includesPhase"; + dontBuild = true; +} // attrs // { + # Files that use NetBSD-specific macros need to have nbtool_config.h + # included ahead of them on non-NetBSD platforms. + postPatch = lib.optionalString (!stdenv'.hostPlatform.isNetBSD) '' + set +e + grep -Zlr "^__RCSID + ^__BEGIN_DECLS" $COMPONENT_PATH | xargs -0r grep -FLZ nbtool_config.h | + xargs -0tr sed -i '0,/^#/s//#include \n\0/' + set -e + '' + attrs.postPatch or ""; +})) diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/mknod.nix b/pkgs/os-specific/bsd/netbsd/pkgs/mknod.nix new file mode 100644 index 0000000000000..5c4c172e40a7d --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/mknod.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation { + path = "sbin/mknod"; + version = "9.2"; + sha256 = "1d9369shzwgixz3nph991i8q5vk7hr04py3n9avbfbhzy4gndqs2"; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/mtree.nix b/pkgs/os-specific/bsd/netbsd/pkgs/mtree.nix new file mode 100644 index 0000000000000..723da3ad891bc --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/mtree.nix @@ -0,0 +1,8 @@ +{ mkDerivation, mknod }: + +mkDerivation { + path = "usr.sbin/mtree"; + version = "9.2"; + sha256 = "04p7w540vz9npvyb8g8hcf2xa05phn1y88hsyrcz3vwanvpc0yv9"; + extraPaths = [ mknod.src ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/nbperf.nix b/pkgs/os-specific/bsd/netbsd/pkgs/nbperf.nix new file mode 100644 index 0000000000000..02ce7cf6ce5eb --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/nbperf.nix @@ -0,0 +1,8 @@ +{ mkDerivation }: + +mkDerivation { + path = "usr.bin/nbperf"; + version = "9.2"; + sha256 = "1nxc302vgmjhm3yqdivqyfzslrg0vjpbss44s74rcryrl19mma9r"; +} + diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/netbsdSetupHook/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/netbsdSetupHook/package.nix new file mode 100644 index 0000000000000..e80571f2bf9a2 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/netbsdSetupHook/package.nix @@ -0,0 +1,5 @@ +{ makeSetupHook }: + +makeSetupHook { + name = "netbsd-setup-hook"; + } ./setup-hook.sh diff --git a/pkgs/os-specific/bsd/netbsd/setup-hook.sh b/pkgs/os-specific/bsd/netbsd/pkgs/netbsdSetupHook/setup-hook.sh similarity index 100% rename from pkgs/os-specific/bsd/netbsd/setup-hook.sh rename to pkgs/os-specific/bsd/netbsd/pkgs/netbsdSetupHook/setup-hook.sh diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/rpcgen.nix b/pkgs/os-specific/bsd/netbsd/pkgs/rpcgen.nix new file mode 100644 index 0000000000000..b1482d4dff112 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/rpcgen.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation { + path = "usr.bin/rpcgen"; + version = "9.2"; + sha256 = "1kfgfx54jg98wbg0d95p0rvf4w0302v8fz724b0bdackdsrd4988"; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/stat/hook.nix b/pkgs/os-specific/bsd/netbsd/pkgs/stat/hook.nix new file mode 100644 index 0000000000000..78186f55cd455 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/stat/hook.nix @@ -0,0 +1,14 @@ +{ makeSetupHook, writeText, stat }: + +# stat isn't in POSIX, and NetBSD stat supports a completely +# different range of flags than GNU stat, so including it in PATH +# breaks stdenv. Work around that with a hook that will point +# NetBSD's build system and NetBSD stat without including it in +# PATH. + +makeSetupHook { + name = "netbsd-stat-hook"; +} (writeText "netbsd-stat-hook-impl" '' + makeFlagsArray+=(TOOL_STAT=${stat}/bin/stat) +'') + diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/stat/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/stat/package.nix new file mode 100644 index 0000000000000..fa4d5cb3e21f6 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/stat/package.nix @@ -0,0 +1,19 @@ +{ mkDerivation +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, mandoc, groff, rsync +}: + +# Don't add this to nativeBuildInputs directly. +# Use statHook instead. See note in stat/hook.nix + +mkDerivation { + path = "usr.bin/stat"; + version = "9.2"; + sha256 = "18nqwlndfc34qbbgqx5nffil37jfq9aw663ippasfxd2hlyc106x"; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install mandoc groff rsync + ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/sys/base.nix b/pkgs/os-specific/bsd/netbsd/pkgs/sys/base.nix new file mode 100644 index 0000000000000..ba458ef5c712f --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/sys/base.nix @@ -0,0 +1,72 @@ +{ lib, mkDerivation +, include +, bsdSetupHook, netbsdSetupHook +, makeMinimal, install, tsort, lorder, statHook, rsync, uudecode, config, genassym +, defaultMakeFlags +, common +}: +{ + path = "sys"; + version = "9.2"; + sha256 = "03s18q8d9giipf05bx199fajc2qwikji0djz7hw63d2lya6bfnpj"; + + # Make the build ignore linker warnings + prePatch = '' + substituteInPlace sys/conf/Makefile.kern.inc \ + --replace "-Wa,--fatal-warnings" "" + ''; + + patches = [ + # Fix this error when building bootia32.efi and bootx64.efi: + # error: PHDR segment not covered by LOAD segment + ./no-dynamic-linker.patch + + # multiple header dirs, see above + ./sys-headers-incsdir.patch + ]; + + postPatch = + '' + substituteInPlace sys/arch/i386/stand/efiboot/Makefile.efiboot \ + --replace "-nocombreloc" "-z nocombreloc" + '' + + # multiple header dirs, see above + include.postPatch; + + CONFIG = "GENERIC"; + + propagatedBuildInputs = [ include ]; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal install tsort lorder statHook rsync uudecode config genassym + ]; + + postConfigure = '' + pushd arch/$MACHINE/conf + config $CONFIG + popd + '' + # multiple header dirs, see above + + include.postConfigure; + + makeFlags = defaultMakeFlags ++ [ "FIRMWAREDIR=$(out)/libdata/firmware" ]; + hardeningDisable = [ "pic" ]; + MKKMOD = "no"; + env.NIX_CFLAGS_COMPILE = toString [ + "-Wno-error=array-parameter" + "-Wno-error=array-bounds" + "-Wa,--no-warn" + ]; + + postBuild = '' + make -C arch/$MACHINE/compile/$CONFIG $makeFlags + ''; + + postInstall = '' + cp arch/$MACHINE/compile/$CONFIG/netbsd $out + ''; + + meta.platforms = lib.platforms.netbsd; + extraPaths = [ common ]; + +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/sys/headers.nix b/pkgs/os-specific/bsd/netbsd/pkgs/sys/headers.nix new file mode 100644 index 0000000000000..a3f20d772a3e7 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/sys/headers.nix @@ -0,0 +1,21 @@ +{ lib, mkDerivation +, include +, bsdSetupHook, netbsdSetupHook +, makeMinimal, install, tsort, lorder, statHook, rsync, uudecode, config, genassym +, defaultMakeFlags +, common +}: +let + base = import ./base.nix { + inherit + lib mkDerivation include bsdSetupHook netbsdSetupHook makeMinimal install + tsort lorder statHook rsync uudecode config genassym defaultMakeFlags + common; + }; +in + mkDerivation (base // { + pname = "sys-headers"; + installPhase = "includesPhase"; + dontBuild = true; + noCC = true; + }) diff --git a/pkgs/os-specific/bsd/netbsd/no-dynamic-linker.patch b/pkgs/os-specific/bsd/netbsd/pkgs/sys/no-dynamic-linker.patch similarity index 100% rename from pkgs/os-specific/bsd/netbsd/no-dynamic-linker.patch rename to pkgs/os-specific/bsd/netbsd/pkgs/sys/no-dynamic-linker.patch diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/sys/package.nix b/pkgs/os-specific/bsd/netbsd/pkgs/sys/package.nix new file mode 100644 index 0000000000000..87031a50346ea --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/sys/package.nix @@ -0,0 +1,21 @@ +{ lib, mkDerivation +, include +, bsdSetupHook, netbsdSetupHook +, makeMinimal, install, tsort, lorder, statHook, rsync, uudecode, config, genassym +, defaultMakeFlags +, common +}: +let + base = import ./base.nix { + inherit + lib mkDerivation include bsdSetupHook netbsdSetupHook makeMinimal install + tsort lorder statHook rsync uudecode config genassym defaultMakeFlags + common; + }; +in + mkDerivation (base // { + pname = "sys"; + installPhase = null; + noCC = false; + dontBuild = false; + }) diff --git a/pkgs/os-specific/bsd/netbsd/sys-headers-incsdir.patch b/pkgs/os-specific/bsd/netbsd/pkgs/sys/sys-headers-incsdir.patch similarity index 100% rename from pkgs/os-specific/bsd/netbsd/sys-headers-incsdir.patch rename to pkgs/os-specific/bsd/netbsd/pkgs/sys/sys-headers-incsdir.patch diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/tic.nix b/pkgs/os-specific/bsd/netbsd/pkgs/tic.nix new file mode 100644 index 0000000000000..2a7e3644b6be9 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/tic.nix @@ -0,0 +1,28 @@ +{ mkDerivation +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, mandoc, groff, nbperf, rsync +, compatIfNeeded +, defaultMakeFlags +, libterminfo +, fetchNetBSD +}: + +mkDerivation { + path = "tools/tic"; + version = "9.2"; + sha256 = "092y7db7k4kh2jq8qc55126r5qqvlb8lq8mhmy5ipbi36hwb4zrz"; + HOSTPROG = "tic"; + buildInputs = compatIfNeeded; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install mandoc groff nbperf rsync + ]; + makeFlags = defaultMakeFlags ++ [ "TOOLDIR=$(out)" ]; + extraPaths = [ + libterminfo.src + (fetchNetBSD "usr.bin/tic" "9.2" "1mwdfg7yx1g43ss378qsgl5rqhsxskqvsd2mqvrn38qw54i8v5i1") + (fetchNetBSD "tools/Makefile.host" "9.2" "15b4ab0n36lqj00j5lz2xs83g7l8isk3wx1wcapbrn66qmzz2sxy") + ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/tsort.nix b/pkgs/os-specific/bsd/netbsd/pkgs/tsort.nix new file mode 100644 index 0000000000000..334eccc64c551 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/tsort.nix @@ -0,0 +1,16 @@ +{ mkDerivation +, bsdSetupHook, netbsdSetupHook +, makeMinimal +, install, mandoc, groff, rsync +}: + +mkDerivation { + path = "usr.bin/tsort"; + version = "9.2"; + sha256 = "1dqvf9gin29nnq3c4byxc7lfd062pg7m84843zdy6n0z63hnnwiq"; + nativeBuildInputs = [ + bsdSetupHook netbsdSetupHook + makeMinimal + install mandoc groff rsync + ]; +} diff --git a/pkgs/os-specific/bsd/netbsd/pkgs/uudecode.nix b/pkgs/os-specific/bsd/netbsd/pkgs/uudecode.nix new file mode 100644 index 0000000000000..dac9674f9d6f3 --- /dev/null +++ b/pkgs/os-specific/bsd/netbsd/pkgs/uudecode.nix @@ -0,0 +1,10 @@ +{ lib, mkDerivation, stdenv }: + +mkDerivation { + path = "usr.bin/uudecode"; + version = "9.2"; + sha256 = "00a3zmh15pg4vx6hz0kaa5mi8d2b1sj4h512d7p6wbvxq6mznwcn"; + env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isLinux "-DNO_BASE64"; + NIX_LDFLAGS = lib.optional stdenv.isDarwin "-lresolv"; +} +