guru/eclass/mpv-plugin.eclass
Nicola Smaniotto 9c439330e6
mpv-plugin.eclass: recursive doins
Some plugins, like mpv_sponsorblock, install a folder

Signed-off-by: Nicola Smaniotto <smaniotto.nicola@gmail.com>
2022-05-31 15:13:21 +02:00

155 lines
3.7 KiB
Bash

# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: mpv-plugin.eclass
# @MAINTAINER:
# Nicola Smaniotto <smaniotto.nicola@gmail.com>
# @AUTHOR:
# Nicola Smaniotto <smaniotto.nicola@gmail.com>
# @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_has_main
# @INTERNAL
# @USAGE:
# @DESCRIPTION:
# Checks for the existance of a file named main. This means the plugin needs
# all files to be installed together, and mpv will only run the one called main.
_mpv-plugin_has_main() {
[[ " ${MPV_PLUGIN_FILES[*]} " =~ " main."[[:alnum:]]+" " ]]
}
# @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
local MPV_INSTALL_DIR="/usr/$(get_libdir)/mpv"
if _mpv-plugin_has_main; then
MPV_INSTALL_DIR+="/${PN}"
fi
insinto "${MPV_INSTALL_DIR}"
for f in "${MPV_PLUGIN_FILES[@]}"; do
doins -r "${f}"
done
use autoload && if _mpv-plugin_has_main; then
dosym -r "${MPV_INSTALL_DIR}" "/etc/mpv/scripts/${PN}"
else
for f in "${MPV_PLUGIN_FILES[@]}"; do
dosym -r "${MPV_INSTALL_DIR}/${f}" "/etc/mpv/scripts/${f}"
done
fi
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"
if _mpv-plugin_has_main; then
elog " \"${EPREFIX}/usr/$(get_libdir)/mpv/${PN}\""
else
for f in "${MPV_PLUGIN_FILES[@]}"; do
elog " \"${EPREFIX}/usr/$(get_libdir)/mpv/${f}\""
done
fi
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