/[gentoo-x86]/eclass/vdr-plugin.eclass
Gentoo

Diff of /eclass/vdr-plugin.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.63 Revision 1.79
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2012 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/Attic/vdr-plugin.eclass,v 1.63 2008/06/24 16:43:38 zzam Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/Attic/vdr-plugin.eclass,v 1.79 2012/01/15 20:54:56 idl0r Exp $
4# 4
5# @ECLASS: vdr-plugin.eclass
6# @MAINTAINER:
7# vdr@gentoo.org
8# @BLURB: common vdr plugin ebuild functions
9# @DESCRIPTION:
10# Eclass for easing maitenance of vdr plugin ebuilds
11
5# Author: 12# Author:
6# Matthias Schwarzott <zzam@gentoo.org> 13# Matthias Schwarzott <zzam@gentoo.org>
7# Joerg Bornkessel <hd_brummy@gentoo.org> 14# Joerg Bornkessel <hd_brummy@gentoo.org>
8 15
9# vdr-plugin.eclass 16# Example ebuild (basic version without patching):
10# 17#
11# eclass to create ebuilds for vdr plugins 18# EAPI="2"
12#
13
14# Example ebuild (vdr-femon):
15#
16# inherit vdr-plugin 19# inherit vdr-plugin
17# IUSE="" 20# IUSE=""
18# SLOT="0" 21# SLOT="0"
19# DESCRIPTION="vdr Plugin: DVB Frontend Status Monitor (signal strengt/noise)" 22# DESCRIPTION="vdr Plugin: DVB Frontend Status Monitor (signal strengt/noise)"
20# HOMEPAGE="http://www.saunalahti.fi/~rahrenbe/vdr/femon/" 23# HOMEPAGE="http://www.saunalahti.fi/~rahrenbe/vdr/femon/"
21# SRC_URI="http://www.saunalahti.fi/~rahrenbe/vdr/femon/files/${P}.tgz" 24# SRC_URI="http://www.saunalahti.fi/~rahrenbe/vdr/femon/files/${P}.tgz"
22# LICENSE="GPL-2" 25# LICENSE="GPL-2"
23# KEYWORDS="~x86" 26# KEYWORDS="~x86"
24# DEPEND=">=media-video/vdr-1.3.27" 27# DEPEND=">=media-video/vdr-1.6.0"
25# 28#
26# 29#
30
31# For patching you should modify src_prepare phase:
32#
33# src_prepare() {
34# epatch "${FILESDIR}"/${P}-xxx.patch
35# vdr-plugin_src_prepare
36# }
27 37
28# Installation of a config file for the plugin 38# Installation of a config file for the plugin
29# 39#
30# If ${VDR_CONFD_FILE} is set install this file 40# If ${VDR_CONFD_FILE} is set install this file
31# else install ${FILESDIR}/confd if it exists. 41# else install ${FILESDIR}/confd if it exists.
57# 67#
58# all patches which ending on diff or patch in this DIR will automatically applied 68# all patches which ending on diff or patch in this DIR will automatically applied
59# 69#
60 70
61inherit base multilib eutils flag-o-matic 71inherit base multilib eutils flag-o-matic
72
73if ! has "${EAPI:-0}" 0 1 2 3 4; then
74 die "API of vdr-plugin.eclass in EAPI=\"${EAPI}\" not established"
75fi
62 76
63IUSE="" 77IUSE=""
64 78
65# Name of the plugin stripped from all vdrplugin-, vdr- and -cvs pre- and postfixes 79# Name of the plugin stripped from all vdrplugin-, vdr- and -cvs pre- and postfixes
66VDRPLUGIN="${PN/#vdrplugin-/}" 80VDRPLUGIN="${PN/#vdrplugin-/}"
71 85
72# works in most cases 86# works in most cases
73S="${WORKDIR}/${VDRPLUGIN}-${PV}" 87S="${WORKDIR}/${VDRPLUGIN}-${PV}"
74 88
75# depend on headers for DVB-driver 89# depend on headers for DVB-driver
76DEPEND=">=media-tv/gentoo-vdr-scripts-0.3.8 90COMMON_DEPEND=">=media-tv/gentoo-vdr-scripts-0.4.2"
77 || ( >=media-tv/gentoo-vdr-scripts-0.4.2 >=media-tv/vdrplugin-rebuild-0.2 ) 91
78 >=app-admin/eselect-vdr-0.0.2 92DEPEND="${COMMON_DEPEND}
79 media-tv/linuxtv-dvb-headers" 93 media-tv/linuxtv-dvb-headers"
94RDEPEND="${COMMON_DEPEND}
95 >=app-admin/eselect-vdr-0.0.2"
80 96
97# this is a hack for ebuilds like vdr-xineliboutput that want to
98# conditionally install a vdr-plugin
99if [[ "${GENTOO_VDR_CONDITIONAL:-no}" = "yes" ]]; then
100 # make DEPEND conditional
101 IUSE="${IUSE} vdr"
102 DEPEND="vdr? ( ${DEPEND} )"
103 RDEPEND="vdr? ( ${RDEPEND} )"
104fi
81 105
82# New method of storing plugindb 106# New method of storing plugindb
83# Called from src_install 107# Called from src_install
84# file maintained by normal portage-methods 108# file maintained by normal portage-methods
85create_plugindb_file() { 109create_plugindb_file() {
153 done 177 done
154} 178}
155 179
156fix_vdr_libsi_include() 180fix_vdr_libsi_include()
157{ 181{
158 einfo "Fixing include of libsi-headers" 182 #einfo "Fixing include of libsi-headers"
159 local f 183 local f
160 for f; do 184 for f; do
161 sed -i "${f}" \ 185 sed -i "${f}" \
162 -e '/#include/s:"\(.*libsi.*\)":<\1>:' \ 186 -e '/#include/s:"\(.*libsi.*\)":<\1>:' \
163 -e '/#include/s:<.*\(libsi/.*\)>:<vdr/\1>:' 187 -e '/#include/s:<.*\(libsi/.*\)>:<vdr/\1>:'
183 # To satisfy 1-3 we do this: 207 # To satisfy 1-3 we do this:
184 # Set VDRDIR=/usr/include/vdr 208 # Set VDRDIR=/usr/include/vdr
185 # Set VDRINCDIR=/usr/include 209 # Set VDRINCDIR=/usr/include
186 # Change $(VDRDIR)/include to $(VDRINCDIR) 210 # Change $(VDRDIR)/include to $(VDRINCDIR)
187 211
188 ebegin " Setting paths"
189 sed -i Makefile \ 212 sed -i Makefile \
190 -e "s:^VDRDIR.*$:VDRDIR = ${VDR_INCLUDE_DIR}:" \ 213 -e "s:^VDRDIR.*$:VDRDIR = ${VDR_INCLUDE_DIR}:" \
191 -e "/^VDRDIR/a VDRINCDIR = ${VDR_INCLUDE_DIR%/vdr}" \ 214 -e "/^VDRDIR/a VDRINCDIR = ${VDR_INCLUDE_DIR%/vdr}" \
192 -e '/VDRINCDIR.*=/!s:$(VDRDIR)/include:$(VDRINCDIR):' \ 215 -e '/VDRINCDIR.*=/!s:$(VDRDIR)/include:$(VDRINCDIR):' \
193 \ 216 \
194 -e 's:-I$(DVBDIR)/include::' \ 217 -e 's:-I$(DVBDIR)/include::' \
195 -e 's:-I$(DVBDIR)::' 218 -e 's:-I$(DVBDIR)::'
196 eend 0
197 219
198 # maybe needed for multiproto: 220 # maybe needed for multiproto:
199 #sed -i Makefile \ 221 #sed -i Makefile \
200 # -e "s:^DVBDIR.*$:DVBDIR = ${DVB_INCLUDE_DIR}:" \ 222 # -e "s:^DVBDIR.*$:DVBDIR = ${DVB_INCLUDE_DIR}:" \
201 # -e 's:-I$(DVBDIR)/include:-I$(DVBDIR):' 223 # -e 's:-I$(DVBDIR)/include:-I$(DVBDIR):'
217 239
218 # Disabling file stripping, useful for debugging 240 # Disabling file stripping, useful for debugging
219 sed -i Makefile \ 241 sed -i Makefile \
220 -e '/@.*strip/d' \ 242 -e '/@.*strip/d' \
221 -e '/strip \$(LIBDIR)\/\$@/d' \ 243 -e '/strip \$(LIBDIR)\/\$@/d' \
222 -e '/@.*\$(STRIP)/d' 244 -e 's/STRIP.*=.*$/STRIP = true/'
223 245
224 # Use a file instead of a variable as single-stepping via ebuild 246 # Use a file instead of a variable as single-stepping via ebuild
225 # destroys environment. 247 # destroys environment.
226 touch "${WORKDIR}"/.vdr-plugin_makefile_patched 248 touch "${WORKDIR}"/.vdr-plugin_makefile_patched
227} 249}
243plugin_has_gettext() { 265plugin_has_gettext() {
244 [[ -d po ]] 266 [[ -d po ]]
245} 267}
246 268
247vdr_i18n_convert_to_gettext() { 269vdr_i18n_convert_to_gettext() {
270 if has_version ">=media-video/vdr-1.7.22"; then
271 local i18n_tool="${ROOT}/usr/share/vdr/bin/i18n-to-gettext"
272 else
248 local i18n_tool="${ROOT}/usr/share/vdr/bin/i18n-to-gettext.pl" 273 local i18n_tool="${ROOT}/usr/share/vdr/bin/i18n-to-gettext.pl"
274 fi
249 275
250 if [[ ${NO_GETTEXT_HACK} == "1" ]]; then 276 if [[ ${NO_GETTEXT_HACK} == "1" ]]; then
251 ewarn "Conversion to gettext disabled in ebuild" 277 ewarn "Conversion to gettext disabled in ebuild"
252 return 1 278 return 1
253 fi 279 fi
283 return 1 309 return 1
284 fi 310 fi
285} 311}
286 312
287vdr_i18n_disable_gettext() { 313vdr_i18n_disable_gettext() {
288 ebegin "Disabling gettext support in plugin" 314 #einfo "Disabling gettext support in plugin"
315
289 # Remove i18n Target if using older vdr 316 # Remove i18n Target if using older vdr
290 sed -i Makefile \ 317 sed -i Makefile \
291 -e '/^all:/s/ i18n//' 318 -e '/^all:/s/ i18n//'
292 eend 0
293} 319}
294 320
295vdr_i18n() { 321vdr_i18n() {
296 if vdr_has_gettext; then 322 if vdr_has_gettext; then
297 einfo "VDR has gettext support" 323 #einfo "VDR has gettext support"
298 if plugin_has_gettext; then 324 if plugin_has_gettext; then
299 einfo "Plugin has gettext support, fine" 325 #einfo "Plugin has gettext support, fine"
300 if [[ ${NO_GETTEXT_HACK} == "1" ]]; then 326 if [[ ${NO_GETTEXT_HACK} == "1" ]]; then
301 ewarn "Please remove left over NO_GETTEXT_HACK." 327 ewarn "Please remove unneeded NO_GETTEXT_HACK from ebuild."
302 fi 328 fi
303 else 329 else
304 vdr_i18n_convert_to_gettext 330 vdr_i18n_convert_to_gettext
305 if [[ $? != 0 ]]; then 331 if [[ $? != 0 ]]; then
306 eerror "" 332 eerror ""
307 eerror "Plugin will have only english OSD texts" 333 eerror "Plugin will have only english OSD texts"
308 eerror "it needs manual fixing." 334 eerror "it needs manual fixing."
309 fi 335 fi
310 fi 336 fi
311 else 337 else
312 einfo "VDR has no gettext support" 338 #einfo "VDR has no gettext support"
313 if plugin_has_gettext; then 339 if plugin_has_gettext; then
314 vdr_i18n_disable_gettext 340 vdr_i18n_disable_gettext
315 fi 341 fi
316 fi 342 fi
317} 343}
338 364
339 dosym "${VDRPLUGIN}-${PV}" "${destdir}" 365 dosym "${VDRPLUGIN}-${PV}" "${destdir}"
340} 366}
341 367
342vdr-plugin_print_enable_command() { 368vdr-plugin_print_enable_command() {
369 local p_name c=0 l=""
370 for p_name in ${vdr_plugin_list}; do
371 c=$(( c+1 ))
372 l="$l ${p_name#vdr-}"
373 done
374
343 elog 375 elog
376 case $c in
377 1) elog "Installed plugin${l}" ;;
378 *) elog "Installed $c plugins:${l}" ;;
379 esac
344 elog "To activate this vdr-plugin execute the following command:" 380 elog "To activate a plugin execute this command:"
345 elog "\teselect vdr-plugin enable ${PN#vdr-}" 381 elog "\teselect vdr-plugin enable <plugin_name> ..."
346 elog 382 elog
347} 383}
348 384
385has_vdr() {
386 [[ -f "${VDR_INCLUDE_DIR}"/config.h ]]
387}
349 388
350## exported functions 389## exported functions
351 390
352vdr-plugin_pkg_setup() { 391vdr-plugin_pkg_setup() {
353 # -fPIC is needed for shared objects on some platforms (amd64 and others) 392 # -fPIC is needed for shared objects on some platforms (amd64 and others)
354 append-flags -fPIC 393 append-flags -fPIC
355 394
395 # Plugins need to be compiled with position independent code, otherwise linking
396 # VDR against it will fail
397 if has_version ">=media-video/vdr-1.7.13"; then
398 append-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
399 fi
400
356 # Where should the plugins live in the filesystem 401 # Where should the plugins live in the filesystem
357 VDR_PLUGIN_DIR="/usr/$(get_libdir)/vdr/plugins" 402 VDR_PLUGIN_DIR="/usr/$(get_libdir)/vdr/plugins"
358 VDR_CHECKSUM_DIR="${VDR_PLUGIN_DIR%/plugins}/checksums" 403 VDR_CHECKSUM_DIR="${VDR_PLUGIN_DIR%/plugins}/checksums"
359 404
360 # was /usr/lib/... some time ago 405 # was /usr/lib/... some time ago
364 # Pathes to includes 409 # Pathes to includes
365 VDR_INCLUDE_DIR="/usr/include/vdr" 410 VDR_INCLUDE_DIR="/usr/include/vdr"
366 DVB_INCLUDE_DIR="/usr/include" 411 DVB_INCLUDE_DIR="/usr/include"
367 412
368 TMP_LOCALE_DIR="${WORKDIR}/tmp-locale" 413 TMP_LOCALE_DIR="${WORKDIR}/tmp-locale"
414 if has_version ">=media-video/vdr-1.6.0_p2-r7"; then
415 LOCDIR="/usr/share/locale"
416 else
369 LOCDIR="/usr/share/vdr/locale" 417 LOCDIR="/usr/share/vdr/locale"
418 fi
419
420 if ! has_vdr; then
421 # set to invalid values to detect abuses
422 VDRVERSION="eclass_no_vdr_installed"
423 APIVERSION="eclass_no_vdr_installed"
424
425 if [[ "${GENTOO_VDR_CONDITIONAL:-no}" = "yes" ]] && ! use vdr; then
426 einfo "VDR not found!"
427 else
428 # if vdr is required
429 die "VDR not found!"
430 fi
431 return
432 fi
370 433
371 VDRVERSION=$(awk -F'"' '/define VDRVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h) 434 VDRVERSION=$(awk -F'"' '/define VDRVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h)
372 APIVERSION=$(awk -F'"' '/define APIVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h) 435 APIVERSION=$(awk -F'"' '/define APIVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h)
373 [[ -z ${APIVERSION} ]] && APIVERSION="${VDRVERSION}" 436 [[ -z ${APIVERSION} ]] && APIVERSION="${VDRVERSION}"
374 437
375 einfo "Compiling against" 438 einfo "Compiling against"
376 einfo "\tvdr-${VDRVERSION} [API version ${APIVERSION}]" 439 einfo "\tvdr-${VDRVERSION} [API version ${APIVERSION}]"
440}
441
442vdr-plugin_src_util() {
443
444 while [ "$1" ]; do
445
446 case "$1" in
447 all)
448 vdr-plugin_src_util unpack add_local_patch patchmakefile i18n
449 ;;
450 prepare|all_but_unpack)
451 vdr-plugin_src_util add_local_patch patchmakefile i18n
452 ;;
453 unpack)
454 base_src_unpack
455 ;;
456 add_local_patch)
457 cd "${S}" || die "Could not change to plugin-source-directory!"
458 vdr_add_local_patch
459 ;;
460 patchmakefile)
461 cd "${S}" || die "Could not change to plugin-source-directory!"
462 vdr_patchmakefile
463 ;;
464 i18n)
465 cd "${S}" || die "Could not change to plugin-source-directory!"
466 vdr_i18n
467 ;;
468 esac
469
470 shift
471 done
377} 472}
378 473
379vdr-plugin_src_unpack() { 474vdr-plugin_src_unpack() {
380 if [[ -z ${VDR_INCLUDE_DIR} ]]; then 475 if [[ -z ${VDR_INCLUDE_DIR} ]]; then
381 eerror "Wrong use of vdr-plugin.eclass." 476 eerror "Wrong use of vdr-plugin.eclass."
382 eerror "An ebuild for a vdr-plugin will not work without calling vdr-plugin_pkg_setup." 477 eerror "An ebuild for a vdr-plugin will not work without calling vdr-plugin_pkg_setup."
383 echo 478 echo
384 eerror "Please report this at bugs.gentoo.org." 479 eerror "Please report this at bugs.gentoo.org."
385 die "vdr-plugin_pkg_setup not called!" 480 die "vdr-plugin_pkg_setup not called!"
386 fi 481 fi
387 [ -z "$1" ] && vdr-plugin_src_unpack unpack add_local_patch patchmakefile i18n 482 if [ -z "$1" ]; then
483 case "${EAPI:-0}" in
484 2|3|4)
485 vdr-plugin_src_util unpack
486 ;;
487 *)
488 vdr-plugin_src_util all
489 ;;
490 esac
491
492 else
493 vdr-plugin_src_util $@
494 fi
495}
496
497vdr-plugin_src_prepare() {
498 base_src_prepare
499 vdr-plugin_src_util prepare
500}
501
502vdr-plugin_src_compile() {
503 [ -z "$1" ] && vdr-plugin_src_compile copy_source compile
388 504
389 while [ "$1" ]; do 505 while [ "$1" ]; do
390 506
391 case "$1" in 507 case "$1" in
392 all_but_unpack) 508 copy_source)
393 vdr-plugin_src_unpack add_local_patch patchmakefile i18n
394 ;;
395 unpack)
396 base_src_unpack
397 ;;
398 add_local_patch)
399 cd "${S}" || die "Could not change to plugin-source-directory!"
400 vdr_add_local_patch
401 ;;
402 patchmakefile)
403 cd "${S}" || die "Could not change to plugin-source-directory!"
404 vdr_patchmakefile
405 ;;
406 i18n)
407 cd "${S}" || die "Could not change to plugin-source-directory!"
408 vdr_i18n
409 ;;
410 esac
411
412 shift
413 done
414}
415
416vdr-plugin_src_compile() {
417 [ -z "$1" ] && vdr-plugin_src_compile prepare compile
418
419 while [ "$1" ]; do
420
421 case "$1" in
422 prepare)
423 [[ -n "${VDRSOURCE_DIR}" ]] && vdr-plugin_copy_source_tree 509 [[ -n "${VDRSOURCE_DIR}" ]] && vdr-plugin_copy_source_tree
424 ;; 510 ;;
425 compile) 511 compile)
426 if [[ ! -f ${WORKDIR}/.vdr-plugin_makefile_patched ]]; then 512 if [[ ! -f ${WORKDIR}/.vdr-plugin_makefile_patched ]]; then
427 eerror "Wrong use of vdr-plugin.eclass." 513 eerror "Wrong use of vdr-plugin.eclass."
431 eerror "Please report this at bugs.gentoo.org." 517 eerror "Please report this at bugs.gentoo.org."
432 die "vdr-plugin_src_unpack not called!" 518 die "vdr-plugin_src_unpack not called!"
433 fi 519 fi
434 cd "${S}" 520 cd "${S}"
435 521
522 BUILD_TARGETS=${BUILD_TARGETS:-${VDRPLUGIN_MAKE_TARGET:-all}}
523
436 emake ${BUILD_PARAMS} \ 524 emake ${BUILD_PARAMS} \
437 ${VDRPLUGIN_MAKE_TARGET:-all} \ 525 ${BUILD_TARGETS} \
438 LOCALEDIR="${TMP_LOCALE_DIR}" \ 526 LOCALEDIR="${TMP_LOCALE_DIR}" \
439 LIBDIR="${S}" \ 527 LIBDIR="${S}" \
440 TMPDIR="${T}" \ 528 TMPDIR="${T}" \
441 || die "emake failed" 529 || die "emake failed"
442 ;; 530 ;;
473 cd "${S}" 561 cd "${S}"
474 insinto "${VDR_PLUGIN_DIR}" 562 insinto "${VDR_PLUGIN_DIR}"
475 doins libvdr-*.so.* 563 doins libvdr-*.so.*
476 564
477 # create list of all created plugin libs 565 # create list of all created plugin libs
478 local p_list="" p_name 566 vdr_plugin_list=""
567 local p_name
479 for p in libvdr-*.so.*; do 568 for p in libvdr-*.so.*; do
480 p_name="${p%.so*}" 569 p_name="${p%.so*}"
481 p_name="${p_name#lib}" 570 p_name="${p_name#lib}"
482 p_list="${p_list} ${p_name}" 571 vdr_plugin_list="${vdr_plugin_list} ${p_name}"
483 done 572 done
484 573
485 create_header_checksum_file ${p_list} 574 create_header_checksum_file ${vdr_plugin_list}
486 create_plugindb_file ${p_list} 575 create_plugindb_file ${vdr_plugin_list}
487 576
488 if vdr_has_gettext && [[ -d ${TMP_LOCALE_DIR} ]]; then 577 if vdr_has_gettext && [[ -d ${TMP_LOCALE_DIR} ]]; then
489 einfo "Installing locales" 578 einfo "Installing locales"
490 cd "${TMP_LOCALE_DIR}" 579 cd "${TMP_LOCALE_DIR}"
491 insinto "${LOCDIR}" 580 insinto "${LOCDIR}"
532vdr-plugin_pkg_config() { 621vdr-plugin_pkg_config() {
533 ewarn "emerge --config ${PN} is no longer supported" 622 ewarn "emerge --config ${PN} is no longer supported"
534 vdr-plugin_print_enable_command 623 vdr-plugin_print_enable_command
535} 624}
536 625
626case "${EAPI:-0}" in
627 2|3|4)
628 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_compile src_install pkg_postinst pkg_postrm pkg_config
629 ;;
630 *)
537EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postinst pkg_postrm pkg_config 631 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postinst pkg_postrm pkg_config
632 ;;
633esac

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.79

  ViewVC Help
Powered by ViewVC 1.1.20