diff --git a/pkgs/tools/package-management/rpm/default.nix b/pkgs/tools/package-management/rpm/default.nix index e013e82fc08e..321b1ec1203e 100644 --- a/pkgs/tools/package-management/rpm/default.nix +++ b/pkgs/tools/package-management/rpm/default.nix @@ -1,24 +1,18 @@ { stdenv , lib , pkg-config -, autoreconfHook -, pandoc -, fetchpatch2 +, cmake , fetchurl -, cpio , zlib , bzip2 , file , elfutils -, libbfd -, libgcrypt , libarchive -, nspr -, nss +, readline +, audit , popt -, db , xz -, python +, python3 , lua , llvmPackages , sqlite @@ -26,89 +20,70 @@ , libcap , apple-sdk_13 , darwinMinVersionHook +, openssl +#, libselinux +, rpm-sequoia +, gettext +, systemd +, bubblewrap +, autoconf , gnupg }: stdenv.mkDerivation rec { pname = "rpm"; - version = "4.18.1"; + version = "4.20.0"; src = fetchurl { url = "https://ftp.osuosl.org/pub/rpm/releases/rpm-${lib.versions.majorMinor version}.x/rpm-${version}.tar.bz2"; - hash = "sha256-N/O0LAlmlB4q0/EP3jY5gkplkdBxl7qP0IacoHeeH1Y="; + hash = "sha256-Vv92OM/5i1bUp1A/9ZvHnygabd/82g0jjAgr7ftfvns="; }; - patches = [ - # Resolves `error: expected expression` on clang - # See: https://github.com/rpm-software-management/rpm/issues/2435. - (fetchpatch2 { - url = "https://github.com/rpm-software-management/rpm/commit/b960c0b43a080287a7c13533eeb2d9f288db1414.diff?full_index=1"; - hash = "sha256-0f7YOL2xR07xgAEN32oRbOjPsAsVmKFVtTLXUOeFAa8="; - }) - # Fix missing includes required to build on Darwin. - # See: https://github.com/rpm-software-management/rpm/pull/2571. - (fetchpatch2 { - url = "https://github.com/rpm-software-management/rpm/commit/f07875392a09228b1a25c1763a50bbbd0f6798c2.diff?full_index=1"; - hash = "sha256-DLpzMApRCgI9zqheglFtqL8E1vq9X/aQa0HMnIAQgk8="; - }) - (fetchpatch2 { - url = "https://github.com/rpm-software-management/rpm/commit/b2e67642fd8cb64d8cb1cca9e759396c1c10807d.diff?full_index=1"; - hash = "sha256-q3fIBfiUJVmw6Vi2/Bo/zX6/cqTM7aFnskKfMVK3DlU="; - }) - ]; + postPatch = '' + sed -i 's#''${Python3_SITEARCH}#${placeholder "out"}/${python3.sitePackages}#' python/CMakeLists.txt + sed -i 's#PATHS ENV MYPATH#PATHS ENV PATH#' CMakeLists.txt + ''; - outputs = [ "out" "dev" "man" ]; + outputs = [ + "out" "man" + ] ++ lib.optionals stdenv.hostPlatform.isLinux [ + "dev" + ]; separateDebugInfo = true; - nativeBuildInputs = [ autoreconfHook pkg-config pandoc ]; - buildInputs = [ cpio zlib zstd bzip2 file libarchive libgcrypt nspr nss db xz python lua sqlite gnupg ] + nativeBuildInputs = [ cmake pkg-config autoconf python3 gettext ] + ++ lib.optionals stdenv.hostPlatform.isLinux [ bubblewrap ]; + buildInputs = [ bzip2 zlib zstd file libarchive xz lua sqlite openssl readline rpm-sequoia gnupg ] ++ lib.optional stdenv.cc.isClang llvmPackages.openmp - ++ lib.optional stdenv.hostPlatform.isLinux libcap + ++ lib.optionals stdenv.hostPlatform.isLinux [ libcap audit systemd ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ apple-sdk_13 (darwinMinVersionHook "13.0") ]; + patches = lib.optionals stdenv.hostPlatform.isDarwin [ + ./sighandler_t-macos.patch + ]; + + cmakeFlags = [ + "-DWITH_DBUS=OFF" + # libselinux is missing propagatedBuildInputs + "-DWITH_SELINUX=OFF" + ] ++ lib.optionals stdenv.hostPlatform.isLinux [ + "-DMKTREE_BACKEND=rootfs" + ] ++ lib.optionals (!stdenv.hostPlatform.isLinux) [ + # Test suite rely on either podman or bubblewrap + "-DENABLE_TESTSUITE=OFF" + + "-DWITH_CAP=OFF" + "-DWITH_AUDIT=OFF" + "-DWITH_ACL=OFF" + ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ + "-DWITH_LIBELF=OFF" + "-DWITH_LIBDW=OFF" + ]; + # rpm/rpmlib.h includes popt.h, and then the pkg-config file mentions these as linkage requirements - propagatedBuildInputs = [ popt nss db bzip2 libarchive libbfd ] + propagatedBuildInputs = [ popt ] ++ lib.optional (lib.meta.availableOn stdenv.hostPlatform elfutils) elfutils; - env.NIX_CFLAGS_COMPILE = "-I${nspr.dev}/include/nspr -I${nss.dev}/include/nss"; - - configureFlags = [ - "--with-external-db" - "--with-lua" - "--enable-python" - "--enable-ndb" - "--enable-sqlite" - "--enable-zstd" - "--localstatedir=/var" - "--sharedstatedir=/com" - ] ++ lib.optional stdenv.hostPlatform.isLinux "--with-cap"; - - postPatch = '' - substituteInPlace Makefile.am --replace '@$(MKDIR_P) $(DESTDIR)$(localstatedir)/tmp' "" - ''; - - preFixup = '' - # Don't keep a reference to RPM headers or manpages - for f in $out/lib/rpm/platform/*/macros; do - substituteInPlace $f --replace "$dev" "/rpm-dev-path-was-here" - substituteInPlace $f --replace "$man" "/rpm-man-path-was-here" - done - - # Avoid macros like '%__ld' pointing to absolute paths - for tool in ld nm objcopy objdump strip; do - sed -i $out/lib/rpm/macros -e "s/^%__$tool.*/%__$tool $tool/" - done - - # Avoid helper scripts pointing to absolute paths - for tool in find-provides find-requires; do - sed -i $out/lib/rpm/$tool -e "s#/usr/lib/rpm/#$out/lib/rpm/#" - done - - # symlinks produced by build are incorrect - ln -sf $out/bin/{rpm,rpmquery} - ln -sf $out/bin/{rpm,rpmverify} - ''; - enableParallelBuilding = true; meta = with lib; { diff --git a/pkgs/tools/package-management/rpm/sighandler_t-macos.patch b/pkgs/tools/package-management/rpm/sighandler_t-macos.patch new file mode 100644 index 000000000000..e406c8c23f41 --- /dev/null +++ b/pkgs/tools/package-management/rpm/sighandler_t-macos.patch @@ -0,0 +1,19 @@ +Revert "signal() returns sighandler_t, not void *" + +sadly, on darwin, sighandler_t is not defined + +This reverts commit 7bb4dfd0bcadc7c6177d6fe88a4bcccf7fac98b9 + +diff --git a/build/rpmfc.c b/build/rpmfc.c +index 86dd36d14..48643a321 100644 +--- a/build/rpmfc.c ++++ b/build/rpmfc.c +@@ -295,7 +295,7 @@ static int getOutputFrom(ARGV_t argv, + return -1; + } + +- sighandler_t oldhandler = signal(SIGPIPE, SIG_IGN); ++ void *oldhandler = signal(SIGPIPE, SIG_IGN); + + child = fork(); + if (child < 0) { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e346c64100bb..8fef41ee1062 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5214,7 +5214,6 @@ with pkgs; rosenpass-tools = callPackage ../tools/networking/rosenpass/tools.nix { }; rpm = callPackage ../tools/package-management/rpm { - python = python3; lua = lua5_4; }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 624514fd100b..53d076473c18 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -14021,7 +14021,7 @@ self: super: with self; { rply = callPackage ../development/python-modules/rply { }; rpm = toPythonModule (pkgs.rpm.override { - inherit python; + python3 = self.python; }); rpmfile = callPackage ../development/python-modules/rpmfile { };