# Copyright 2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: mpv-plugin.eclass # @MAINTAINER: # Nicola Smaniotto # @AUTHOR: # Nicola Smaniotto # @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 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