diff --git a/pkgs/os-specific/linux/kmod/darwin.patch b/pkgs/os-specific/linux/kmod/darwin.patch new file mode 100644 index 000000000000..69dbf479f9f1 --- /dev/null +++ b/pkgs/os-specific/linux/kmod/darwin.patch @@ -0,0 +1,123 @@ +diff --git a/Makefile.am b/Makefile.am +index 194e111..0a095b5 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -80,8 +80,7 @@ EXTRA_DIST += libkmod/README \ + libkmod/COPYING testsuite/COPYING tools/COPYING COPYING + + libkmod_libkmod_la_LDFLAGS = $(AM_LDFLAGS) \ +- -version-info $(LIBKMOD_CURRENT):$(LIBKMOD_REVISION):$(LIBKMOD_AGE) \ +- -Wl,--version-script=$(top_srcdir)/libkmod/libkmod.sym ++ -version-info $(LIBKMOD_CURRENT):$(LIBKMOD_REVISION):$(LIBKMOD_AGE) + libkmod_libkmod_la_DEPENDENCIES = \ + shared/libshared.la \ + ${top_srcdir}/libkmod/libkmod.sym +@@ -91,8 +90,7 @@ libkmod_libkmod_la_LIBADD = \ + + noinst_LTLIBRARIES += libkmod/libkmod-internal.la + libkmod_libkmod_internal_la_SOURCES = $(libkmod_libkmod_la_SOURCES) +-libkmod_libkmod_internal_la_LDFLAGS = $(AM_LDFLAGS) \ +- -Wl,--version-script=$(top_srcdir)/libkmod/libkmod.sym ++libkmod_libkmod_internal_la_LDFLAGS = $(AM_LDFLAGS) + libkmod_libkmod_internal_la_DEPENDENCIES = $(libkmod_libkmod_la_DEPENDENCIES) + libkmod_libkmod_internal_la_LIBADD = $(libkmod_libkmod_la_LIBADD) + +diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c +index 889f264..6f0a285 100644 +--- a/libkmod/libkmod-module.c ++++ b/libkmod/libkmod-module.c +@@ -787,7 +787,11 @@ KMOD_EXPORT int kmod_module_remove_module(struct kmod_module *mod, + flags &= KMOD_REMOVE_FORCE; + flags |= KMOD_REMOVE_NOWAIT; + ++#if defined(__linux__) + err = delete_module(mod->name, flags); ++#else ++ err = -1; ++#endif + if (err != 0) { + err = -errno; + ERR(mod->ctx, "could not remove '%s': %m\n", mod->name); +@@ -879,7 +883,11 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod, + } + size = kmod_file_get_size(mod->file); + ++#if defined(__linux__) + err = init_module(mem, size, args); ++#else ++ err = -1; ++#endif + init_finished: + if (err < 0) { + err = -errno; +diff --git a/libkmod/libkmod-signature.c b/libkmod/libkmod-signature.c +index 429ffbd..17a3b9c 100644 +--- a/libkmod/libkmod-signature.c ++++ b/libkmod/libkmod-signature.c +@@ -17,7 +17,10 @@ + * License along with this library; if not, see . + */ + ++#if defined(__linux__) + #include ++#endif ++ + #include + #include + #include +diff --git a/shared/macro.h b/shared/macro.h +index 4fc5405..b5a2702 100644 +--- a/shared/macro.h ++++ b/shared/macro.h +@@ -71,3 +71,7 @@ + #endif + + #define UNIQ __COUNTER__ ++ ++ #if !defined(__linux__) ++#define program_invocation_short_name getprogname() ++#endif +diff --git a/shared/missing.h b/shared/missing.h +index 4c0d136..ad8ec0f 100644 +--- a/shared/missing.h ++++ b/shared/missing.h +@@ -45,6 +45,9 @@ static inline int finit_module(int fd, const char *uargs, int flags) + #endif + + #if !HAVE_DECL_BE32TOH ++ ++#if defined(__linux__) ++ + #include + #include + #if __BYTE_ORDER == __LITTLE_ENDIAN +@@ -52,4 +55,16 @@ static inline int finit_module(int fd, const char *uargs, int flags) + #else + #define be32toh(x) (x) + #endif ++ ++#elif defined(__APPLE__) ++ ++#include ++#define be32toh(x) OSSwapBigToHostInt32(x) ++ ++#else ++ ++#error No be32toh known for platform ++ ++#endif ++ + #endif +diff --git a/shared/util.c b/shared/util.c +index fd2028d..ecb0141 100644 +--- a/shared/util.c ++++ b/shared/util.c +@@ -367,7 +367,7 @@ char *path_make_absolute_cwd(const char *p) + if (path_is_absolute(p)) + return strdup(p); + +- cwd = get_current_dir_name(); ++ cwd = getcwd(NULL, 0); + if (!cwd) + return NULL; + diff --git a/pkgs/os-specific/linux/kmod/default.nix b/pkgs/os-specific/linux/kmod/default.nix index 43d69ac9574d..cace828685a8 100644 --- a/pkgs/os-specific/linux/kmod/default.nix +++ b/pkgs/os-specific/linux/kmod/default.nix @@ -1,4 +1,5 @@ -{ stdenv, buildPackages, lib, fetchurl, autoreconfHook, pkgconfig, libxslt, xz }: +{ stdenv, buildPackages, lib, fetchurl, autoreconfHook, pkgconfig +, libxslt, xz, elf-header }: let systems = [ "/run/current-system/kernel-modules" "/run/booted-system/kernel-modules" "" ]; @@ -14,7 +15,7 @@ in stdenv.mkDerivation rec { }; nativeBuildInputs = [ autoreconfHook pkgconfig libxslt ]; - buildInputs = [ xz ]; + buildInputs = [ xz elf-header ]; configureFlags = [ "--sysconfdir=/etc" @@ -22,7 +23,8 @@ in stdenv.mkDerivation rec { "--with-modulesdirs=${modulesDirs}" ]; - patches = [ ./module-dir.patch ]; + patches = [ ./module-dir.patch ] + ++ lib.optional stdenv.isDarwin ./darwin.patch; postInstall = '' for prog in rmmod insmod lsmod modinfo modprobe depmod; do @@ -37,6 +39,6 @@ in stdenv.mkDerivation rec { homepage = https://www.kernel.org/pub/linux/utils/kernel/kmod/; description = "Tools for loading and managing Linux kernel modules"; license = licenses.lgpl21; - platforms = platforms.linux; + platforms = platforms.unix; }; }