aboutsummaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorAndrew Ammerlaan <andrewammerlaan@riseup.net>2020-12-16 13:38:35 +0100
committerAisha Tammy <gentoo@aisha.cc>2020-12-19 14:53:18 +0000
commit58fa9b589bcdae2c7e9bdaa7ac34a0a32a18f631 (patch)
tree3cb492ac6c47dc7836da566bbca72db6f628a09e /eclass
parentsys-kernel/dkms: dynamic kernel module support (diff)
downloadsci-58fa9b589bcdae2c7e9bdaa7ac34a0a32a18f631.tar.gz
sci-58fa9b589bcdae2c7e9bdaa7ac34a0a32a18f631.tar.bz2
sci-58fa9b589bcdae2c7e9bdaa7ac34a0a32a18f631.zip
eclass/rpm-extended: add eclass
Package-Manager: Portage-3.0.12, Repoman-3.0.2 Signed-off-by: Andrew Ammerlaan <andrewammerlaan@riseup.net> Closes: https://github.com/gentoo/sci/pull/996 Signed-off-by: Aisha Tammy <gentoo@aisha.cc>
Diffstat (limited to 'eclass')
-rw-r--r--eclass/rpm-extended.eclass131
1 files changed, 131 insertions, 0 deletions
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 <andrewammerlaan@riseup.net>
+# @AUTHOR:
+# Andrew Ammerlaan <andrewammerlaan@riseup.net>
+# Extension of the rpm.eclass by Alastair Tse <liquidx@gentoo.org>
+# @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