commit: 58fa9b589bcdae2c7e9bdaa7ac34a0a32a18f631 Author: Andrew Ammerlaan <andrewammerlaan <AT> riseup <DOT> net> AuthorDate: Wed Dec 16 12:38:35 2020 +0000 Commit: Aisha Tammy <gentoo <AT> aisha <DOT> cc> CommitDate: Sat Dec 19 14:53:18 2020 +0000 URL: https://gitweb.gentoo.org/proj/sci.git/commit/?id=58fa9b58
eclass/rpm-extended: add eclass Package-Manager: Portage-3.0.12, Repoman-3.0.2 Signed-off-by: Andrew Ammerlaan <andrewammerlaan <AT> riseup.net> Closes: https://github.com/gentoo/sci/pull/996 Signed-off-by: Aisha Tammy <gentoo <AT> aisha.cc> eclass/rpm-extended.eclass | 131 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/eclass/rpm-extended.eclass b/eclass/rpm-extended.eclass new file mode 100644 index 000000000..a4e334fd7 --- /dev/null +++ b/eclass/rpm-extended.eclass @@ -0,0 +1,131 @@ +# Copyright 1999-2020 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: rpm-extended.eclass +# @MAINTAINER: +# Andrew Ammerlaan <[email protected]> +# @AUTHOR: +# Andrew Ammerlaan <[email protected]> +# Extension of the rpm.eclass by Alastair Tse <[email protected]> +# @SUPPORTED_EAPIS: 6 7 +# @BLURB: An eclass that helps automating the creation of ebuilds for software only distributed through rpm +# @DESCRIPTION: +# This extends the rpm eclass to also installs *all* files in the rpm, +# and extracts post/pre(un)install scripts and runs them. +# +# This is mostly useful when creating ebuilds for rpm files in bulk. +# In cases when it is not doable to write a Gentoo specific src_install +# and pkg_post/pre/install/rm functions for each ebuild. + +# The rpm eclass provides the pkg_unpack function we need +inherit rpm + +case "${EAPI:-0}" in + 0|1|2|3|4|5) + die "Unsupported EAPI=${EAPI:-0} (too old) for ${ECLASS}" + ;; + 6|7) + ;; + *) + die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}" + ;; +esac + +# Need rpm to extract scripts +if [[ ${EAPI} == [7] ]]; then + BDEPEND="app-arch/rpm" +else + DEPEND="app-arch/rpm" +fi + +# Otherwise we get the S does not exist error +S="${WORKDIR}" +# Everything in the rpm is prebuilt +QA_PREBUILT="*" + +# @FUNCTION: rpm-extended_src_compile +# @DESCRIPTION: +# As everything in the rpm file is prebuilt +# we do not need to compile anything, therefore +# we add an empty src_compile function to avoid +# errors. +rpm-extended_src_compile() { + # Nothing to do here + return +} + +# @FUNCTION: rpm-extended_src_install +# @DESCRIPTION: +# The rpm has been extracted by the pkg_unpack +# function from rpm.eclass. Now we just copy +# everything over to the image directory, while +# preserving permissions. If something is installed +# to /usr/share/doc we move everything in there to +# the correct Gentoo specific location: /usr/share/doc/${PF} +rpm-extended_src_install() { + cp -a "${S}"/* "${ED}" + if [ -d "${ED}/usr/share/doc/" ]; then + # If this package contains docs, move to gentoo specific dir + mkdir "${ED}/usr/share/doc/${PF}" || die + for file in "${ED}/usr/share/doc"/* ; do + if [[ "${file}" == "${ED}/usr/share/doc/${PF}" ]]; then + continue + fi + mv "${file}" "${ED}/usr/share/doc/${PF}" || die + done + fi +} + +# @FUNCTION: rpm-extended_pkg_preinst +# @DESCRIPTION: +# Some rpm files contain a preinstall script, +# we extract this script, write it to a file +# and execute it in the correct phase +rpm-extended_pkg_preinst() { + for x in ${A}; do + rpm -qp --scripts "${DISTDIR}/${x}" | sed -n '/preinstall scriptlet (using \/bin\/sh):/,/scriptlet (using \/bin\/sh)/{//!p;}' > "preinst-${x}.sh" + chmod +x "preinst-${x}.sh" + bash "preinst-${x}.sh" + done +} + +# @FUNCTION: rpm-extended_pkg_postinst +# @DESCRIPTION: +# Some rpm files contain a postinstall script, +# we extract this script, write it to a file +# and execute it in the correct phase +rpm-extended_pkg_postinst() { + for x in ${A}; do + rpm -qp --scripts "${DISTDIR}/${x}" | sed -n '/postinstall scriptlet (using \/bin\/sh):/,/scriptlet (using \/bin\/sh)/{//!p;}' > "postinst-${x}.sh" + chmod +x "postinst-${x}.sh" + bash "postinst-${x}.sh" + done +} + +# @FUNCTION: rpm-extended_pkg_prerm +# @DESCRIPTION: +# Some rpm files contain a preuninstall script, +# we extract this script, write it to a file +# and execute it in the correct phase +rpm-extended_pkg_prerm() { + for x in ${A}; do + rpm -qp --scripts "${DISTDIR}/${x}" | sed -n '/preuninstall scriptlet (using \/bin\/sh):/,/scriptlet (using \/bin\/sh)/{//!p;}' > "prerm-${x}.sh" + chmod +x "prerm-${x}.sh" + bash "prerm-${x}.sh" + done +} + +# @FUNCTION: rpm-extended_pkg_postrm +# @DESCRIPTION: +# Some rpm files contain a postuninstall script, +# we extract this script, write it to a file +# and execute it in the correct phase +rpm-extended_pkg_postrm() { + for x in ${A}; do + rpm -qp --scripts "${DISTDIR}/${x}" | sed -n '/postuninstall scriptlet (using \/bin\/sh):/,/scriptlet (using \/bin\/sh)/{//!p;}' > "postrm-${x}.sh" + chmod +x "postrm-${x}.sh" + bash "postrm-${x}.sh" + done +} + +EXPORT_FUNCTIONS src_compile src_install pkg_preinst pkg_postinst pkg_prerm pkg_postrm
