diff --git a/app-arch/rpm/Manifest b/app-arch/rpm/Manifest index d500b045cb3ca..07f29d4a930a4 100644 --- a/app-arch/rpm/Manifest +++ b/app-arch/rpm/Manifest @@ -1,2 +1,3 @@ DIST rpm-4.20.0.tar.bz2 5984513 BLAKE2B c809e933cf7eb9ab63fa7693e634f7fcf744f94130199f674c5e76e77ead4de25b583daefdf651bbf0475012d262d1bdca605f19a520e160e90e3deb68c74f18 SHA512 b340c66cfda3abed38e81f91c4a789f2c6c0d3ce408de71d861fef27e180b607ae698e046b6925c7781a7177cde9df4075943714ed2aad7c62645eca348f5544 DIST rpm-4.20.1.tar.bz2 4534720 BLAKE2B 0d2c553be4cdb5c511c94c5d70a6f5d8ab350fbc7e29b91ea8ce7dd4c1d3f5f2db3a8d46305adc53083c8367b771588db185338cd04a769c54856a425f71bad5 SHA512 77979cb49dec5a8816fc5019cf5d0c817adddec10c0018c8ad9487db8ffc58613557fa21f8e2163b747197b55a6de202c29c88e19b70d1fa6b4c18d3a84bf681 +DIST rpm-6.0.0.tar.bz2 1434619 BLAKE2B 803e3da030e99bb5a6c6163850070d84adc11c77998e7207d47b1196501114597e7738148715ad416ff7f44be9cd25a3ffcd24ae18c40880738d2ea124c2bade SHA512 c59a4aa5ee11358bb306c80bf92d129c8a6ad0b65799455f3a1d7ef9201e22ea644d8e538c622db7c6962f2dbbf11a7dc32e70a04c7c77ea361798dd31ac92cb diff --git a/app-arch/rpm/files/rpm-6.0.0-musl-compat.patch b/app-arch/rpm/files/rpm-6.0.0-musl-compat.patch new file mode 100644 index 0000000000000..dcb0cac1128b3 --- /dev/null +++ b/app-arch/rpm/files/rpm-6.0.0-musl-compat.patch @@ -0,0 +1,17 @@ +musl doesn't implement GLOB_BRACE, simply disable it. + +https://bugs.gentoo.org/922286 +https://github.com/rpm-software-management/rpm/issues/2844 +--- a/rpmio/rpmglob.cc ++++ b/rpmio/rpmglob.cc +@@ -33,6 +33,10 @@ + + #include "debug.h" + ++#ifndef GLOB_BRACE ++#define GLOB_BRACE 0 ++#endif ++ + /* Return 1 if pattern contains a magic char, see glob(7) for a list */ + static int ismagic(const char *pattern) + { diff --git a/app-arch/rpm/files/rpm-6.0.0-no-hardened.patch b/app-arch/rpm/files/rpm-6.0.0-no-hardened.patch new file mode 100644 index 0000000000000..f957f33b619c7 --- /dev/null +++ b/app-arch/rpm/files/rpm-6.0.0-no-hardened.patch @@ -0,0 +1,12 @@ +Don't override Gentoo's default _FORTIFY_SOURCE. +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -433,7 +433,7 @@ if (ENABLE_ASAN OR ENABLE_UBSAN) + endif() + + # try to ensure some compiler sanity and hardening options where supported +-foreach (flag -fno-strict-overflow -fno-delete-null-pointer-checks -fhardened) ++foreach (flag -fno-strict-overflow -fno-delete-null-pointer-checks) + check_c_compiler_flag(${flag} compiler-supports${flag}) + if (compiler-supports${flag}) + add_compile_options(${flag}) diff --git a/app-arch/rpm/rpm-6.0.0.ebuild b/app-arch/rpm/rpm-6.0.0.ebuild new file mode 100644 index 0000000000000..6111658e7e18d --- /dev/null +++ b/app-arch/rpm/rpm-6.0.0.ebuild @@ -0,0 +1,144 @@ +# Copyright 2023-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LUA_COMPAT=( lua5-{3,4} ) +PYTHON_COMPAT=( python3_{11..14} ) + +inherit cmake flag-o-matic lua-single python-single-r1 toolchain-funcs + +DESCRIPTION="The RPM Package Manager" +HOMEPAGE="https://rpm.org/ https://github.com/rpm-software-management/rpm" +SRC_URI="https://ftp.osuosl.org/pub/rpm/releases/rpm-$(ver_cut 1-2).x/${P}.tar.bz2" + +LICENSE="GPL-2 LGPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" +IUSE="acl audit bzip2 caps berkdb doc dbus iconv lzma nls openmp python + readline selinux +sequoia +sqlite +zstd" +REQUIRED_USE=" + ${LUA_REQUIRED_USE} + python? ( ${PYTHON_REQUIRED_USE} ) +" +# Tests run against a Fedora container. +RESTRICT="test" + +DEPEND=" + ${LUA_DEPS} + app-arch/libarchive:= + >=app-crypt/gnupg-1.2 + >=dev-lang/perl-5.8.8 + dev-libs/elfutils + >=dev-libs/popt-1.7 + sys-apps/file + >=sys-libs/zlib-1.2.3-r1 + acl? ( virtual/acl ) + audit? ( sys-process/audit ) + bzip2? ( >=app-arch/bzip2-1.0.1 ) + caps? ( >=sys-libs/libcap-2.0 ) + dbus? ( sys-apps/dbus ) + iconv? ( virtual/libiconv ) + lzma? ( app-arch/xz-utils ) + nls? ( virtual/libintl ) + python? ( ${PYTHON_DEPS} ) + readline? ( sys-libs/readline:= ) + selinux? ( sys-libs/libselinux ) + sequoia? ( >=app-crypt/rpm-sequoia-1.9.0 ) + !sequoia? ( dev-libs/libgcrypt:= ) + sqlite? ( dev-db/sqlite:3 ) + zstd? ( app-arch/zstd:= ) +" +BDEPEND=" + app-text/scdoc + virtual/pkgconfig + doc? ( app-text/doxygen ) + nls? ( sys-devel/gettext ) +" +RDEPEND=" + ${DEPEND} + selinux? ( sec-policy/selinux-rpm ) +" + +PATCHES=( + "${FILESDIR}"/${PN}-6.0.0-musl-compat.patch + "${FILESDIR}"/${PN}-4.20.0-libdir.patch + "${FILESDIR}"/${PN}-6.0.0-no-hardened.patch +) + +pkg_pretend() { + [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp +} + +pkg_setup() { + lua-single_pkg_setup + + use python && python-single-r1_pkg_setup + + # bug #779769 + [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp +} + +src_configure() { + local mycmakeargs=( + -DENABLE_NDB=ON + -DENABLE_TESTSUITE=OFF + -DWITH_FSVERITY=OFF + -DWITH_IMAEVM=OFF + -DWITH_FAPOLICYD=OFF + -DWITH_OPENSSL=OFF + -DWITH_LIBDW=ON + -DWITH_LIBELF=ON + -DENABLE_BDB_RO=$(usex berkdb) + -DENABLE_NLS=$(usex nls) + -DENABLE_OPENMP=$(usex openmp) + -DENABLE_PYTHON=$(usex python) + -DENABLE_SQLITE=$(usex sqlite) + -DWITH_CAP=$(usex caps) + -DWITH_ACL=$(usex acl) + -DWITH_SELINUX=$(usex selinux) + -DWITH_DBUS=$(usex dbus) + -DWITH_AUDIT=$(usex audit) + -DWITH_SEQUOIA=$(usex sequoia) + -DWITH_READLINE=$(usex readline) + -DWITH_BZIP2=$(usex bzip2) + -DWITH_ICONV=$(usex iconv) + -DWITH_ZSTD=$(usex zstd) + -DWITH_LIBLZMA=$(usex lzma) + -DWITH_DOXYGEN=$(usex doc) + # Upstream expects these paths to be relative, but cmake.eclass + # sets them as absolute paths. bug #954379 + -DCMAKE_INSTALL_INFODIR=share/info + -DCMAKE_INSTALL_MANDIR=share/man + ) + + # special handling for ASAN + # https://github.com/rpm-software-management/rpm/commit/ca8d1cf3f401d89ad3507aed8d7a70ad37026ca7 + if is-flagq -fsanitize=address; then + mycmakeargs+=( -DENABLE_ASAN=ON ) + fi + + cmake_src_configure +} + +src_test() { + eninja -C "${BUILD_DIR}" check +} + +src_install() { + cmake_src_install + + dodoc CREDITS README + + use python && python_optimize +} + +pkg_postinst() { + if [[ -f "${EROOT}"/var/lib/rpm/rpmdb.sqlite ]] ; then + einfo "RPM database found... Rebuilding database (may take a while)..." + "${EROOT}"/usr/bin/rpmdb --rebuilddb --root="${EROOT}/" || die + else + einfo "No RPM database found... Creating database..." + "${EROOT}"/usr/bin/rpmdb --initdb --root="${EROOT}/" || die + fi +}