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

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.60

  ViewVC Help
Powered by ViewVC 1.1.20