summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /eclass/gstreamer.eclass
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'eclass/gstreamer.eclass')
-rw-r--r--eclass/gstreamer.eclass279
1 files changed, 279 insertions, 0 deletions
diff --git a/eclass/gstreamer.eclass b/eclass/gstreamer.eclass
new file mode 100644
index 000000000000..aef8bf57a344
--- /dev/null
+++ b/eclass/gstreamer.eclass
@@ -0,0 +1,279 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+# @ECLASS: gstreamer.eclass
+# @MAINTAINER:
+# gstreamer@gentoo.org
+# @AUTHOR:
+# Michał Górny <mgorny@gentoo.org>
+# Gilles Dartiguelongue <eva@gentoo.org>
+# Saleem Abdulrasool <compnerd@gentoo.org>
+# foser <foser@gentoo.org>
+# zaheerm <zaheerm@gentoo.org>
+# @BLURB: Helps building core & split gstreamer 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 dependencies.
+#
+# GStreamer consuming applications should depend on the specific plugins
+# they need as defined in their source code. Usually you can find that
+# out by grepping the source tree for 'factory_make'. If it uses playbin
+# plugin, consider adding media-plugins/gst-plugins-meta dependency, but
+# also list any packages that provide explicitly requested plugins.
+
+inherit eutils multilib multilib-minimal toolchain-funcs versionator
+
+case "${EAPI:-0}" in
+ 5)
+ ;;
+ 0|1|2|3|4)
+ die "EAPI=\"${EAPI:-0}\" is not supported anymore"
+ ;;
+ *)
+ die "EAPI=\"${EAPI}\" is not supported yet"
+ ;;
+esac
+
+# @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 xz. This is
+# because the gstreamer mirrors are moving to only have xz tarballs for
+# new releases.
+: ${GST_TARBALL_SUFFIX:="xz"}
+
+# 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"; GST_MIN_PV="0.10.36-r2" ;;
+ 1.*) SLOT="1.0"; GST_MIN_PV="1.2.4-r1" ;;
+ *) die "Unkown gstreamer release."
+esac
+
+S="${WORKDIR}/${GST_ORG_MODULE}-${PV}"
+
+RDEPEND="
+ >=dev-libs/glib-2.38.2-r1:2[${MULTILIB_USEDEP}]
+ >=media-libs/gstreamer-${GST_MIN_PV}:${SLOT}[${MULTILIB_USEDEP}]
+"
+DEPEND="
+ >=sys-apps/sed-4
+ >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]
+"
+
+# Export common multilib phases.
+multilib_src_configure() { gstreamer_multilib_src_configure; }
+
+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}[${MULTILIB_USEDEP}]"
+
+ # Export multilib phases used for split builds.
+ multilib_src_compile() { gstreamer_multilib_src_compile; }
+ multilib_src_install() { gstreamer_multilib_src_install; }
+ multilib_src_install_all() { gstreamer_multilib_src_install_all; }
+else
+ IUSE="nls"
+ DEPEND="${DEPEND} nls? ( >=sys-devel/gettext-0.17 )"
+fi
+
+if [[ ${SLOT} == "0.10" ]]; then
+ RDEPEND="${RDEPEND}
+ abi_x86_32? (
+ !app-emulation/emul-linux-x86-gstplugins[-abi_x86_32(-)]
+ )"
+fi
+
+DEPEND="${DEPEND} ${RDEPEND}"
+
+# @FUNCTION: gstreamer_environment_reset
+# @INTERNAL
+# @DESCRIPTION:
+# Clean up environment for clean builds.
+# >=dev-lang/orc-0.4.23 rely on environment variables to find a place to
+# allocate files to mmap.
+gstreamer_environment_reset() {
+ export XDG_RUNTIME_DIR="${T}/run"
+ mkdir -p "${XDG_RUNTIME_DIR}"
+ # This directory needs to be owned by the user, and chmod 0700
+ # http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+ chmod 0700 "${XDG_RUNTIME_DIR}"
+}
+
+# @FUNCTION: gstreamer_get_plugins
+# @INTERNAL
+# @DESCRIPTION:
+# Get the list of plugins requiring external dependencies.
+gstreamer_get_plugins() {
+ # Must be called from src_prepare/src_configure
+ GST_PLUGINS_LIST=$(sed -rn 's/^AG_GST_CHECK_FEATURE\((\w+),.*/ \1 /p' \
+ "${ECONF_SOURCE:-${S}}"/configure.* | LC_ALL='C' tr '[:upper:]' '[:lower:]')
+}
+
+# @FUNCTION: gstreamer_get_plugin_dir
+# @USAGE: gstreamer_get_plugin_dir [<build_dir>]
+# @INTERNAL
+# @DESCRIPTION:
+# Finds plugin build directory and output it.
+# Defaults to ${GST_PLUGINS_BUILD_DIR} if argument is not provided
+gstreamer_get_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}..." >&2
+ echo sys/${build_dir}
+ else
+ einfo "Building external plugin in ${build_dir}..." >&2
+ echo ext/${build_dir}
+ fi
+}
+
+# @FUNCTION: gstreamer_system_link
+# @USAGE: gstreamer_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.
+gstreamer_system_link() {
+ local pdir directory libs pkgconfig pc tuple
+ pkgconfig=$(tc-getPKG_CONFIG)
+
+ for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
+ pdir=$(gstreamer_get_plugin_dir ${plugin_dir})
+
+ for tuple in $@ ; do
+ directory=${tuple%:*}
+ pc=${tuple#*:}-${SLOT}
+ libs="$(${pkgconfig} --libs-only-l ${pc} || die)"
+ sed -e "s:\$(top_builddir)/${directory}/.*\.la:${libs}:" \
+ -i "${pdir}"/Makefile.{am,in} || die
+ done
+ done
+}
+
+# @FUNCTION: gstreamer_multilib_src_configure
+# @DESCRIPTION:
+# Handles logic common to configuring gstreamer plugins
+gstreamer_multilib_src_configure() {
+ local plugin gst_conf=() ECONF_SOURCE=${ECONF_SOURCE:-${S}}
+
+ gstreamer_get_plugins
+ gstreamer_environment_reset
+
+ for plugin in ${GST_PLUGINS_LIST} ; do
+ if has ${plugin} ${GST_PLUGINS_BUILD} ; then
+ gst_conf+=( --enable-${plugin} )
+ else
+ gst_conf+=( --disable-${plugin} )
+ fi
+ done
+
+ if grep -q "ORC_CHECK" "${ECONF_SOURCE}"/configure.* ; then
+ if in_iuse orc ; then
+ gst_conf+=( $(use_enable orc) )
+ else
+ gst_conf+=( --disable-orc )
+ fi
+ fi
+
+ if grep -q "AM_MAINTAINER_MODE" "${ECONF_SOURCE}"/configure.* ; then
+ gst_conf+=( --disable-maintainer-mode )
+ fi
+
+ if grep -q "disable-schemas-compile" "${ECONF_SOURCE}"/configure ; then
+ gst_conf+=( --disable-schemas-compile )
+ fi
+
+ if [[ ${PN} == ${GST_ORG_MODULE} ]]; then
+ 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: gstreamer_multilib_src_compile
+# @DESCRIPTION:
+# Compiles requested gstreamer plugin.
+gstreamer_multilib_src_compile() {
+ local plugin_dir
+
+ for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
+ emake -C "$(gstreamer_get_plugin_dir ${plugin_dir})"
+ done
+}
+
+# @FUNCTION: gstreamer_multilib_src_install
+# @DESCRIPTION:
+# Installs requested gstreamer plugin.
+gstreamer_multilib_src_install() {
+ local plugin_dir
+
+ for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
+ emake -C "$(gstreamer_get_plugin_dir ${plugin_dir})" \
+ DESTDIR="${D}" install
+ done
+}
+
+# @FUNCTION: gstreamer_multilib_src_install_all
+# @DESCRIPTION:
+# Installs documentation for requested gstreamer plugin, and removes .la
+# files.
+gstreamer_multilib_src_install_all() {
+ local plugin_dir
+
+ for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
+ local dir=$(gstreamer_get_plugin_dir ${plugin_dir})
+ [[ -e ${dir}/README ]] && dodoc "${dir}"/README
+ done
+
+ prune_libtool_files --modules
+}