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

Contents of /eclass/vdr-plugin.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.56 - (hide annotations) (download)
Mon Apr 21 02:45:45 2008 UTC (6 years, 8 months ago) by zzam
Branch: MAIN
Changes since 1.55: +71 -40 lines
Modularized i18n handling.

1 zzam 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 zzam 1.56 # $Header: /var/cvsroot/gentoo-x86/eclass/vdr-plugin.eclass,v 1.55 2008/04/13 16:26: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     -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     # Remove i18n Target if using older vdr
268     sed -i Makefile \
269     -e '/^all:/s/ i18n//'
270     eend 0
271     }
272 zzam 1.55
273 zzam 1.56 vdr_i18n() {
274     if vdr_has_gettext; then
275     einfo "VDR has gettext support"
276     if plugin_has_gettext; then
277     einfo "Plugin has gettext support, fine"
278 zzam 1.55 else
279 zzam 1.56 vdr_i18n_convert_to_gettext
280     if [[ $? != 0 ]]; then
281     ewarn ""
282     ewarn "Plugin will have only english OSD texts"
283     ewarn "it needs manual fixing."
284     fi
285     fi
286     else
287     einfo "VDR has no gettext support"
288     if plugin_has_gettext; then
289     vdr_i18n_disable_gettext
290 zzam 1.55 fi
291     fi
292     }
293    
294     vdr-plugin_copy_source_tree() {
295     pushd . >/dev/null
296     cp -r "${S}" "${T}"/source-tree
297     cd "${T}"/source-tree
298     cp "${WORKDIR}"/Makefile.before Makefile
299     sed -i Makefile \
300     -e "s:^DVBDIR.*$:DVBDIR = ${DVB_INCLUDE_DIR}:" \
301     -e 's:^CXXFLAGS:#CXXFLAGS:' \
302     -e 's:-I$(DVBDIR)/include:-I$(DVBDIR):' \
303     -e 's:-I$(VDRDIR) -I$(DVBDIR):-I$(DVBDIR) -I$(VDRDIR):'
304     popd >/dev/null
305     }
306    
307     vdr-plugin_install_source_tree() {
308     einfo "Installing sources"
309     destdir="${VDRSOURCE_DIR}/vdr-${VDRVERSION}/PLUGINS/src/${VDRPLUGIN}"
310     insinto "${destdir}-${PV}"
311     doins -r "${T}"/source-tree/*
312    
313     dosym "${VDRPLUGIN}-${PV}" "${destdir}"
314     }
315    
316     vdr-plugin_print_enable_command() {
317     elog
318     elog "To activate this vdr-plugin execute the following command:"
319     elog "\teselect vdr-plugin enable ${PN#vdr-}"
320     elog
321     }
322    
323    
324     ## exported functions
325    
326 zzam 1.1 vdr-plugin_pkg_setup() {
327     # -fPIC is needed for shared objects on some platforms (amd64 and others)
328     append-flags -fPIC
329    
330 zzam 1.22 # Where should the plugins live in the filesystem
331     VDR_PLUGIN_DIR="/usr/$(get_libdir)/vdr/plugins"
332     VDR_CHECKSUM_DIR="${VDR_PLUGIN_DIR%/plugins}/checksums"
333    
334 zzam 1.35 # was /usr/lib/... some time ago
335     # since gentoo-vdr-scripts-0.3.6 it works with /usr/share/...
336     VDR_RC_DIR="/usr/share/vdr/rcscript"
337 zzam 1.22
338     # Pathes to includes
339 zzam 1.29 VDR_INCLUDE_DIR="/usr/include/vdr"
340 zzam 1.22 DVB_INCLUDE_DIR="/usr/include"
341    
342    
343 zzam 1.48 TMP_LOCALE_DIR="${WORKDIR}/tmp-locale"
344     LOCDIR="/usr/share/vdr/locale"
345    
346 zzam 1.50 VDRVERSION=$(awk -F'"' '/define VDRVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h)
347     APIVERSION=$(awk -F'"' '/define APIVERSION/ {print $2}' "${VDR_INCLUDE_DIR}"/config.h)
348 zzam 1.18 [[ -z ${APIVERSION} ]] && APIVERSION="${VDRVERSION}"
349    
350 zzam 1.55 einfo "Compiling against"
351     einfo "\tvdr-${VDRVERSION} [API version ${APIVERSION}]"
352 zzam 1.1 }
353    
354     vdr-plugin_src_unpack() {
355 zzam 1.30 if [[ -z ${VDR_INCLUDE_DIR} ]]; then
356     eerror "Wrong use of vdr-plugin.eclass."
357     eerror "An ebuild for a vdr-plugin will not work without calling vdr-plugin_pkg_setup."
358     echo
359     eerror "Please report this at bugs.gentoo.org."
360     die "vdr-plugin_pkg_setup not called!"
361     fi
362 zzam 1.48 [ -z "$1" ] && vdr-plugin_src_unpack unpack add_local_patch patchmakefile i18n
363 zzam 1.1
364     while [ "$1" ]; do
365    
366     case "$1" in
367 zzam 1.34 all_but_unpack)
368 zzam 1.48 vdr-plugin_src_unpack add_local_patch patchmakefile i18n
369 zzam 1.34 ;;
370 zzam 1.1 unpack)
371 zzam 1.12 base_src_unpack
372 zzam 1.1 ;;
373 zzam 1.55 add_local_patch)
374     cd "${S}" || die "Could not change to plugin-source-directory!"
375     vdr_add_local_patch
376     ;;
377 zzam 1.1 patchmakefile)
378 zzam 1.55 cd "${S}" || die "Could not change to plugin-source-directory!"
379     vdr_patchmakefile
380 zzam 1.1 ;;
381 zzam 1.55 i18n)
382     cd "${S}" || die "Could not change to plugin-source-directory!"
383     vdr_i18n
384 hd_brummy 1.27 ;;
385 zzam 1.1 esac
386    
387     shift
388     done
389     }
390    
391     vdr-plugin_src_compile() {
392 zzam 1.7 [ -z "$1" ] && vdr-plugin_src_compile prepare compile
393 zzam 1.6
394 zzam 1.7 while [ "$1" ]; do
395    
396     case "$1" in
397     prepare)
398     [[ -n "${VDRSOURCE_DIR}" ]] && vdr-plugin_copy_source_tree
399     ;;
400     compile)
401 zzam 1.33 if [[ ! -f ${WORKDIR}/.vdr-plugin_makefile_patched ]]; then
402 zzam 1.32 eerror "Wrong use of vdr-plugin.eclass."
403     eerror "An ebuild for a vdr-plugin will not work without"
404     eerror "calling vdr-plugin_src_unpack to patch the Makefile."
405     echo
406     eerror "Please report this at bugs.gentoo.org."
407     die "vdr-plugin_src_unpack not called!"
408     fi
409 zzam 1.50 cd "${S}"
410 zzam 1.7
411 zzam 1.48 emake ${BUILD_PARAMS} \
412     ${VDRPLUGIN_MAKE_TARGET:-all} \
413     LOCALEDIR="${TMP_LOCALE_DIR}" \
414     || die "emake failed"
415 zzam 1.7 ;;
416     esac
417 zzam 1.1
418 zzam 1.7 shift
419     done
420 zzam 1.1 }
421    
422     vdr-plugin_src_install() {
423 zzam 1.6 [[ -n "${VDRSOURCE_DIR}" ]] && vdr-plugin_install_source_tree
424 zzam 1.46 cd "${WORKDIR}"
425 zzam 1.1
426 zzam 1.22 if [[ -n ${VDR_MAINTAINER_MODE} ]]; then
427 zzam 1.50 local mname="${P}-Makefile"
428     cp "${S}"/Makefile "${mname}.patched"
429     cp Makefile.before "${mname}.before"
430 zzam 1.22
431 zzam 1.50 diff -u "${mname}.before" "${mname}.patched" > "${mname}.diff"
432 zzam 1.22
433     insinto "/usr/share/vdr/maintainer-data/makefile-changes"
434 zzam 1.50 doins "${mname}.diff"
435 zzam 1.22
436     insinto "/usr/share/vdr/maintainer-data/makefile-before"
437 zzam 1.50 doins "${mname}.before"
438 zzam 1.22
439     insinto "/usr/share/vdr/maintainer-data/makefile-patched"
440 zzam 1.50 doins "${mname}.patched"
441 zzam 1.22
442     fi
443    
444 zzam 1.46 cd "${S}"
445 zzam 1.1 insinto "${VDR_PLUGIN_DIR}"
446     doins libvdr-*.so.*
447 zzam 1.48
448 zzam 1.56 if vdr_has_gettext && [[ -d ${TMP_LOCALE_DIR} ]]; then
449 zzam 1.48 einfo "Installing locales"
450     cd "${TMP_LOCALE_DIR}"
451     insinto "${LOCDIR}"
452     doins -r *
453     fi
454    
455     cd "${S}"
456 zzam 1.23 local docfile
457     for docfile in README* HISTORY CHANGELOG; do
458     [[ -f ${docfile} ]] && dodoc ${docfile}
459     done
460 zzam 1.2
461 zzam 1.17 # if VDR_CONFD_FILE is empty and ${FILESDIR}/confd exists take it
462     [[ -z ${VDR_CONFD_FILE} ]] && [[ -e ${FILESDIR}/confd ]] && VDR_CONFD_FILE=${FILESDIR}/confd
463    
464     if [[ -n ${VDR_CONFD_FILE} ]]; then
465 zzam 1.44 newconfd "${VDR_CONFD_FILE}" vdr.${VDRPLUGIN}
466 zzam 1.17 fi
467    
468    
469     # if VDR_RCADDON_FILE is empty and ${FILESDIR}/rc-addon.sh exists take it
470     [[ -z ${VDR_RCADDON_FILE} ]] && [[ -e ${FILESDIR}/rc-addon.sh ]] && VDR_RCADDON_FILE=${FILESDIR}/rc-addon.sh
471    
472     if [[ -n ${VDR_RCADDON_FILE} ]]; then
473     insinto "${VDR_RC_DIR}"
474     newins "${VDR_RCADDON_FILE}" plugin-${VDRPLUGIN}.sh
475     fi
476    
477 zzam 1.45 create_header_checksum_file
478 zzam 1.37 create_plugindb_file
479 zzam 1.1 }
480    
481 zzam 1.50 vdr-plugin_pkg_postinst() {
482     vdr-plugin_print_enable_command
483    
484 zzam 1.17 if [[ -n "${VDR_CONFD_FILE}" ]]; then
485 zzam 1.50 elog "Please have a look at the config-file"
486     elog "\t/etc/conf.d/vdr.${VDRPLUGIN}"
487 hd_brummy 1.40 elog
488 zzam 1.13 fi
489 zzam 1.1 }
490    
491 zzam 1.2 vdr-plugin_pkg_postrm() {
492 zzam 1.37 delete_orphan_plugindb_file
493 zzam 1.2 }
494    
495 zzam 1.36 vdr-plugin_pkg_config() {
496 zzam 1.54 ewarn "emerge --config ${PN} is no longer supported"
497 zzam 1.50 vdr-plugin_print_enable_command
498 zzam 1.36 }
499    
500 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