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

Contents of /eclass/vdr-plugin.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.57 - (hide annotations) (download)
Mon Apr 21 02:56:34 2008 UTC (6 years, 5 months ago) by zzam
Branch: MAIN
Changes since 1.56: +2 -1 lines
Add back lost ebegin.

1 zzam 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 zzam 1.57 # $Header: /var/cvsroot/gentoo-x86/eclass/vdr-plugin.eclass,v 1.56 2008/04/21 02:45:45 zzam Exp $
4 zzam 1.1 #
5     # Author:
6     # Matthias Schwarzott <zzam@gentoo.org>
7 hd_brummy 1.27 # Joerg Bornkessel <hd_brummy@gentoo.org>
8 zzam 1.1
9     # vdr-plugin.eclass
10     #
11     # eclass to create ebuilds for vdr plugins
12     #
13    
14     # Example ebuild (vdr-femon):
15     #
16     # inherit vdr-plugin
17     # IUSE=""
18     # SLOT="0"
19     # DESCRIPTION="vdr Plugin: DVB Frontend Status Monitor (signal strengt/noise)"
20     # HOMEPAGE="http://www.saunalahti.fi/~rahrenbe/vdr/femon/"
21     # SRC_URI="http://www.saunalahti.fi/~rahrenbe/vdr/femon/files/${P}.tgz"
22     # LICENSE="GPL-2"
23     # KEYWORDS="~x86"
24     # DEPEND=">=media-video/vdr-1.3.27"
25     #
26 swegener 1.4 #
27 zzam 1.1
28 zzam 1.17 # Installation of a config file for the plugin
29     #
30     # If ${VDR_CONFD_FILE} is set install this file
31     # else install ${FILESDIR}/confd if it exists.
32 zzam 1.2
33 zzam 1.17 # Gets installed as /etc/conf.d/vdr.${VDRPLUGIN}.
34     # For the plugin vdr-femon this would be /etc/conf.d/vdr.femon
35 zzam 1.2
36    
37 zzam 1.17 # Installation of an rc-addon file for the plugin
38     #
39     # If ${VDR_RCADDON_FILE} is set install this file
40     # else install ${FILESDIR}/rc-addon.sh if it exists.
41     #
42 zzam 1.22 # Gets installed under ${VDR_RC_DIR}/plugin-${VDRPLUGIN}.sh
43 zzam 1.35 # (in example vdr-femon this would be /usr/share/vdr/rcscript/plugin-femon.sh)
44 zzam 1.2 #
45     # This file is sourced by the startscript when plugin is activated in /etc/conf.d/vdr
46     # It could be used for special startup actions for this plugins, or to create the
47     # plugin command line options from a nicer version of a conf.d file.
48 zzam 1.1
49 hd_brummy 1.27 # HowTo use own local patches; Example
50     #
51     # Add to your /etc/make.conf:
52     # VDR_LOCAL_PATCHES_DIR="/usr/local/patch"
53     #
54     # Add two DIR's in your local patch dir, ${PN}/${PV},
55     # e.g for vdr-burn-0.1.0 should be:
56     # /usr/local/patch/vdr-burn/0.1.0/
57     #
58     # all patches which ending on diff or patch in this DIR will automatically applied
59     #
60    
61 zzam 1.22 inherit base multilib eutils flag-o-matic
62 zzam 1.1
63 zzam 1.39 IUSE=""
64 zzam 1.15
65 zzam 1.1 # Name of the plugin stripped from all vdrplugin-, vdr- and -cvs pre- and postfixes
66     VDRPLUGIN="${PN/#vdrplugin-/}"
67 zzam 1.2 VDRPLUGIN="${VDRPLUGIN/#vdr-/}"
68 zzam 1.1 VDRPLUGIN="${VDRPLUGIN/%-cvs/}"
69    
70     DESCRIPTION="vdr Plugin: ${VDRPLUGIN} (based on vdr-plugin.eclass)"
71    
72     # works in most cases
73     S="${WORKDIR}/${VDRPLUGIN}-${PV}"
74    
75     # depend on headers for DVB-driver
76 zzam 1.50 DEPEND=">=media-tv/gentoo-vdr-scripts-0.3.8
77 zzam 1.51 || ( >=media-tv/gentoo-vdr-scripts-0.4.2 >=media-tv/vdrplugin-rebuild-0.2 )
78 zzam 1.50 >=app-admin/eselect-vdr-0.0.2
79     media-tv/linuxtv-dvb-headers"
80 zzam 1.1
81 zzam 1.2
82 zzam 1.37 # New method of storing plugindb
83     # Called from src_install
84     # file maintained by normal portage-methods
85     create_plugindb_file() {
86     local NEW_VDRPLUGINDB_DIR=/usr/share/vdr/vdrplugin-rebuild/
87 zzam 1.50 local DB_FILE="${NEW_VDRPLUGINDB_DIR}/${CATEGORY}-${PF}"
88     insinto "${NEW_VDRPLUGINDB_DIR}"
89 zzam 1.52
90     # BUG: portage-2.1.4_rc9 will delete the EBUILD= line, so we cannot use this code.
91     # cat <<-EOT > "${D}/${DB_FILE}"
92     # VDRPLUGIN_DB=1
93     # CREATOR=ECLASS
94     # EBUILD=${CATEGORY}/${PN}
95     # EBUILD_V=${PVR}
96     # EOT
97     {
98     echo "VDRPLUGIN_DB=1"
99     echo "CREATOR=ECLASS"
100     echo "EBUILD=${CATEGORY}/${PN}"
101     echo "EBUILD_V=${PVR}"
102     } > "${D}/${DB_FILE}"
103 zzam 1.37 }
104    
105     # Delete files created outside of vdr-plugin.eclass
106     # vdrplugin-rebuild.ebuild converted plugindb and files are
107     # not deleted by portage itself - should only be needed as
108     # long as not every system has switched over to
109 zzam 1.51 # vdrplugin-rebuild-0.2 / gentoo-vdr-scripts-0.4.2
110 zzam 1.37 delete_orphan_plugindb_file() {
111 hd_brummy 1.40 #elog Testing for orphaned plugindb file
112 zzam 1.37 local NEW_VDRPLUGINDB_DIR=/usr/share/vdr/vdrplugin-rebuild/
113 zzam 1.50 local DB_FILE="${ROOT}/${NEW_VDRPLUGINDB_DIR}/${CATEGORY}-${PF}"
114 zzam 1.37
115     # file exists
116     [[ -f ${DB_FILE} ]] || return
117    
118     # will portage handle the file itself
119 zzam 1.50 if grep -q CREATOR=ECLASS "${DB_FILE}"; then
120 hd_brummy 1.40 #elog file owned by eclass - don't touch it
121 zzam 1.37 return
122     fi
123    
124 hd_brummy 1.40 elog "Removing orphaned plugindb-file."
125 zzam 1.41 elog "\t#rm ${DB_FILE}"
126 zzam 1.50 rm "${DB_FILE}"
127 zzam 1.37 }
128    
129 zzam 1.45
130     create_header_checksum_file()
131     {
132     # Danger: Not using $ROOT here, as compile will also not use it !!!
133     # If vdr in $ROOT and / differ, plugins will not run anyway
134    
135 zzam 1.50 insinto "${VDR_CHECKSUM_DIR}"
136 zzam 1.45 if [[ -f ${VDR_CHECKSUM_DIR}/header-md5-vdr ]]; then
137 zzam 1.50 newins "${VDR_CHECKSUM_DIR}/header-md5-vdr header-md5-${PN}"
138 zzam 1.45 else
139     if type -p md5sum >/dev/null 2>&1; then
140 zzam 1.50 cd "${S}"
141 zzam 1.45 (
142 zzam 1.50 cd "${VDR_INCLUDE_DIR}"
143 zzam 1.45 md5sum *.h libsi/*.h|LC_ALL=C sort --key=2
144     ) > header-md5-${PN}
145     doins header-md5-${PN}
146     fi
147     fi
148     }
149    
150 zzam 1.55 fix_vdr_libsi_include()
151     {
152     einfo "Fixing include of libsi-headers"
153     local f
154     for f; do
155     sed -i "${f}" \
156     -e '/#include/s:"\(.*libsi.*\)":<\1>:' \
157     -e '/#include/s:<.*\(libsi/.*\)>:<vdr/\1>:'
158     done
159     }
160    
161     vdr_patchmakefile() {
162     einfo "Patching Makefile"
163     [[ -e Makefile ]] || die "Makefile of plugin can not be found!"
164     cp Makefile "${WORKDIR}"/Makefile.before
165    
166     ebegin " Setting Pathes"
167     sed -i Makefile \
168     -e "s:^VDRDIR.*$:VDRDIR = ${VDR_INCLUDE_DIR}:" \
169     -e "s:^LIBDIR.*$:LIBDIR = ${S}:" \
170     -e "s:^TMPDIR.*$:TMPDIR = ${T}:" \
171     -e 's:-I$(VDRDIR)/include:-I'"${VDR_INCLUDE_DIR%vdr}"':' \
172     -e "/^DVBDIR/d" \
173     -e 's:-I$(DVBDIR)/include::'
174     eend $?
175    
176     # maybe needed for multiproto:
177     #sed -i Makefile \
178     # -e "s:^DVBDIR.*$:DVBDIR = ${DVB_INCLUDE_DIR}:" \
179     # -e 's:-I$(VDRDIR)/include -I$(DVBDIR)/include:-I$(DVBDIR)/include -I$(VDRDIR)/include:' \
180     # -e 's:-I$(DVBDIR)/include:-I$(DVBDIR):'
181    
182     if ! grep -q APIVERSION Makefile; then
183     ebegin " Converting to APIVERSION"
184     sed -i Makefile \
185     -e 's:^APIVERSION = :APIVERSION ?= :' \
186     -e 's:$(LIBDIR)/$@.$(VDRVERSION):$(LIBDIR)/$@.$(APIVERSION):' \
187     -e '/VDRVERSION =/a\APIVERSION = $(shell sed -ne '"'"'/define APIVERSION/s/^.*"\\(.*\\)".*$$/\\1/p'"'"' $(VDRDIR)/config.h)'
188     eend $?
189     fi
190    
191     # Correcting Compile-Flags
192     # Do not overwrite CXXFLAGS, add LDFLAGS if missing
193     sed -i Makefile \
194     -e '/^CXXFLAGS[[:space:]]*=/s/=/?=/' \
195     -e '/LDFLAGS/!s:-shared:$(LDFLAGS) -shared:'
196    
197     # Disabling file stripping, useful for debugging
198     sed -i Makefile \
199     -e '/@.*strip/d' \
200     -e '/strip \$(LIBDIR)\/\$@/d' \
201     -e '/@.*\$(STRIP)/d'
202    
203     # Use a file instead of a variable as single-stepping via ebuild
204     # destroys environment.
205     touch "${WORKDIR}"/.vdr-plugin_makefile_patched
206     }
207    
208     vdr_add_local_patch() {
209     if test -d "${VDR_LOCAL_PATCHES_DIR}/${PN}"; then
210     echo
211     einfo "Applying local patches"
212     for LOCALPATCH in "${VDR_LOCAL_PATCHES_DIR}/${PN}/${PV}"/*.{diff,patch}; do
213     test -f "${LOCALPATCH}" && epatch "${LOCALPATCH}"
214     done
215     fi
216     }
217    
218 zzam 1.56 vdr_has_gettext() {
219     has_version ">=media-video/vdr-1.5.7"
220     }
221    
222     plugin_has_gettext() {
223     [[ -d po ]]
224     }
225    
226     vdr_i18n_convert_to_gettext() {
227     local i18n_tool="${ROOT}/usr/share/vdr/bin/i18n-to-gettext.pl"
228    
229     if [[ ${NO_GETTEXT_HACK} == "1" ]]; then
230     ewarn "Conversion to gettext disabled in ebuild"
231     return 1
232     fi
233    
234     if [[ ! -x ${i18n_tool} ]]; then
235     eerror "Missing ${i18n_tool}"
236     eerror "Please re-emerge vdr"
237     die "Missing ${i18n_tool}"
238     fi
239    
240     ebegin "Auto converting translations to gettext"
241     # call i18n-to-gettext tool
242     # take all texts missing tr call into special file
243     "${i18n_tool}" 2>/dev/null \
244     |sed -e '/^"/!d' \
245     -e '/^""$/d' \
246     -e 's/\(.*\)/trNOOP(\1)/' \
247     > dummy-translations-trNOOP.c
248    
249     # if there were untranslated texts just run it again
250     # now the missing calls are listed in
251     # dummy-translations-trNOOP.c
252     if [[ -s dummy-translations-trNOOP.c ]]; then
253     "${i18n_tool}" &>/dev/null
254     fi
255    
256     # now use the modified Makefile
257     if [[ -f Makefile.new ]]; then
258     mv Makefile.new Makefile
259     eend 0 ""
260     else
261     eend 1 "Conversion to gettext failed. Plugin needs fixing."
262     return 1
263     fi
264     }
265 zzam 1.55
266 zzam 1.56 vdr_i18n_disable_gettext() {
267 zzam 1.57 ebegin "Disabling gettext support in plugin"
268 zzam 1.56 # Remove i18n Target if using older vdr
269     sed -i Makefile \
270     -e '/^all:/s/ i18n//'
271     eend 0
272     }
273 zzam 1.55
274 zzam 1.56 vdr_i18n() {
275     if vdr_has_gettext; then
276     einfo "VDR has gettext support"
277     if plugin_has_gettext; then
278     einfo "Plugin has gettext support, fine"
279 zzam 1.55 else
280 zzam 1.56 vdr_i18n_convert_to_gettext
281     if [[ $? != 0 ]]; then
282     ewarn ""
283     ewarn "Plugin will have only english OSD texts"
284     ewarn "it needs manual fixing."
285     fi
286     fi
287     else
288     einfo "VDR has no gettext support"
289     if plugin_has_gettext; then
290     vdr_i18n_disable_gettext
291 zzam 1.55 fi
292     fi
293     }
294    
295     vdr-plugin_copy_source_tree() {
296     pushd . >/dev/null
297     cp -r "${S}" "${T}"/source-tree
298     cd "${T}"/source-tree
299     cp "${WORKDIR}"/Makefile.before Makefile
300     sed -i Makefile \
301     -e "s:^DVBDIR.*$:DVBDIR = ${DVB_INCLUDE_DIR}:" \
302     -e 's:^CXXFLAGS:#CXXFLAGS:' \
303     -e 's:-I$(DVBDIR)/include:-I$(DVBDIR):' \
304     -e 's:-I$(VDRDIR) -I$(DVBDIR):-I$(DVBDIR) -I$(VDRDIR):'
305     popd >/dev/null
306     }
307    
308     vdr-plugin_install_source_tree() {
309     einfo "Installing sources"
310     destdir="${VDRSOURCE_DIR}/vdr-${VDRVERSION}/PLUGINS/src/${VDRPLUGIN}"
311     insinto "${destdir}-${PV}"
312     doins -r "${T}"/source-tree/*
313    
314     dosym "${VDRPLUGIN}-${PV}" "${destdir}"
315     }
316    
317     vdr-plugin_print_enable_command() {
318     elog
319     elog "To activate this vdr-plugin execute the following command:"
320     elog "\teselect vdr-plugin enable ${PN#vdr-}"
321     elog
322     }
323    
324    
325     ## exported functions
326    
327 zzam 1.1 vdr-plugin_pkg_setup() {
328     # -fPIC is needed for shared objects on some platforms (amd64 and others)
329     append-flags -fPIC
330    
331 zzam 1.22 # Where should the plugins live in the filesystem
332     VDR_PLUGIN_DIR="/usr/$(get_libdir)/vdr/plugins"
333     VDR_CHECKSUM_DIR="${VDR_PLUGIN_DIR%/plugins}/checksums"
334    
335 zzam 1.35 # was /usr/lib/... some time ago
336     # since gentoo-vdr-scripts-0.3.6 it works with /usr/share/...
337     VDR_RC_DIR="/usr/share/vdr/rcscript"
338 zzam 1.22
339     # Pathes to includes
340 zzam 1.29 VDR_INCLUDE_DIR="/usr/include/vdr"
341 zzam 1.22 DVB_INCLUDE_DIR="/usr/include"
342    
343    
344 zzam 1.48 TMP_LOCALE_DIR="${WORKDIR}/tmp-locale"
345     LOCDIR="/usr/share/vdr/locale"
346    
347 zzam 1.50 VDRVERSION=$(awk -F'"' '/define VDRVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h)
348     APIVERSION=$(awk -F'"' '/define APIVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h)
349 zzam 1.18 [[ -z ${APIVERSION} ]] && APIVERSION="${VDRVERSION}"
350    
351 zzam 1.55 einfo "Compiling against"
352     einfo "\tvdr-${VDRVERSION} [API version ${APIVERSION}]"
353 zzam 1.1 }
354    
355     vdr-plugin_src_unpack() {
356 zzam 1.30 if [[ -z ${VDR_INCLUDE_DIR} ]]; then
357     eerror "Wrong use of vdr-plugin.eclass."
358     eerror "An ebuild for a vdr-plugin will not work without calling vdr-plugin_pkg_setup."
359     echo
360     eerror "Please report this at bugs.gentoo.org."
361     die "vdr-plugin_pkg_setup not called!"
362     fi
363 zzam 1.48 [ -z "$1" ] && vdr-plugin_src_unpack unpack add_local_patch patchmakefile i18n
364 zzam 1.1
365     while [ "$1" ]; do
366    
367     case "$1" in
368 zzam 1.34 all_but_unpack)
369 zzam 1.48 vdr-plugin_src_unpack add_local_patch patchmakefile i18n
370 zzam 1.34 ;;
371 zzam 1.1 unpack)
372 zzam 1.12 base_src_unpack
373 zzam 1.1 ;;
374 zzam 1.55 add_local_patch)
375     cd "${S}" || die "Could not change to plugin-source-directory!"
376     vdr_add_local_patch
377     ;;
378 zzam 1.1 patchmakefile)
379 zzam 1.55 cd "${S}" || die "Could not change to plugin-source-directory!"
380     vdr_patchmakefile
381 zzam 1.1 ;;
382 zzam 1.55 i18n)
383     cd "${S}" || die "Could not change to plugin-source-directory!"
384     vdr_i18n
385 hd_brummy 1.27 ;;
386 zzam 1.1 esac
387    
388     shift
389     done
390     }
391    
392     vdr-plugin_src_compile() {
393 zzam 1.7 [ -z "$1" ] && vdr-plugin_src_compile prepare compile
394 zzam 1.6
395 zzam 1.7 while [ "$1" ]; do
396    
397     case "$1" in
398     prepare)
399     [[ -n "${VDRSOURCE_DIR}" ]] && vdr-plugin_copy_source_tree
400     ;;
401     compile)
402 zzam 1.33 if [[ ! -f ${WORKDIR}/.vdr-plugin_makefile_patched ]]; then
403 zzam 1.32 eerror "Wrong use of vdr-plugin.eclass."
404     eerror "An ebuild for a vdr-plugin will not work without"
405     eerror "calling vdr-plugin_src_unpack to patch the Makefile."
406     echo
407     eerror "Please report this at bugs.gentoo.org."
408     die "vdr-plugin_src_unpack not called!"
409     fi
410 zzam 1.50 cd "${S}"
411 zzam 1.7
412 zzam 1.48 emake ${BUILD_PARAMS} \
413     ${VDRPLUGIN_MAKE_TARGET:-all} \
414     LOCALEDIR="${TMP_LOCALE_DIR}" \
415     || die "emake failed"
416 zzam 1.7 ;;
417     esac
418 zzam 1.1
419 zzam 1.7 shift
420     done
421 zzam 1.1 }
422    
423     vdr-plugin_src_install() {
424 zzam 1.6 [[ -n "${VDRSOURCE_DIR}" ]] && vdr-plugin_install_source_tree
425 zzam 1.46 cd "${WORKDIR}"
426 zzam 1.1
427 zzam 1.22 if [[ -n ${VDR_MAINTAINER_MODE} ]]; then
428 zzam 1.50 local mname="${P}-Makefile"
429     cp "${S}"/Makefile "${mname}.patched"
430     cp Makefile.before "${mname}.before"
431 zzam 1.22
432 zzam 1.50 diff -u "${mname}.before" "${mname}.patched" > "${mname}.diff"
433 zzam 1.22
434     insinto "/usr/share/vdr/maintainer-data/makefile-changes"
435 zzam 1.50 doins "${mname}.diff"
436 zzam 1.22
437     insinto "/usr/share/vdr/maintainer-data/makefile-before"
438 zzam 1.50 doins "${mname}.before"
439 zzam 1.22
440     insinto "/usr/share/vdr/maintainer-data/makefile-patched"
441 zzam 1.50 doins "${mname}.patched"
442 zzam 1.22
443     fi
444    
445 zzam 1.46 cd "${S}"
446 zzam 1.1 insinto "${VDR_PLUGIN_DIR}"
447     doins libvdr-*.so.*
448 zzam 1.48
449 zzam 1.56 if vdr_has_gettext && [[ -d ${TMP_LOCALE_DIR} ]]; then
450 zzam 1.48 einfo "Installing locales"
451     cd "${TMP_LOCALE_DIR}"
452     insinto "${LOCDIR}"
453     doins -r *
454     fi
455    
456     cd "${S}"
457 zzam 1.23 local docfile
458     for docfile in README* HISTORY CHANGELOG; do
459     [[ -f ${docfile} ]] && dodoc ${docfile}
460     done
461 zzam 1.2
462 zzam 1.17 # if VDR_CONFD_FILE is empty and ${FILESDIR}/confd exists take it
463     [[ -z ${VDR_CONFD_FILE} ]] && [[ -e ${FILESDIR}/confd ]] && VDR_CONFD_FILE=${FILESDIR}/confd
464    
465     if [[ -n ${VDR_CONFD_FILE} ]]; then
466 zzam 1.44 newconfd "${VDR_CONFD_FILE}" vdr.${VDRPLUGIN}
467 zzam 1.17 fi
468    
469    
470     # if VDR_RCADDON_FILE is empty and ${FILESDIR}/rc-addon.sh exists take it
471     [[ -z ${VDR_RCADDON_FILE} ]] && [[ -e ${FILESDIR}/rc-addon.sh ]] && VDR_RCADDON_FILE=${FILESDIR}/rc-addon.sh
472    
473     if [[ -n ${VDR_RCADDON_FILE} ]]; then
474     insinto "${VDR_RC_DIR}"
475     newins "${VDR_RCADDON_FILE}" plugin-${VDRPLUGIN}.sh
476     fi
477    
478 zzam 1.45 create_header_checksum_file
479 zzam 1.37 create_plugindb_file
480 zzam 1.1 }
481    
482 zzam 1.50 vdr-plugin_pkg_postinst() {
483     vdr-plugin_print_enable_command
484    
485 zzam 1.17 if [[ -n "${VDR_CONFD_FILE}" ]]; then
486 zzam 1.50 elog "Please have a look at the config-file"
487     elog "\t/etc/conf.d/vdr.${VDRPLUGIN}"
488 hd_brummy 1.40 elog
489 zzam 1.13 fi
490 zzam 1.1 }
491    
492 zzam 1.2 vdr-plugin_pkg_postrm() {
493 zzam 1.37 delete_orphan_plugindb_file
494 zzam 1.2 }
495    
496 zzam 1.36 vdr-plugin_pkg_config() {
497 zzam 1.54 ewarn "emerge --config ${PN} is no longer supported"
498 zzam 1.50 vdr-plugin_print_enable_command
499 zzam 1.36 }
500    
501 zzam 1.8 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postinst pkg_postrm pkg_config

  ViewVC Help
Powered by ViewVC 1.1.20