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

Contents of /eclass/x-modular.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.51 - (show annotations) (download)
Mon Apr 3 02:03:04 2006 UTC (8 years, 5 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 # Copyright 1999-2005 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/x-modular.eclass,v 1.50 2006/04/02 00:07:55 kevquinn Exp $
4 #
5 # Author: Donnie Berkholz <spyderous@gentoo.org>
6 #
7 # This eclass is designed to reduce code duplication in the modularized X11
8 # ebuilds.
9 #
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 # IMPORTANT: Both SNAPSHOT and FONT_DIR must be set _before_ the inherit.
25 #
26 # Pretty much everything else should be automatic.
27
28 EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_postrm
29
30 inherit eutils libtool toolchain-funcs flag-o-matic autotools
31
32 # Directory prefix to use for everything
33 XDIR="/usr"
34
35 # Set up default patchset version(s) if necessary
36 # x11-driver-patches
37 if [[ -z "${XDPVER}" ]]; then
38 XDPVER="1"
39 fi
40
41 IUSE=""
42 HOMEPAGE="http://xorg.freedesktop.org/"
43
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 http://xorg.freedesktop.org/releases/X11R7.0/src/everything/${P}.tar.bz2"
77
78 SLOT="0"
79
80 # Set the license for the package. This can be overridden by setting
81 # LICENSE after the inherit.
82 LICENSE=${PN}
83
84 # Set up shared dependencies
85 if [[ -n "${SNAPSHOT}" ]]; then
86 # 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 # If we're a font package, but not the font.alias one
95 if [[ "${PN/#font-}" != "${PN}" ]] \
96 && [[ "${CATEGORY}" = "media-fonts" ]] \
97 && [[ "${PN}" != "font-alias" ]] \
98 && [[ "${PN}" != "font-util" ]]; then
99 # Activate font code in the rest of the eclass
100 FONT="yes"
101
102 RDEPEND="${RDEPEND}
103 media-fonts/encodings
104 x11-apps/mkfontscale
105 x11-apps/mkfontdir"
106 PDEPEND="${PDEPEND}
107 media-fonts/font-alias"
108
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 fi
133
134 # If we're a driver package
135 if [[ "${PN/#xf86-video}" != "${PN}" ]] || [[ "${PN/#xf86-input}" != "${PN}" ]]; then
136 # Enable driver code in the rest of the eclass
137 DRIVER="yes"
138
139 # Add driver patchset to SRC_URI
140 SRC_URI="${SRC_URI}
141 http://dev.gentoo.org/~joshuabaergen/distfiles/x11-driver-patches-${XDPVER}.tar.bz2"
142 fi
143
144 # 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 if ! has splitdebug ${FEATURES}; then
158 RESTRICT="${RESTRICT} nostrip"
159 fi
160 fi
161 fi
162
163 DEPEND="${DEPEND}
164 >=dev-util/pkgconfig-0.18"
165
166 if [[ "${PN/util-macros}" = "${PN}" ]]; then
167 DEPEND="${DEPEND}
168 >=x11-misc/util-macros-0.99.2"
169 fi
170
171 # >=sys-apps/man-1.6b-r2 required to look in [0-8]x/ directories
172 RDEPEND="${RDEPEND}
173 !<=x11-base/xorg-x11-6.9
174 >=sys-apps/man-1.6b-r2"
175 # Provides virtual/x11 for temporary use until packages are ported
176 # x11-base/x11-env"
177
178 x-modular_unpack_source() {
179 unpack ${A}
180 cd ${S}
181
182 if [[ -n ${FONT_OPTIONS} ]]; then
183 einfo "Detected font directory: ${FONT_DIR}"
184 fi
185 }
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 if [[ -z "${EPATCH_SUFFIX}" ]] ; then
192 EPATCH_SUFFIX="patch"
193 fi
194
195 # 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 # For specific list of patches
203 if [[ -n "${PATCHES}" ]] ; then
204 for PATCH in ${PATCHES}
205 do
206 epatch ${PATCH}
207 done
208 # For non-default directory bulk patching
209 elif [[ -n "${PATCH_LOC}" ]] ; then
210 epatch ${PATCH_LOC}
211 # For standard bulk patching
212 elif [[ -d "${EPATCH_SOURCE}" ]] ; then
213 epatch
214 fi
215 }
216
217 x-modular_reconf_source() {
218 # Run autoreconf for CVS snapshots only
219 if [[ "${SNAPSHOT}" = "yes" ]]
220 then
221 # If possible, generate configure if it doesn't exist
222 if [ -f "${S}/configure.ac" ]
223 then
224 eautoreconf
225 fi
226 fi
227
228 }
229
230 x-modular_src_unpack() {
231 if [[ ${PN:0:11} = "xorg-server" ]] || [[ -n "${DRIVER}" ]]; then
232 if gcc-specs-now; then
233 msg="${PN} does not work with hardened gcc specs. Switch to vanilla gcc specs to emerge ${PN}."
234 eerror "$msg"
235 die "$msg"
236 fi
237 fi
238
239 x-modular_unpack_source
240 x-modular_patch_source
241 x-modular_reconf_source
242
243 # Joshua Baergen - October 23, 2005
244 # Fix shared lib issues on MIPS, FBSD, etc etc
245 elibtoolize
246 }
247
248 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 x-modular_debug_setup() {
276 if [[ -n "${DEBUGGABLE}" ]]; then
277 if use debug; then
278 strip-flags
279 append-flags -g
280 fi
281 fi
282 }
283
284 x-modular_src_configure() {
285 x-modular_font_configure
286 x-modular_debug_setup
287
288 # If prefix isn't set here, .pc files cause problems
289 if [[ -x ./configure ]]; then
290 econf --prefix=${XDIR} \
291 --datadir=${XDIR}/share \
292 ${FONT_OPTIONS} \
293 ${DRIVER_OPTIONS} \
294 ${CONFIGURE_OPTIONS}
295 fi
296 }
297
298 x-modular_src_make() {
299 emake || die "emake failed"
300 }
301
302 x-modular_src_compile() {
303 x-modular_src_configure
304 x-modular_src_make
305 }
306
307 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
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
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 }
329
330 x-modular_pkg_preinst() {
331 if [[ -n "${FONT}" ]]; then
332 discover_font_dirs
333 fi
334 }
335
336 x-modular_pkg_postinst() {
337 if [[ -n "${FONT}" ]]; then
338 setup_fonts
339 fi
340 }
341
342 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 setup_fonts() {
384 if [[ ! -n "${FONT_DIRS}" ]]; then
385 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 fi
389
390 create_fonts_scale
391 create_fonts_dir
392 fix_font_permissions
393 create_font_cache
394 }
395
396 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 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 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 [[ -z "$(ls ${x}/)" ]] && continue
421 [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
422
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 if [[ "${x/encodings}" = "${x}" ]] \
431 && [[ -n "$(find ${x} -iname '*.tt[cf]' -print)" ]]; then
432 if [[ -x ${ROOT}/usr/bin/ttmkfdir ]]; then
433 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 if [[ ${ttmkfdir_return} -ne 0 ]]; then
444 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 elif [[ "${x/encodings}" = "${x}" ]] \
451 && [[ -n "$(find ${x} -iname '*.[po][ft][abcf]' -print)" ]]; then
452 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 [[ -z "$(ls ${x}/)" ]] && continue
466 [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
467
468 if [[ "${x/encodings}" = "${x}" ]]; then
469 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 if [[ -x ${ROOT}/usr/bin/fc-cache ]]; then
493 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