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

Contents of /eclass/x-modular.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.35 - (hide annotations) (download)
Fri Dec 23 08:28:00 2005 UTC (8 years, 11 months ago) by spyderous
Branch: MAIN
Changes since 1.34: +3 -2 lines
Add SRC_URI for 7.0 release.

1 spyderous 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 spyderous 1.35 # $Header: /var/cvsroot/gentoo-x86/eclass/x-modular.eclass,v 1.34 2005/12/17 20:46:57 joshuabaergen 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 joshuabaergen 1.26 inherit eutils libtool toolchain-funcs
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.35 SRC_URI="http://xorg.freedesktop.org/releases/X11R7.0/src/everything/${P}.tar.bz2
44     http://xorg.freedesktop.org/releases/X11R7.0-RC4/everything/${P}.tar.bz2
45 joshuabaergen 1.34 http://xorg.freedesktop.org/releases/X11R7.0-RC3/everything/${P}.tar.bz2
46 joshuabaergen 1.23 http://xorg.freedesktop.org/releases/X11R7.0-RC2/everything/${P}.tar.bz2
47 spyderous 1.20 http://xorg.freedesktop.org/releases/X11R7.0-RC1/everything/${P}.tar.bz2
48 spyderous 1.14 http://xorg.freedesktop.org/releases/X11R7.0-RC0/everything/${P}.tar.bz2"
49 spyderous 1.1 LICENSE="X11"
50     SLOT="0"
51    
52     # Set up shared dependencies
53 spyderous 1.28 if [[ -n "${SNAPSHOT}" ]]; then
54 spyderous 1.1 # FIXME: What's the minimal libtool version supporting arbitrary versioning?
55     DEPEND="${DEPEND}
56     >=sys-devel/autoconf-2.57
57     >=sys-devel/automake-1.7
58     >=sys-devel/libtool-1.5
59     >=sys-devel/m4-1.4"
60     fi
61    
62 spyderous 1.3 # If we're a font package, but not the font.alias one
63 spyderous 1.25 if [[ "${PN/#font-}" != "${PN}" ]] \
64     && [[ "${PN}" != "font-alias" ]] \
65     && [[ "${PN}" != "font-util" ]]; then
66 spyderous 1.4 # Activate font code in the rest of the eclass
67     FONT="yes"
68    
69 spyderous 1.3 RDEPEND="${RDEPEND}
70     media-fonts/encodings"
71 spyderous 1.30 DEPEND="${DEPEND}
72     x11-apps/mkfontscale
73     x11-apps/mkfontdir"
74 spyderous 1.3 PDEPEND="${PDEPEND}
75     media-fonts/font-alias"
76 spyderous 1.25
77     # Starting with 7.0RC3, we can specify the font directory
78     # But oddly, we can't do the same for encodings or font-alias
79    
80     # Wrap in `if` so ebuilds can set it too
81     if [[ -z ${FONT_DIR} ]]; then
82     FONT_DIR=${PN##*-}
83    
84     fi
85    
86     # Fix case of font directories
87     FONT_DIR=${FONT_DIR/ttf/TTF}
88     FONT_DIR=${FONT_DIR/otf/OTF}
89     FONT_DIR=${FONT_DIR/type1/Type1}
90     FONT_DIR=${FONT_DIR/speedo/Speedo}
91    
92     # Set up configure option
93     FONT_OPTIONS="--with-fontdir=\"/usr/share/fonts/${FONT_DIR}\""
94    
95     if [[ -n "${FONT}" ]]; then
96     if [[ ${PN##*-} = misc ]] || [[ ${PN##*-} = 75dpi ]] || [[ ${PN##*-} = 100dpi ]]; then
97     IUSE="${IUSE} nls"
98     fi
99     fi
100 spyderous 1.3 fi
101    
102 spyderous 1.7 # If we're a driver package
103 spyderous 1.12 if [[ "${PN/#xf86-video}" != "${PN}" ]] || [[ "${PN/#xf86-input}" != "${PN}" ]]; then
104 spyderous 1.7 # Don't build static driver modules
105     DRIVER_OPTIONS="--disable-static"
106 joshuabaergen 1.29
107     # Enable driver code in the rest of the eclass
108     DRIVER="yes"
109    
110     # Add driver patchset to SRC_URI
111     SRC_URI="${SRC_URI}
112     http://dev.gentoo.org/~joshuabaergen/distfiles/x11-driver-patches-${XDPVER}.tar.bz2"
113 spyderous 1.7 fi
114    
115 spyderous 1.1 DEPEND="${DEPEND}
116 spyderous 1.11 >=dev-util/pkgconfig-0.18
117 spyderous 1.24 >=x11-misc/util-macros-0.99.2"
118 spyderous 1.1
119 spyderous 1.21 # >=sys-apps/man-1.6b-r2 required to look in [0-8]x/ directories
120 spyderous 1.13 RDEPEND="${RDEPEND}
121 joshuabaergen 1.22 !<=x11-base/xorg-x11-6.9
122 spyderous 1.21 >=sys-apps/man-1.6b-r2"
123 spyderous 1.13 # Provides virtual/x11 for temporary use until packages are ported
124 spyderous 1.1 # x11-base/x11-env"
125    
126     x-modular_unpack_source() {
127     unpack ${A}
128     cd ${S}
129 joshuabaergen 1.16
130 spyderous 1.25 if [[ -n ${FONT_OPTIONS} ]]; then
131     einfo "Detected font directory: ${FONT_DIR}"
132     fi
133 spyderous 1.1 }
134    
135     x-modular_patch_source() {
136     # Use standardized names and locations with bulk patching
137     # Patch directory is ${WORKDIR}/patch
138     # See epatch() in eutils.eclass for more documentation
139 spyderous 1.28 if [[ -z "${EPATCH_SUFFIX}" ]] ; then
140 spyderous 1.1 EPATCH_SUFFIX="patch"
141     fi
142    
143 joshuabaergen 1.29 # If this is a driver package we need to fix man page install location.
144     # Running autoreconf will use the patched util-macros to make the
145     # change for us, so we only need to patch if it is not going to run.
146     if [[ -n "${DRIVER}" ]] && [[ "${SNAPSHOT}" != "yes" ]]; then
147     PATCHES="${PATCHES} ${DISTDIR}/x11-driver-patches-${XDPVER}.tar.bz2"
148     fi
149    
150 spyderous 1.1 # For specific list of patches
151 spyderous 1.28 if [[ -n "${PATCHES}" ]] ; then
152 spyderous 1.1 for PATCH in ${PATCHES}
153     do
154     epatch ${PATCH}
155     done
156     # For non-default directory bulk patching
157 spyderous 1.28 elif [[ -n "${PATCH_LOC}" ]] ; then
158 spyderous 1.1 epatch ${PATCH_LOC}
159     # For standard bulk patching
160 spyderous 1.28 elif [[ -d "${EPATCH_SOURCE}" ]] ; then
161 spyderous 1.1 epatch
162     fi
163     }
164    
165     x-modular_reconf_source() {
166     # Run autoreconf for CVS snapshots only
167 spyderous 1.28 if [[ "${SNAPSHOT}" = "yes" ]]
168 spyderous 1.1 then
169     # If possible, generate configure if it doesn't exist
170     if [ -f "${S}/configure.ac" ]
171     then
172     einfo "Running autoreconf..."
173 cardoe 1.8 autoreconf -v --force --install
174 spyderous 1.1 fi
175     fi
176    
177     }
178    
179     x-modular_src_unpack() {
180 joshuabaergen 1.29 if [[ ${PN:0:11} = "xorg-server" ]] || [[ -n "${DRIVER}" ]]; then
181     if gcc-specs-now; then
182 joshuabaergen 1.26 msg="Do not emerge ${PN} without vanilla gcc!"
183     eerror "$msg"
184     die "$msg"
185     fi
186 joshuabaergen 1.29 fi
187 joshuabaergen 1.26
188 spyderous 1.1 x-modular_unpack_source
189     x-modular_patch_source
190     x-modular_reconf_source
191 spyderous 1.27
192     # Joshua Baergen - October 23, 2005
193     # Fix shared lib issues on MIPS, FBSD, etc etc
194     elibtoolize
195 spyderous 1.1 }
196    
197 spyderous 1.25 x-modular_font_configure() {
198     if [[ -n "${FONT}" ]]; then
199     # Might be worth adding an option to configure your desired font
200     # and exclude all others. Also, should this USE be nls or minimal?
201     if ! use nls; then
202     FONT_OPTIONS="${FONT_OPTIONS}
203     --disable-iso8859-2
204     --disable-iso8859-3
205     --disable-iso8859-4
206     --disable-iso8859-5
207     --disable-iso8859-6
208     --disable-iso8859-7
209     --disable-iso8859-8
210     --disable-iso8859-9
211     --disable-iso8859-10
212     --disable-iso8859-11
213     --disable-iso8859-12
214     --disable-iso8859-13
215     --disable-iso8859-14
216     --disable-iso8859-15
217     --disable-iso8859-16
218     --disable-jisx0201
219     --disable-koi8-r"
220     fi
221     fi
222     }
223    
224 spyderous 1.6 x-modular_src_configure() {
225 spyderous 1.25 x-modular_font_configure
226    
227 spyderous 1.1 # If prefix isn't set here, .pc files cause problems
228 spyderous 1.28 if [[ -x ./configure ]]; then
229 spyderous 1.1 econf --prefix=${XDIR} \
230     --datadir=${XDIR}/share \
231 spyderous 1.25 ${FONT_OPTIONS} \
232 spyderous 1.7 ${DRIVER_OPTIONS} \
233 spyderous 1.1 ${CONFIGURE_OPTIONS}
234     fi
235 spyderous 1.6 }
236    
237     x-modular_src_make() {
238 spyderous 1.1 emake || die "emake failed"
239     }
240    
241 spyderous 1.6 x-modular_src_compile() {
242     x-modular_src_configure
243     x-modular_src_make
244     }
245    
246 spyderous 1.1 x-modular_src_install() {
247     # Install everything to ${XDIR}
248     make \
249     DESTDIR="${D}" \
250     install
251     # Shouldn't be necessary in XDIR=/usr
252     # einstall forces datadir, so we need to re-force it
253     # datadir=${XDIR}/share \
254     # mandir=${XDIR}/share/man \
255 spyderous 1.7
256     # Don't install libtool archives for server modules
257     if [[ -e ${D}/usr/lib/xorg/modules ]]; then
258     find ${D}/usr/lib/xorg/modules -name '*.la' \
259     | xargs rm -f
260     fi
261 spyderous 1.1 }
262 spyderous 1.2
263 spyderous 1.4 x-modular_pkg_preinst() {
264     if [[ -n "${FONT}" ]]; then
265     discover_font_dirs
266     fi
267     }
268    
269 spyderous 1.2 x-modular_pkg_postinst() {
270     if [[ -n "${FONT}" ]]; then
271     setup_fonts
272     fi
273     }
274    
275 spyderous 1.25 x-modular_pkg_postrm() {
276     if [[ -n "${FONT}" ]]; then
277     cleanup_fonts
278     fi
279     }
280    
281     cleanup_fonts() {
282     local ALLOWED_FILES="encodings.dir fonts.cache-1 fonts.dir fonts.scale"
283     for DIR in ${FONT_DIR}; do
284     unset KEEP_FONTDIR
285     REAL_DIR=${ROOT}usr/share/fonts/${DIR}
286    
287     ebegin "Checking ${REAL_DIR} for useless files"
288     pushd ${REAL_DIR} &> /dev/null
289     for FILE in *; do
290     unset MATCH
291     for ALLOWED_FILE in ${ALLOWED_FILES}; do
292     if [[ ${FILE} = ${ALLOWED_FILE} ]]; then
293     # If it's allowed, then move on to the next file
294     MATCH="yes"
295     break
296     fi
297     done
298     # If we found a match in allowed files, move on to the next file
299     if [[ -n ${MATCH} ]]; then
300     continue
301     fi
302     # If we get this far, there wasn't a match in the allowed files
303     KEEP_FONTDIR="yes"
304     # We don't need to check more files if we're already keeping it
305     break
306     done
307     popd &> /dev/null
308     # If there are no files worth keeping, then get rid of the dir
309     if [[ -z "${KEEP_FONTDIR}" ]]; then
310     rm -rf ${REAL_DIR}
311     fi
312     eend 0
313     done
314     }
315    
316 spyderous 1.2 setup_fonts() {
317     if [[ ! -n "${FONT_DIRS}" ]]; then
318 spyderous 1.25 msg="FONT_DIRS is empty. The ebuild should set it to at least one subdir of /usr/share/fonts."
319     eerror "${msg}"
320     die "${msg}"
321 spyderous 1.2 fi
322    
323     create_fonts_scale
324     create_fonts_dir
325     fix_font_permissions
326     create_font_cache
327     }
328    
329 spyderous 1.4 discover_font_dirs() {
330     pushd ${IMAGE}/usr/share/fonts
331     FONT_DIRS="$(find . -maxdepth 1 -mindepth 1 -type d)"
332     FONT_DIRS="$(echo ${FONT_DIRS} | sed -e 's:./::g')"
333     popd
334     }
335    
336 spyderous 1.2 create_fonts_scale() {
337     ebegin "Creating fonts.scale files"
338     local x
339     for FONT_DIR in ${FONT_DIRS}; do
340     x=${ROOT}/usr/share/fonts/${FONT_DIR}
341 spyderous 1.28 [[ -z "$(ls ${x}/)" ]] && continue
342     [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
343 spyderous 1.2
344     # Only generate .scale files if truetype, opentype or type1
345     # fonts are present ...
346    
347     # First truetype (ttf,ttc)
348     # NOTE: ttmkfdir does NOT work on type1 fonts (#53753)
349     # Also, there is no way to regenerate Speedo/CID fonts.scale
350     # <spyderous@gentoo.org> 2 August 2004
351 spyderous 1.28 if [[ "${x/encodings}" = "${x}" ]] \
352     && [[ -n "$(find ${x} -iname '*.tt[cf]' -print)" ]]; then
353     if [[ -x ${ROOT}/usr/bin/ttmkfdir ]]; then
354 spyderous 1.2 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/usr/$(get_libdir)" \
355     ${ROOT}/usr/bin/ttmkfdir -x 2 \
356     -e ${ROOT}/usr/share/fonts/encodings/encodings.dir \
357     -o ${x}/fonts.scale -d ${x}
358     # ttmkfdir fails on some stuff, so try mkfontscale if it does
359     local ttmkfdir_return=$?
360     else
361     # We didn't use ttmkfdir at all
362     local ttmkfdir_return=2
363     fi
364 spyderous 1.28 if [[ ${ttmkfdir_return} -ne 0 ]]; then
365 spyderous 1.2 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/usr/$(get_libdir)" \
366     ${ROOT}/usr/bin/mkfontscale \
367     -a /usr/share/fonts/encodings/encodings.dir \
368     -- ${x}
369     fi
370     # Next type1 and opentype (pfa,pfb,otf,otc)
371 spyderous 1.28 elif [[ "${x/encodings}" = "${x}" ]] \
372     && [[ -n "$(find ${x} -iname '*.[po][ft][abcf]' -print)" ]]; then
373 spyderous 1.2 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/usr/$(get_libdir)" \
374     ${ROOT}/usr/bin/mkfontscale \
375     -a ${ROOT}/usr/share/fonts/encodings/encodings.dir \
376     -- ${x}
377     fi
378     done
379     eend 0
380     }
381    
382     create_fonts_dir() {
383     ebegin "Generating fonts.dir files"
384     for FONT_DIR in ${FONT_DIRS}; do
385     x=${ROOT}/usr/share/fonts/${FONT_DIR}
386 spyderous 1.28 [[ -z "$(ls ${x}/)" ]] && continue
387     [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
388 spyderous 1.2
389 spyderous 1.28 if [[ "${x/encodings}" = "${x}" ]]; then
390 spyderous 1.2 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ROOT}/usr/$(get_libdir)" \
391     ${ROOT}/usr/bin/mkfontdir \
392     -e ${ROOT}/usr/share/fonts/encodings \
393     -e ${ROOT}/usr/share/fonts/encodings/large \
394     -- ${x}
395     fi
396     done
397     eend 0
398     }
399    
400     fix_font_permissions() {
401     ebegin "Fixing permissions"
402     for FONT_DIR in ${FONT_DIRS}; do
403     find ${ROOT}/usr/share/fonts/${FONT_DIR} -type f -name 'font.*' \
404     -exec chmod 0644 {} \;
405     done
406     eend 0
407     }
408    
409     create_font_cache() {
410     # danarmak found out that fc-cache should be run AFTER all the above
411     # stuff, as otherwise the cache is invalid, and has to be run again
412     # as root anyway
413 spyderous 1.28 if [[ -x ${ROOT}/usr/bin/fc-cache ]]; then
414 spyderous 1.2 ebegin "Creating FC font cache"
415     HOME="/root" ${ROOT}/usr/bin/fc-cache
416     eend 0
417     fi
418     }

  ViewVC Help
Powered by ViewVC 1.1.20