* [gentoo-dev] New eclass: gstreamer.eclass (replacement for gst-plugins*.eclass)
@ 2014-06-09 19:59 99% Michał Górny
0 siblings, 0 replies; 1+ results
From: Michał Górny @ 2014-06-09 19:59 UTC (permalink / raw
To: gentoo-dev
[-- Attachment #1.1: Type: text/plain, Size: 1089 bytes --]
Hello,
For some time I've been working on bringing multilib gstreamer
into the tree. Following recent review by gstreamer team, I would like
to submit the new eclass for a wider opinion.
The gstreamer.eclass intends to replace all of gst-plugins* eclasses.
It provides routines suitable for building 'base' packages of
gst-plugins-{base,good,bad,ugly} sets and plugins split out of them. It
is built on top of multilib-minimal to provide complete multilib
support, and provides reusable multilib sub-phases
(gstreamer_multilib_src_configure etc.).
I've also tried to fix some of the uglyness, and removed some
deprecated/unused functions from gst-plugins10.eclass. And replaced
the four split eclasses that set GST_ORG_MODULE and inherited
gst-plugins10 with explicit GST_ORG_MODULE assignments.
In case anyone would like to see some ebuilds using the eclass, they
are available in gst-multilib-r2 branch of my working tree:
https://bitbucket.org/mgorny/gx86-working-tree/src/gst-multilib-r2/media-plugins/?at=gst-multilib-r2
--
Best regards,
Michał Górny
[-- Attachment #1.2: gstreamer.eclass --]
[-- Type: text/plain, Size: 8150 bytes --]
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/gst-plugins10.eclass,v 1.12 2014/04/05 09:19:19 tetromino Exp $
# @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" ;;
1.*) SLOT="1.0" ;;
*) die "Unkown gstreamer release."
esac
S="${WORKDIR}/${GST_ORG_MODULE}-${PV}"
RDEPEND="
dev-libs/glib:2[${MULTILIB_USEDEP}]
media-libs/gstreamer:${SLOT}[${MULTILIB_USEDEP}]
"
DEPEND="
>=sys-apps/sed-4
virtual/pkgconfig[${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_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
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
}
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 949 bytes --]
^ permalink raw reply [relevance 99%]
Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2014-06-09 19:59 99% [gentoo-dev] New eclass: gstreamer.eclass (replacement for gst-plugins*.eclass) Michał Górny
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox