Merge pull request #299347 from obsidiansystems/freebsd-by-name
FreeBSD: Use separate files for packages
This commit is contained in:
commit
48020a2121
48 changed files with 1017 additions and 867 deletions
|
@ -1,10 +1,7 @@
|
||||||
{ stdenv, lib, stdenvNoCC
|
{ stdenv, lib, stdenvNoCC
|
||||||
, makeScopeWithSplicing', generateSplicesForMkScope
|
, makeScopeWithSplicing', generateSplicesForMkScope
|
||||||
, buildPackages
|
, buildPackages
|
||||||
, bsdSetupHook, makeSetupHook
|
, fetchgit, fetchzip
|
||||||
, fetchgit, fetchzip, coreutils, groff, mandoc, byacc, flex, which, m4, gawk, substituteAll, runtimeShell
|
|
||||||
, zlib, expat, libmd
|
|
||||||
, runCommand, writeShellScript, writeText, symlinkJoin
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -20,57 +17,12 @@ let
|
||||||
sha256 = "14nhk0kls83xfb64d5xy14vpi6k8laswjycjg80indq9pkcr2rlv";
|
sha256 = "14nhk0kls83xfb64d5xy14vpi6k8laswjycjg80indq9pkcr2rlv";
|
||||||
};
|
};
|
||||||
|
|
||||||
freebsdSetupHook = makeSetupHook {
|
|
||||||
name = "freebsd-setup-hook";
|
|
||||||
} ./setup-hook.sh;
|
|
||||||
|
|
||||||
mkBsdArch = stdenv': {
|
|
||||||
x86_64 = "amd64";
|
|
||||||
aarch64 = "arm64";
|
|
||||||
i486 = "i386";
|
|
||||||
i586 = "i386";
|
|
||||||
i686 = "i386";
|
|
||||||
}.${stdenv'.hostPlatform.parsed.cpu.name}
|
|
||||||
or stdenv'.hostPlatform.parsed.cpu.name;
|
|
||||||
|
|
||||||
install-wrapper = ''
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
args=()
|
|
||||||
declare -i path_args=0
|
|
||||||
|
|
||||||
while (( $# )); do
|
|
||||||
if (( $# == 1 )); then
|
|
||||||
if (( path_args > 1)) || [[ "$1" = */ ]]; then
|
|
||||||
mkdir -p "$1"
|
|
||||||
else
|
|
||||||
mkdir -p "$(dirname "$1")"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
case $1 in
|
|
||||||
-C) ;;
|
|
||||||
-o | -g) shift ;;
|
|
||||||
-s) ;;
|
|
||||||
-m | -l)
|
|
||||||
# handle next arg so not counted as path arg
|
|
||||||
args+=("$1" "$2")
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-*) args+=("$1") ;;
|
|
||||||
*)
|
|
||||||
path_args+=1
|
|
||||||
args+=("$1")
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
in makeScopeWithSplicing' {
|
in makeScopeWithSplicing' {
|
||||||
otherSplices = generateSplicesForMkScope "freebsd";
|
otherSplices = generateSplicesForMkScope "freebsd";
|
||||||
f = (self: let
|
f = (self: lib.packagesFromDirectoryRecursive {
|
||||||
inherit (self) mkDerivation;
|
callPackage = self.callPackage;
|
||||||
in {
|
directory = ./pkgs;
|
||||||
|
} // {
|
||||||
inherit freebsdSrc;
|
inherit freebsdSrc;
|
||||||
|
|
||||||
ports = fetchzip {
|
ports = fetchzip {
|
||||||
|
@ -83,822 +35,48 @@ in makeScopeWithSplicing' {
|
||||||
|
|
||||||
compatIfNeeded = lib.optional (!stdenvNoCC.hostPlatform.isFreeBSD) self.compat;
|
compatIfNeeded = lib.optional (!stdenvNoCC.hostPlatform.isFreeBSD) self.compat;
|
||||||
|
|
||||||
mkDerivation = lib.makeOverridable (attrs: let
|
freebsd-lib = import ./lib { inherit version; };
|
||||||
stdenv' = if attrs.noCC or false then stdenvNoCC else stdenv;
|
|
||||||
in stdenv'.mkDerivation (rec {
|
|
||||||
pname = "${attrs.pname or (baseNameOf attrs.path)}-freebsd";
|
|
||||||
inherit version;
|
|
||||||
src = runCommand "${pname}-filtered-src" {
|
|
||||||
nativeBuildInputs = [ rsync ];
|
|
||||||
} ''
|
|
||||||
for p in ${lib.concatStringsSep " " ([ attrs.path ] ++ attrs.extraPaths or [])}; do
|
|
||||||
set -x
|
|
||||||
path="$out/$p"
|
|
||||||
mkdir -p "$(dirname "$path")"
|
|
||||||
src_path="${freebsdSrc}/$p"
|
|
||||||
if [[ -d "$src_path" ]]; then src_path+=/; fi
|
|
||||||
rsync --chmod="+w" -r "$src_path" "$path"
|
|
||||||
set +x
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
extraPaths = [ ];
|
# Overridden arguments avoid cross package-set splicing issues,
|
||||||
|
# otherwise would just use implicit
|
||||||
|
# `lib.packagesFromDirectoryRecursive` auto-call.
|
||||||
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
compat = self.callPackage ./pkgs/compat/package.nix {
|
||||||
bsdSetupHook freebsdSetupHook
|
inherit stdenv;
|
||||||
makeMinimal
|
inherit (buildPackages.freebsd) makeMinimal boot-install;
|
||||||
install tsort lorder mandoc groff #statHook
|
|
||||||
];
|
|
||||||
buildInputs = with self; compatIfNeeded;
|
|
||||||
|
|
||||||
HOST_SH = stdenv'.shell;
|
|
||||||
|
|
||||||
# Since STRIP below is the flag
|
|
||||||
STRIPBIN = "${stdenv.cc.bintools.targetPrefix}strip";
|
|
||||||
|
|
||||||
makeFlags = [
|
|
||||||
"STRIP=-s" # flag to install, not command
|
|
||||||
] ++ lib.optional (!stdenv.hostPlatform.isFreeBSD) "MK_WERROR=no";
|
|
||||||
|
|
||||||
# amd64 not x86_64 for this on unlike NetBSD
|
|
||||||
MACHINE_ARCH = mkBsdArch stdenv';
|
|
||||||
|
|
||||||
MACHINE = mkBsdArch stdenv';
|
|
||||||
|
|
||||||
MACHINE_CPUARCH = MACHINE_ARCH;
|
|
||||||
|
|
||||||
COMPONENT_PATH = attrs.path or null;
|
|
||||||
|
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
maintainers = with maintainers; [ ericson2314 ];
|
|
||||||
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));
|
|
||||||
|
|
||||||
##
|
|
||||||
## START BOOTSTRAPPING
|
|
||||||
##
|
|
||||||
makeMinimal = mkDerivation rec {
|
|
||||||
inherit (self.make) path;
|
|
||||||
|
|
||||||
buildInputs = with self; [];
|
|
||||||
nativeBuildInputs = with buildPackages.netbsd; [ bsdSetupHook freebsdSetupHook ];
|
|
||||||
|
|
||||||
skipIncludesPhase = true;
|
|
||||||
|
|
||||||
makeFlags = [];
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
patchShebangs configure
|
|
||||||
${self.make.postPatch}
|
|
||||||
'';
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
runHook preBuild
|
|
||||||
|
|
||||||
sh ./make-bootstrap.sh
|
|
||||||
|
|
||||||
runHook postBuild
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
install -D bmake "$out/bin/bmake"
|
|
||||||
ln -s "$out/bin/bmake" "$out/bin/make"
|
|
||||||
mkdir -p "$out/share"
|
|
||||||
cp -r "$BSDSRCDIR/share/mk" "$out/share/mk"
|
|
||||||
find "$out/share/mk" -type f -print0 |
|
|
||||||
while IFS= read -r -d "" f; do
|
|
||||||
substituteInPlace "$f" --replace 'usr/' ""
|
|
||||||
done
|
|
||||||
substituteInPlace "$out/share/mk/bsd.symver.mk" \
|
|
||||||
--replace '/share/mk' "$out/share/mk"
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
postInstall = lib.optionalString (!stdenv.targetPlatform.isFreeBSD) ''
|
|
||||||
boot_mk="$BSDSRCDIR/tools/build/mk"
|
|
||||||
cp "$boot_mk"/Makefile.boot* "$out/share/mk"
|
|
||||||
replaced_mk="$out/share/mk.orig"
|
|
||||||
mkdir "$replaced_mk"
|
|
||||||
mv "$out"/share/mk/bsd.{lib,prog}.mk "$replaced_mk"
|
|
||||||
for m in bsd.{lib,prog}.mk; do
|
|
||||||
cp "$boot_mk/$m" "$out/share/mk"
|
|
||||||
substituteInPlace "$out/share/mk/$m" --replace '../../../share/mk' '../mk.orig'
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
extraPaths = with self; make.extraPaths;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Wrap NetBSD's install
|
csu = self.callPackage ./pkgs/csu.nix {
|
||||||
boot-install = buildPackages.writeShellScriptBin "boot-install" (install-wrapper + ''
|
inherit (buildPackages.freebsd) makeMinimal install gencat;
|
||||||
|
inherit (self) include;
|
||||||
${buildPackages.netbsd.install}/bin/xinstall "''${args[@]}"
|
|
||||||
'');
|
|
||||||
|
|
||||||
compat = mkDerivation rec {
|
|
||||||
pname = "compat";
|
|
||||||
path = "tools/build";
|
|
||||||
extraPaths = [
|
|
||||||
"lib/libc/db"
|
|
||||||
"lib/libc/stdlib" # getopt
|
|
||||||
"lib/libc/gen" # getcap
|
|
||||||
"lib/libc/locale" # rpmatch
|
|
||||||
] ++ lib.optionals stdenv.hostPlatform.isLinux [
|
|
||||||
"lib/libc/string" # strlcpy
|
|
||||||
"lib/libutil"
|
|
||||||
] ++ [
|
|
||||||
"contrib/libc-pwcache"
|
|
||||||
"contrib/libc-vis"
|
|
||||||
"sys/libkern"
|
|
||||||
"sys/kern/subr_capability.c"
|
|
||||||
|
|
||||||
# Take only individual headers, or else we will clobber native libc, etc.
|
|
||||||
|
|
||||||
"sys/rpc/types.h"
|
|
||||||
|
|
||||||
# Listed in Makekfile as INC
|
|
||||||
"include/mpool.h"
|
|
||||||
"include/ndbm.h"
|
|
||||||
"include/err.h"
|
|
||||||
"include/stringlist.h"
|
|
||||||
"include/a.out.h"
|
|
||||||
"include/nlist.h"
|
|
||||||
"include/db.h"
|
|
||||||
"include/getopt.h"
|
|
||||||
"include/nl_types.h"
|
|
||||||
"include/elf.h"
|
|
||||||
"sys/sys/ctf.h"
|
|
||||||
|
|
||||||
# Listed in Makekfile as SYSINC
|
|
||||||
|
|
||||||
"sys/sys/capsicum.h"
|
|
||||||
"sys/sys/caprights.h"
|
|
||||||
"sys/sys/imgact_aout.h"
|
|
||||||
"sys/sys/nlist_aout.h"
|
|
||||||
"sys/sys/nv.h"
|
|
||||||
"sys/sys/dnv.h"
|
|
||||||
"sys/sys/cnv.h"
|
|
||||||
|
|
||||||
"sys/sys/elf32.h"
|
|
||||||
"sys/sys/elf64.h"
|
|
||||||
"sys/sys/elf_common.h"
|
|
||||||
"sys/sys/elf_generic.h"
|
|
||||||
"sys/${mkBsdArch stdenv}/include"
|
|
||||||
] ++ lib.optionals stdenv.hostPlatform.isx86 [
|
|
||||||
"sys/x86/include"
|
|
||||||
] ++ [
|
|
||||||
|
|
||||||
"sys/sys/queue.h"
|
|
||||||
"sys/sys/md5.h"
|
|
||||||
"sys/sys/sbuf.h"
|
|
||||||
"sys/sys/tree.h"
|
|
||||||
"sys/sys/font.h"
|
|
||||||
"sys/sys/consio.h"
|
|
||||||
"sys/sys/fnv_hash.h"
|
|
||||||
|
|
||||||
"sys/crypto/chacha20/_chacha.h"
|
|
||||||
"sys/crypto/chacha20/chacha.h"
|
|
||||||
# included too, despite ".c"
|
|
||||||
"sys/crypto/chacha20/chacha.c"
|
|
||||||
|
|
||||||
"sys/fs"
|
|
||||||
"sys/ufs"
|
|
||||||
"sys/sys/disk"
|
|
||||||
|
|
||||||
"lib/libcapsicum"
|
|
||||||
"lib/libcasper"
|
|
||||||
];
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
./compat-install-dirs.patch
|
|
||||||
./compat-fix-typedefs-locations.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
preBuild = ''
|
|
||||||
NIX_CFLAGS_COMPILE+=' -I../../include -I../../sys'
|
|
||||||
|
|
||||||
cp ../../sys/${mkBsdArch stdenv}/include/elf.h ../../sys/sys
|
|
||||||
cp ../../sys/${mkBsdArch stdenv}/include/elf.h ../../sys/sys/${mkBsdArch stdenv}
|
|
||||||
'' + lib.optionalString stdenv.hostPlatform.isx86 ''
|
|
||||||
cp ../../sys/x86/include/elf.h ../../sys/x86
|
|
||||||
'';
|
|
||||||
|
|
||||||
setupHooks = [
|
|
||||||
../../../build-support/setup-hooks/role.bash
|
|
||||||
./compat-setup-hook.sh
|
|
||||||
];
|
|
||||||
|
|
||||||
# This one has an ifdefed `#include_next` that makes it annoying.
|
|
||||||
postInstall = ''
|
|
||||||
rm ''${!outputDev}/0-include/libelf.h
|
|
||||||
'';
|
|
||||||
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal
|
|
||||||
boot-install
|
|
||||||
|
|
||||||
which
|
|
||||||
];
|
|
||||||
buildInputs = [ expat zlib ];
|
|
||||||
|
|
||||||
makeFlags = [
|
|
||||||
"STRIP=-s" # flag to install, not command
|
|
||||||
"MK_WERROR=no"
|
|
||||||
"HOST_INCLUDE_ROOT=${lib.getDev stdenv.cc.libc}/include"
|
|
||||||
"INSTALL=boot-install"
|
|
||||||
];
|
|
||||||
|
|
||||||
preIncludes = ''
|
|
||||||
mkdir -p $out/{0,1}-include
|
|
||||||
cp --no-preserve=mode -r cross-build/include/common/* $out/0-include
|
|
||||||
'' + lib.optionalString stdenv.hostPlatform.isLinux ''
|
|
||||||
cp --no-preserve=mode -r cross-build/include/linux/* $out/1-include
|
|
||||||
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
|
|
||||||
cp --no-preserve=mode -r cross-build/include/darwin/* $out/1-include
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
libnetbsd = mkDerivation {
|
include = self.callPackage ./pkgs/include/package.nix {
|
||||||
path = "lib/libnetbsd";
|
inherit (buildPackages.freebsd) makeMinimal install rpcgen;
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal mandoc groff
|
|
||||||
(if stdenv.hostPlatform == stdenv.buildPlatform
|
|
||||||
then boot-install
|
|
||||||
else install)
|
|
||||||
];
|
|
||||||
patches = lib.optionals (!stdenv.hostPlatform.isFreeBSD) [
|
|
||||||
./libnetbsd-do-install.patch
|
|
||||||
#./libnetbsd-define-__va_list.patch
|
|
||||||
];
|
|
||||||
makeFlags = [
|
|
||||||
"STRIP=-s" # flag to install, not command
|
|
||||||
"MK_WERROR=no"
|
|
||||||
] ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "INSTALL=boot-install";
|
|
||||||
buildInputs = with self; compatIfNeeded;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# HACK: to ensure parent directories exist. This emulates GNU
|
install = self.callPackage ./pkgs/install.nix {
|
||||||
# install’s -D option. No alternative seems to exist in BSD install.
|
inherit (buildPackages.freebsd) makeMinimal;
|
||||||
install = let binstall = writeShellScript "binstall" (install-wrapper + ''
|
inherit (self) mtree libnetbsd;
|
||||||
|
|
||||||
@out@/bin/xinstall "''${args[@]}"
|
|
||||||
''); in mkDerivation {
|
|
||||||
path = "usr.bin/xinstall";
|
|
||||||
extraPaths = with self; [ mtree.path ];
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal mandoc groff
|
|
||||||
(if stdenv.hostPlatform == stdenv.buildPlatform
|
|
||||||
then boot-install
|
|
||||||
else install)
|
|
||||||
];
|
|
||||||
skipIncludesPhase = true;
|
|
||||||
buildInputs = with self; compatIfNeeded ++ [ libmd libnetbsd ];
|
|
||||||
makeFlags = [
|
|
||||||
"STRIP=-s" # flag to install, not command
|
|
||||||
"MK_WERROR=no"
|
|
||||||
"TESTSDIR=${builtins.placeholder "test"}"
|
|
||||||
] ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "INSTALL=boot-install";
|
|
||||||
postInstall = ''
|
|
||||||
install -D -m 0550 ${binstall} $out/bin/binstall
|
|
||||||
substituteInPlace $out/bin/binstall --subst-var out
|
|
||||||
mv $out/bin/install $out/bin/xinstall
|
|
||||||
ln -s ./binstall $out/bin/install
|
|
||||||
'';
|
|
||||||
outputs = [ "out" "man" "test" ];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sed = mkDerivation {
|
libc = self.callPackage ./pkgs/libc/package.nix {
|
||||||
path = "usr.bin/sed";
|
inherit (buildPackages.freebsd) makeMinimal install gencat rpcgen;
|
||||||
TESTSRC = "${freebsdSrc}/contrib/netbsd-tests";
|
inherit (self) csu include;
|
||||||
MK_TESTS = "no";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Don't add this to nativeBuildInputs directly. Use statHook instead.
|
libnetbsd = self.callPackage ./pkgs/libnetbsd/package.nix {
|
||||||
stat = mkDerivation {
|
inherit (buildPackages.freebsd) makeMinimal;
|
||||||
path = "usr.bin/stat";
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal install mandoc groff
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# stat isn't in POSIX, and NetBSD stat supports a completely
|
mkDerivation = self.callPackage ./pkgs/mkDerivation.nix {
|
||||||
# different range of flags than GNU stat, so including it in PATH
|
inherit stdenv;
|
||||||
# breaks stdenv. Work around that with a hook that will point
|
inherit (buildPackages.freebsd) makeMinimal install tsort;
|
||||||
# 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";
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal install mandoc groff
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
lorder = mkDerivation rec {
|
makeMinimal = self.callPackage ./pkgs/makeMinimal.nix {
|
||||||
path = "usr.bin/lorder";
|
inherit (self) make;
|
||||||
noCC = true;
|
|
||||||
dontBuild = true;
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p "$out/bin" "$man/share/man"
|
|
||||||
mv "lorder.sh" "$out/bin/lorder"
|
|
||||||
chmod +x "$out/bin/lorder"
|
|
||||||
mv "lorder.1" "$man/share/man"
|
|
||||||
'';
|
|
||||||
nativeBuildInputs = [ bsdSetupHook freebsdSetupHook ];
|
|
||||||
buildInputs = [];
|
|
||||||
outputs = [ "out" "man" ];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
##
|
|
||||||
## END BOOTSTRAPPING
|
|
||||||
##
|
|
||||||
|
|
||||||
##
|
|
||||||
## START COMMAND LINE TOOLS
|
|
||||||
##
|
|
||||||
make = mkDerivation {
|
|
||||||
path = "contrib/bmake";
|
|
||||||
version = "9.2";
|
|
||||||
postPatch = ''
|
|
||||||
# make needs this to pick up our sys make files
|
|
||||||
export NIX_CFLAGS_COMPILE+=" -D_PATH_DEFSYSPATH=\"$out/share/mk\""
|
|
||||||
|
|
||||||
'' + 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 = [ "share/mk" ]
|
|
||||||
++ lib.optional (!stdenv.hostPlatform.isFreeBSD) "tools/build/mk";
|
|
||||||
};
|
|
||||||
mtree = mkDerivation {
|
|
||||||
path = "contrib/mtree";
|
|
||||||
extraPaths = with self; [ mknod.path ];
|
|
||||||
};
|
|
||||||
|
|
||||||
mknod = mkDerivation {
|
|
||||||
path = "sbin/mknod";
|
|
||||||
};
|
|
||||||
|
|
||||||
rpcgen = mkDerivation rec {
|
|
||||||
path = "usr.bin/rpcgen";
|
|
||||||
patches = lib.optionals (stdenv.hostPlatform.libc == "glibc") [
|
|
||||||
# `WUNTRACED` is defined privately `bits/waitflags.h` in glibc.
|
|
||||||
# But instead of having a regular header guard, it has some silly
|
|
||||||
# non-modular logic. `stdlib.h` will include it if `sys/wait.h`
|
|
||||||
# hasn't yet been included (for it would first), and vice versa.
|
|
||||||
#
|
|
||||||
# The problem is that with the FreeBSD compat headers, one of
|
|
||||||
# those headers ends up included other headers...which ends up
|
|
||||||
# including the other one, this means by the first time we reach
|
|
||||||
# `#include `<bits/waitflags.h>`, both `_SYS_WAIT_H` and
|
|
||||||
# `_STDLIB_H` are already defined! Thus, we never ned up including
|
|
||||||
# `<bits/waitflags.h>` and defining `WUNTRACED`.
|
|
||||||
#
|
|
||||||
# This hacks around this by manually including `WUNTRACED` until
|
|
||||||
# the problem is fixed properly in glibc.
|
|
||||||
./rpcgen-glibc-hack.patch
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
gencat = mkDerivation {
|
|
||||||
path = "usr.bin/gencat";
|
|
||||||
};
|
|
||||||
|
|
||||||
file2c = mkDerivation {
|
|
||||||
path = "usr.bin/file2c";
|
|
||||||
MK_TESTS = "no";
|
|
||||||
};
|
|
||||||
|
|
||||||
libnv = mkDerivation {
|
|
||||||
path = "lib/libnv";
|
|
||||||
extraPaths = [
|
|
||||||
"sys/contrib/libnv"
|
|
||||||
"sys/sys"
|
|
||||||
];
|
|
||||||
MK_TESTS = "no";
|
|
||||||
};
|
|
||||||
|
|
||||||
libsbuf = mkDerivation {
|
|
||||||
path = "lib/libsbuf";
|
|
||||||
extraPaths = [
|
|
||||||
"sys/kern"
|
|
||||||
];
|
|
||||||
MK_TESTS = "no";
|
|
||||||
};
|
|
||||||
|
|
||||||
libelf = mkDerivation {
|
|
||||||
path = "lib/libelf";
|
|
||||||
extraPaths = [
|
|
||||||
"contrib/elftoolchain/libelf"
|
|
||||||
"contrib/elftoolchain/common"
|
|
||||||
"sys/sys/elf32.h"
|
|
||||||
"sys/sys/elf64.h"
|
|
||||||
"sys/sys/elf_common.h"
|
|
||||||
];
|
|
||||||
BOOTSTRAPPING = !stdenv.isFreeBSD;
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal install mandoc groff
|
|
||||||
|
|
||||||
m4
|
|
||||||
];
|
|
||||||
MK_TESTS = "no";
|
|
||||||
};
|
|
||||||
|
|
||||||
libdwarf = mkDerivation {
|
|
||||||
path = "lib/libdwarf";
|
|
||||||
extraPaths = [
|
|
||||||
"contrib/elftoolchain/libdwarf"
|
|
||||||
"contrib/elftoolchain/common"
|
|
||||||
"sys/sys/elf32.h"
|
|
||||||
"sys/sys/elf64.h"
|
|
||||||
"sys/sys/elf_common.h"
|
|
||||||
];
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal install mandoc groff
|
|
||||||
|
|
||||||
m4
|
|
||||||
];
|
|
||||||
buildInputs = with self; compatIfNeeded ++ [
|
|
||||||
libelf
|
|
||||||
];
|
|
||||||
MK_TESTS = "no";
|
|
||||||
};
|
|
||||||
|
|
||||||
uudecode = mkDerivation {
|
|
||||||
path = "usr.bin/uudecode";
|
|
||||||
MK_TESTS = "no";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkDerivation {
|
|
||||||
path = "usr.sbin/config";
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal install mandoc groff
|
|
||||||
|
|
||||||
flex byacc file2c
|
|
||||||
];
|
|
||||||
buildInputs = with self; compatIfNeeded ++ [ libnv libsbuf ];
|
|
||||||
};
|
|
||||||
##
|
|
||||||
## END COMMAND LINE TOOLS
|
|
||||||
##
|
|
||||||
|
|
||||||
##
|
|
||||||
## START HEADERS
|
|
||||||
##
|
|
||||||
include = mkDerivation {
|
|
||||||
path = "include";
|
|
||||||
|
|
||||||
extraPaths = [
|
|
||||||
"contrib/libc-vis"
|
|
||||||
"etc/mtree/BSD.include.dist"
|
|
||||||
"sys"
|
|
||||||
];
|
|
||||||
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal
|
|
||||||
install
|
|
||||||
mandoc groff rsync /*nbperf*/ rpcgen
|
|
||||||
|
|
||||||
# HACK use NetBSD's for now
|
|
||||||
buildPackages.netbsd.mtree
|
|
||||||
];
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
./no-perms-BSD.include.dist.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
# 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}_' \
|
|
||||||
{} \;
|
|
||||||
'';
|
|
||||||
|
|
||||||
makeFlags = [
|
|
||||||
"RPCGEN_CPP=${buildPackages.stdenv.cc.cc}/bin/cpp"
|
|
||||||
];
|
|
||||||
|
|
||||||
# multiple header dirs, see above
|
|
||||||
postConfigure = ''
|
|
||||||
makeFlags=''${makeFlags/INCSDIR/INCSDIR0}
|
|
||||||
'';
|
|
||||||
|
|
||||||
headersOnly = true;
|
|
||||||
|
|
||||||
MK_HESIOD = "yes";
|
|
||||||
|
|
||||||
meta.platforms = lib.platforms.freebsd;
|
|
||||||
};
|
|
||||||
|
|
||||||
##
|
|
||||||
## END HEADERS
|
|
||||||
##
|
|
||||||
|
|
||||||
csu = mkDerivation {
|
|
||||||
path = "lib/csu";
|
|
||||||
extraPaths = with self; [
|
|
||||||
"lib/Makefile.inc"
|
|
||||||
"lib/libc/include/libc_private.h"
|
|
||||||
];
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal
|
|
||||||
install
|
|
||||||
|
|
||||||
flex byacc gencat
|
|
||||||
];
|
|
||||||
buildInputs = with self; [ include ];
|
|
||||||
MK_TESTS = "no";
|
|
||||||
meta.platforms = lib.platforms.freebsd;
|
|
||||||
};
|
|
||||||
|
|
||||||
libc = mkDerivation rec {
|
|
||||||
pname = "libc";
|
|
||||||
path = "lib/libc";
|
|
||||||
extraPaths = [
|
|
||||||
"etc/group"
|
|
||||||
"etc/master.passwd"
|
|
||||||
"etc/shells"
|
|
||||||
"lib/libmd"
|
|
||||||
"lib/libutil"
|
|
||||||
"lib/msun"
|
|
||||||
"sys/kern"
|
|
||||||
"sys/libkern"
|
|
||||||
"sys/sys"
|
|
||||||
"sys/crypto/chacha20"
|
|
||||||
"include/rpcsvc"
|
|
||||||
"contrib/jemalloc"
|
|
||||||
"contrib/gdtoa"
|
|
||||||
"contrib/libc-pwcache"
|
|
||||||
"contrib/libc-vis"
|
|
||||||
"contrib/tzcode/stdtime"
|
|
||||||
|
|
||||||
# libthr
|
|
||||||
"lib/libthr"
|
|
||||||
"lib/libthread_db"
|
|
||||||
"libexec/rtld-elf"
|
|
||||||
|
|
||||||
# librpcsvc
|
|
||||||
"lib/librpcsvc"
|
|
||||||
|
|
||||||
# librt
|
|
||||||
"lib/librt"
|
|
||||||
|
|
||||||
# libcrypt
|
|
||||||
"lib/libcrypt"
|
|
||||||
"lib/libmd"
|
|
||||||
"sys/crypto/sha2"
|
|
||||||
];
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
# Hack around broken propogating MAKEFLAGS to submake, just inline logic
|
|
||||||
./libc-msun-arch-subdir.patch
|
|
||||||
|
|
||||||
# Don't force -lcompiler-rt, we don't actually call it that
|
|
||||||
./libc-no-force--lcompiler-rt.patch
|
|
||||||
|
|
||||||
# Fix extra include dir to get rpcsvc headers.
|
|
||||||
./librpcsvc-include-subdir.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
substituteInPlace $COMPONENT_PATH/Makefile --replace '.include <src.opts.mk>' ""
|
|
||||||
'';
|
|
||||||
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal
|
|
||||||
install
|
|
||||||
|
|
||||||
flex byacc gencat rpcgen
|
|
||||||
];
|
|
||||||
buildInputs = with self; [ include csu ];
|
|
||||||
env.NIX_CFLAGS_COMPILE = "-B${self.csu}/lib";
|
|
||||||
|
|
||||||
# Suppress lld >= 16 undefined version errors
|
|
||||||
# https://github.com/freebsd/freebsd-src/commit/2ba84b4bcdd6012e8cfbf8a0d060a4438623a638
|
|
||||||
env.NIX_LDFLAGS = lib.optionalString (stdenv.targetPlatform.linker == "lld") "--undefined-version";
|
|
||||||
|
|
||||||
makeFlags = [
|
|
||||||
"STRIP=-s" # flag to install, not command
|
|
||||||
# lib/libc/gen/getgrent.c has sketchy cast from `void *` to enum
|
|
||||||
"MK_WERROR=no"
|
|
||||||
];
|
|
||||||
|
|
||||||
MK_SYMVER = "yes";
|
|
||||||
MK_SSP = "yes";
|
|
||||||
MK_NLS = "yes";
|
|
||||||
MK_ICONV = "no"; # TODO make srctop
|
|
||||||
MK_NS_CACHING = "yes";
|
|
||||||
MK_INET6_SUPPORT = "yes";
|
|
||||||
MK_HESIOD = "yes";
|
|
||||||
MK_NIS = "yes";
|
|
||||||
MK_HYPERV = "yes";
|
|
||||||
MK_FP_LIBC = "yes";
|
|
||||||
|
|
||||||
MK_TCSH = "no";
|
|
||||||
MK_MALLOC_PRODUCTION = "yes";
|
|
||||||
|
|
||||||
MK_TESTS = "no";
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
pushd ${self.include}
|
|
||||||
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
|
|
||||||
|
|
||||||
sed -i -e 's| [^ ]*/libc_nonshared.a||' $out/lib/libc.so
|
|
||||||
|
|
||||||
$CC -nodefaultlibs -lgcc -shared -o $out/lib/libgcc_s.so
|
|
||||||
|
|
||||||
NIX_CFLAGS_COMPILE+=" -B$out/lib"
|
|
||||||
NIX_CFLAGS_COMPILE+=" -I$out/include"
|
|
||||||
NIX_LDFLAGS+=" -L$out/lib"
|
|
||||||
|
|
||||||
make -C $BSDSRCDIR/lib/libthr $makeFlags
|
|
||||||
make -C $BSDSRCDIR/lib/libthr $makeFlags install
|
|
||||||
|
|
||||||
make -C $BSDSRCDIR/lib/msun $makeFlags
|
|
||||||
make -C $BSDSRCDIR/lib/msun $makeFlags install
|
|
||||||
|
|
||||||
make -C $BSDSRCDIR/lib/librpcsvc $makeFlags
|
|
||||||
make -C $BSDSRCDIR/lib/librpcsvc $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
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta.platforms = lib.platforms.freebsd;
|
|
||||||
};
|
|
||||||
|
|
||||||
##
|
|
||||||
## Kernel
|
|
||||||
##
|
|
||||||
|
|
||||||
libspl = mkDerivation {
|
|
||||||
path = "cddl/lib/libspl";
|
|
||||||
extraPaths = [
|
|
||||||
"sys/contrib/openzfs/lib/libspl"
|
|
||||||
"sys/contrib/openzfs/include"
|
|
||||||
|
|
||||||
"cddl/compat/opensolaris/include"
|
|
||||||
"sys/contrib/openzfs/module/icp/include"
|
|
||||||
"sys/modules/zfs"
|
|
||||||
];
|
|
||||||
# nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
# bsdSetupHook freebsdSetupHook
|
|
||||||
# makeMinimal install mandoc groff
|
|
||||||
|
|
||||||
# flex byacc file2c
|
|
||||||
# ];
|
|
||||||
# buildInputs = with self; compatIfNeeded ++ [ libnv libsbuf ];
|
|
||||||
meta.license = lib.licenses.cddl;
|
|
||||||
};
|
|
||||||
|
|
||||||
ctfconvert = mkDerivation {
|
|
||||||
path = "cddl/usr.bin/ctfconvert";
|
|
||||||
extraPaths = [
|
|
||||||
"cddl/compat/opensolaris"
|
|
||||||
"cddl/contrib/opensolaris"
|
|
||||||
"sys/cddl/compat/opensolaris"
|
|
||||||
"sys/cddl/contrib/opensolaris"
|
|
||||||
"sys/contrib/openzfs"
|
|
||||||
];
|
|
||||||
OPENSOLARIS_USR_DISTDIR = "$(SRCTOP)/cddl/contrib/opensolaris";
|
|
||||||
OPENSOLARIS_SYS_DISTDIR = "$(SRCTOP)/sys/cddl/contrib/opensolaris";
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal install mandoc groff
|
|
||||||
|
|
||||||
# flex byacc file2c
|
|
||||||
];
|
|
||||||
buildInputs = with self; compatIfNeeded ++ [
|
|
||||||
libelf libdwarf zlib libspl
|
|
||||||
];
|
|
||||||
meta.license = lib.licenses.cddl;
|
|
||||||
};
|
|
||||||
|
|
||||||
xargs-j = substituteAll {
|
|
||||||
name = "xargs-j";
|
|
||||||
shell = runtimeShell;
|
|
||||||
src = ../xargs-j.sh;
|
|
||||||
dir = "bin";
|
|
||||||
isExecutable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
sys = mkDerivation (let
|
|
||||||
cfg = "MINIMAL";
|
|
||||||
in rec {
|
|
||||||
path = "sys";
|
|
||||||
|
|
||||||
nativeBuildInputs = with buildPackages.freebsd; [
|
|
||||||
bsdSetupHook freebsdSetupHook
|
|
||||||
makeMinimal install mandoc groff
|
|
||||||
|
|
||||||
config rpcgen file2c gawk uudecode xargs-j
|
|
||||||
#ctfconvert
|
|
||||||
];
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
./sys-gnu-date.patch
|
|
||||||
./sys-no-explicit-intrinsics-dep.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
# --dynamic-linker /red/herring is used when building the kernel.
|
|
||||||
NIX_ENFORCE_PURITY = 0;
|
|
||||||
|
|
||||||
AWK = "${buildPackages.gawk}/bin/awk";
|
|
||||||
|
|
||||||
CWARNEXTRA = "-Wno-error=shift-negative-value -Wno-address-of-packed-member";
|
|
||||||
|
|
||||||
MK_CTF = "no";
|
|
||||||
|
|
||||||
KODIR = "${builtins.placeholder "out"}/kernel";
|
|
||||||
KMODDIR = "${builtins.placeholder "out"}/kernel";
|
|
||||||
DTBDIR = "${builtins.placeholder"out"}/dbt";
|
|
||||||
|
|
||||||
KERN_DEBUGDIR = "${builtins.placeholder "out"}/debug";
|
|
||||||
KERN_DEBUGDIR_KODIR = "${KERN_DEBUGDIR}/kernel";
|
|
||||||
KERN_DEBUGDIR_KMODDIR = "${KERN_DEBUGDIR}/kernel";
|
|
||||||
|
|
||||||
skipIncludesPhase = true;
|
|
||||||
|
|
||||||
configurePhase = ''
|
|
||||||
runHook preConfigure
|
|
||||||
|
|
||||||
for f in conf/kmod.mk contrib/dev/acpica/acpica_prep.sh; do
|
|
||||||
substituteInPlace "$f" --replace 'xargs -J' 'xargs-j '
|
|
||||||
done
|
|
||||||
|
|
||||||
for f in conf/*.mk; do
|
|
||||||
substituteInPlace "$f" --replace 'KERN_DEBUGDIR}''${' 'KERN_DEBUGDIR_'
|
|
||||||
done
|
|
||||||
|
|
||||||
cd ${mkBsdArch stdenv}/conf
|
|
||||||
sed -i ${cfg} \
|
|
||||||
-e 's/WITH_CTF=1/WITH_CTF=0/' \
|
|
||||||
-e '/KDTRACE/d'
|
|
||||||
config ${cfg}
|
|
||||||
|
|
||||||
runHook postConfigure
|
|
||||||
'';
|
|
||||||
preBuild = ''
|
|
||||||
cd ../compile/${cfg}
|
|
||||||
'';
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
16
pkgs/os-specific/bsd/freebsd/lib/default.nix
Normal file
16
pkgs/os-specific/bsd/freebsd/lib/default.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{ version }:
|
||||||
|
|
||||||
|
{
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
mkBsdArch = stdenv': {
|
||||||
|
x86_64 = "amd64";
|
||||||
|
aarch64 = "arm64";
|
||||||
|
i486 = "i386";
|
||||||
|
i586 = "i386";
|
||||||
|
i686 = "i386";
|
||||||
|
}.${stdenv'.hostPlatform.parsed.cpu.name}
|
||||||
|
or stdenv'.hostPlatform.parsed.cpu.name;
|
||||||
|
|
||||||
|
install-wrapper = builtins.readFile ./install-wrapper.sh;
|
||||||
|
}
|
30
pkgs/os-specific/bsd/freebsd/lib/install-wrapper.sh
Normal file
30
pkgs/os-specific/bsd/freebsd/lib/install-wrapper.sh
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
args=()
|
||||||
|
declare -i path_args=0
|
||||||
|
|
||||||
|
while (( $# )); do
|
||||||
|
if (( $# == 1 )); then
|
||||||
|
if (( path_args > 1)) || [[ "$1" = */ ]]; then
|
||||||
|
mkdir -p "$1"
|
||||||
|
else
|
||||||
|
mkdir -p "$(dirname "$1")"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
case $1 in
|
||||||
|
-C) ;;
|
||||||
|
-o | -g) shift ;;
|
||||||
|
-s) ;;
|
||||||
|
-m | -l)
|
||||||
|
# handle next arg so not counted as path arg
|
||||||
|
args+=("$1" "$2")
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-*) args+=("$1") ;;
|
||||||
|
*)
|
||||||
|
path_args+=1
|
||||||
|
args+=("$1")
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
7
pkgs/os-specific/bsd/freebsd/pkgs/boot-install.nix
Normal file
7
pkgs/os-specific/bsd/freebsd/pkgs/boot-install.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{ buildPackages, freebsd-lib }:
|
||||||
|
|
||||||
|
# Wrap NetBSD's install
|
||||||
|
buildPackages.writeShellScriptBin "boot-install" (freebsd-lib.install-wrapper + ''
|
||||||
|
|
||||||
|
${buildPackages.netbsd.install}/bin/xinstall "''${args[@]}"
|
||||||
|
'')
|
135
pkgs/os-specific/bsd/freebsd/pkgs/compat/package.nix
Normal file
135
pkgs/os-specific/bsd/freebsd/pkgs/compat/package.nix
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
{ lib, stdenv, mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, boot-install
|
||||||
|
, which
|
||||||
|
, freebsd-lib
|
||||||
|
, expat, zlib,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (freebsd-lib) mkBsdArch;
|
||||||
|
in
|
||||||
|
|
||||||
|
mkDerivation rec {
|
||||||
|
pname = "compat";
|
||||||
|
path = "tools/build";
|
||||||
|
extraPaths = [
|
||||||
|
"lib/libc/db"
|
||||||
|
"lib/libc/stdlib" # getopt
|
||||||
|
"lib/libc/gen" # getcap
|
||||||
|
"lib/libc/locale" # rpmatch
|
||||||
|
] ++ lib.optionals stdenv.hostPlatform.isLinux [
|
||||||
|
"lib/libc/string" # strlcpy
|
||||||
|
"lib/libutil"
|
||||||
|
] ++ [
|
||||||
|
"contrib/libc-pwcache"
|
||||||
|
"contrib/libc-vis"
|
||||||
|
"sys/libkern"
|
||||||
|
"sys/kern/subr_capability.c"
|
||||||
|
|
||||||
|
# Take only individual headers, or else we will clobber native libc, etc.
|
||||||
|
|
||||||
|
"sys/rpc/types.h"
|
||||||
|
|
||||||
|
# Listed in Makekfile as INC
|
||||||
|
"include/mpool.h"
|
||||||
|
"include/ndbm.h"
|
||||||
|
"include/err.h"
|
||||||
|
"include/stringlist.h"
|
||||||
|
"include/a.out.h"
|
||||||
|
"include/nlist.h"
|
||||||
|
"include/db.h"
|
||||||
|
"include/getopt.h"
|
||||||
|
"include/nl_types.h"
|
||||||
|
"include/elf.h"
|
||||||
|
"sys/sys/ctf.h"
|
||||||
|
|
||||||
|
# Listed in Makekfile as SYSINC
|
||||||
|
|
||||||
|
"sys/sys/capsicum.h"
|
||||||
|
"sys/sys/caprights.h"
|
||||||
|
"sys/sys/imgact_aout.h"
|
||||||
|
"sys/sys/nlist_aout.h"
|
||||||
|
"sys/sys/nv.h"
|
||||||
|
"sys/sys/dnv.h"
|
||||||
|
"sys/sys/cnv.h"
|
||||||
|
|
||||||
|
"sys/sys/elf32.h"
|
||||||
|
"sys/sys/elf64.h"
|
||||||
|
"sys/sys/elf_common.h"
|
||||||
|
"sys/sys/elf_generic.h"
|
||||||
|
"sys/${mkBsdArch stdenv}/include"
|
||||||
|
] ++ lib.optionals stdenv.hostPlatform.isx86 [
|
||||||
|
"sys/x86/include"
|
||||||
|
] ++ [
|
||||||
|
|
||||||
|
"sys/sys/queue.h"
|
||||||
|
"sys/sys/md5.h"
|
||||||
|
"sys/sys/sbuf.h"
|
||||||
|
"sys/sys/tree.h"
|
||||||
|
"sys/sys/font.h"
|
||||||
|
"sys/sys/consio.h"
|
||||||
|
"sys/sys/fnv_hash.h"
|
||||||
|
|
||||||
|
"sys/crypto/chacha20/_chacha.h"
|
||||||
|
"sys/crypto/chacha20/chacha.h"
|
||||||
|
# included too, despite ".c"
|
||||||
|
"sys/crypto/chacha20/chacha.c"
|
||||||
|
|
||||||
|
"sys/fs"
|
||||||
|
"sys/ufs"
|
||||||
|
"sys/sys/disk"
|
||||||
|
|
||||||
|
"lib/libcapsicum"
|
||||||
|
"lib/libcasper"
|
||||||
|
];
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
./compat-install-dirs.patch
|
||||||
|
./compat-fix-typedefs-locations.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
preBuild = ''
|
||||||
|
NIX_CFLAGS_COMPILE+=' -I../../include -I../../sys'
|
||||||
|
|
||||||
|
cp ../../sys/${mkBsdArch stdenv}/include/elf.h ../../sys/sys
|
||||||
|
cp ../../sys/${mkBsdArch stdenv}/include/elf.h ../../sys/sys/${mkBsdArch stdenv}
|
||||||
|
'' + lib.optionalString stdenv.hostPlatform.isx86 ''
|
||||||
|
cp ../../sys/x86/include/elf.h ../../sys/x86
|
||||||
|
'';
|
||||||
|
|
||||||
|
setupHooks = [
|
||||||
|
../../../../../build-support/setup-hooks/role.bash
|
||||||
|
./compat-setup-hook.sh
|
||||||
|
];
|
||||||
|
|
||||||
|
# This one has an ifdefed `#include_next` that makes it annoying.
|
||||||
|
postInstall = ''
|
||||||
|
rm ''${!outputDev}/0-include/libelf.h
|
||||||
|
'';
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal
|
||||||
|
boot-install
|
||||||
|
|
||||||
|
which
|
||||||
|
];
|
||||||
|
buildInputs = [ expat zlib ];
|
||||||
|
|
||||||
|
makeFlags = [
|
||||||
|
"STRIP=-s" # flag to install, not command
|
||||||
|
"MK_WERROR=no"
|
||||||
|
"HOST_INCLUDE_ROOT=${lib.getDev stdenv.cc.libc}/include"
|
||||||
|
"INSTALL=boot-install"
|
||||||
|
];
|
||||||
|
|
||||||
|
preIncludes = ''
|
||||||
|
mkdir -p $out/{0,1}-include
|
||||||
|
cp --no-preserve=mode -r cross-build/include/common/* $out/0-include
|
||||||
|
'' + lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||||
|
cp --no-preserve=mode -r cross-build/include/linux/* $out/1-include
|
||||||
|
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||||
|
cp --no-preserve=mode -r cross-build/include/darwin/* $out/1-include
|
||||||
|
'';
|
||||||
|
}
|
17
pkgs/os-specific/bsd/freebsd/pkgs/config.nix
Normal file
17
pkgs/os-specific/bsd/freebsd/pkgs/config.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{ mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, install, mandoc, groff
|
||||||
|
, flex, byacc, file2c
|
||||||
|
, compatIfNeeded, libnv, libsbuf
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "usr.sbin/config";
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal install mandoc groff
|
||||||
|
|
||||||
|
flex byacc file2c
|
||||||
|
];
|
||||||
|
buildInputs = compatIfNeeded ++ [ libnv libsbuf ];
|
||||||
|
}
|
25
pkgs/os-specific/bsd/freebsd/pkgs/csu.nix
Normal file
25
pkgs/os-specific/bsd/freebsd/pkgs/csu.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{ lib, mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal
|
||||||
|
, install
|
||||||
|
, flex, byacc, gencat
|
||||||
|
, include
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "lib/csu";
|
||||||
|
extraPaths = [
|
||||||
|
"lib/Makefile.inc"
|
||||||
|
"lib/libc/include/libc_private.h"
|
||||||
|
];
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal
|
||||||
|
install
|
||||||
|
|
||||||
|
flex byacc gencat
|
||||||
|
];
|
||||||
|
buildInputs = [ include ];
|
||||||
|
MK_TESTS = "no";
|
||||||
|
meta.platforms = lib.platforms.freebsd;
|
||||||
|
}
|
28
pkgs/os-specific/bsd/freebsd/pkgs/ctfconvert.nix
Normal file
28
pkgs/os-specific/bsd/freebsd/pkgs/ctfconvert.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{ lib, stdenv, mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, install, mandoc, groff
|
||||||
|
, compatIfNeeded, libelf, libdwarf, zlib, libspl
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "cddl/usr.bin/ctfconvert";
|
||||||
|
extraPaths = [
|
||||||
|
"cddl/compat/opensolaris"
|
||||||
|
"cddl/contrib/opensolaris"
|
||||||
|
"sys/cddl/compat/opensolaris"
|
||||||
|
"sys/cddl/contrib/opensolaris"
|
||||||
|
"sys/contrib/openzfs"
|
||||||
|
];
|
||||||
|
OPENSOLARIS_USR_DISTDIR = "$(SRCTOP)/cddl/contrib/opensolaris";
|
||||||
|
OPENSOLARIS_SYS_DISTDIR = "$(SRCTOP)/sys/cddl/contrib/opensolaris";
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal install mandoc groff
|
||||||
|
|
||||||
|
# flex byacc file2c
|
||||||
|
];
|
||||||
|
buildInputs = compatIfNeeded ++ [
|
||||||
|
libelf libdwarf zlib libspl
|
||||||
|
];
|
||||||
|
meta.license = lib.licenses.cddl;
|
||||||
|
}
|
6
pkgs/os-specific/bsd/freebsd/pkgs/file2c.nix
Normal file
6
pkgs/os-specific/bsd/freebsd/pkgs/file2c.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{ mkDerivation }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "usr.bin/file2c";
|
||||||
|
MK_TESTS = "no";
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{ makeSetupHook }:
|
||||||
|
|
||||||
|
makeSetupHook {
|
||||||
|
name = "freebsd-setup-hook";
|
||||||
|
} ./setup-hook.sh
|
5
pkgs/os-specific/bsd/freebsd/pkgs/gencat.nix
Normal file
5
pkgs/os-specific/bsd/freebsd/pkgs/gencat.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ mkDerivation }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "usr.bin/gencat";
|
||||||
|
}
|
56
pkgs/os-specific/bsd/freebsd/pkgs/include/package.nix
Normal file
56
pkgs/os-specific/bsd/freebsd/pkgs/include/package.nix
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
{ lib, mkDerivation
|
||||||
|
, buildPackages
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal
|
||||||
|
, install
|
||||||
|
, mandoc, groff, rsync /*, nbperf*/, rpcgen
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "include";
|
||||||
|
|
||||||
|
extraPaths = [
|
||||||
|
"contrib/libc-vis"
|
||||||
|
"etc/mtree/BSD.include.dist"
|
||||||
|
"sys"
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal
|
||||||
|
install
|
||||||
|
mandoc groff rsync /*nbperf*/ rpcgen
|
||||||
|
|
||||||
|
# HACK use NetBSD's for now
|
||||||
|
buildPackages.netbsd.mtree
|
||||||
|
];
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
./no-perms-BSD.include.dist.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
# 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}_' \
|
||||||
|
{} \;
|
||||||
|
'';
|
||||||
|
|
||||||
|
makeFlags = [
|
||||||
|
"RPCGEN_CPP=${buildPackages.stdenv.cc.cc}/bin/cpp"
|
||||||
|
];
|
||||||
|
|
||||||
|
# multiple header dirs, see above
|
||||||
|
postConfigure = ''
|
||||||
|
makeFlags=''${makeFlags/INCSDIR/INCSDIR0}
|
||||||
|
'';
|
||||||
|
|
||||||
|
headersOnly = true;
|
||||||
|
|
||||||
|
MK_HESIOD = "yes";
|
||||||
|
|
||||||
|
meta.platforms = lib.platforms.freebsd;
|
||||||
|
}
|
41
pkgs/os-specific/bsd/freebsd/pkgs/install.nix
Normal file
41
pkgs/os-specific/bsd/freebsd/pkgs/install.nix
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{ lib, stdenv, mkDerivation, writeShellScript
|
||||||
|
, freebsd-lib
|
||||||
|
, mtree
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, mandoc, groff
|
||||||
|
, boot-install, install
|
||||||
|
, compatIfNeeded, libmd, libnetbsd
|
||||||
|
}:
|
||||||
|
|
||||||
|
# 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" (freebsd-lib.install-wrapper + ''
|
||||||
|
|
||||||
|
@out@/bin/xinstall "''${args[@]}"
|
||||||
|
'');
|
||||||
|
in mkDerivation {
|
||||||
|
path = "usr.bin/xinstall";
|
||||||
|
extraPaths = [ mtree.path ];
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal mandoc groff
|
||||||
|
(if stdenv.hostPlatform == stdenv.buildPlatform
|
||||||
|
then boot-install
|
||||||
|
else install)
|
||||||
|
];
|
||||||
|
skipIncludesPhase = true;
|
||||||
|
buildInputs = compatIfNeeded ++ [ libmd libnetbsd ];
|
||||||
|
makeFlags = [
|
||||||
|
"STRIP=-s" # flag to install, not command
|
||||||
|
"MK_WERROR=no"
|
||||||
|
"TESTSDIR=${builtins.placeholder "test"}"
|
||||||
|
] ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "INSTALL=boot-install";
|
||||||
|
postInstall = ''
|
||||||
|
install -D -m 0550 ${binstall} $out/bin/binstall
|
||||||
|
substituteInPlace $out/bin/binstall --subst-var out
|
||||||
|
mv $out/bin/install $out/bin/xinstall
|
||||||
|
ln -s ./binstall $out/bin/install
|
||||||
|
'';
|
||||||
|
outputs = [ "out" "man" "test" ];
|
||||||
|
}
|
139
pkgs/os-specific/bsd/freebsd/pkgs/libc/package.nix
Normal file
139
pkgs/os-specific/bsd/freebsd/pkgs/libc/package.nix
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
{ lib, stdenv, mkDerivation
|
||||||
|
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal
|
||||||
|
, install
|
||||||
|
, flex, byacc, gencat, rpcgen
|
||||||
|
|
||||||
|
, csu, include
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation rec {
|
||||||
|
pname = "libc";
|
||||||
|
path = "lib/libc";
|
||||||
|
extraPaths = [
|
||||||
|
"etc/group"
|
||||||
|
"etc/master.passwd"
|
||||||
|
"etc/shells"
|
||||||
|
"lib/libmd"
|
||||||
|
"lib/libutil"
|
||||||
|
"lib/msun"
|
||||||
|
"sys/kern"
|
||||||
|
"sys/libkern"
|
||||||
|
"sys/sys"
|
||||||
|
"sys/crypto/chacha20"
|
||||||
|
"include/rpcsvc"
|
||||||
|
"contrib/jemalloc"
|
||||||
|
"contrib/gdtoa"
|
||||||
|
"contrib/libc-pwcache"
|
||||||
|
"contrib/libc-vis"
|
||||||
|
"contrib/tzcode/stdtime"
|
||||||
|
|
||||||
|
# libthr
|
||||||
|
"lib/libthr"
|
||||||
|
"lib/libthread_db"
|
||||||
|
"libexec/rtld-elf"
|
||||||
|
|
||||||
|
# librpcsvc
|
||||||
|
"lib/librpcsvc"
|
||||||
|
|
||||||
|
# librt
|
||||||
|
"lib/librt"
|
||||||
|
|
||||||
|
# libcrypt
|
||||||
|
"lib/libcrypt"
|
||||||
|
"lib/libmd"
|
||||||
|
"sys/crypto/sha2"
|
||||||
|
];
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
# Hack around broken propogating MAKEFLAGS to submake, just inline logic
|
||||||
|
./libc-msun-arch-subdir.patch
|
||||||
|
|
||||||
|
# Don't force -lcompiler-rt, we don't actually call it that
|
||||||
|
./libc-no-force--lcompiler-rt.patch
|
||||||
|
|
||||||
|
# Fix extra include dir to get rpcsvc headers.
|
||||||
|
./librpcsvc-include-subdir.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
substituteInPlace $COMPONENT_PATH/Makefile --replace '.include <src.opts.mk>' ""
|
||||||
|
'';
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal
|
||||||
|
install
|
||||||
|
|
||||||
|
flex byacc gencat rpcgen
|
||||||
|
];
|
||||||
|
buildInputs = [ include csu ];
|
||||||
|
env.NIX_CFLAGS_COMPILE = "-B${csu}/lib";
|
||||||
|
|
||||||
|
# Suppress lld >= 16 undefined version errors
|
||||||
|
# https://github.com/freebsd/freebsd-src/commit/2ba84b4bcdd6012e8cfbf8a0d060a4438623a638
|
||||||
|
env.NIX_LDFLAGS = lib.optionalString (stdenv.targetPlatform.linker == "lld") "--undefined-version";
|
||||||
|
|
||||||
|
makeFlags = [
|
||||||
|
"STRIP=-s" # flag to install, not command
|
||||||
|
# lib/libc/gen/getgrent.c has sketchy cast from `void *` to enum
|
||||||
|
"MK_WERROR=no"
|
||||||
|
];
|
||||||
|
|
||||||
|
MK_SYMVER = "yes";
|
||||||
|
MK_SSP = "yes";
|
||||||
|
MK_NLS = "yes";
|
||||||
|
MK_ICONV = "no"; # TODO make srctop
|
||||||
|
MK_NS_CACHING = "yes";
|
||||||
|
MK_INET6_SUPPORT = "yes";
|
||||||
|
MK_HESIOD = "yes";
|
||||||
|
MK_NIS = "yes";
|
||||||
|
MK_HYPERV = "yes";
|
||||||
|
MK_FP_LIBC = "yes";
|
||||||
|
|
||||||
|
MK_TCSH = "no";
|
||||||
|
MK_MALLOC_PRODUCTION = "yes";
|
||||||
|
|
||||||
|
MK_TESTS = "no";
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
pushd ${include}
|
||||||
|
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
|
||||||
|
|
||||||
|
sed -i -e 's| [^ ]*/libc_nonshared.a||' $out/lib/libc.so
|
||||||
|
|
||||||
|
$CC -nodefaultlibs -lgcc -shared -o $out/lib/libgcc_s.so
|
||||||
|
|
||||||
|
NIX_CFLAGS_COMPILE+=" -B$out/lib"
|
||||||
|
NIX_CFLAGS_COMPILE+=" -I$out/include"
|
||||||
|
NIX_LDFLAGS+=" -L$out/lib"
|
||||||
|
|
||||||
|
make -C $BSDSRCDIR/lib/libthr $makeFlags
|
||||||
|
make -C $BSDSRCDIR/lib/libthr $makeFlags install
|
||||||
|
|
||||||
|
make -C $BSDSRCDIR/lib/msun $makeFlags
|
||||||
|
make -C $BSDSRCDIR/lib/msun $makeFlags install
|
||||||
|
|
||||||
|
make -C $BSDSRCDIR/lib/librpcsvc $makeFlags
|
||||||
|
make -C $BSDSRCDIR/lib/librpcsvc $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
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta.platforms = lib.platforms.freebsd;
|
||||||
|
}
|
27
pkgs/os-specific/bsd/freebsd/pkgs/libdwarf.nix
Normal file
27
pkgs/os-specific/bsd/freebsd/pkgs/libdwarf.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{ lib, stdenv, mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, install, mandoc, groff
|
||||||
|
, m4
|
||||||
|
, compatIfNeeded, libelf
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "lib/libdwarf";
|
||||||
|
extraPaths = [
|
||||||
|
"contrib/elftoolchain/libdwarf"
|
||||||
|
"contrib/elftoolchain/common"
|
||||||
|
"sys/sys/elf32.h"
|
||||||
|
"sys/sys/elf64.h"
|
||||||
|
"sys/sys/elf_common.h"
|
||||||
|
];
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal install mandoc groff
|
||||||
|
|
||||||
|
m4
|
||||||
|
];
|
||||||
|
buildInputs = compatIfNeeded ++ [
|
||||||
|
libelf
|
||||||
|
];
|
||||||
|
MK_TESTS = "no";
|
||||||
|
}
|
24
pkgs/os-specific/bsd/freebsd/pkgs/libelf.nix
Normal file
24
pkgs/os-specific/bsd/freebsd/pkgs/libelf.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{ lib, stdenv, mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, install, mandoc, groff
|
||||||
|
, m4
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "lib/libelf";
|
||||||
|
extraPaths = [
|
||||||
|
"contrib/elftoolchain/libelf"
|
||||||
|
"contrib/elftoolchain/common"
|
||||||
|
"sys/sys/elf32.h"
|
||||||
|
"sys/sys/elf64.h"
|
||||||
|
"sys/sys/elf_common.h"
|
||||||
|
];
|
||||||
|
BOOTSTRAPPING = !stdenv.isFreeBSD;
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal install mandoc groff
|
||||||
|
|
||||||
|
m4
|
||||||
|
];
|
||||||
|
MK_TESTS = "no";
|
||||||
|
}
|
26
pkgs/os-specific/bsd/freebsd/pkgs/libnetbsd/package.nix
Normal file
26
pkgs/os-specific/bsd/freebsd/pkgs/libnetbsd/package.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ lib, stdenv
|
||||||
|
, mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook, makeMinimal, mandoc, groff
|
||||||
|
, boot-install, install
|
||||||
|
, compatIfNeeded
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "lib/libnetbsd";
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal mandoc groff
|
||||||
|
(if stdenv.hostPlatform == stdenv.buildPlatform
|
||||||
|
then boot-install
|
||||||
|
else install)
|
||||||
|
];
|
||||||
|
patches = lib.optionals (!stdenv.hostPlatform.isFreeBSD) [
|
||||||
|
./libnetbsd-do-install.patch
|
||||||
|
#./libnetbsd-define-__va_list.patch
|
||||||
|
];
|
||||||
|
makeFlags = [
|
||||||
|
"STRIP=-s" # flag to install, not command
|
||||||
|
"MK_WERROR=no"
|
||||||
|
] ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "INSTALL=boot-install";
|
||||||
|
buildInputs = compatIfNeeded;
|
||||||
|
}
|
10
pkgs/os-specific/bsd/freebsd/pkgs/libnv.nix
Normal file
10
pkgs/os-specific/bsd/freebsd/pkgs/libnv.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{ mkDerivation }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "lib/libnv";
|
||||||
|
extraPaths = [
|
||||||
|
"sys/contrib/libnv"
|
||||||
|
"sys/sys"
|
||||||
|
];
|
||||||
|
MK_TESTS = "no";
|
||||||
|
}
|
9
pkgs/os-specific/bsd/freebsd/pkgs/libsbuf.nix
Normal file
9
pkgs/os-specific/bsd/freebsd/pkgs/libsbuf.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{ mkDerivation }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "lib/libsbuf";
|
||||||
|
extraPaths = [
|
||||||
|
"sys/kern"
|
||||||
|
];
|
||||||
|
MK_TESTS = "no";
|
||||||
|
}
|
21
pkgs/os-specific/bsd/freebsd/pkgs/libspl.nix
Normal file
21
pkgs/os-specific/bsd/freebsd/pkgs/libspl.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{ lib, mkDerivation }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "cddl/lib/libspl";
|
||||||
|
extraPaths = [
|
||||||
|
"sys/contrib/openzfs/lib/libspl"
|
||||||
|
"sys/contrib/openzfs/include"
|
||||||
|
|
||||||
|
"cddl/compat/opensolaris/include"
|
||||||
|
"sys/contrib/openzfs/module/icp/include"
|
||||||
|
"sys/modules/zfs"
|
||||||
|
];
|
||||||
|
# nativeBuildInputs = [
|
||||||
|
# bsdSetupHook freebsdSetupHook
|
||||||
|
# makeMinimal install mandoc groff
|
||||||
|
|
||||||
|
# flex byacc file2c
|
||||||
|
# ];
|
||||||
|
# buildInputs = compatIfNeeded ++ [ libnv libsbuf ];
|
||||||
|
meta.license = lib.licenses.cddl;
|
||||||
|
}
|
7
pkgs/os-specific/bsd/freebsd/pkgs/libutil.nix
Normal file
7
pkgs/os-specific/bsd/freebsd/pkgs/libutil.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{ mkDerivation, lib, stdenv }:
|
||||||
|
mkDerivation {
|
||||||
|
path = "lib/libutil";
|
||||||
|
extraPaths = ["lib/libc/gen"];
|
||||||
|
clangFixup = true;
|
||||||
|
MK_TESTS = "no";
|
||||||
|
}
|
20
pkgs/os-specific/bsd/freebsd/pkgs/lorder.nix
Normal file
20
pkgs/os-specific/bsd/freebsd/pkgs/lorder.nix
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{ mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation rec {
|
||||||
|
path = "usr.bin/lorder";
|
||||||
|
noCC = true;
|
||||||
|
dontBuild = true;
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p "$out/bin" "$man/share/man"
|
||||||
|
mv "lorder.sh" "$out/bin/lorder"
|
||||||
|
chmod +x "$out/bin/lorder"
|
||||||
|
mv "lorder.1" "$man/share/man"
|
||||||
|
'';
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
];
|
||||||
|
buildInputs = [];
|
||||||
|
outputs = [ "out" "man" ];
|
||||||
|
}
|
20
pkgs/os-specific/bsd/freebsd/pkgs/make.nix
Normal file
20
pkgs/os-specific/bsd/freebsd/pkgs/make.nix
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{ lib, mkDerivation, stdenv }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "contrib/bmake";
|
||||||
|
version = "9.2";
|
||||||
|
postPatch = ''
|
||||||
|
# make needs this to pick up our sys make files
|
||||||
|
export NIX_CFLAGS_COMPILE+=" -D_PATH_DEFSYSPATH=\"$out/share/mk\""
|
||||||
|
|
||||||
|
'' + 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 = [ "share/mk" ]
|
||||||
|
++ lib.optional (!stdenv.hostPlatform.isFreeBSD) "tools/build/mk";
|
||||||
|
}
|
61
pkgs/os-specific/bsd/freebsd/pkgs/makeMinimal.nix
Normal file
61
pkgs/os-specific/bsd/freebsd/pkgs/makeMinimal.nix
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
{ lib, stdenv, mkDerivation
|
||||||
|
, make
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation rec {
|
||||||
|
inherit (make) path;
|
||||||
|
|
||||||
|
buildInputs = [];
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
];
|
||||||
|
|
||||||
|
skipIncludesPhase = true;
|
||||||
|
|
||||||
|
makeFlags = [];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
patchShebangs configure
|
||||||
|
${make.postPatch}
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
sh ./make-bootstrap.sh
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
install -D bmake "$out/bin/bmake"
|
||||||
|
ln -s "$out/bin/bmake" "$out/bin/make"
|
||||||
|
mkdir -p "$out/share"
|
||||||
|
cp -r "$BSDSRCDIR/share/mk" "$out/share/mk"
|
||||||
|
find "$out/share/mk" -type f -print0 |
|
||||||
|
while IFS= read -r -d "" f; do
|
||||||
|
substituteInPlace "$f" --replace 'usr/' ""
|
||||||
|
done
|
||||||
|
substituteInPlace "$out/share/mk/bsd.symver.mk" \
|
||||||
|
--replace '/share/mk' "$out/share/mk"
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
postInstall = lib.optionalString (!stdenv.targetPlatform.isFreeBSD) ''
|
||||||
|
boot_mk="$BSDSRCDIR/tools/build/mk"
|
||||||
|
cp "$boot_mk"/Makefile.boot* "$out/share/mk"
|
||||||
|
replaced_mk="$out/share/mk.orig"
|
||||||
|
mkdir "$replaced_mk"
|
||||||
|
mv "$out"/share/mk/bsd.{lib,prog}.mk "$replaced_mk"
|
||||||
|
for m in bsd.{lib,prog}.mk; do
|
||||||
|
cp "$boot_mk/$m" "$out/share/mk"
|
||||||
|
substituteInPlace "$out/share/mk/$m" --replace '../../../share/mk' '../mk.orig'
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
extraPaths = make.extraPaths;
|
||||||
|
}
|
78
pkgs/os-specific/bsd/freebsd/pkgs/mkDerivation.nix
Normal file
78
pkgs/os-specific/bsd/freebsd/pkgs/mkDerivation.nix
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
{ lib, stdenv, stdenvNoCC
|
||||||
|
, compatIfNeeded
|
||||||
|
, runCommand, rsync
|
||||||
|
, freebsd-lib
|
||||||
|
, freebsdSrc
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal
|
||||||
|
, install, tsort, lorder, mandoc, groff
|
||||||
|
}:
|
||||||
|
|
||||||
|
lib.makeOverridable (attrs: let
|
||||||
|
stdenv' = if attrs.noCC or false then stdenvNoCC else stdenv;
|
||||||
|
in stdenv'.mkDerivation (rec {
|
||||||
|
pname = "${attrs.pname or (baseNameOf attrs.path)}-freebsd";
|
||||||
|
inherit (freebsd-lib) version;
|
||||||
|
src = runCommand "${pname}-filtered-src" {
|
||||||
|
nativeBuildInputs = [ rsync ];
|
||||||
|
} ''
|
||||||
|
for p in ${lib.concatStringsSep " " ([ attrs.path ] ++ attrs.extraPaths or [])}; do
|
||||||
|
set -x
|
||||||
|
path="$out/$p"
|
||||||
|
mkdir -p "$(dirname "$path")"
|
||||||
|
src_path="${freebsdSrc}/$p"
|
||||||
|
if [[ -d "$src_path" ]]; then src_path+=/; fi
|
||||||
|
rsync --chmod="+w" -r "$src_path" "$path"
|
||||||
|
set +x
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
extraPaths = [ ];
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal
|
||||||
|
install tsort lorder mandoc groff #statHook
|
||||||
|
];
|
||||||
|
buildInputs = compatIfNeeded;
|
||||||
|
|
||||||
|
HOST_SH = stdenv'.shell;
|
||||||
|
|
||||||
|
# Since STRIP below is the flag
|
||||||
|
STRIPBIN = "${stdenv.cc.bintools.targetPrefix}strip";
|
||||||
|
|
||||||
|
makeFlags = [
|
||||||
|
"STRIP=-s" # flag to install, not command
|
||||||
|
] ++ lib.optional (!stdenv.hostPlatform.isFreeBSD) "MK_WERROR=no";
|
||||||
|
|
||||||
|
# amd64 not x86_64 for this on unlike NetBSD
|
||||||
|
MACHINE_ARCH = freebsd-lib.mkBsdArch stdenv';
|
||||||
|
|
||||||
|
MACHINE = freebsd-lib.mkBsdArch stdenv';
|
||||||
|
|
||||||
|
MACHINE_CPUARCH = MACHINE_ARCH;
|
||||||
|
|
||||||
|
COMPONENT_PATH = attrs.path or null;
|
||||||
|
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
maintainers = with maintainers; [ ericson2314 ];
|
||||||
|
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))
|
5
pkgs/os-specific/bsd/freebsd/pkgs/mknod.nix
Normal file
5
pkgs/os-specific/bsd/freebsd/pkgs/mknod.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ mkDerivation }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "sbin/mknod";
|
||||||
|
}
|
6
pkgs/os-specific/bsd/freebsd/pkgs/mtree.nix
Normal file
6
pkgs/os-specific/bsd/freebsd/pkgs/mtree.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{ mkDerivation, mknod }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "contrib/mtree";
|
||||||
|
extraPaths = [ mknod.path ];
|
||||||
|
}
|
22
pkgs/os-specific/bsd/freebsd/pkgs/rpcgen/package.nix
Normal file
22
pkgs/os-specific/bsd/freebsd/pkgs/rpcgen/package.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{ lib, mkDerivation, stdenv }:
|
||||||
|
|
||||||
|
mkDerivation rec {
|
||||||
|
path = "usr.bin/rpcgen";
|
||||||
|
patches = lib.optionals (stdenv.hostPlatform.libc == "glibc") [
|
||||||
|
# `WUNTRACED` is defined privately `bits/waitflags.h` in glibc.
|
||||||
|
# But instead of having a regular header guard, it has some silly
|
||||||
|
# non-modular logic. `stdlib.h` will include it if `sys/wait.h`
|
||||||
|
# hasn't yet been included (for it would first), and vice versa.
|
||||||
|
#
|
||||||
|
# The problem is that with the FreeBSD compat headers, one of
|
||||||
|
# those headers ends up included other headers...which ends up
|
||||||
|
# including the other one, this means by the first time we reach
|
||||||
|
# `#include `<bits/waitflags.h>`, both `_SYS_WAIT_H` and
|
||||||
|
# `_STDLIB_H` are already defined! Thus, we never ned up including
|
||||||
|
# `<bits/waitflags.h>` and defining `WUNTRACED`.
|
||||||
|
#
|
||||||
|
# This hacks around this by manually including `WUNTRACED` until
|
||||||
|
# the problem is fixed properly in glibc.
|
||||||
|
./rpcgen-glibc-hack.patch
|
||||||
|
];
|
||||||
|
}
|
7
pkgs/os-specific/bsd/freebsd/pkgs/sed.nix
Normal file
7
pkgs/os-specific/bsd/freebsd/pkgs/sed.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{ mkDerivation, freebsdSrc }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "usr.bin/sed";
|
||||||
|
TESTSRC = "${freebsdSrc}/contrib/netbsd-tests";
|
||||||
|
MK_TESTS = "no";
|
||||||
|
}
|
13
pkgs/os-specific/bsd/freebsd/pkgs/stat.nix
Normal file
13
pkgs/os-specific/bsd/freebsd/pkgs/stat.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{ mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, install, mandoc, groff
|
||||||
|
}:
|
||||||
|
|
||||||
|
# Don't add this to nativeBuildInputs directly. Use statHook instead.
|
||||||
|
mkDerivation {
|
||||||
|
path = "usr.bin/stat";
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal install mandoc groff
|
||||||
|
];
|
||||||
|
}
|
12
pkgs/os-specific/bsd/freebsd/pkgs/statHook.nix
Normal file
12
pkgs/os-specific/bsd/freebsd/pkgs/statHook.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{ 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)
|
||||||
|
'')
|
67
pkgs/os-specific/bsd/freebsd/pkgs/sys/package.nix
Normal file
67
pkgs/os-specific/bsd/freebsd/pkgs/sys/package.nix
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
{ lib, stdenv, mkDerivation, freebsd-lib
|
||||||
|
, buildPackages
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, install, mandoc, groff
|
||||||
|
, config, rpcgen, file2c, gawk, uudecode, xargs-j #, ctfconvert
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation (let
|
||||||
|
cfg = "MINIMAL";
|
||||||
|
in rec {
|
||||||
|
path = "sys";
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal install mandoc groff
|
||||||
|
|
||||||
|
config rpcgen file2c gawk uudecode xargs-j
|
||||||
|
#ctfconvert
|
||||||
|
];
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
./sys-gnu-date.patch
|
||||||
|
./sys-no-explicit-intrinsics-dep.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
# --dynamic-linker /red/herring is used when building the kernel.
|
||||||
|
NIX_ENFORCE_PURITY = 0;
|
||||||
|
|
||||||
|
AWK = "${buildPackages.gawk}/bin/awk";
|
||||||
|
|
||||||
|
CWARNEXTRA = "-Wno-error=shift-negative-value -Wno-address-of-packed-member";
|
||||||
|
|
||||||
|
MK_CTF = "no";
|
||||||
|
|
||||||
|
KODIR = "${builtins.placeholder "out"}/kernel";
|
||||||
|
KMODDIR = "${builtins.placeholder "out"}/kernel";
|
||||||
|
DTBDIR = "${builtins.placeholder"out"}/dbt";
|
||||||
|
|
||||||
|
KERN_DEBUGDIR = "${builtins.placeholder "out"}/debug";
|
||||||
|
KERN_DEBUGDIR_KODIR = "${KERN_DEBUGDIR}/kernel";
|
||||||
|
KERN_DEBUGDIR_KMODDIR = "${KERN_DEBUGDIR}/kernel";
|
||||||
|
|
||||||
|
skipIncludesPhase = true;
|
||||||
|
|
||||||
|
configurePhase = ''
|
||||||
|
runHook preConfigure
|
||||||
|
|
||||||
|
for f in conf/kmod.mk contrib/dev/acpica/acpica_prep.sh; do
|
||||||
|
substituteInPlace "$f" --replace 'xargs -J' 'xargs-j '
|
||||||
|
done
|
||||||
|
|
||||||
|
for f in conf/*.mk; do
|
||||||
|
substituteInPlace "$f" --replace 'KERN_DEBUGDIR}''${' 'KERN_DEBUGDIR_'
|
||||||
|
done
|
||||||
|
|
||||||
|
cd ${freebsd-lib.mkBsdArch stdenv}/conf
|
||||||
|
sed -i ${cfg} \
|
||||||
|
-e 's/WITH_CTF=1/WITH_CTF=0/' \
|
||||||
|
-e '/KDTRACE/d'
|
||||||
|
config ${cfg}
|
||||||
|
|
||||||
|
runHook postConfigure
|
||||||
|
'';
|
||||||
|
preBuild = ''
|
||||||
|
cd ../compile/${cfg}
|
||||||
|
'';
|
||||||
|
})
|
12
pkgs/os-specific/bsd/freebsd/pkgs/tsort.nix
Normal file
12
pkgs/os-specific/bsd/freebsd/pkgs/tsort.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{ mkDerivation
|
||||||
|
, bsdSetupHook, freebsdSetupHook
|
||||||
|
, makeMinimal, install, mandoc, groff
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "usr.bin/tsort";
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bsdSetupHook freebsdSetupHook
|
||||||
|
makeMinimal install mandoc groff
|
||||||
|
];
|
||||||
|
}
|
6
pkgs/os-specific/bsd/freebsd/pkgs/uudecode.nix
Normal file
6
pkgs/os-specific/bsd/freebsd/pkgs/uudecode.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{ mkDerivation }:
|
||||||
|
|
||||||
|
mkDerivation {
|
||||||
|
path = "usr.bin/uudecode";
|
||||||
|
MK_TESTS = "no";
|
||||||
|
}
|
9
pkgs/os-specific/bsd/freebsd/pkgs/xargs-j/package.nix
Normal file
9
pkgs/os-specific/bsd/freebsd/pkgs/xargs-j/package.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{ substituteAll, runtimeShell }:
|
||||||
|
|
||||||
|
substituteAll {
|
||||||
|
name = "xargs-j";
|
||||||
|
shell = runtimeShell;
|
||||||
|
src = ./xargs-j.sh;
|
||||||
|
dir = "bin";
|
||||||
|
isExecutable = true;
|
||||||
|
}
|
Loading…
Reference in a new issue