diff options
Diffstat (limited to 'eclass/bintron-r1.eclass')
-rw-r--r-- | eclass/bintron-r1.eclass | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/eclass/bintron-r1.eclass b/eclass/bintron-r1.eclass new file mode 100644 index 00000000..76c8ccc0 --- /dev/null +++ b/eclass/bintron-r1.eclass @@ -0,0 +1,174 @@ +# Copyright 2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: bintron-r1.eclass +# @MAINTAINER: +# src_prepare group +# @AUTHOR: +# Alfred Wingate <parona@protonmail.com> +# @SUPPORTED_EAPIS: 8 +# @PROVIDES: chromium-2 xdg +# @BLURB: Common configuration eclass for binary packages built with Electron +# @DESCRIPTION: +# This eclass is used in Electron packages ebuilds + +case ${EAPI} in + 8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; +esac + +if [[ ! ${_BINTRON_R1_ECLASS} ]]; then +_BINTRON_R1_ECLASS=1 + +inherit chromium-2 xdg + +IUSE="system-ffmpeg" + +# musl support? +RDEPEND=" + app-accessibility/at-spi2-core:2 + dev-libs/expat + dev-libs/glib:2 + dev-libs/nspr + dev-libs/nss + media-libs/alsa-lib + media-libs/mesa + net-print/cups + sys-apps/dbus + sys-libs/glibc + x11-libs/cairo + x11-libs/gtk+:3 + x11-libs/libX11 + x11-libs/libXcomposite + x11-libs/libXdamage + x11-libs/libXext + x11-libs/libXfixes + x11-libs/libXrandr + x11-libs/libdrm + x11-libs/libxcb + x11-libs/libxkbcommon + x11-libs/pango + system-ffmpeg? ( >=media-video/ffmpeg-4.3[chromium] ) +" +BDEPEND=" + app-alternatives/gzip + dev-util/patchelf +" +IDEPEND=" + sys-apps/file + sys-apps/findutils +" + +# @VARIABLE: QA_PREBUILT +# @INTERNAL +# @DESCRIPTION: +# QA variable + +# @VARIABLE: QA_PRESTRIPPED +# @INTERNAL +# @DESCRIPTION: +# QA variable + +# The package will be already compiled, +# also most likely the package will be pre-stripped too. +QA_PREBUILT='*' +QA_PRESTRIPPED='*' + +# @ECLASS_VARIABLE: BINTRON_NAME +# @PRE_INHERIT +# @DESCRIPTION: +# Name of the package +: ${BINTRON_NAME:="${PN}"} + +# @ECLASS_VARIABLE: BINTRON_HOME +# @DESCRIPTION: +# Path where the package contents will we installed. +: ${BINTRON_HOME:="/opt/${BINTRON_NAME}/"} + +# @ECLASS_VARIABLE: BINTRON_EXECUTABLES +# @DESCRIPTION: +# List of executable symlinks to create +: ${BINTRON_EXECUTABLES:="${BINTRON_NAME}"} + +# @FUNCTION: bintron-r1_pkg_pretend +# @DESCRIPTION: +# Runs SUID and User namespace checks +bintron-r1_pkg_pretend() { + # see https://github.com/electron/electron/issues/17972 + chromium_suid_sandbox_check_kernel_config +} + +# @FUNCTION: bintron-r1_src_prepare +# @DESCRIPTION: +# Remove pak files. +bintron-r1_src_prepare() { + default + + pushd locales >/dev/null || die "location change for language cleanup failed" + chromium_remove_language_paks + popd >/dev/null || die "location reset for language cleanup failed" + + if [[ -d "${WORKDIR}/usr/share/doc/${BINTRON_NAME}" ]]; then + mv "${WORKDIR}/usr/share/doc/${BINTRON_NAME}/" "${WORKDIR}/usr/share/doc/${PF}" || die + fi + + if [[ -e "${WORKDIR}/usr/share/doc/${PF}/changelog.gz" ]]; then + pushd "${WORKDIR}/usr/share/doc/${PF}" >/dev/null || die + unpack "${WORKDIR}"/usr/share/doc/${PF}/changelog.* + rm "${WORKDIR}"/usr/share/doc/${PF}/changelog.* + popd >/dev/null || die + fi + + if use system-ffmpeg; then + rm libffmpeg.so || die + + local file type + for file in $(find .); do + type=$(file -b --mime-type "${file}") + case ${type} in + application/x-sharedlib|application/x-executable|application/x-pie-executable) + patchelf --add-rpath /usr/$(get_libdir)/chromium ${file} || die + ;; + esac + done + fi +} + +# @FUNCTION: bintron-r1_src_install +# @DESCRIPTION: +# Install +bintron-r1_src_install() { + insinto "${BINTRON_HOME}" + + doins -r "${S}"/* + + local file type + for file in $(find . -type f); do + + # node_modules *shouldn't* have anything which requires executable permissions + if [[ ${file} =~ /node_modules/ ]]; then + continue + fi + + type=$(file -b --mime-type "${file}") + + case ${type} in + application/x-sharedlib|application/x-executable|application/x-pie-executable|text/x-shellscript) + fperms 0755 "${BINTRON_HOME}${file#./}" + ;; + esac + done + + for executable in ${BINTRON_EXECUTABLES[@]}; do + dosym "${EPREFIX}${BINTRON_HOME%/}/${executable}" /usr/bin/${executable} + done + + if [[ -d ${WORKDIR}/usr/share ]]; then + insinto /usr + doins -r "${WORKDIR}"/usr/share + fi +} + +fi + +EXPORT_FUNCTIONS pkg_pretend src_prepare src_install |