/[gentoo-x86]/eclass/x-modular.eclass
Gentoo

Contents of /eclass/x-modular.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.51 - (hide annotations) (download)
Mon Apr 3 02:03:04 2006 UTC (8 years, 6 months ago) by spyderous
Branch: MAIN
Changes since 1.50: +3 -4 lines
Switch to eautoreconf instead of autoreconf, to get extra goodness. Tested by Flameeyes, based on his patch. Keeping the versioned deps on autotools because it's possible for someone to only have a too-low version installed based on autotools eclass deps.

1 spyderous 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 spyderous 1.51 # $Header: /var/cvsroot/gentoo-x86/eclass/x-modular.eclass,v 1.50 2006/04/02 00:07:55 kevquinn Exp $
4 spyderous 1.1 #
5     # Author: Donnie Berkholz <spyderous@gentoo.org>
6     #
7     # This eclass is designed to reduce code duplication in the modularized X11
8     # ebuilds.
9 spyderous 1.32 #
10     # Using this eclass:
11     #
12     # Inherit it. If you need to run autoreconf for any reason (e.g., your patches
13     # apply to the autotools files rather than configure), set SNAPSHOT="yes". Set
14     # CONFIGURE_OPTIONS to everything you want to pass to the configure script.
15     #
16     # If you have any patches to apply, set PATCHES to their locations and epatch
17     # will apply them. It also handles epatch-style bulk patches, if you know how to
18     # use them and set the correct variables. If you don't, read eutils.eclass.
19     #
20     # If you're creating a font package and the suffix of PN is not equal to the
21     # subdirectory of /usr/share/fonts/ it should install into, set FONT_DIR to that
22     # directory or directories.
23     #
24 spyderous 1.33 # IMPORTANT: Both SNAPSHOT and FONT_DIR must be set _before_ the inherit.
25     #
26 spyderous 1.32 # Pretty much everything else should be automatic.
27 spyderous 1.1
28 spyderous 1.25 EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_postrm
29 spyderous 1.1
30 spyderous 1.51 inherit eutils libtool toolchain-funcs flag-o-matic autotools
31 spyderous 1.1
32     # Directory prefix to use for everything
33     XDIR="/usr"
34    
35 joshuabaergen 1.29 # Set up default patchset version(s) if necessary
36     # x11-driver-patches
37     if [[ -z "${XDPVER}" ]]; then
38     XDPVER="1"
39     fi
40    
41 spyderous 1.1 IUSE=""
42     HOMEPAGE="http://xorg.freedesktop.org/"
43 spyderous 1.44
44     # Set up SRC_URI for individual modular releases
45     BASE_INDIVIDUAL_URI="http://xorg.freedesktop.org/releases/individual"
46     if [[ ${CATEGORY} = x11-apps ]]; then
47     SRC_URI="${SRC_URI}
48     ${BASE_INDIVIDUAL_URI}/app/${P}.tar.bz2"
49     elif [[ ${CATEGORY} = app-doc ]]; then
50     SRC_URI="${SRC_URI}
51     ${BASE_INDIVIDUAL_URI}/doc/${P}.tar.bz2"
52     # x11-misc contains data and util, x11-themes contains data
53     elif [[ ${CATEGORY} = x11-misc ]] || [[ ${CATEGORY} = x11-themes ]]; then
54     SRC_URI="${SRC_URI}
55     ${BASE_INDIVIDUAL_URI}/data/${P}.tar.bz2
56     ${BASE_INDIVIDUAL_URI}/util/${P}.tar.bz2"
57     elif [[ ${CATEGORY} = x11-drivers ]]; then
58     SRC_URI="${SRC_URI}
59     ${BASE_INDIVIDUAL_URI}/driver/${P}.tar.bz2"
60     elif [[ ${CATEGORY} = media-fonts ]]; then
61     SRC_URI="${SRC_URI}
62     ${BASE_INDIVIDUAL_URI}/font/${P}.tar.bz2"
63     elif [[ ${CATEGORY} = x11-libs ]]; then
64     SRC_URI="${SRC_URI}
65     ${BASE_INDIVIDUAL_URI}/lib/${P}.tar.bz2"
66     elif [[ ${CATEGORY} = x11-proto ]]; then
67     SRC_URI="${SRC_URI}
68     ${BASE_INDIVIDUAL_URI}/proto/${P}.tar.bz2"
69     elif [[ ${CATEGORY} = x11-base ]]; then
70     SRC_URI="${SRC_URI}
71     ${BASE_INDIVIDUAL_URI}/xserver/${P}.tar.bz2"
72     fi
73    
74     # SRC_URI for full releases
75     SRC_URI="${SRC_URI}
76 spyderous 1.45 http://xorg.freedesktop.org/releases/X11R7.0/src/everything/${P}.tar.bz2"
77 spyderous 1.44
78 spyderous 1.1 SLOT="0"
79    
80 joshuabaergen 1.40 # Set the license for the package. This can be overridden by setting
81     # LICENSE after the inherit.
82     LICENSE=${PN}
83    
84 spyderous 1.1 # Set up shared dependencies
85 spyderous 1.28 if [[ -n "${SNAPSHOT}" ]]; then
86 spyderous 1.1 # FIXME: What's the minimal libtool version supporting arbitrary versioning?
87     DEPEND="${DEPEND}
88     >=sys-devel/autoconf-2.57
89     >=sys-devel/automake-1.7
90     >=sys-devel/libtool-1.5
91     >=sys-devel/m4-1.4"
92     fi
93    
94 spyderous 1.3 # If we're a font package, but not the font.alias one
95 spyderous 1.25 if [[ "${PN/#font-}" != "${PN}" ]] \
96 spyderous 1.49 && [[ "${CATEGORY}" = "media-fonts" ]] \
97 spyderous 1.25 && [[ "${PN}" != "font-alias" ]] \
98     && [[ "${PN}" != "font-util" ]]; then
99 spyderous 1.4 # Activate font code in the rest of the eclass
100     FONT="yes"
101    
102 spyderous 1.3 RDEPEND="${RDEPEND}
103 spyderous 1.36 media-fonts/encodings
104 spyderous 1.30 x11-apps/mkfontscale
105     x11-apps/mkfontdir"
106 spyderous 1.3 PDEPEND="${PDEPEND}
107     media-fonts/font-alias"
108 spyderous 1.25
109     # Starting with 7.0RC3, we can specify the font directory
110     # But oddly, we can't do the same for encodings or font-alias
111    
112     # Wrap in `if` so ebuilds can set it too
113     if [[ -z ${FONT_DIR} ]]; then
114     FONT_DIR=${PN##*-}
115    
116     fi
117    
118     # Fix case of font directories
119     FONT_DIR=${FONT_DIR/ttf/TTF}
120     FONT_DIR=${FONT_DIR/otf/OTF}
121     FONT_DIR=${FONT_DIR/type1/Type1}
122     FONT_DIR=${FONT_DIR/speedo/Speedo}
123    
124     # Set up configure option
125     FONT_OPTIONS="--with-fontdir=\"/usr/share/fonts/${FONT_DIR}\""
126    
127     if [[ -n "${FONT}" ]]; then
128     if [[ ${PN##*-} = misc ]] || [[ ${PN##*-} = 75dpi ]] || [[ ${PN##*-} = 100dpi ]]; then
129     IUSE="${IUSE} nls"
130     fi
131     fi
132 spyderous 1.3 fi
133    
134 spyderous 1.7 # If we're a driver package
135 spyderous 1.12 if [[ "${PN/#xf86-video}" != "${PN}" ]] || [[ "${PN/#xf86-input}" != "${PN}" ]]; then
136 joshuabaergen 1.29 # Enable driver code in the rest of the eclass
137     DRIVER="yes"
138    
139     # Add driver patchset to SRC_URI
140 swegener 1.37 SRC_URI="${SRC_URI}
141 joshuabaergen 1.29 http://dev.gentoo.org/~joshuabaergen/distfiles/x11-driver-patches-${XDPVER}.tar.bz2"
142 spyderous 1.7 fi
143    
144 spyderous 1.41 # Debugging -- ignore packages that can't be built with debugging
145     if [[ -z "${FONT}" ]] \
146     || [[ "${PN/app-doc}" != "${PN}" ]] \
147     || [[ "${PN/x11-proto}" != "${PN}" ]] \
148     || [[ "${PN/util-macros}" != "${PN}" ]] \
149     || [[ "${PN/xbitmaps}" != "${PN}" ]] \
150     || [[ "${PN/xkbdata}" != "${PN}" ]] \
151     || [[ "${PN/xorg-cf-files}" != "${PN}" ]] \
152     || [[ "${PN/xcursor}" != "${PN}" ]] \
153     ; then
154     DEBUGGABLE="yes"
155     IUSE="${IUSE} debug"
156     if use debug; then
157 spyderous 1.46 if ! has splitdebug ${FEATURES}; then
158     RESTRICT="${RESTRICT} nostrip"
159     fi
160 spyderous 1.41 fi
161     fi
162    
163 spyderous 1.1 DEPEND="${DEPEND}
164 spyderous 1.39 >=dev-util/pkgconfig-0.18"
165    
166 spyderous 1.43 if [[ "${PN/util-macros}" = "${PN}" ]]; then
167 spyderous 1.39 DEPEND="${DEPEND}
168     >=x11-misc/util-macros-0.99.2"
169     fi
170 spyderous 1.1
171 spyderous 1.21 # >=sys-apps/man-1.6b-r2 required to look in [0-8]x/ directories
172 spyderous 1.13 RDEPEND="${RDEPEND}
173 joshuabaergen 1.22 !<=x11-base/xorg-x11-6.9
174 spyderous 1.21 >=sys-apps/man-1.6b-r2"
175 spyderous 1.13 # Provides virtual/x11 for temporary use until packages are ported
176 spyderous 1.1 # x11-base/x11-env"
177    
178     x-modular_unpack_source() {
179     unpack ${A}
180     cd ${S}
181 joshuabaergen 1.16
182 spyderous 1.25 if [[ -n ${FONT_OPTIONS} ]]; then
183     einfo "Detected font directory: ${FONT_DIR}"
184     fi
185 spyderous 1.1 }
186    
187     x-modular_patch_source() {
188     # Use standardized names and locations with bulk patching
189     # Patch directory is ${WORKDIR}/patch
190     # See epatch() in eutils.eclass for more documentation
191 spyderous 1.28 if [[ -z "${EPATCH_SUFFIX}" ]] ; then
192 spyderous 1.1 EPATCH_SUFFIX="patch"
193     fi
194    
195 joshuabaergen 1.29 # If this is a driver package we need to fix man page install location.
196     # Running autoreconf will use the patched util-macros to make the
197     # change for us, so we only need to patch if it is not going to run.
198     if [[ -n "${DRIVER}" ]] && [[ "${SNAPSHOT}" != "yes" ]]; then
199     PATCHES="${PATCHES} ${DISTDIR}/x11-driver-patches-${XDPVER}.tar.bz2"
200     fi
201    
202 spyderous 1.1 # For specific list of patches
203 spyderous 1.28 if [[ -n "${PATCHES}" ]] ; then
204 spyderous 1.1 for PATCH in ${PATCHES}
205     do
206     epatch ${PATCH}
207     done
208     # For non-default directory bulk patching
209 spyderous 1.28 elif [[ -n "${PATCH_LOC}" ]] ; then
210 spyderous 1.1 epatch ${PATCH_LOC}
211     # For standard bulk patching
212 spyderous 1.28 elif [[ -d "${EPATCH_SOURCE}" ]] ; then
213 spyderous 1.1 epatch
214     fi
215     }
216    
217     x-modular_reconf_source() {
218     # Run autoreconf for CVS snapshots only
219 spyderous 1.28 if [[ "${SNAPSHOT}" = "yes" ]]
220 spyderous 1.1 then
221     # If possible, generate configure if it doesn't exist
222     if [ -f "${S}/configure.ac" ]
223     then
224 spyderous 1.51 eautoreconf
225 spyderous 1.1 fi
226     fi
227    
228     }
229    
230     x-modular_src_unpack() {
231 joshuabaergen 1.29 if [[ ${PN:0:11} = "xorg-server" ]] || [[ -n "${DRIVER}" ]]; then
232     if gcc-specs-now; then
233 kevquinn 1.50 msg="${PN} does not work with hardened gcc specs. Switch to vanilla gcc specs to emerge ${PN}."
234 joshuabaergen 1.26 eerror "$msg"
235     die "$msg"
236     fi
237 joshuabaergen 1.29 fi
238 joshuabaergen 1.26
239 spyderous 1.1 x-modular_unpack_source
240     x-modular_patch_source
241     x-modular_reconf_source
242 spyderous 1.27
243     # Joshua Baergen - October 23, 2005
244     # Fix shared lib issues on MIPS, FBSD, etc etc
245     elibtoolize
246 spyderous 1.1 }
247    
248 spyderous 1.25 x-modular_font_configure() {
249     if [[ -n "${FONT}" ]]; then
250     # Might be worth adding an option to configure your desired font
251     # and exclude all others. Also, should this USE be nls or minimal?
252     if ! use nls; then
253     FONT_OPTIONS="${FONT_OPTIONS}
254     --disable-iso8859-2
255     --disable-iso8859-3
256     --disable-iso8859-4
257     --disable-iso8859-5
258     --disable-iso8859-6
259     --disable-iso8859-7
260     --disable-iso8859-8
261     --disable-iso8859-9
262     --disable-iso8859-10
263     --disable-iso8859-11
264     --disable-iso8859-12
265     --disable-iso8859-13
266     --disable-iso8859-14
267     --disable-iso8859-15
268     --disable-iso8859-16
269     --disable-jisx0201
270     --disable-koi8-r"
271     fi
272     fi
273     }
274    
275 spyderous 1.41 x-modular_debug_setup() {
276     if [[ -n "${DEBUGGABLE}" ]]; then
277     if use debug; then
278     strip-flags
279 spyderous 1.42 append-flags -g
280 spyderous 1.41 fi
281     fi
282     }
283    
284 spyderous 1.6 x-modular_src_configure() {
285 spyderous 1.25 x-modular_font_configure
286 spyderous 1.41 x-modular_debug_setup
287 spyderous 1.25
288 spyderous 1.1 # If prefix isn't set here, .pc files cause problems
289 spyderous 1.28 if [[ -x ./configure ]]; then
290 spyderous 1.1 econf --prefix=${XDIR} \
291     --datadir=${XDIR}/share \
292 spyderous 1.25 ${FONT_OPTIONS} \
293 spyderous 1.7 ${DRIVER_OPTIONS} \
294 spyderous 1.1 ${CONFIGURE_OPTIONS}
295     fi
296 spyderous 1.6 }
297    
298     x-modular_src_make() {
299 spyderous 1.1 emake || die "emake failed"
300     }
301    
302 spyderous 1.6 x-modular_src_compile() {
303     x-modular_src_configure
304     x-modular_src_make
305     }
306    
307 spyderous 1.1 x-modular_src_install() {
308     # Install everything to ${XDIR}
309     make \
310     DESTDIR="${D}" \
311     install
312     # Shouldn't be necessary in XDIR=/usr
313     # einstall forces datadir, so we need to re-force it
314     # datadir=${XDIR}/share \
315     # mandir=${XDIR}/share/man \
316 spyderous 1.7
317     # Don't install libtool archives for server modules
318     if [[ -e ${D}/usr/lib/xorg/modules ]]; then
319     find ${D}/usr/lib/xorg/modules -name '*.la' \
320     | xargs rm -f
321     fi
322 spyderous 1.48
323     # Don't install overlapping fonts.* files
324     # Generate them instead when possible
325     if [[ -n "${FONT}" ]]; then
326     remove_font_metadata
327     fi
328 spyderous 1.1 }
329 spyderous 1.2
330 spyderous 1.4 x-modular_pkg_preinst() {
331     if [[ -n "${FONT}" ]]; then
332     discover_font_dirs
333     fi
334     }
335    
336 spyderous 1.2 x-modular_pkg_postinst() {
337     if [[ -n "${FONT}" ]]; then
338     setup_fonts
339     fi
340     }
341    
342 spyderous 1.25 x-modular_pkg_postrm() {
343     if [[ -n "${FONT}" ]]; then
344     cleanup_fonts
345     fi
346     }
347    
348     cleanup_fonts() {
349     local ALLOWED_FILES="encodings.dir fonts.cache-1 fonts.dir fonts.scale"
350     for DIR in ${FONT_DIR}; do
351     unset KEEP_FONTDIR
352     REAL_DIR=${ROOT}usr/share/fonts/${DIR}
353    
354     ebegin "Checking ${REAL_DIR} for useless files"
355     pushd ${REAL_DIR} &> /dev/null
356     for FILE in *; do
357     unset MATCH
358     for ALLOWED_FILE in ${ALLOWED_FILES}; do
359     if [[ ${FILE} = ${ALLOWED_FILE} ]]; then
360     # If it's allowed, then move on to the next file
361     MATCH="yes"
362     break
363     fi
364     done
365     # If we found a match in allowed files, move on to the next file
366     if [[ -n ${MATCH} ]]; then
367     continue
368     fi
369     # If we get this far, there wasn't a match in the allowed files
370     KEEP_FONTDIR="yes"
371     # We don't need to check more files if we're already keeping it
372     break
373     done
374     popd &> /dev/null
375     # If there are no files worth keeping, then get rid of the dir
376     if [[ -z "${KEEP_FONTDIR}" ]]; then
377     rm -rf ${REAL_DIR}
378     fi
379     eend 0
380     done
381     }
382    
383 spyderous 1.2 setup_fonts() {
384     if [[ ! -n "${FONT_DIRS}" ]]; then
385 spyderous 1.25 msg="FONT_DIRS is empty. The ebuild should set it to at least one subdir of /usr/share/fonts."
386     eerror "${msg}"
387     die "${msg}"
388 spyderous 1.2 fi
389    
390     create_fonts_scale
391     create_fonts_dir
392     fix_font_permissions
393     create_font_cache
394     }
395    
396 spyderous 1.48 remove_font_metadata() {
397     local DIR
398     for DIR in ${FONT_DIR}; do
399     if [[ "${DIR}" != "Speedo" ]] && \
400     [[ "${DIR}" != "CID" ]] ; then
401     # Delete font metadata files
402     # fonts.scale, fonts.dir, fonts.cache-1
403     rm -f ${D}/usr/share/fonts/${DIR}/fonts.{scale,dir,cache-1}
404     fi
405     done
406     }
407    
408 spyderous 1.4 discover_font_dirs() {
409     pushd ${IMAGE}/usr/share/fonts
410     FONT_DIRS="$(find . -maxdepth 1 -mindepth 1 -type d)"
411     FONT_DIRS="$(echo ${FONT_DIRS} | sed -e 's:./::g')"
412     popd
413     }
414    
415 spyderous 1.2 create_fonts_scale() {
416     ebegin "Creating fonts.scale files"
417     local x
418     for FONT_DIR in ${FONT_DIRS}; do
419     x=${ROOT}/usr/share/fonts/${FONT_DIR}
420 spyderous 1.28 [[ -z "$(ls ${x}/)" ]] && continue
421     [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
422 spyderous 1.2
423     # Only generate .scale files if truetype, opentype or type1
424     # fonts are present ...
425    
426     # First truetype (ttf,ttc)
427     # NOTE: ttmkfdir does NOT work on type1 fonts (#53753)
428     # Also, there is no way to regenerate Speedo/CID fonts.scale
429     # <spyderous@gentoo.org> 2 August 2004
430 spyderous 1.28 if [[ "${x/encodings}" = "${x}" ]] \
431     && [[ -n "$(find ${x} -iname '*.tt[cf]' -print)" ]]; then
432     if [[ -x ${ROOT}/usr/bin/ttmkfdir ]]; then
433 spyderous 1.2 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/usr/$(get_libdir)" \
434     ${ROOT}/usr/bin/ttmkfdir -x 2 \
435     -e ${ROOT}/usr/share/fonts/encodings/encodings.dir \
436     -o ${x}/fonts.scale -d ${x}
437     # ttmkfdir fails on some stuff, so try mkfontscale if it does
438     local ttmkfdir_return=$?
439     else
440     # We didn't use ttmkfdir at all
441     local ttmkfdir_return=2
442     fi
443 spyderous 1.28 if [[ ${ttmkfdir_return} -ne 0 ]]; then
444 spyderous 1.2 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/usr/$(get_libdir)" \
445     ${ROOT}/usr/bin/mkfontscale \
446     -a /usr/share/fonts/encodings/encodings.dir \
447     -- ${x}
448     fi
449     # Next type1 and opentype (pfa,pfb,otf,otc)
450 spyderous 1.28 elif [[ "${x/encodings}" = "${x}" ]] \
451     && [[ -n "$(find ${x} -iname '*.[po][ft][abcf]' -print)" ]]; then
452 spyderous 1.2 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/usr/$(get_libdir)" \
453     ${ROOT}/usr/bin/mkfontscale \
454     -a ${ROOT}/usr/share/fonts/encodings/encodings.dir \
455     -- ${x}
456     fi
457     done
458     eend 0
459     }
460    
461     create_fonts_dir() {
462     ebegin "Generating fonts.dir files"
463     for FONT_DIR in ${FONT_DIRS}; do
464     x=${ROOT}/usr/share/fonts/${FONT_DIR}
465 spyderous 1.28 [[ -z "$(ls ${x}/)" ]] && continue
466     [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
467 spyderous 1.2
468 spyderous 1.28 if [[ "${x/encodings}" = "${x}" ]]; then
469 spyderous 1.2 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/usr/$(get_libdir)" \
470     ${ROOT}/usr/bin/mkfontdir \
471     -e ${ROOT}/usr/share/fonts/encodings \
472     -e ${ROOT}/usr/share/fonts/encodings/large \
473     -- ${x}
474     fi
475     done
476     eend 0
477     }
478    
479     fix_font_permissions() {
480     ebegin "Fixing permissions"
481     for FONT_DIR in ${FONT_DIRS}; do
482     find ${ROOT}/usr/share/fonts/${FONT_DIR} -type f -name 'font.*' \
483     -exec chmod 0644 {} \;
484     done
485     eend 0
486     }
487    
488     create_font_cache() {
489     # danarmak found out that fc-cache should be run AFTER all the above
490     # stuff, as otherwise the cache is invalid, and has to be run again
491     # as root anyway
492 spyderous 1.28 if [[ -x ${ROOT}/usr/bin/fc-cache ]]; then
493 spyderous 1.2 ebegin "Creating FC font cache"
494     HOME="/root" ${ROOT}/usr/bin/fc-cache
495     eend 0
496     fi
497     }

  ViewVC Help
Powered by ViewVC 1.1.20