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

Contents of /eclass/x-modular.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.88 - (hide annotations) (download)
Mon Oct 15 23:57:37 2007 UTC (6 years, 11 months ago) by beandog
Branch: MAIN
Changes since 1.87: +1 -2 lines
Remove old build dependency upon man / man-db for building X

1 spyderous 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 beandog 1.88 # $Header: /var/cvsroot/gentoo-x86/eclass/x-modular.eclass,v 1.87 2007/10/14 10:12:24 dberkholz Exp $
4 spyderous 1.1 #
5 dberkholz 1.83 # Author: Donnie Berkholz <dberkholz@gentoo.org>
6 spyderous 1.1 #
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 dberkholz 1.82 # If you want to change the auto-application of the driver patchset or prevent
25     # it from applying, edit XDPVER in the ebuild. Set it to -1 to prevent patch
26     # application or positive integers for that patch version.
27     #
28     # IMPORTANT: SNAPSHOT, FONT_DIR and XDPVER must be set _before_ the inherit.
29     #
30     # If you want to install to a non-default prefix (e.g., /opt/xorg), change
31     # XDIR. This has not been recently tested. You may need to uncomment the
32     # setting of datadir and mandir in x-modular_src_install() or add it back in if
33     # it's no longer there. You may also want to change the SLOT.
34 spyderous 1.33 #
35 spyderous 1.32 # Pretty much everything else should be automatic.
36 spyderous 1.1
37     # Directory prefix to use for everything
38     XDIR="/usr"
39    
40 joshuabaergen 1.29 # Set up default patchset version(s) if necessary
41     # x11-driver-patches
42     if [[ -z "${XDPVER}" ]]; then
43     XDPVER="1"
44     fi
45    
46 spyderous 1.1 IUSE=""
47     HOMEPAGE="http://xorg.freedesktop.org/"
48 spyderous 1.44
49 dberkholz 1.87 if [[ ${PV} = 9999* ]]; then
50     GIT_ECLASS="git"
51     SNAPSHOT="yes"
52     SRC_URI=""
53     fi
54    
55 spyderous 1.44 # Set up SRC_URI for individual modular releases
56     BASE_INDIVIDUAL_URI="http://xorg.freedesktop.org/releases/individual"
57 spyderous 1.57 if [[ ${CATEGORY} = x11-apps ]] || [[ ${CATEGORY} = x11-wm ]]; then
58 dberkholz 1.87 MODULE="app"
59 spyderous 1.44 elif [[ ${CATEGORY} = app-doc ]]; then
60 dberkholz 1.87 MODULE="doc"
61 spyderous 1.44 # x11-misc contains data and util, x11-themes contains data
62     elif [[ ${CATEGORY} = x11-misc ]] || [[ ${CATEGORY} = x11-themes ]]; then
63 dberkholz 1.87 if [[ ${PN} == xbitmaps || ${PN} == xcursor-themes || ${PN} == xkbdata ]]; then
64     MODULE="data"
65     else
66     MODULE="data"
67     fi
68 spyderous 1.44 elif [[ ${CATEGORY} = x11-drivers ]]; then
69 dberkholz 1.87 MODULE="driver"
70 spyderous 1.44 elif [[ ${CATEGORY} = media-fonts ]]; then
71 dberkholz 1.87 MODULE="font"
72 spyderous 1.44 elif [[ ${CATEGORY} = x11-libs ]]; then
73 dberkholz 1.87 MODULE="lib"
74 spyderous 1.44 elif [[ ${CATEGORY} = x11-proto ]]; then
75 dberkholz 1.87 MODULE="proto"
76 spyderous 1.44 elif [[ ${CATEGORY} = x11-base ]]; then
77 dberkholz 1.87 MODULE="xserver"
78     fi
79    
80     if [[ -n ${GIT_ECLASS} ]]; then
81     EGIT_REPO_URI="git://anongit.freedesktop.org/git/xorg/${MODULE}/${PN}"
82     else
83     SRC_URI="${SRC_URI} ${BASE_INDIVIDUAL_URI}/${MODULE}/${P}.tar.bz2"
84 spyderous 1.44 fi
85    
86 spyderous 1.1 SLOT="0"
87    
88 joshuabaergen 1.40 # Set the license for the package. This can be overridden by setting
89     # LICENSE after the inherit.
90     LICENSE=${PN}
91    
92 spyderous 1.1 # Set up shared dependencies
93 spyderous 1.28 if [[ -n "${SNAPSHOT}" ]]; then
94 spyderous 1.1 # FIXME: What's the minimal libtool version supporting arbitrary versioning?
95     DEPEND="${DEPEND}
96     >=sys-devel/libtool-1.5
97     >=sys-devel/m4-1.4"
98 joshuabaergen 1.81 WANT_AUTOCONF="latest"
99     WANT_AUTOMAKE="latest"
100 spyderous 1.1 fi
101    
102 spyderous 1.3 # If we're a font package, but not the font.alias one
103 dberkholz 1.80 FONT_ECLASS=""
104 spyderous 1.25 if [[ "${PN/#font-}" != "${PN}" ]] \
105 spyderous 1.49 && [[ "${CATEGORY}" = "media-fonts" ]] \
106 spyderous 1.25 && [[ "${PN}" != "font-alias" ]] \
107     && [[ "${PN}" != "font-util" ]]; then
108 spyderous 1.4 # Activate font code in the rest of the eclass
109     FONT="yes"
110    
111 dberkholz 1.80 # Whether to inherit the font eclass
112     FONT_ECLASS="font"
113    
114 spyderous 1.3 RDEPEND="${RDEPEND}
115 spyderous 1.36 media-fonts/encodings
116 spyderous 1.30 x11-apps/mkfontscale
117     x11-apps/mkfontdir"
118 spyderous 1.3 PDEPEND="${PDEPEND}
119     media-fonts/font-alias"
120 spyderous 1.25
121     # Starting with 7.0RC3, we can specify the font directory
122     # But oddly, we can't do the same for encodings or font-alias
123    
124     # Wrap in `if` so ebuilds can set it too
125     if [[ -z ${FONT_DIR} ]]; then
126     FONT_DIR=${PN##*-}
127    
128     fi
129    
130     # Fix case of font directories
131     FONT_DIR=${FONT_DIR/ttf/TTF}
132     FONT_DIR=${FONT_DIR/otf/OTF}
133     FONT_DIR=${FONT_DIR/type1/Type1}
134     FONT_DIR=${FONT_DIR/speedo/Speedo}
135    
136     # Set up configure option
137     FONT_OPTIONS="--with-fontdir=\"/usr/share/fonts/${FONT_DIR}\""
138    
139     if [[ -n "${FONT}" ]]; then
140     if [[ ${PN##*-} = misc ]] || [[ ${PN##*-} = 75dpi ]] || [[ ${PN##*-} = 100dpi ]]; then
141     IUSE="${IUSE} nls"
142     fi
143     fi
144 spyderous 1.3 fi
145    
146 spyderous 1.7 # If we're a driver package
147 spyderous 1.12 if [[ "${PN/#xf86-video}" != "${PN}" ]] || [[ "${PN/#xf86-input}" != "${PN}" ]]; then
148 joshuabaergen 1.29 # Enable driver code in the rest of the eclass
149     DRIVER="yes"
150    
151 joshuabaergen 1.72 if [[ ${XDPVER} != -1 ]]; then
152     # Add driver patchset to SRC_URI
153     SRC_URI="${SRC_URI}
154 dberkholz 1.86 mirror://gentoo/x11-driver-patches-${XDPVER}.tar.bz2"
155 joshuabaergen 1.72 fi
156 spyderous 1.7 fi
157    
158 spyderous 1.41 # Debugging -- ignore packages that can't be built with debugging
159     if [[ -z "${FONT}" ]] \
160     || [[ "${PN/app-doc}" != "${PN}" ]] \
161     || [[ "${PN/x11-proto}" != "${PN}" ]] \
162     || [[ "${PN/util-macros}" != "${PN}" ]] \
163     || [[ "${PN/xbitmaps}" != "${PN}" ]] \
164     || [[ "${PN/xkbdata}" != "${PN}" ]] \
165     || [[ "${PN/xorg-cf-files}" != "${PN}" ]] \
166     || [[ "${PN/xcursor}" != "${PN}" ]] \
167     ; then
168     DEBUGGABLE="yes"
169     IUSE="${IUSE} debug"
170     fi
171    
172 spyderous 1.1 DEPEND="${DEPEND}
173 spyderous 1.64 >=dev-util/pkgconfig-0.18"
174 spyderous 1.39
175 spyderous 1.43 if [[ "${PN/util-macros}" = "${PN}" ]]; then
176 spyderous 1.39 DEPEND="${DEPEND}
177 spyderous 1.68 >=x11-misc/util-macros-0.99.2
178 spyderous 1.71 >=sys-devel/binutils-2.16.1-r3"
179 spyderous 1.39 fi
180 spyderous 1.1
181 spyderous 1.13 RDEPEND="${RDEPEND}
182 exg 1.59 !<=x11-base/xorg-x11-6.9"
183 spyderous 1.13 # Provides virtual/x11 for temporary use until packages are ported
184 spyderous 1.1 # x11-base/x11-env"
185    
186 dberkholz 1.87 inherit eutils libtool multilib toolchain-funcs flag-o-matic autotools \
187     ${FONT_ECLASS} ${GIT_ECLASS}
188 dberkholz 1.80
189 spyderous 1.54 x-modular_specs_check() {
190     if [[ ${PN:0:11} = "xorg-server" ]] || [[ -n "${DRIVER}" ]]; then
191 solar 1.62 append-ldflags -Wl,-z,lazy
192 spyderous 1.56 # (#116698) breaks loading
193     filter-ldflags -Wl,-z,now
194 spyderous 1.54 fi
195     }
196    
197 spyderous 1.55 x-modular_dri_check() {
198 spyderous 1.53 # (#120057) Enabling DRI in drivers requires that the server was built with
199     # support for it
200     if [[ -n "${DRIVER}" ]]; then
201     if has dri ${IUSE} && use dri; then
202     einfo "Checking for direct rendering capabilities ..."
203     if ! built_with_use x11-base/xorg-server dri; then
204     die "You must build x11-base/xorg-server with USE=dri."
205     fi
206     fi
207     fi
208 spyderous 1.55 }
209 spyderous 1.53
210 joshuabaergen 1.61 x-modular_server_supports_drivers_check() {
211     # (#135873) Only certain servers will actually use or be capable of
212     # building external drivers, including binary drivers.
213     if [[ -n "${DRIVER}" ]]; then
214 spyderous 1.67 if has_version '>=x11-base/xorg-server-1.1'; then
215 spyderous 1.66 if ! built_with_use x11-base/xorg-server xorg; then
216     eerror "x11-base/xorg-server is not built with support for external drivers."
217     die "You must build x11-base/xorg-server with USE=xorg."
218     fi
219 joshuabaergen 1.61 fi
220     fi
221     }
222    
223 spyderous 1.55 x-modular_unpack_source() {
224 dberkholz 1.87 if [[ -n ${GIT_ECLASS} ]]; then
225     git_src_unpack
226     else
227     unpack ${A}
228     fi
229 spyderous 1.1 cd ${S}
230 joshuabaergen 1.16
231 spyderous 1.25 if [[ -n ${FONT_OPTIONS} ]]; then
232     einfo "Detected font directory: ${FONT_DIR}"
233     fi
234 spyderous 1.1 }
235    
236     x-modular_patch_source() {
237     # Use standardized names and locations with bulk patching
238     # Patch directory is ${WORKDIR}/patch
239     # See epatch() in eutils.eclass for more documentation
240 spyderous 1.28 if [[ -z "${EPATCH_SUFFIX}" ]] ; then
241 spyderous 1.1 EPATCH_SUFFIX="patch"
242     fi
243    
244 joshuabaergen 1.29 # If this is a driver package we need to fix man page install location.
245     # Running autoreconf will use the patched util-macros to make the
246     # change for us, so we only need to patch if it is not going to run.
247 joshuabaergen 1.72 if [[ -n "${DRIVER}" ]] && [[ "${SNAPSHOT}" != "yes" ]]\
248     && [[ ${XDPVER} != -1 ]]; then
249 joshuabaergen 1.29 PATCHES="${PATCHES} ${DISTDIR}/x11-driver-patches-${XDPVER}.tar.bz2"
250     fi
251    
252 spyderous 1.1 # For specific list of patches
253 spyderous 1.28 if [[ -n "${PATCHES}" ]] ; then
254 spyderous 1.1 for PATCH in ${PATCHES}
255     do
256     epatch ${PATCH}
257     done
258     # For non-default directory bulk patching
259 spyderous 1.28 elif [[ -n "${PATCH_LOC}" ]] ; then
260 spyderous 1.1 epatch ${PATCH_LOC}
261     # For standard bulk patching
262 spyderous 1.28 elif [[ -d "${EPATCH_SOURCE}" ]] ; then
263 spyderous 1.1 epatch
264     fi
265     }
266    
267     x-modular_reconf_source() {
268     # Run autoreconf for CVS snapshots only
269 spyderous 1.28 if [[ "${SNAPSHOT}" = "yes" ]]
270 spyderous 1.1 then
271     # If possible, generate configure if it doesn't exist
272 dberkholz 1.74 if [ -f "./configure.ac" ]
273 spyderous 1.1 then
274 spyderous 1.51 eautoreconf
275 spyderous 1.1 fi
276     fi
277    
278 spyderous 1.54 # Joshua Baergen - October 23, 2005
279     # Fix shared lib issues on MIPS, FBSD, etc etc
280     elibtoolize
281 spyderous 1.1 }
282    
283     x-modular_src_unpack() {
284 spyderous 1.54 x-modular_specs_check
285 joshuabaergen 1.61 x-modular_server_supports_drivers_check
286 spyderous 1.55 x-modular_dri_check
287 spyderous 1.1 x-modular_unpack_source
288     x-modular_patch_source
289     x-modular_reconf_source
290     }
291    
292 spyderous 1.25 x-modular_font_configure() {
293     if [[ -n "${FONT}" ]]; then
294     # Might be worth adding an option to configure your desired font
295     # and exclude all others. Also, should this USE be nls or minimal?
296     if ! use nls; then
297     FONT_OPTIONS="${FONT_OPTIONS}
298     --disable-iso8859-2
299     --disable-iso8859-3
300     --disable-iso8859-4
301     --disable-iso8859-5
302     --disable-iso8859-6
303     --disable-iso8859-7
304     --disable-iso8859-8
305     --disable-iso8859-9
306     --disable-iso8859-10
307     --disable-iso8859-11
308     --disable-iso8859-12
309     --disable-iso8859-13
310     --disable-iso8859-14
311     --disable-iso8859-15
312     --disable-iso8859-16
313     --disable-jisx0201
314     --disable-koi8-r"
315     fi
316     fi
317     }
318    
319 spyderous 1.41 x-modular_debug_setup() {
320     if [[ -n "${DEBUGGABLE}" ]]; then
321     if use debug; then
322     strip-flags
323 spyderous 1.42 append-flags -g
324 spyderous 1.41 fi
325     fi
326     }
327    
328 spyderous 1.6 x-modular_src_configure() {
329 spyderous 1.25 x-modular_font_configure
330 spyderous 1.41 x-modular_debug_setup
331 spyderous 1.25
332 spyderous 1.1 # If prefix isn't set here, .pc files cause problems
333 dberkholz 1.85 if [[ -x ${ECONF_SOURCE:-.}/configure ]]; then
334 spyderous 1.1 econf --prefix=${XDIR} \
335     --datadir=${XDIR}/share \
336 spyderous 1.25 ${FONT_OPTIONS} \
337 spyderous 1.7 ${DRIVER_OPTIONS} \
338 spyderous 1.1 ${CONFIGURE_OPTIONS}
339     fi
340 spyderous 1.6 }
341    
342     x-modular_src_make() {
343 spyderous 1.1 emake || die "emake failed"
344     }
345    
346 spyderous 1.6 x-modular_src_compile() {
347     x-modular_src_configure
348     x-modular_src_make
349     }
350    
351 spyderous 1.1 x-modular_src_install() {
352     # Install everything to ${XDIR}
353     make \
354     DESTDIR="${D}" \
355     install
356     # Shouldn't be necessary in XDIR=/usr
357     # einstall forces datadir, so we need to re-force it
358     # datadir=${XDIR}/share \
359     # mandir=${XDIR}/share/man \
360 spyderous 1.7
361 dberkholz 1.87 if [[ -n ${GIT_ECLASS} ]]; then
362     pushd "${EGIT_STORE_DIR}/${EGIT_CLONE_DIR}"
363     git log ${GIT_TREE} > "${S}"/ChangeLog
364     popd
365     fi
366    
367 spyderous 1.60 if [[ -e ${S}/ChangeLog ]]; then
368     dodoc ${S}/ChangeLog
369     fi
370    
371 spyderous 1.52 # Make sure docs get compressed
372     prepalldocs
373    
374 spyderous 1.7 # Don't install libtool archives for server modules
375 spyderous 1.70 if [[ -e ${D}/usr/$(get_libdir)/xorg/modules ]]; then
376     find ${D}/usr/$(get_libdir)/xorg/modules -name '*.la' \
377 spyderous 1.7 | xargs rm -f
378     fi
379 spyderous 1.48
380     # Don't install overlapping fonts.* files
381     # Generate them instead when possible
382     if [[ -n "${FONT}" ]]; then
383     remove_font_metadata
384     fi
385 dberkholz 1.75
386     if [[ -n "${DRIVER}" ]]; then
387     install_driver_hwdata
388     fi
389 spyderous 1.1 }
390 spyderous 1.2
391 spyderous 1.4 x-modular_pkg_preinst() {
392 dberkholz 1.77 # We no longer do anything here, but we can't remove it from the API
393     :
394 spyderous 1.4 }
395    
396 spyderous 1.2 x-modular_pkg_postinst() {
397     if [[ -n "${FONT}" ]]; then
398     setup_fonts
399     fi
400     }
401    
402 spyderous 1.25 x-modular_pkg_postrm() {
403     if [[ -n "${FONT}" ]]; then
404     cleanup_fonts
405 dberkholz 1.78 font_pkg_postrm
406 spyderous 1.25 fi
407     }
408    
409     cleanup_fonts() {
410     local ALLOWED_FILES="encodings.dir fonts.cache-1 fonts.dir fonts.scale"
411     for DIR in ${FONT_DIR}; do
412     unset KEEP_FONTDIR
413     REAL_DIR=${ROOT}usr/share/fonts/${DIR}
414    
415     ebegin "Checking ${REAL_DIR} for useless files"
416     pushd ${REAL_DIR} &> /dev/null
417     for FILE in *; do
418     unset MATCH
419     for ALLOWED_FILE in ${ALLOWED_FILES}; do
420     if [[ ${FILE} = ${ALLOWED_FILE} ]]; then
421     # If it's allowed, then move on to the next file
422     MATCH="yes"
423     break
424     fi
425     done
426     # If we found a match in allowed files, move on to the next file
427     if [[ -n ${MATCH} ]]; then
428     continue
429     fi
430     # If we get this far, there wasn't a match in the allowed files
431     KEEP_FONTDIR="yes"
432     # We don't need to check more files if we're already keeping it
433     break
434     done
435     popd &> /dev/null
436     # If there are no files worth keeping, then get rid of the dir
437     if [[ -z "${KEEP_FONTDIR}" ]]; then
438     rm -rf ${REAL_DIR}
439     fi
440     eend 0
441     done
442     }
443    
444 spyderous 1.2 setup_fonts() {
445 dberkholz 1.77 if [[ ! -n "${FONT_DIR}" ]]; then
446     msg="FONT_DIR is empty. The ebuild should set it to at least one subdir of /usr/share/fonts."
447 spyderous 1.25 eerror "${msg}"
448     die "${msg}"
449 spyderous 1.2 fi
450    
451     create_fonts_scale
452     create_fonts_dir
453     fix_font_permissions
454     create_font_cache
455     }
456    
457 spyderous 1.48 remove_font_metadata() {
458     local DIR
459     for DIR in ${FONT_DIR}; do
460     if [[ "${DIR}" != "Speedo" ]] && \
461     [[ "${DIR}" != "CID" ]] ; then
462     # Delete font metadata files
463     # fonts.scale, fonts.dir, fonts.cache-1
464     rm -f ${D}/usr/share/fonts/${DIR}/fonts.{scale,dir,cache-1}
465     fi
466     done
467     }
468    
469 dberkholz 1.75 # Installs device-to-driver mappings for system-config-display
470     # and anything else that uses hwdata
471     install_driver_hwdata() {
472     insinto /usr/share/hwdata/videoaliases
473     for i in "${FILESDIR}"/*.xinf; do
474     # We need this for the case when none exist,
475     # so *.xinf doesn't expand
476     if [[ -e $i ]]; then
477     doins $i
478     fi
479     done
480     }
481    
482 spyderous 1.4 discover_font_dirs() {
483 dberkholz 1.77 FONT_DIRS="${FONT_DIR}"
484 spyderous 1.4 }
485    
486 spyderous 1.2 create_fonts_scale() {
487     ebegin "Creating fonts.scale files"
488     local x
489 dberkholz 1.77 for DIR in ${FONT_DIR}; do
490     x=${ROOT}/usr/share/fonts/${DIR}
491 spyderous 1.28 [[ -z "$(ls ${x}/)" ]] && continue
492     [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
493 spyderous 1.2
494     # Only generate .scale files if truetype, opentype or type1
495     # fonts are present ...
496    
497 dberkholz 1.79 # NOTE: There is no way to regenerate Speedo/CID fonts.scale
498 dberkholz 1.83 # <dberkholz@gentoo.org> 2 August 2004
499 spyderous 1.28 if [[ "${x/encodings}" = "${x}" ]] \
500 dberkholz 1.79 && [[ -n "$(find ${x} -iname '*.[pot][ft][abcf]' -print)" ]]; then
501     mkfontscale \
502 spyderous 1.2 -a ${ROOT}/usr/share/fonts/encodings/encodings.dir \
503     -- ${x}
504     fi
505     done
506     eend 0
507     }
508    
509     create_fonts_dir() {
510     ebegin "Generating fonts.dir files"
511 dberkholz 1.77 for DIR in ${FONT_DIR}; do
512     x=${ROOT}/usr/share/fonts/${DIR}
513 spyderous 1.28 [[ -z "$(ls ${x}/)" ]] && continue
514     [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
515 spyderous 1.2
516 spyderous 1.28 if [[ "${x/encodings}" = "${x}" ]]; then
517 dberkholz 1.79 mkfontdir \
518 spyderous 1.2 -e ${ROOT}/usr/share/fonts/encodings \
519     -e ${ROOT}/usr/share/fonts/encodings/large \
520     -- ${x}
521     fi
522     done
523     eend 0
524     }
525    
526     fix_font_permissions() {
527     ebegin "Fixing permissions"
528 dberkholz 1.77 for DIR in ${FONT_DIR}; do
529     find ${ROOT}/usr/share/fonts/${DIR} -type f -name 'font.*' \
530 spyderous 1.2 -exec chmod 0644 {} \;
531     done
532     eend 0
533     }
534    
535     create_font_cache() {
536 dberkholz 1.78 font_pkg_postinst
537 spyderous 1.2 }
538 dberkholz 1.78
539     EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_postrm

  ViewVC Help
Powered by ViewVC 1.1.20