1*4882a593SmuzhiyunSUMMARY = "The RPM package management system" 2*4882a593SmuzhiyunDESCRIPTION = "The RPM Package Manager (RPM) is a powerful command line driven \ 3*4882a593Smuzhiyunpackage management system capable of installing, uninstalling, \ 4*4882a593Smuzhiyunverifying, querying, and updating software packages. Each software \ 5*4882a593Smuzhiyunpackage consists of an archive of files along with information about \ 6*4882a593Smuzhiyunthe package like its version, a description, etc." 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunSUMMARY:${PN}-dev = "Development files for manipulating RPM packages" 9*4882a593SmuzhiyunDESCRIPTION:${PN}-dev = "This package contains the RPM C library and header files. These \ 10*4882a593Smuzhiyundevelopment files will simplify the process of writing programs that \ 11*4882a593Smuzhiyunmanipulate RPM packages and databases. These files are intended to \ 12*4882a593Smuzhiyunsimplify the process of creating graphical package managers or any \ 13*4882a593Smuzhiyunother tools that need an intimate knowledge of RPM packages in order \ 14*4882a593Smuzhiyunto function." 15*4882a593Smuzhiyun 16*4882a593SmuzhiyunSUMMARY:python3-rpm = "Python bindings for apps which will manupulate RPM packages" 17*4882a593SmuzhiyunDESCRIPTION:python3-rpm = "The python3-rpm package contains a module that permits applications \ 18*4882a593Smuzhiyunwritten in the Python programming language to use the interface \ 19*4882a593Smuzhiyunsupplied by the RPM Package Manager libraries." 20*4882a593Smuzhiyun 21*4882a593SmuzhiyunHOMEPAGE = "http://www.rpm.org" 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun# libraries are also LGPL - how to express this? 24*4882a593SmuzhiyunLICENSE = "GPL-2.0-only" 25*4882a593SmuzhiyunLIC_FILES_CHKSUM = "file://COPYING;md5=c4eec0c20c6034b9407a09945b48a43f" 26*4882a593Smuzhiyun 27*4882a593SmuzhiyunSRC_URI = "git://github.com/rpm-software-management/rpm;branch=rpm-4.17.x;protocol=https \ 28*4882a593Smuzhiyun file://environment.d-rpm.sh \ 29*4882a593Smuzhiyun file://0001-Do-not-add-an-unsatisfiable-dependency-when-building.patch \ 30*4882a593Smuzhiyun file://0001-Do-not-read-config-files-from-HOME.patch \ 31*4882a593Smuzhiyun file://0001-When-cross-installing-execute-package-scriptlets-wit.patch \ 32*4882a593Smuzhiyun file://0001-Do-not-reset-the-PATH-environment-variable-before-ru.patch \ 33*4882a593Smuzhiyun file://0002-Add-support-for-prefixing-etc-from-RPM_ETCCONFIGDIR-.patch \ 34*4882a593Smuzhiyun file://0001-Do-not-hardcode-lib-rpm-as-the-installation-path-for.patch \ 35*4882a593Smuzhiyun file://0001-Add-a-color-setting-for-mips64_n32-binaries.patch \ 36*4882a593Smuzhiyun file://0001-perl-disable-auto-reqs.patch \ 37*4882a593Smuzhiyun file://0016-rpmscript.c-change-logging-level-around-scriptlets-t.patch \ 38*4882a593Smuzhiyun file://0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch \ 39*4882a593Smuzhiyun file://0001-tools-Add-error.h-for-non-glibc-case.patch \ 40*4882a593Smuzhiyun file://0001-docs-do-not-build-manpages-requires-pandoc.patch \ 41*4882a593Smuzhiyun file://0001-build-pack.c-do-not-insert-payloadflags-into-.rpm-me.patch \ 42*4882a593Smuzhiyun file://0001-configure.ac-add-linux-gnux32-variant-to-triplet-han.patch \ 43*4882a593Smuzhiyun " 44*4882a593Smuzhiyun 45*4882a593SmuzhiyunPE = "1" 46*4882a593SmuzhiyunSRCREV = "5bef402da334595ed9302b8bca1acdf5e88bfe11" 47*4882a593Smuzhiyun 48*4882a593SmuzhiyunS = "${WORKDIR}/git" 49*4882a593Smuzhiyun 50*4882a593SmuzhiyunDEPENDS = "lua libgcrypt file popt xz bzip2 elfutils python3" 51*4882a593SmuzhiyunDEPENDS:append:class-native = " file-replacement-native bzip2-replacement-native" 52*4882a593Smuzhiyun 53*4882a593Smuzhiyuninherit autotools gettext pkgconfig python3native 54*4882a593Smuzhiyunexport PYTHON_ABI 55*4882a593Smuzhiyun 56*4882a593SmuzhiyunAUTOTOOLS_AUXDIR = "${S}/build-aux" 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun# OE-core patches autoreconf to additionally run gnu-configize, which fails with this recipe 59*4882a593SmuzhiyunEXTRA_AUTORECONF:append = " --exclude=gnu-configize" 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun# Vendor is detected differently on x86 and aarch64 hosts and can feed into target packages 62*4882a593SmuzhiyunEXTRA_OECONF:append = " --enable-python --with-crypto=libgcrypt --with-vendor=pc" 63*4882a593SmuzhiyunEXTRA_OECONF:append:libc-musl = " --disable-nls --disable-openmp" 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun# --sysconfdir prevents rpm from attempting to access machine-specific configuration in sysroot/etc; we need to have it in rootfs 66*4882a593Smuzhiyun# --localstatedir prevents rpm from writing its database to native sysroot when building images 67*4882a593Smuzhiyun# Forcibly disable plugins for native/nativesdk, as the inhibit and prioreset 68*4882a593Smuzhiyun# plugins both behave badly inside builds. 69*4882a593SmuzhiyunEXTRA_OECONF:append:class-native = " --sysconfdir=/etc --localstatedir=/var --disable-plugins" 70*4882a593SmuzhiyunEXTRA_OECONF:append:class-nativesdk = " --sysconfdir=/etc --disable-plugins" 71*4882a593Smuzhiyun 72*4882a593SmuzhiyunBBCLASSEXTEND = "native nativesdk" 73*4882a593Smuzhiyun 74*4882a593SmuzhiyunPACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'inhibit', '', d)} sqlite zstd" 75*4882a593Smuzhiyun# The inhibit plugin serves no purpose outside of the target 76*4882a593SmuzhiyunPACKAGECONFIG:remove:class-native = "inhibit" 77*4882a593SmuzhiyunPACKAGECONFIG:remove:class-nativesdk = "inhibit" 78*4882a593Smuzhiyun 79*4882a593SmuzhiyunPACKAGECONFIG[imaevm] = "--with-imaevm,,ima-evm-utils" 80*4882a593SmuzhiyunPACKAGECONFIG[inhibit] = "--enable-inhibit-plugin,--disable-inhibit-plugin,dbus" 81*4882a593SmuzhiyunPACKAGECONFIG[rpm2archive] = "--with-archive,--without-archive,libarchive" 82*4882a593SmuzhiyunPACKAGECONFIG[sqlite] = "--enable-sqlite=yes,--enable-sqlite=no,sqlite3" 83*4882a593SmuzhiyunPACKAGECONFIG[ndb] = "--enable-ndb,--disable-ndb" 84*4882a593SmuzhiyunPACKAGECONFIG[bdb-ro] = "--enable-bdb-ro,--disable-bdb-ro" 85*4882a593SmuzhiyunPACKAGECONFIG[zstd] = "--enable-zstd=yes,--enable-zstd=no,zstd" 86*4882a593Smuzhiyun 87*4882a593SmuzhiyunASNEEDED = "" 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun# Direct rpm-native to read configuration from our sysroot, not the one it was compiled in 90*4882a593Smuzhiyun# libmagic also has sysroot path contamination, so override it 91*4882a593Smuzhiyun 92*4882a593SmuzhiyunWRAPPER_TOOLS = " \ 93*4882a593Smuzhiyun ${bindir}/rpm \ 94*4882a593Smuzhiyun ${bindir}/rpm2archive \ 95*4882a593Smuzhiyun ${bindir}/rpm2cpio \ 96*4882a593Smuzhiyun ${bindir}/rpmbuild \ 97*4882a593Smuzhiyun ${bindir}/rpmdb \ 98*4882a593Smuzhiyun ${bindir}/rpmgraph \ 99*4882a593Smuzhiyun ${bindir}/rpmkeys \ 100*4882a593Smuzhiyun ${bindir}/rpmsign \ 101*4882a593Smuzhiyun ${bindir}/rpmspec \ 102*4882a593Smuzhiyun ${libdir}/rpm/rpmdeps \ 103*4882a593Smuzhiyun" 104*4882a593Smuzhiyun 105*4882a593Smuzhiyundo_configure:prepend() { 106*4882a593Smuzhiyun mkdir -p ${S}/build-aux 107*4882a593Smuzhiyun} 108*4882a593Smuzhiyun 109*4882a593Smuzhiyundo_install:append:class-native() { 110*4882a593Smuzhiyun for tool in ${WRAPPER_TOOLS}; do 111*4882a593Smuzhiyun test -x ${D}$tool && create_wrapper ${D}$tool \ 112*4882a593Smuzhiyun RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \ 113*4882a593Smuzhiyun RPM_ETCCONFIGDIR=${STAGING_DIR_NATIVE} \ 114*4882a593Smuzhiyun MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc \ 115*4882a593Smuzhiyun RPM_NO_CHROOT_FOR_SCRIPTS=1 116*4882a593Smuzhiyun done 117*4882a593Smuzhiyun} 118*4882a593Smuzhiyun 119*4882a593Smuzhiyundo_install:append:class-nativesdk() { 120*4882a593Smuzhiyun for tool in ${WRAPPER_TOOLS}; do 121*4882a593Smuzhiyun test -x ${D}$tool && create_wrapper ${D}$tool \ 122*4882a593Smuzhiyun RPM_CONFIGDIR='`dirname $''realpath`'/${@os.path.relpath(d.getVar('libdir'), d.getVar('bindir'))}/rpm \ 123*4882a593Smuzhiyun RPM_ETCCONFIGDIR='$'{RPM_ETCCONFIGDIR-'`dirname $''realpath`'/${@os.path.relpath(d.getVar('sysconfdir'), d.getVar('bindir'))}/..} \ 124*4882a593Smuzhiyun MAGIC='`dirname $''realpath`'/${@os.path.relpath(d.getVar('datadir'), d.getVar('bindir'))}/misc/magic.mgc \ 125*4882a593Smuzhiyun RPM_NO_CHROOT_FOR_SCRIPTS=1 126*4882a593Smuzhiyun done 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun rm -rf ${D}/var 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d 131*4882a593Smuzhiyun install -m 644 ${WORKDIR}/environment.d-rpm.sh ${D}${SDKPATHNATIVE}/environment-setup.d/rpm.sh 132*4882a593Smuzhiyun} 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun# Rpm's make install creates var/tmp which clashes with base-files packaging 135*4882a593Smuzhiyundo_install:append:class-target() { 136*4882a593Smuzhiyun rm -rf ${D}/var 137*4882a593Smuzhiyun} 138*4882a593Smuzhiyundo_install:append:class-nativesdk() { 139*4882a593Smuzhiyun rm -rf ${D}${SDKPATHNATIVE}/var 140*4882a593Smuzhiyun} 141*4882a593Smuzhiyun 142*4882a593Smuzhiyundo_install:append () { 143*4882a593Smuzhiyun sed -i -e 's:${HOSTTOOLS_DIR}/::g' \ 144*4882a593Smuzhiyun ${D}/${libdir}/rpm/macros 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun} 147*4882a593Smuzhiyun 148*4882a593SmuzhiyunFILES:${PN} += "${libdir}/rpm-plugins/*.so \ 149*4882a593Smuzhiyun " 150*4882a593SmuzhiyunFILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}/environment-setup.d/rpm.sh" 151*4882a593Smuzhiyun 152*4882a593SmuzhiyunFILES:${PN}-dev += "${libdir}/rpm-plugins/*.la \ 153*4882a593Smuzhiyun " 154*4882a593SmuzhiyunPACKAGE_BEFORE_PN += "${PN}-build ${PN}-sign ${PN}-archive" 155*4882a593Smuzhiyun 156*4882a593SmuzhiyunRRECOMMENDS:${PN} += "rpm-sign rpm-archive" 157*4882a593Smuzhiyun 158*4882a593SmuzhiyunFILES:${PN}-build = "\ 159*4882a593Smuzhiyun ${bindir}/rpmbuild \ 160*4882a593Smuzhiyun ${bindir}/gendiff \ 161*4882a593Smuzhiyun ${bindir}/rpmspec \ 162*4882a593Smuzhiyun ${libdir}/librpmbuild.so.* \ 163*4882a593Smuzhiyun ${libdir}/rpm/brp-* \ 164*4882a593Smuzhiyun ${libdir}/rpm/check-* \ 165*4882a593Smuzhiyun ${libdir}/rpm/debugedit \ 166*4882a593Smuzhiyun ${libdir}/rpm/sepdebugcrcfix \ 167*4882a593Smuzhiyun ${libdir}/rpm/find-debuginfo.sh \ 168*4882a593Smuzhiyun ${libdir}/rpm/find-lang.sh \ 169*4882a593Smuzhiyun ${libdir}/rpm/*provides* \ 170*4882a593Smuzhiyun ${libdir}/rpm/*requires* \ 171*4882a593Smuzhiyun ${libdir}/rpm/*deps* \ 172*4882a593Smuzhiyun ${libdir}/rpm/*.prov \ 173*4882a593Smuzhiyun ${libdir}/rpm/*.req \ 174*4882a593Smuzhiyun ${libdir}/rpm/config.* \ 175*4882a593Smuzhiyun ${libdir}/rpm/mkinstalldirs \ 176*4882a593Smuzhiyun ${libdir}/rpm/macros.p* \ 177*4882a593Smuzhiyun ${libdir}/rpm/fileattrs/* \ 178*4882a593Smuzhiyun" 179*4882a593Smuzhiyun 180*4882a593SmuzhiyunFILES:${PN}-sign = "\ 181*4882a593Smuzhiyun ${bindir}/rpmsign \ 182*4882a593Smuzhiyun ${libdir}/librpmsign.so.* \ 183*4882a593Smuzhiyun" 184*4882a593Smuzhiyun 185*4882a593SmuzhiyunFILES:${PN}-archive = "\ 186*4882a593Smuzhiyun ${bindir}/rpm2archive \ 187*4882a593Smuzhiyun" 188*4882a593Smuzhiyun 189*4882a593SmuzhiyunPACKAGES += "python3-rpm" 190*4882a593SmuzhiyunPROVIDES += "python3-rpm" 191*4882a593SmuzhiyunFILES:python3-rpm = "${PYTHON_SITEPACKAGES_DIR}/rpm/*" 192*4882a593Smuzhiyun 193*4882a593SmuzhiyunRDEPENDS:${PN}-build = "bash perl python3-core" 194*4882a593Smuzhiyun 195*4882a593SmuzhiyunPACKAGE_PREPROCESS_FUNCS += "rpm_package_preprocess" 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun# Do not specify a sysroot when compiling on a target. 198*4882a593Smuzhiyunrpm_package_preprocess () { 199*4882a593Smuzhiyun sed -i -e 's:--sysroot[^ ]*::g' \ 200*4882a593Smuzhiyun ${PKGD}/${libdir}/rpm/macros 201*4882a593Smuzhiyun} 202*4882a593Smuzhiyun 203*4882a593SmuzhiyunSSTATE_HASHEQUIV_FILEMAP = " \ 204*4882a593Smuzhiyun populate_sysroot:*/rpm/macros:${TMPDIR} \ 205*4882a593Smuzhiyun populate_sysroot:*/rpm/macros:${COREBASE} \ 206*4882a593Smuzhiyun " 207