Removing eclasses - Harder than you might think.
authorMichael Sterrett <mr_bones_@gentoo.org>
Wed, 10 Nov 2004 01:44:17 +0000 (01:44 +0000)
committerMichael Sterrett <mr_bones_@gentoo.org>
Wed, 10 Nov 2004 01:44:17 +0000 (01:44 +0000)
eclass/xmms-plugin.eclass [new file with mode: 0644]

diff --git a/eclass/xmms-plugin.eclass b/eclass/xmms-plugin.eclass
new file mode 100644 (file)
index 0000000..6914e42
--- /dev/null
@@ -0,0 +1,271 @@
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/eclass/xmms-plugin.eclass,v 1.10 2004/11/10 01:44:17 mr_bones_ Exp $
+#
+# Jeremy Huddleston <eradicator@gentoo.org>
+#
+# Usage:
+# The main purpose of this eclass is to simplify installing xmms plugins
+# which for the various players that support the xmms API (mainly xmms and
+# bmp, but this can be expanded to noxmms as well).
+#
+# The package is assumed to work by default with xmms.  If it will not work
+# with BMP, then set NOBMP=1 in the ebuild.
+#
+# Source Code:
+# You have multiple methods with which to specify how we get the source code
+# for the patckages.
+#
+# (1) - Separate tarballs
+# If your package provides separate tarballs for the xmms and bmp plugins,
+# then specify them in the XMMS_SRC_URI and BMP_SRC_URI variables.
+# XMMS_SRC_URI="xmms-plugin.tar.bz2"
+# BMP_SRC_URI="bmp-plugin.tar.bz2"
+# BASE_SRC_URI="common-stuff.tar.bz2"
+#
+# (2) - xmms->bmp patch
+# If you have a patch to turn an xmms plugin into a bmp plugin, specify it
+# in the variable XMMS2BMP_PATCH:
+# XMMS2BMP_PATCH="${FILESDIR}/${P}-xmms2bmp.patch"
+#
+# (3) - automated
+# The eclass will try to do some sedage to get the plugin to work with bmp.
+#
+# Common patches:
+# If you have patches that need to apply to both xmms and bmp sources,
+# Place them in the PATCHES variable:
+# PATCHES="${FILESDIR}/${P}-gcc34.patch ${FILESDIR}/${P}-config.patch"
+#
+# Source Location:
+# By default, we assume a ${S} of ${XMMS_S} or ${BMP_S} for the two packages.
+# These default to ${XMMS_WORKDIR}/${P} or ${BMP_WORKDIR}/${P}.
+# ${XMMS_WORKDIR} and ${BMP_WORKDIR}/${P} default to ${WORKDIR}/xmms and
+# ${WORKDIR}/bmp.  You may override ${*_S}, but not the ${*_WORKDIR}.
+#
+# Documentation:
+# Set the DOCS variable to contain the documentation to be dodocd:
+# DOCS="ChangeLog AUTHORS README"
+#
+# Install:
+# Set the XMMS_PLUGIN_INSTALL variable to control how src_install works
+# 'einstall' - use 'einstall' to install
+# 'destdir'  - use 'make DESTDIR="${D}" install || die' to install
+# 'doexe' - use 'doexe' to install
+# destdir is default
+#
+# The 'myins_xmms' and 'myins_bmp' variables are used to add extra arguments
+# to the install line.  They are optional for einstall and destdir, but they're
+# required for doexe.  For doexe, you need to specify the plugin type in the
+# 'xmms_plugin_type' variable' and the location of the plugin in the 'myins_*'
+# variable.
+#
+
+inherit eutils libtool gnuconfig
+
+ECLASS=xmms-plugin
+INHERITED="${INHERITED} ${ECLASS}"
+
+if [ "${NOXMMS}" != "1" ]; then
+       IUSE="${IUSE} xmms"
+       DEPEND="${DEPEND}
+               xmms? ( media-sound/xmms )"
+
+       RDEPEND="${RDEPEND}
+                xmms? ( media-sound/xmms )"
+
+       if [ -n "${BMP2XMMS_PATCH}" ]; then
+               SRC_URI="${SRC_URI}
+                        xmms? ( ${XMMS_SRC_URI} 
+                                ${BMP_SRC_URI} )"
+       elif [ -n "${XMMS_SRC_URI}" ]; then
+               SRC_URI="${SRC_URI}
+                        xmms? ( ${XMMS_SRC_URI} )"
+       fi
+
+       XMMS_WORKDIR="${WORKDIR}/xmms"
+       if [ -z "${XMMS_S}" ]; then
+               XMMS_S="${XMMS_WORKDIR}/${P}"
+       fi
+fi
+
+if [ "${NOBMP}" != "1" ]; then
+       IUSE="${IUSE} bmp"
+       DEPEND="${DEPEND}
+               bmp? ( >=media-sound/beep-media-player-0.9.7_rc2-r2 
+                      dev-util/pkgconfig )"
+
+       RDEPEND="${RDEPEND}
+               bmp? ( >=media-sound/beep-media-player-0.9.7_rc2-r2 )"
+
+       if [ -n "${XMMS2BMP_PATCH}" ]; then
+               SRC_URI="${SRC_URI}
+                        bmp? ( ${XMMS_SRC_URI} 
+                                ${BMP_SRC_URI} )"
+       elif [ -n "${BMP_SRC_URI}" ]; then
+               SRC_URI="${SRC_URI}
+                        bmp? ( ${BMP_SRC_URI} )"
+       fi
+
+       BMP_WORKDIR="${WORKDIR}/bmp"
+       if [ -z "${BMP_S}" ]; then
+               BMP_S="${BMP_WORKDIR}/${P}"
+       fi
+fi
+
+SRC_URI="${BASE_SRC_URI} ${SRC_URI}"
+
+# Set S to something which exists
+S="${WORKDIR}"
+
+xmms-plugin_src_unpack() {
+       if do_xmms; then
+               mkdir ${XMMS_WORKDIR}
+               cd ${XMMS_WORKDIR}
+
+               XMMS_A=""
+               if [ -z "${BASE_SRC_URI}${XMMS_SRC_URI}${BMP_SRC_URI}" ]; then
+                       XMMS_A=${A}
+               elif [ -n "${BMP2XMMS_PATCH}" ]; then
+                       for f in ${XMMS_SRC_URI} ${BMP_SRC_URI} ${BASE_SRC_URI}; do
+                               XMMS_A="${XMMS_A} `basename ${f}`"
+                       done
+               else
+                       for f in ${XMMS_SRC_URI} ${BASE_SRC_URI}; do
+                               XMMS_A="${XMMS_A} `basename ${f}`"
+                       done
+               fi
+               
+               unpack ${XMMS_A}
+
+               cd ${XMMS_S}
+               if [ -n "${PATCHES}" ]; then
+                       epatch ${PATCHES}
+               fi
+               if [ -n "${BMP2XMMS_PATCH}" ]; then
+                       epatch ${BMP2XMMS_PATCH}
+               fi
+
+               elibtoolize
+               gnuconfig_update
+       fi
+
+       if do_bmp; then
+               mkdir ${BMP_WORKDIR}
+               cd ${BMP_WORKDIR}
+
+               BMP_A=""
+               if [ -z "${BASE_SRC_URI}${XMMS_SRC_URI}${BMP_SRC_URI}" ]; then
+                       BMP_A=${A}
+               elif [ -n "${XMMS2BMP_PATCH}" ]; then
+                       for f in ${XMMS_SRC_URI} ${BMP_SRC_URI} ${BASE_SRC_URI}; do
+                               BMP_A="${BMP_A} `basename ${f}`"
+                       done
+               else
+                       for f in ${BMP_SRC_URI} ${BASE_SRC_URI}; do
+                               BMP_A="${BMP_A} `basename ${f}`"
+                       done
+               fi
+               
+               unpack ${BMP_A}
+
+               cd ${BMP_S}
+               if [ -n "${PATCHES}" ]; then
+                       epatch ${PATCHES}
+               fi
+               if [ -n "${XMMS2BMP_PATCH}" ]; then
+                       epatch ${XMMS2BMP_PATCH}
+               elif [ -z "${BMP_SRC_URI}" ]; then
+                       xmms2bmp_automate
+               fi
+
+               elibtoolize
+               gnuconfig_update
+       fi
+}
+
+xmms-plugin_src_compile() {
+       myconf="${myconf} --disable-static"
+
+       if do_xmms; then
+               cd ${XMMS_S}
+               econf ${myconf} ${xmms_myconf} || die
+               emake || die
+       fi
+
+       if do_bmp; then
+               cd ${BMP_S}
+               export FAKE_XMMS_VERSION=1.2.10
+               econf ${myconf} ${bmp_myconf} || die
+               emake || die
+       fi
+}
+
+xmms-plugin_src_install() {
+       if [ -z "${XMMS_PLUGIN_INSTALL}" ]; then
+               XMMS_PLUGIN_INSTALL="destdir"
+       fi
+
+       case ${XMMS_PLUGIN_INSTALL} in
+       einstall)
+               if do_xmms; then
+                       cd ${XMMS_S}
+                       einstall ${myins_xmms}
+               fi
+
+               if do_bmp; then
+                       cd ${BMP_S}
+                       einstall ${myins_bmp}
+               fi
+       ;;
+       destdir)
+               if do_xmms; then
+                       cd ${XMMS_S}
+                       make DESTDIR="${D}" ${myins_xmms} install || die
+               fi
+
+               if do_bmp; then
+                       cd ${BMP_S}
+                       make DESTDIR="${D}" ${myins_bmp} install || die
+               fi
+       ;;
+       doexe)
+               if do_xmms; then
+                       xmms-config --${xmms_plugin_type}-plugin-dir >& /dev/null || die "Invalid xmms_plugin_type specified"
+                       cd ${XMMS_S}
+                       exeinto `xmms-config --${xmms_plugin_type}-plugin-dir`
+                       doexe ${myins_xmms} || die
+               fi
+
+               if do_bmp; then
+                       beep-config --${xmms_plugin_type}-plugin-dir >& /dev/null || die "Invalid xmms_plugin_type specified"
+                       cd ${BMP_S}
+                       exeinto `beep-config --${xmms_plugin_type}-plugin-dir`
+                       doexe ${myins_bmp} || die
+               fi
+       ;;
+       *)
+               die "Invalid XMMS_PLUGIN_INSTALL specified: ${XMMS_PLUGIN_INSTALL}"
+       ;;
+       esac
+
+       if [ -n "${DOCS}" ]; then
+               dodoc ${DOCS}
+       fi
+}
+
+xmms2bmp_automate() {
+       find . -name Makefile -o -name Makefile.in -o -name configure |
+               xargs sed -i -e 's:xmms-config:beep-config:g' \
+                            -e 's:libdir)/xmms:libdir)/bmp:g' \
+                            -e 's:-lxmms:-lbeep:g'
+}
+
+do_xmms() {
+       use xmms && [ "${NOXMMS}" != "1" ]
+}
+
+do_bmp() {
+       use bmp && [ "${NOBMP}" != "1" ]
+}
+
+EXPORT_FUNCTIONS src_unpack src_compile src_install