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

Contents of /eclass/vdr-plugin.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.59 - (hide annotations) (download)
Wed Apr 23 13:56:20 2008 UTC (6 years, 6 months ago) by zzam
Branch: MAIN
Changes since 1.58: +4 -2 lines
Remove maybe unset DVBDIR variable from list of includes.

1 zzam 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 zzam 1.59 # $Header: /var/cvsroot/gentoo-x86/eclass/vdr-plugin.eclass,v 1.58 2008/04/22 11:04:05 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 zzam 1.59 -e 's:-I$(DVBDIR)/include::' \
174     -e 's:-I$(DVBDIR)::'
175 zzam 1.55 eend $?
176    
177     # maybe needed for multiproto:
178     #sed -i Makefile \
179     # -e "s:^DVBDIR.*$:DVBDIR = ${DVB_INCLUDE_DIR}:" \
180     # -e 's:-I$(VDRDIR)/include -I$(DVBDIR)/include:-I$(DVBDIR)/include -I$(VDRDIR)/include:' \
181     # -e 's:-I$(DVBDIR)/include:-I$(DVBDIR):'
182    
183     if ! grep -q APIVERSION Makefile; then
184     ebegin " Converting to APIVERSION"
185     sed -i Makefile \
186     -e 's:^APIVERSION = :APIVERSION ?= :' \
187     -e 's:$(LIBDIR)/$@.$(VDRVERSION):$(LIBDIR)/$@.$(APIVERSION):' \
188     -e '/VDRVERSION =/a\APIVERSION = $(shell sed -ne '"'"'/define APIVERSION/s/^.*"\\(.*\\)".*$$/\\1/p'"'"' $(VDRDIR)/config.h)'
189     eend $?
190     fi
191    
192     # Correcting Compile-Flags
193     # Do not overwrite CXXFLAGS, add LDFLAGS if missing
194     sed -i Makefile \
195     -e '/^CXXFLAGS[[:space:]]*=/s/=/?=/' \
196     -e '/LDFLAGS/!s:-shared:$(LDFLAGS) -shared:'
197    
198     # Disabling file stripping, useful for debugging
199     sed -i Makefile \
200     -e '/@.*strip/d' \
201     -e '/strip \$(LIBDIR)\/\$@/d' \
202     -e '/@.*\$(STRIP)/d'
203    
204     # Use a file instead of a variable as single-stepping via ebuild
205     # destroys environment.
206     touch "${WORKDIR}"/.vdr-plugin_makefile_patched
207     }
208    
209     vdr_add_local_patch() {
210     if test -d "${VDR_LOCAL_PATCHES_DIR}/${PN}"; then
211     echo
212     einfo "Applying local patches"
213     for LOCALPATCH in "${VDR_LOCAL_PATCHES_DIR}/${PN}/${PV}"/*.{diff,patch}; do
214     test -f "${LOCALPATCH}" && epatch "${LOCALPATCH}"
215     done
216     fi
217     }
218    
219 zzam 1.56 vdr_has_gettext() {
220     has_version ">=media-video/vdr-1.5.7"
221     }
222    
223     plugin_has_gettext() {
224     [[ -d po ]]
225     }
226    
227     vdr_i18n_convert_to_gettext() {
228     local i18n_tool="${ROOT}/usr/share/vdr/bin/i18n-to-gettext.pl"
229    
230     if [[ ${NO_GETTEXT_HACK} == "1" ]]; then
231     ewarn "Conversion to gettext disabled in ebuild"
232     return 1
233     fi
234    
235     if [[ ! -x ${i18n_tool} ]]; then
236     eerror "Missing ${i18n_tool}"
237     eerror "Please re-emerge vdr"
238     die "Missing ${i18n_tool}"
239     fi
240    
241     ebegin "Auto converting translations to gettext"
242     # call i18n-to-gettext tool
243     # take all texts missing tr call into special file
244     "${i18n_tool}" 2>/dev/null \
245     |sed -e '/^"/!d' \
246     -e '/^""$/d' \
247     -e 's/\(.*\)/trNOOP(\1)/' \
248     > dummy-translations-trNOOP.c
249    
250     # if there were untranslated texts just run it again
251     # now the missing calls are listed in
252     # dummy-translations-trNOOP.c
253     if [[ -s dummy-translations-trNOOP.c ]]; then
254     "${i18n_tool}" &>/dev/null
255     fi
256    
257     # now use the modified Makefile
258     if [[ -f Makefile.new ]]; then
259     mv Makefile.new Makefile
260     eend 0 ""
261     else
262     eend 1 "Conversion to gettext failed. Plugin needs fixing."
263     return 1
264     fi
265     }
266 zzam 1.55
267 zzam 1.56 vdr_i18n_disable_gettext() {
268 zzam 1.57 ebegin "Disabling gettext support in plugin"
269 zzam 1.56 # Remove i18n Target if using older vdr
270     sed -i Makefile \
271     -e '/^all:/s/ i18n//'
272     eend 0
273     }
274 zzam 1.55
275 zzam 1.56 vdr_i18n() {
276     if vdr_has_gettext; then
277     einfo "VDR has gettext support"
278     if plugin_has_gettext; then
279     einfo "Plugin has gettext support, fine"
280 zzam 1.55 else
281 zzam 1.56 vdr_i18n_convert_to_gettext
282     if [[ $? != 0 ]]; then
283 zzam 1.58 eerror ""
284     eerror "Plugin will have only english OSD texts"
285     eerror "it needs manual fixing."
286 zzam 1.56 fi
287     fi
288     else
289     einfo "VDR has no gettext support"
290     if plugin_has_gettext; then
291     vdr_i18n_disable_gettext
292 zzam 1.55 fi
293     fi
294     }
295    
296     vdr-plugin_copy_source_tree() {
297     pushd . >/dev/null
298     cp -r "${S}" "${T}"/source-tree
299     cd "${T}"/source-tree
300     cp "${WORKDIR}"/Makefile.before Makefile
301 zzam 1.59 # TODO: Fix this, maybe no longer needed
302 zzam 1.55 sed -i Makefile \
303     -e "s:^DVBDIR.*$:DVBDIR = ${DVB_INCLUDE_DIR}:" \
304     -e 's:^CXXFLAGS:#CXXFLAGS:' \
305     -e 's:-I$(DVBDIR)/include:-I$(DVBDIR):' \
306     -e 's:-I$(VDRDIR) -I$(DVBDIR):-I$(DVBDIR) -I$(VDRDIR):'
307     popd >/dev/null
308     }
309    
310     vdr-plugin_install_source_tree() {
311     einfo "Installing sources"
312     destdir="${VDRSOURCE_DIR}/vdr-${VDRVERSION}/PLUGINS/src/${VDRPLUGIN}"
313     insinto "${destdir}-${PV}"
314     doins -r "${T}"/source-tree/*
315    
316     dosym "${VDRPLUGIN}-${PV}" "${destdir}"
317     }
318    
319     vdr-plugin_print_enable_command() {
320     elog
321     elog "To activate this vdr-plugin execute the following command:"
322     elog "\teselect vdr-plugin enable ${PN#vdr-}"
323     elog
324     }
325    
326    
327     ## exported functions
328    
329 zzam 1.1 vdr-plugin_pkg_setup() {
330     # -fPIC is needed for shared objects on some platforms (amd64 and others)
331     append-flags -fPIC
332    
333 zzam 1.22 # Where should the plugins live in the filesystem
334     VDR_PLUGIN_DIR="/usr/$(get_libdir)/vdr/plugins"
335     VDR_CHECKSUM_DIR="${VDR_PLUGIN_DIR%/plugins}/checksums"
336    
337 zzam 1.35 # was /usr/lib/... some time ago
338     # since gentoo-vdr-scripts-0.3.6 it works with /usr/share/...
339     VDR_RC_DIR="/usr/share/vdr/rcscript"
340 zzam 1.22
341     # Pathes to includes
342 zzam 1.29 VDR_INCLUDE_DIR="/usr/include/vdr"
343 zzam 1.22 DVB_INCLUDE_DIR="/usr/include"
344    
345    
346 zzam 1.48 TMP_LOCALE_DIR="${WORKDIR}/tmp-locale"
347     LOCDIR="/usr/share/vdr/locale"
348    
349 zzam 1.50 VDRVERSION=$(awk -F'"' '/define VDRVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h)
350     APIVERSION=$(awk -F'"' '/define APIVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h)
351 zzam 1.18 [[ -z ${APIVERSION} ]] && APIVERSION="${VDRVERSION}"
352    
353 zzam 1.55 einfo "Compiling against"
354     einfo "\tvdr-${VDRVERSION} [API version ${APIVERSION}]"
355 zzam 1.1 }
356    
357     vdr-plugin_src_unpack() {
358 zzam 1.30 if [[ -z ${VDR_INCLUDE_DIR} ]]; then
359     eerror "Wrong use of vdr-plugin.eclass."
360     eerror "An ebuild for a vdr-plugin will not work without calling vdr-plugin_pkg_setup."
361     echo
362     eerror "Please report this at bugs.gentoo.org."
363     die "vdr-plugin_pkg_setup not called!"
364     fi
365 zzam 1.48 [ -z "$1" ] && vdr-plugin_src_unpack unpack add_local_patch patchmakefile i18n
366 zzam 1.1
367     while [ "$1" ]; do
368    
369     case "$1" in
370 zzam 1.34 all_but_unpack)
371 zzam 1.48 vdr-plugin_src_unpack add_local_patch patchmakefile i18n
372 zzam 1.34 ;;
373 zzam 1.1 unpack)
374 zzam 1.12 base_src_unpack
375 zzam 1.1 ;;
376 zzam 1.55 add_local_patch)
377     cd "${S}" || die "Could not change to plugin-source-directory!"
378     vdr_add_local_patch
379     ;;
380 zzam 1.1 patchmakefile)
381 zzam 1.55 cd "${S}" || die "Could not change to plugin-source-directory!"
382     vdr_patchmakefile
383 zzam 1.1 ;;
384 zzam 1.55 i18n)
385     cd "${S}" || die "Could not change to plugin-source-directory!"
386     vdr_i18n
387 hd_brummy 1.27 ;;
388 zzam 1.1 esac
389    
390     shift
391     done
392     }
393    
394     vdr-plugin_src_compile() {
395 zzam 1.7 [ -z "$1" ] && vdr-plugin_src_compile prepare compile
396 zzam 1.6
397 zzam 1.7 while [ "$1" ]; do
398    
399     case "$1" in
400     prepare)
401     [[ -n "${VDRSOURCE_DIR}" ]] && vdr-plugin_copy_source_tree
402     ;;
403     compile)
404 zzam 1.33 if [[ ! -f ${WORKDIR}/.vdr-plugin_makefile_patched ]]; then
405 zzam 1.32 eerror "Wrong use of vdr-plugin.eclass."
406     eerror "An ebuild for a vdr-plugin will not work without"
407     eerror "calling vdr-plugin_src_unpack to patch the Makefile."
408     echo
409     eerror "Please report this at bugs.gentoo.org."
410     die "vdr-plugin_src_unpack not called!"
411     fi
412 zzam 1.50 cd "${S}"
413 zzam 1.7
414 zzam 1.48 emake ${BUILD_PARAMS} \
415     ${VDRPLUGIN_MAKE_TARGET:-all} \
416     LOCALEDIR="${TMP_LOCALE_DIR}" \
417     || die "emake failed"
418 zzam 1.7 ;;
419     esac
420 zzam 1.1
421 zzam 1.7 shift
422     done
423 zzam 1.1 }
424    
425     vdr-plugin_src_install() {
426 zzam 1.6 [[ -n "${VDRSOURCE_DIR}" ]] && vdr-plugin_install_source_tree
427 zzam 1.46 cd "${WORKDIR}"
428 zzam 1.1
429 zzam 1.22 if [[ -n ${VDR_MAINTAINER_MODE} ]]; then
430 zzam 1.50 local mname="${P}-Makefile"
431     cp "${S}"/Makefile "${mname}.patched"
432     cp Makefile.before "${mname}.before"
433 zzam 1.22
434 zzam 1.50 diff -u "${mname}.before" "${mname}.patched" > "${mname}.diff"
435 zzam 1.22
436     insinto "/usr/share/vdr/maintainer-data/makefile-changes"
437 zzam 1.50 doins "${mname}.diff"
438 zzam 1.22
439     insinto "/usr/share/vdr/maintainer-data/makefile-before"
440 zzam 1.50 doins "${mname}.before"
441 zzam 1.22
442     insinto "/usr/share/vdr/maintainer-data/makefile-patched"
443 zzam 1.50 doins "${mname}.patched"
444 zzam 1.22
445     fi
446    
447 zzam 1.46 cd "${S}"
448 zzam 1.1 insinto "${VDR_PLUGIN_DIR}"
449     doins libvdr-*.so.*
450 zzam 1.48
451 zzam 1.56 if vdr_has_gettext && [[ -d ${TMP_LOCALE_DIR} ]]; then
452 zzam 1.48 einfo "Installing locales"
453     cd "${TMP_LOCALE_DIR}"
454     insinto "${LOCDIR}"
455     doins -r *
456     fi
457    
458     cd "${S}"
459 zzam 1.23 local docfile
460     for docfile in README* HISTORY CHANGELOG; do
461     [[ -f ${docfile} ]] && dodoc ${docfile}
462     done
463 zzam 1.2
464 zzam 1.17 # if VDR_CONFD_FILE is empty and ${FILESDIR}/confd exists take it
465     [[ -z ${VDR_CONFD_FILE} ]] && [[ -e ${FILESDIR}/confd ]] && VDR_CONFD_FILE=${FILESDIR}/confd
466    
467     if [[ -n ${VDR_CONFD_FILE} ]]; then
468 zzam 1.44 newconfd "${VDR_CONFD_FILE}" vdr.${VDRPLUGIN}
469 zzam 1.17 fi
470    
471    
472     # if VDR_RCADDON_FILE is empty and ${FILESDIR}/rc-addon.sh exists take it
473     [[ -z ${VDR_RCADDON_FILE} ]] && [[ -e ${FILESDIR}/rc-addon.sh ]] && VDR_RCADDON_FILE=${FILESDIR}/rc-addon.sh
474    
475     if [[ -n ${VDR_RCADDON_FILE} ]]; then
476     insinto "${VDR_RC_DIR}"
477     newins "${VDR_RCADDON_FILE}" plugin-${VDRPLUGIN}.sh
478     fi
479    
480 zzam 1.45 create_header_checksum_file
481 zzam 1.37 create_plugindb_file
482 zzam 1.1 }
483    
484 zzam 1.50 vdr-plugin_pkg_postinst() {
485     vdr-plugin_print_enable_command
486    
487 zzam 1.17 if [[ -n "${VDR_CONFD_FILE}" ]]; then
488 zzam 1.50 elog "Please have a look at the config-file"
489     elog "\t/etc/conf.d/vdr.${VDRPLUGIN}"
490 hd_brummy 1.40 elog
491 zzam 1.13 fi
492 zzam 1.1 }
493    
494 zzam 1.2 vdr-plugin_pkg_postrm() {
495 zzam 1.37 delete_orphan_plugindb_file
496 zzam 1.2 }
497    
498 zzam 1.36 vdr-plugin_pkg_config() {
499 zzam 1.54 ewarn "emerge --config ${PN} is no longer supported"
500 zzam 1.50 vdr-plugin_print_enable_command
501 zzam 1.36 }
502    
503 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