commit: ce3b957642e8aff38a6c923b8a5bc79ef9f20729 Author: Nicola Smaniotto <smaniotto.nicola <AT> gmail <DOT> com> AuthorDate: Thu Apr 14 09:13:00 2022 +0000 Commit: Nicola Smaniotto <smaniotto.nicola <AT> gmail <DOT> com> CommitDate: Thu Apr 14 09:26:30 2022 +0000 URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=ce3b9576
mpv-plugin.eclass: new eclass Signed-off-by: Nicola Smaniotto <smaniotto.nicola <AT> gmail.com> eclass/mpv-plugin.eclass | 128 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) diff --git a/eclass/mpv-plugin.eclass b/eclass/mpv-plugin.eclass new file mode 100644 index 000000000..01212adec --- /dev/null +++ b/eclass/mpv-plugin.eclass @@ -0,0 +1,128 @@ +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: mpv-plugin.eclass +# @MAINTAINER: +# Nicola Smaniotto <[email protected]> +# @AUTHOR: +# Nicola Smaniotto <[email protected]> +# @SUPPORTED_EAPIS: 8 +# @BLURB: install mpv plugins +# @DESCRIPTION: +# This eclass simplifies the installation of mpv plugins into system-wide +# directories. Also handles the mpv dependency and provides an USE flag +# for automatic loading of the plugin. + +case ${EAPI:-0} in + 8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} unsupported." +esac + +EXPORT_FUNCTIONS src_install pkg_postinst + +# @ECLASS_VARIABLE: USE_MPV +# @DEFAULT_UNSET +# @PRE_INHERIT +# @DESCRIPTION: +# Controls adding media-video/mpv dependency. The allowed values are: +# +# - rdepend -- add it to RDEPEND +# +# - depend -- add it to DEPEND+RDEPEND with the binding slot operator (the +# default) + +# @ECLASS_VARIABLE: MPV_REQ_USE +# @DEFAULT_UNSET +# @PRE_INHERIT +# @DESCRIPTION: +# The list of USE flags required to be enabled on mpv, formed as a +# USE-dependency string. +# +# Example: +# @CODE@ +# MPV_REQ_USE="lua" +# @CODE@ + +if [[ ! ${_MPV_PLUGIN_ECLASS} ]]; then + +# @FUNCTION: _mpv-plugin_set_globals +# @INTERNAL +# @USAGE: +# @DESCRIPTION: +# Sets all the global output variables provided by this eclass. +# This function must be called once, in global scope. +_mpv-plugin_set_globals() { + local MPV_PKG_DEP + + SLOT="0" + IUSE="+autoload" + + MPV_PKG_DEP="media-video/mpv" + case ${USE_MPV:-depend} in + rdepend) + ;; + depend) + MPV_PKG_DEP+=":=" + ;; + *) + die "Invalid USE_MPV=${USE_MPV}" + ;; + esac + if [ ${MPV_REQ_USE} ]; then + MPV_PKG_DEP+="[${MPV_REQ_USE}]" + fi + + RDEPEND="${MPV_PKG_DEP}" + if [[ ${USE_MPV} == depend ]]; then + DEPEND="${MPV_PKG_DEP}" + fi +} +_mpv-plugin_set_globals + +# @ECLASS_VARIABLE: MPV_PLUGIN_FILES +# @DEFAULT_UNSET +# @REQUIRED +# @DESCRIPTION: +# Array containing the list of files to be installed. + +# @FUNCTION: mpv-plugin_src_install +# @USAGE: +# @DESCRIPTION: +# Install the specified files in ${D} and symlink them if the autoload flag is +# set. +# The ebuild must specify the file list in the MPV_PLUGIN_FILES array. +mpv-plugin_src_install() { + if [[ ! ${MPV_PLUGIN_FILES} ]]; then + die "${ECLASS}: no files specified in MPV_PLUGIN_FILES, cannot install" + fi + + insinto /usr/$(get_libdir)/mpv + for f in "${MPV_PLUGIN_FILES[@]}"; do + doins "${f}" + use autoload && dosym -r "/usr/$(get_libdir)/mpv/${f}" "/etc/mpv/scripts/${f}" + done + + einstalldocs +} + +# @FUNCTION: mpv-plugin_pkg_postinst +# @USAGE: +# @DESCRIPTION: +# Warns the user of the existence of the autoload use flag. +mpv-plugin_pkg_postinst() { + if ! use autoload; then + elog + elog "The plugin has not been installed to /etc/mpv/scripts for autoloading." + elog "You have to activate it manually by passing" + for f in "${MPV_PLUGIN_FILES[@]}"; do + elog " \"${EPREFIX}/usr/$(get_libdir)/mpv/${f}\"" + done + elog "as script option to mpv or symlinking the library to \"scripts/\" in your mpv" + elog "config directory." + elog "Alternatively, activate the autoload use flag." + elog + fi +} + +_MPV_PLUGIN_ECLASS=1 +fi
