summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'eclass/gst-plugins10.eclass')
-rw-r--r--eclass/gst-plugins10.eclass299
1 files changed, 299 insertions, 0 deletions
diff --git a/eclass/gst-plugins10.eclass b/eclass/gst-plugins10.eclass
new file mode 100644
index 000000000000..0a6b0db79b0c
--- /dev/null
+++ b/eclass/gst-plugins10.eclass
@@ -0,0 +1,299 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+# @ECLASS: gst-plugins10.eclass
+# @MAINTAINER:
+# gstreamer@gentoo.org
+# @AUTHOR:
+# Gilles Dartiguelongue <eva@gentoo.org>
+# Saleem Abdulrasool <compnerd@gentoo.org>
+# foser <foser@gentoo.org>
+# zaheerm <zaheerm@gentoo.org>
+# @BLURB: Manages build for invididual ebuild for gst-plugins.
+# @DESCRIPTION:
+# Eclass to make external gst-plugins emergable on a per-plugin basis and
+# to solve the problem with gst-plugins generating far too much unneeded
+# dependancies.
+#
+# GStreamer consuming applications should depend on the specific plugins they
+# need as defined in their source code.
+#
+# In case of spider usage, obtain recommended plugins to use from Gentoo
+# developers responsible for gstreamer <gstreamer@gentoo.org> or the application
+# developer.
+
+inherit eutils multilib toolchain-funcs versionator
+
+GST_EXPF=""
+case "${EAPI:-0}" in
+ 2|3|4|5)
+ GST_EXPF="src_configure src_compile src_install"
+ ;;
+ 1)
+ GST_EXPF="src_compile src_install"
+ ;;
+ 0)
+ die "EAPI=\"${EAPI:-0}\" is not supported anymore"
+ ;;
+ *)
+ die "EAPI=\"${EAPI}\" is not supported yet"
+ ;;
+esac
+EXPORT_FUNCTIONS ${GST_EXPF}
+
+# @ECLASS-VARIABLE: GST_LA_PUNT
+# @DESCRIPTION:
+# Should we delete all the .la files?
+# NOT to be used without due consideration.
+# Defaults to no for EAPI < 5.
+if has "${EAPI:-0}" 0 1 2 3; then
+ : ${GST_LA_PUNT:="no"}
+else
+ : ${GST_LA_PUNT:="yes"}
+fi
+
+# @ECLASS-VARIABLE: GST_PLUGINS_BUILD
+# @DESCRIPTION:
+# Defines the plugins to be built.
+# May be set by an ebuild and contain more than one indentifier, space
+# seperated (only src_configure can handle mutiple plugins at this time).
+: ${GST_PLUGINS_BUILD:=${PN/gst-plugins-/}}
+
+# @ECLASS-VARIABLE: GST_PLUGINS_BUILD_DIR
+# @DESCRIPTION:
+# Actual build directory of the plugin.
+# Most often the same as the configure switch name.
+: ${GST_PLUGINS_BUILD_DIR:=${PN/gst-plugins-/}}
+
+# @ECLASS-VARIABLE: GST_TARBALL_SUFFIX
+# @DESCRIPTION:
+# Most projects hosted on gstreamer.freedesktop.org mirrors provide tarballs as
+# tar.bz2 or tar.xz. This eclass defaults to bz2 for EAPI 0, 1, 2, 3 and
+# defaults to xz for everything else. This is because the gstreamer mirrors
+# are moving to only have xz tarballs for new releases.
+if has "${EAPI:-0}" 0 1 2 3; then
+ : ${GST_TARBALL_SUFFIX:="bz2"}
+else
+ : ${GST_TARBALL_SUFFIX:="xz"}
+fi
+
+# Even though xz-utils are in @system, they must still be added to DEPEND; see
+# http://archives.gentoo.org/gentoo-dev/msg_a0d4833eb314d1be5d5802a3b710e0a4.xml
+if [[ ${GST_TARBALL_SUFFIX} == "xz" ]]; then
+ DEPEND="${DEPEND} app-arch/xz-utils"
+fi
+
+# @ECLASS-VARIABLE: GST_ORG_MODULE
+# @DESCRIPTION:
+# Name of the module as hosted on gstreamer.freedesktop.org mirrors.
+# Leave unset if package name matches module name.
+: ${GST_ORG_MODULE:=$PN}
+
+# @ECLASS-VARIABLE: GST_ORG_PVP
+# @INTERNAL
+# @DESCRIPTION:
+# Major and minor numbers of the version number.
+: ${GST_ORG_PVP:=$(get_version_component_range 1-2)}
+
+
+DESCRIPTION="${BUILD_GST_PLUGINS} plugin for gstreamer"
+HOMEPAGE="http://gstreamer.freedesktop.org/"
+SRC_URI="http://gstreamer.freedesktop.org/src/${GST_ORG_MODULE}/${GST_ORG_MODULE}-${PV}.tar.${GST_TARBALL_SUFFIX}"
+
+LICENSE="GPL-2"
+case ${GST_ORG_PVP} in
+ 0.10) SLOT="0.10" ;;
+ 1.*) SLOT="1.0" ;;
+ *) die "Unkown gstreamer release."
+esac
+
+S="${WORKDIR}/${GST_ORG_MODULE}-${PV}"
+
+RDEPEND="
+ >=dev-libs/glib-2.6:2
+ media-libs/gstreamer:${SLOT}
+"
+DEPEND="
+ >=sys-apps/sed-4
+ virtual/pkgconfig
+"
+
+if [[ ${PN} != ${GST_ORG_MODULE} ]]; then
+ # Do not run test phase for invididual plugin ebuilds.
+ RESTRICT="test"
+ RDEPEND="${RDEPEND} >=media-libs/${GST_ORG_MODULE}-${PV}:${SLOT}"
+else
+ IUSE="nls"
+ DEPEND="${DEPEND} nls? ( >=sys-devel/gettext-0.17 )"
+fi
+
+#if [[ ${SLOT} == "0.10" ]]; then
+# XXX: verify with old ebuilds.
+# DEPEND="${DEPEND} dev-libs/liboil"
+#fi
+
+DEPEND="${DEPEND} ${RDEPEND}"
+
+# @FUNCTION: gst-plugins10_get_plugins
+# @INTERNAL
+# @DESCRIPTION:
+# Get the list of plugins requiring external dependencies.
+gst-plugins10_get_plugins() {
+ # Must be called from src_prepare/src_configure
+ GST_PLUGINS_LIST=$(sed -rn 's/^AG_GST_CHECK_FEATURE\((\w+),.*/ \1 /p' \
+ "${S}"/configure.* | LC_ALL='C' tr '[:upper:]' '[:lower:]')
+}
+
+# @FUNCTION: gst-plugins10_find_plugin_dir
+# @USAGE: gst-plugins10_find_plugin_dir [<build_dir>]
+# @INTERNAL
+# @DESCRIPTION:
+# Finds plugin build directory and cd to it.
+# Defaults to ${GST_PLUGINS_BUILD_DIR} if argument is not provided
+gst-plugins10_find_plugin_dir() {
+ local build_dir=${1:-${GST_PLUGINS_BUILD_DIR}}
+
+ if [[ ! -d ${S}/ext/${build_dir} ]]; then
+ if [[ ! -d ${S}/sys/${build_dir} ]]; then
+ ewarn "No such plugin directory"
+ die
+ fi
+ einfo "Building system plugin in ${build_dir}..."
+ cd "${S}"/sys/${build_dir}
+ else
+ einfo "Building external plugin in ${build_dir}..."
+ cd "${S}"/ext/${build_dir}
+ fi
+}
+
+# @FUNCTION: gst-plugins10_system_link
+# @USAGE: gst-plugins10_system_link gst-libs/gst/audio:gstreamer-audio [...]
+# @DESCRIPTION:
+# Walks through makefiles in order to make sure build will link against system
+# librairies.
+# Takes a list of path fragments and corresponding pkgconfig libraries
+# separated by colon (:). Will replace the path fragment by the output of
+# pkgconfig.
+gst-plugins10_system_link() {
+ local directory libs pkgconfig pc tuple
+ pkgconfig=$(tc-getPKG_CONFIG)
+
+ for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
+ gst-plugins10_find_plugin_dir ${plugin_dir}
+
+ for tuple in $@ ; do
+ directory="$(echo ${tuple} | cut -f1 -d':')"
+ pc="$(echo ${tuple} | cut -f2 -d':')-${SLOT}"
+ libs="$(${pkgconfig} --libs-only-l ${pc})"
+ sed -e "s:\$(top_builddir)/${directory}/.*\.la:${libs}:" \
+ -i Makefile.am Makefile.in || die
+ done
+ done
+}
+
+# @FUNCTION: gst-plugins10_remove_unversioned_binaries
+# @INTERNAL
+# @DESCRIPTION:
+# Remove the unversioned binaries gstreamer provides to prevent file collision
+# with other slots. DEPRECATED
+gst-plugins10_remove_unversioned_binaries() {
+ cd "${D}"/usr/bin
+ local gst_bins
+ for gst_bins in *-${SLOT} ; do
+ [[ -e ${gst_bins} ]] || continue
+ rm ${gst_bins/-${SLOT}/}
+ einfo "Removed ${gst_bins/-${SLOT}/}"
+ done
+}
+
+# @FUNCTION: gst-plugins10_src_configure
+# @DESCRIPTION:
+# Handles logic common to configuring gstreamer plugins
+gst-plugins10_src_configure() {
+ local plugin gst_conf
+
+ if has ${EAPI:-0} 0 1 2 3 ; then
+ gst_conf="${gst_conf} --disable-dependency-tracking"
+ fi
+
+ if has ${EAPI:-0} 0 1 2 3 4 ; then
+ gst_conf="${gst_conf} --disable-silent-rules"
+ fi
+
+ gst-plugins10_get_plugins
+
+ for plugin in ${GST_PLUGINS_LIST} ; do
+ if has ${plugin} ${GST_PLUGINS_BUILD} ; then
+ gst_conf="${gst_conf} --enable-${plugin}"
+ else
+ gst_conf="${gst_conf} --disable-${plugin}"
+ fi
+ done
+
+ if grep -q "ORC_CHECK" configure.* ; then
+ if in_iuse orc ; then
+ gst_conf="${gst_conf} $(use_enable orc)"
+ else
+ gst_conf="${gst_conf} --disable-orc"
+ fi
+ fi
+
+ if grep -q "AM_MAINTAINER_MODE" configure.* ; then
+ gst_conf="${gst_conf} --disable-maintainer-mode"
+ fi
+
+ if grep -q "disable-schemas-compile" configure ; then
+ gst_conf="${gst_conf} --disable-schemas-compile"
+ fi
+
+ if [[ ${PN} == ${GST_ORG_MODULE} ]]; then
+ gst_conf="${gst_conf} $(use_enable nls)"
+ fi
+
+ einfo "Configuring to build ${GST_PLUGINS_BUILD} plugin(s) ..."
+ econf \
+ --with-package-name="Gentoo GStreamer ebuild" \
+ --with-package-origin="http://www.gentoo.org" \
+ ${gst_conf} $@
+}
+
+# @FUNCTION: gst-plugins10_src_compile
+# @DESCRIPTION:
+# Compiles requested gstreamer plugin.
+gst-plugins10_src_compile() {
+ local plugin_dir
+
+ has ${EAPI:-0} 0 1 && gst-plugins10_src_configure "$@"
+
+ for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
+ gst-plugins10_find_plugin_dir ${plugin_dir}
+
+ if has "${EAPI:-0}" 0 1 2 3 ; then
+ emake || die
+ else
+ default
+ fi
+ done
+}
+
+# @FUNCTION: gst-plugins10_src_install
+# @DESCRIPTION:
+# Installs requested gstreamer plugin.
+gst-plugins10_src_install() {
+ local plugin_dir
+
+ for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
+ gst-plugins10_find_plugin_dir ${plugin_dir}
+
+ if has "${EAPI:-0}" 0 1 2 3 ; then
+ emake install DESTDIR="${D}" || die
+ [[ -e README ]] && dodoc README
+ else
+ default
+ fi
+ done
+
+ [[ ${GST_LA_PUNT} = "yes" ]] && prune_libtool_files --modules
+}
+