net-fs/openafs-kernel: remove vulnerable versions
[gentoo.git] / eclass / gst-plugins10.eclass
1 # Copyright 1999-2014 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Id$
4
5 # @ECLASS: gst-plugins10.eclass
6 # @MAINTAINER:
7 # gstreamer@gentoo.org
8 # @AUTHOR:
9 # Gilles Dartiguelongue <eva@gentoo.org>
10 # Saleem Abdulrasool <compnerd@gentoo.org>
11 # foser <foser@gentoo.org>
12 # zaheerm <zaheerm@gentoo.org>
13 # @BLURB: Manages build for invididual ebuild for gst-plugins.
14 # @DESCRIPTION:
15 # Eclass to make external gst-plugins emergable on a per-plugin basis and
16 # to solve the problem with gst-plugins generating far too much unneeded
17 # dependancies.
18 #
19 # GStreamer consuming applications should depend on the specific plugins they
20 # need as defined in their source code.
21 #
22 # In case of spider usage, obtain recommended plugins to use from Gentoo
23 # developers responsible for gstreamer <gstreamer@gentoo.org> or the application
24 # developer.
25
26 inherit eutils multilib toolchain-funcs versionator
27
28 GST_EXPF=""
29 case "${EAPI:-0}" in
30         2|3|4|5)
31                 GST_EXPF="src_configure src_compile src_install"
32                 ;;
33         1)
34                 GST_EXPF="src_compile src_install"
35                 ;;
36         0)
37                 die "EAPI=\"${EAPI:-0}\" is not supported anymore"
38                 ;;
39         *)
40                 die "EAPI=\"${EAPI}\" is not supported yet"
41                 ;;
42 esac
43 EXPORT_FUNCTIONS ${GST_EXPF}
44
45 # @ECLASS-VARIABLE: GST_LA_PUNT
46 # @DESCRIPTION:
47 # Should we delete all the .la files?
48 # NOT to be used without due consideration.
49 # Defaults to no for EAPI < 5.
50 if has "${EAPI:-0}" 0 1 2 3; then
51         : ${GST_LA_PUNT:="no"}
52 else
53         : ${GST_LA_PUNT:="yes"}
54 fi
55
56 # @ECLASS-VARIABLE: GST_PLUGINS_BUILD
57 # @DESCRIPTION:
58 # Defines the plugins to be built.
59 # May be set by an ebuild and contain more than one indentifier, space
60 # seperated (only src_configure can handle mutiple plugins at this time).
61 : ${GST_PLUGINS_BUILD:=${PN/gst-plugins-/}}
62
63 # @ECLASS-VARIABLE: GST_PLUGINS_BUILD_DIR
64 # @DESCRIPTION:
65 # Actual build directory of the plugin.
66 # Most often the same as the configure switch name.
67 : ${GST_PLUGINS_BUILD_DIR:=${PN/gst-plugins-/}}
68
69 # @ECLASS-VARIABLE: GST_TARBALL_SUFFIX
70 # @DESCRIPTION:
71 # Most projects hosted on gstreamer.freedesktop.org mirrors provide tarballs as
72 # tar.bz2 or tar.xz. This eclass defaults to bz2 for EAPI 0, 1, 2, 3 and
73 # defaults to xz for everything else. This is because the gstreamer mirrors
74 # are moving to only have xz tarballs for new releases.
75 if has "${EAPI:-0}" 0 1 2 3; then
76         : ${GST_TARBALL_SUFFIX:="bz2"}
77 else
78         : ${GST_TARBALL_SUFFIX:="xz"}
79 fi
80
81 # Even though xz-utils are in @system, they must still be added to DEPEND; see
82 # https://archives.gentoo.org/gentoo-dev/msg_a0d4833eb314d1be5d5802a3b710e0a4.xml
83 if [[ ${GST_TARBALL_SUFFIX} == "xz" ]]; then
84         DEPEND="${DEPEND} app-arch/xz-utils"
85 fi
86
87 # @ECLASS-VARIABLE: GST_ORG_MODULE
88 # @DESCRIPTION:
89 # Name of the module as hosted on gstreamer.freedesktop.org mirrors.
90 # Leave unset if package name matches module name.
91 : ${GST_ORG_MODULE:=$PN}
92
93 # @ECLASS-VARIABLE: GST_ORG_PVP
94 # @INTERNAL
95 # @DESCRIPTION:
96 # Major and minor numbers of the version number.
97 : ${GST_ORG_PVP:=$(get_version_component_range 1-2)}
98
99
100 DESCRIPTION="${BUILD_GST_PLUGINS} plugin for gstreamer"
101 HOMEPAGE="http://gstreamer.freedesktop.org/"
102 SRC_URI="http://gstreamer.freedesktop.org/src/${GST_ORG_MODULE}/${GST_ORG_MODULE}-${PV}.tar.${GST_TARBALL_SUFFIX}"
103
104 LICENSE="GPL-2"
105 case ${GST_ORG_PVP} in
106         0.10) SLOT="0.10" ;;
107         1.*) SLOT="1.0" ;;
108         *) die "Unkown gstreamer release."
109 esac
110
111 S="${WORKDIR}/${GST_ORG_MODULE}-${PV}"
112
113 RDEPEND="
114         >=dev-libs/glib-2.6:2
115         media-libs/gstreamer:${SLOT}
116 "
117 DEPEND="
118         >=sys-apps/sed-4
119         virtual/pkgconfig
120 "
121
122 if [[ ${PN} != ${GST_ORG_MODULE} ]]; then
123         # Do not run test phase for invididual plugin ebuilds.
124         RESTRICT="test"
125         RDEPEND="${RDEPEND} >=media-libs/${GST_ORG_MODULE}-${PV}:${SLOT}"
126 else
127         IUSE="nls"
128         DEPEND="${DEPEND} nls? ( >=sys-devel/gettext-0.17 )"
129 fi
130
131 #if [[ ${SLOT} == "0.10" ]]; then
132 # XXX: verify with old ebuilds.
133 # DEPEND="${DEPEND} dev-libs/liboil"
134 #fi
135
136 DEPEND="${DEPEND} ${RDEPEND}"
137
138 # @FUNCTION: gst-plugins10_get_plugins
139 # @INTERNAL
140 # @DESCRIPTION:
141 # Get the list of plugins requiring external dependencies.
142 gst-plugins10_get_plugins() {
143         # Must be called from src_prepare/src_configure
144         GST_PLUGINS_LIST=$(sed -rn 's/^AG_GST_CHECK_FEATURE\((\w+),.*/ \1 /p' \
145                 "${S}"/configure.* | LC_ALL='C' tr '[:upper:]' '[:lower:]')
146 }
147
148 # @FUNCTION: gst-plugins10_find_plugin_dir
149 # @USAGE: gst-plugins10_find_plugin_dir [<build_dir>]
150 # @INTERNAL
151 # @DESCRIPTION:
152 # Finds plugin build directory and cd to it.
153 # Defaults to ${GST_PLUGINS_BUILD_DIR} if argument is not provided
154 gst-plugins10_find_plugin_dir() {
155         local build_dir=${1:-${GST_PLUGINS_BUILD_DIR}}
156
157         if [[ ! -d ${S}/ext/${build_dir} ]]; then
158                 if [[ ! -d ${S}/sys/${build_dir} ]]; then
159                         ewarn "No such plugin directory"
160                         die
161                 fi
162                 einfo "Building system plugin in ${build_dir}..."
163                 cd "${S}"/sys/${build_dir}
164         else
165                 einfo "Building external plugin in ${build_dir}..."
166                 cd "${S}"/ext/${build_dir}
167         fi
168 }
169
170 # @FUNCTION: gst-plugins10_system_link
171 # @USAGE: gst-plugins10_system_link gst-libs/gst/audio:gstreamer-audio [...]
172 # @DESCRIPTION:
173 # Walks through makefiles in order to make sure build will link against system
174 # librairies.
175 # Takes a list of path fragments and corresponding pkgconfig libraries
176 # separated by colon (:). Will replace the path fragment by the output of
177 # pkgconfig.
178 gst-plugins10_system_link() {
179         local directory libs pkgconfig pc tuple
180         pkgconfig=$(tc-getPKG_CONFIG)
181
182         for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
183                 gst-plugins10_find_plugin_dir ${plugin_dir}
184
185                 for tuple in $@ ; do
186                         directory="$(echo ${tuple} | cut -f1 -d':')"
187                         pc="$(echo ${tuple} | cut -f2 -d':')-${SLOT}"
188                         libs="$(${pkgconfig} --libs-only-l ${pc})"
189                         sed -e "s:\$(top_builddir)/${directory}/.*\.la:${libs}:" \
190                                 -i Makefile.am Makefile.in || die
191                 done
192         done
193 }
194
195 # @FUNCTION: gst-plugins10_remove_unversioned_binaries
196 # @INTERNAL
197 # @DESCRIPTION:
198 # Remove the unversioned binaries gstreamer provides to prevent file collision
199 # with other slots. DEPRECATED
200 gst-plugins10_remove_unversioned_binaries() {
201         cd "${D}"/usr/bin
202         local gst_bins
203         for gst_bins in *-${SLOT} ; do
204                 [[ -e ${gst_bins} ]] || continue
205                 rm ${gst_bins/-${SLOT}/}
206                 einfo "Removed ${gst_bins/-${SLOT}/}"
207         done
208 }
209
210 # @FUNCTION: gst-plugins10_src_configure
211 # @DESCRIPTION:
212 # Handles logic common to configuring gstreamer plugins
213 gst-plugins10_src_configure() {
214         local plugin gst_conf
215
216         if has ${EAPI:-0} 0 1 2 3 ; then
217                 gst_conf="${gst_conf} --disable-dependency-tracking"
218         fi
219
220         if has ${EAPI:-0} 0 1 2 3 4 ; then
221                 gst_conf="${gst_conf} --disable-silent-rules"
222         fi
223
224         gst-plugins10_get_plugins
225
226         for plugin in ${GST_PLUGINS_LIST} ; do
227                 if has ${plugin} ${GST_PLUGINS_BUILD} ; then
228                         gst_conf="${gst_conf} --enable-${plugin}"
229                 else
230                         gst_conf="${gst_conf} --disable-${plugin}"
231                 fi
232         done
233
234         if grep -q "ORC_CHECK" configure.* ; then
235                 if in_iuse orc ; then
236                         gst_conf="${gst_conf} $(use_enable orc)"
237                 else
238                         gst_conf="${gst_conf} --disable-orc"
239                 fi
240         fi
241
242         if grep -q "AM_MAINTAINER_MODE" configure.* ; then
243                 gst_conf="${gst_conf} --disable-maintainer-mode"
244         fi
245
246         if grep -q "disable-schemas-compile" configure ; then
247                 gst_conf="${gst_conf} --disable-schemas-compile"
248         fi
249
250         if [[ ${PN} == ${GST_ORG_MODULE} ]]; then
251                 gst_conf="${gst_conf} $(use_enable nls)"
252         fi
253
254         einfo "Configuring to build ${GST_PLUGINS_BUILD} plugin(s) ..."
255         econf \
256                 --with-package-name="Gentoo GStreamer ebuild" \
257                 --with-package-origin="https://www.gentoo.org" \
258                 ${gst_conf} $@
259 }
260
261 # @FUNCTION: gst-plugins10_src_compile
262 # @DESCRIPTION:
263 # Compiles requested gstreamer plugin.
264 gst-plugins10_src_compile() {
265         local plugin_dir
266         
267         has ${EAPI:-0} 0 1 && gst-plugins10_src_configure "$@"
268
269         for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
270                 gst-plugins10_find_plugin_dir ${plugin_dir}
271
272                 if has "${EAPI:-0}" 0 1 2 3 ; then
273                         emake || die
274                 else
275                         default
276                 fi
277         done
278 }
279
280 # @FUNCTION: gst-plugins10_src_install
281 # @DESCRIPTION:
282 # Installs requested gstreamer plugin.
283 gst-plugins10_src_install() {
284         local plugin_dir
285         
286         for plugin_dir in ${GST_PLUGINS_BUILD_DIR} ; do
287                 gst-plugins10_find_plugin_dir ${plugin_dir}
288
289                 if has "${EAPI:-0}" 0 1 2 3 ; then
290                         emake install DESTDIR="${D}" || die
291                         [[ -e README ]] && dodoc README
292                 else
293                         default
294                 fi
295         done
296
297         [[ ${GST_LA_PUNT} = "yes" ]] && prune_libtool_files --modules
298 }
299