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

Contents of /eclass/x-modular.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.107 - (show annotations) (download)
Tue Mar 3 16:28:32 2009 UTC (5 years, 7 months ago) by remi
Branch: MAIN
Changes since 1.106: +11 -3 lines
update the DRI checking code to new USE flags in xorg-server 1.5.3 (fixes bug #252084)

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.106 2009/03/03 16:26:20 remi Exp $
4 #
5 # @ECLASS: x-modular.eclass
6 # @MAINTAINER:
7 # Donnie Berkholz <dberkholz@gentoo.org>, x11@gentoo.org
8 # @BLURB: Reduces code duplication in the modularized X11 ebuilds.
9 # @DESCRIPTION:
10 # This eclass makes trivial X ebuilds possible for apps, fonts, drivers,
11 # and more. Many things that would normally be done in various functions
12 # can be accessed by setting variables instead, such as patching,
13 # running eautoreconf, passing options to configure and installing docs.
14 #
15 # All you need to do in a basic ebuild is inherit this eclass and set
16 # DESCRIPTION, KEYWORDS and RDEPEND/DEPEND. If your package is hosted
17 # with the other X packages, you don't need to set SRC_URI. Pretty much
18 # everything else should be automatic.
19
20 # @ECLASS-VARIABLE: XDIR
21 # @DESCRIPTION:
22 # Directory prefix to use for everything. If you want to install to a
23 # non-default prefix (e.g., /opt/xorg), change XDIR. This has not been
24 # recently tested. You may need to uncomment the setting of datadir and
25 # mandir in x-modular_src_install() or add it back in if it's no longer
26 # there. You may also want to change the SLOT.
27 XDIR="/usr"
28
29 IUSE=""
30 HOMEPAGE="http://xorg.freedesktop.org/"
31
32 if [[ -z ${SNAPSHOT} ]]; then
33 # @ECLASS-VARIABLE: SNAPSHOT
34 # @DESCRIPTION:
35 # If set to 'yes' and configure.ac exists, eautoreconf will run. Set
36 # before inheriting this eclass.
37 SNAPSHOT="no"
38 fi
39
40 if [[ ${PV} = 9999* ]]; then
41 GIT_ECLASS="git"
42 SNAPSHOT="yes"
43 SRC_URI=""
44 fi
45
46 # Set up SRC_URI for individual modular releases
47 BASE_INDIVIDUAL_URI="http://xorg.freedesktop.org/releases/individual"
48 # @ECLASS-VARIABLE: MODULE
49 # @DESCRIPTION:
50 # The subdirectory to download source from. Possible settings are app,
51 # doc, data, util, driver, font, lib, proto, xserver. Set above the
52 # inherit to override the default autoconfigured module.
53 if [[ -z ${MODULE} ]]; then
54 MODULE=""
55 case ${CATEGORY} in
56 app-doc) MODULE="doc" ;;
57 media-fonts) MODULE="font" ;;
58 x11-apps|x11-wm) MODULE="app" ;;
59 x11-misc|x11-themes) MODULE="util" ;;
60 x11-drivers) MODULE="driver" ;;
61 x11-base) MODULE="xserver" ;;
62 x11-proto) MODULE="proto" ;;
63 x11-libs) MODULE="lib" ;;
64 esac
65 fi
66
67 if [[ -n ${GIT_ECLASS} ]]; then
68 EGIT_REPO_URI="git://anongit.freedesktop.org/git/xorg/${MODULE}/${PN}"
69 else
70 SRC_URI="${SRC_URI} ${BASE_INDIVIDUAL_URI}/${MODULE}/${P}.tar.bz2"
71 fi
72
73 SLOT="0"
74
75 # Set the license for the package. This can be overridden by setting
76 # LICENSE after the inherit.
77 LICENSE=${PN}
78
79 # Set up shared dependencies
80 if [[ -n "${SNAPSHOT}" ]]; then
81 # FIXME: What's the minimal libtool version supporting arbitrary versioning?
82 DEPEND="${DEPEND}
83 >=sys-devel/libtool-1.5
84 >=sys-devel/m4-1.4"
85 WANT_AUTOCONF="latest"
86 WANT_AUTOMAKE="latest"
87 fi
88
89 # If we're a font package, but not the font.alias one
90 FONT_ECLASS=""
91 if [[ "${PN/#font-}" != "${PN}" ]] \
92 && [[ "${CATEGORY}" = "media-fonts" ]] \
93 && [[ "${PN}" != "font-alias" ]] \
94 && [[ "${PN}" != "font-util" ]]; then
95 # Activate font code in the rest of the eclass
96 FONT="yes"
97
98 # Whether to inherit the font eclass
99 FONT_ECLASS="font"
100
101 RDEPEND="${RDEPEND}
102 media-fonts/encodings
103 x11-apps/mkfontscale
104 x11-apps/mkfontdir"
105 PDEPEND="${PDEPEND}
106 media-fonts/font-alias"
107
108 # Starting with 7.0RC3, we can specify the font directory
109 # But oddly, we can't do the same for encodings or font-alias
110
111 # Wrap in `if` so ebuilds can set it too
112 if [[ -z ${FONT_DIR} ]]; then
113 # @ECLASS-VARIABLE: FONT_DIR
114 # @DESCRIPTION:
115 # If you're creating a font package and the suffix of PN is not equal to
116 # the subdirectory of /usr/share/fonts/ it should install into, set
117 # FONT_DIR to that directory or directories. Set before inheriting this
118 # eclass.
119 FONT_DIR=${PN##*-}
120
121 fi
122
123 # Fix case of font directories
124 FONT_DIR=${FONT_DIR/ttf/TTF}
125 FONT_DIR=${FONT_DIR/otf/OTF}
126 FONT_DIR=${FONT_DIR/type1/Type1}
127 FONT_DIR=${FONT_DIR/speedo/Speedo}
128
129 # Set up configure option
130 FONT_OPTIONS="--with-fontdir=\"/usr/share/fonts/${FONT_DIR}\""
131
132 if [[ -n "${FONT}" ]]; then
133 if [[ ${PN##*-} = misc ]] || [[ ${PN##*-} = 75dpi ]] || [[ ${PN##*-} = 100dpi ]] || [[ ${PN##*-} = cyrillic ]]; then
134 IUSE="${IUSE} nls"
135 fi
136 fi
137 fi
138
139 # If we're a driver package
140 if [[ "${PN/#xf86-video}" != "${PN}" ]] || [[ "${PN/#xf86-input}" != "${PN}" ]]; then
141 # Enable driver code in the rest of the eclass
142 DRIVER="yes"
143 fi
144
145 # Debugging -- ignore packages that can't be built with debugging
146 if [[ -z "${FONT}" ]] \
147 && [[ "${CATEGORY/app-doc}" = "${CATEGORY}" ]] \
148 && [[ "${CATEGORY/x11-proto}" = "${CATEGORY}" ]] \
149 && [[ "${PN/util-macros}" = "${PN}" ]] \
150 && [[ "${PN/xbitmaps}" = "${PN}" ]] \
151 && [[ "${PN/xkbdata}" = "${PN}" ]] \
152 && [[ "${PN/xorg-cf-files}" = "${PN}" ]] \
153 && [[ "${PN/xcursor}" = "${PN}" ]] \
154 ; then
155 DEBUGGABLE="yes"
156 IUSE="${IUSE} debug"
157 fi
158
159 DEPEND="${DEPEND}
160 >=dev-util/pkgconfig-0.18"
161
162 if [[ "${PN/util-macros}" = "${PN}" ]]; then
163 DEPEND="${DEPEND}
164 >=x11-misc/util-macros-0.99.2
165 >=sys-devel/binutils-2.16.1-r3"
166 fi
167
168 RDEPEND="${RDEPEND}
169 !<=x11-base/xorg-x11-6.9"
170 # Provides virtual/x11 for temporary use until packages are ported
171 # x11-base/x11-env"
172
173 inherit eutils libtool multilib toolchain-funcs flag-o-matic autotools \
174 ${FONT_ECLASS} ${GIT_ECLASS}
175
176 # @FUNCTION: x-modular_specs_check
177 # @USAGE:
178 # @DESCRIPTION:
179 # Make any necessary changes related to gcc specs (generally hardened)
180 x-modular_specs_check() {
181 if [[ ${PN:0:11} = "xorg-server" ]] || [[ -n "${DRIVER}" ]]; then
182 append-ldflags -Wl,-z,lazy
183 # (#116698) breaks loading
184 filter-ldflags -Wl,-z,now
185 fi
186 }
187
188 # @FUNCTION: x-modular_dri_check
189 # @USAGE:
190 # @DESCRIPTION:
191 # Ensures the server supports DRI if building a driver with DRI support
192 x-modular_dri_check() {
193 # (#120057) Enabling DRI in drivers requires that the server was built with
194 # support for it
195 # Starting with xorg-server 1.5.3, DRI support is always enabled unless
196 # USE=minimal is set (see bug #252084)
197 if [[ -n "${DRIVER}" ]]; then
198 if has dri ${IUSE} && use dri; then
199 einfo "Checking for direct rendering capabilities ..."
200 if has_version '>=x11-base/xorg-server-1.5.3'; then
201 if built_with_use x11-base/xorg-server minimal; then
202 die "You must build x11-base/xorg-server with USE=-minimal."
203 fi
204 else
205 if ! built_with_use x11-base/xorg-server dri; then
206 die "You must build x11-base/xorg-server with USE=dri."
207 fi
208 fi
209 fi
210 fi
211 }
212
213 # @FUNCTION: x-modular_server_supports_drivers_check
214 # @USAGE:
215 # @DESCRIPTION:
216 # Ensures the server SDK is installed if a driver is being built
217 x-modular_server_supports_drivers_check() {
218 # (#135873) Only certain servers will actually use or be capable of
219 # building external drivers, including binary drivers.
220 if [[ -n "${DRIVER}" ]]; then
221 if has_version '>=x11-base/xorg-server-1.1'; then
222 if ! built_with_use x11-base/xorg-server xorg; then
223 eerror "x11-base/xorg-server is not built with support for external drivers."
224 die "You must build x11-base/xorg-server with USE=xorg."
225 fi
226 fi
227 fi
228 }
229
230 # @FUNCTION: x-modular_unpack_source
231 # @USAGE:
232 # @DESCRIPTION:
233 # Simply unpack source code. Nothing else.
234 x-modular_unpack_source() {
235 if [[ -n ${GIT_ECLASS} ]]; then
236 git_src_unpack
237 else
238 unpack ${A}
239 fi
240 cd "${S}"
241
242 if [[ -n ${FONT_OPTIONS} ]]; then
243 einfo "Detected font directory: ${FONT_DIR}"
244 fi
245 }
246
247 # @FUNCTION: x-modular_patch_source
248 # @USAGE:
249 # @DESCRIPTION:
250 # Apply all patches
251 x-modular_patch_source() {
252 # Use standardized names and locations with bulk patching
253 # Patch directory is ${WORKDIR}/patch
254 # See epatch() in eutils.eclass for more documentation
255 if [[ -z "${EPATCH_SUFFIX}" ]] ; then
256 EPATCH_SUFFIX="patch"
257 fi
258
259 # @VARIABLE: PATCHES
260 # @DESCRIPTION:
261 # If you have any patches to apply, set PATCHES to their locations and epatch
262 # will apply them. It also handles epatch-style bulk patches, if you know how to
263 # use them and set the correct variables. If you don't, read eutils.eclass.
264 if [[ ${#PATCHES[@]} -gt 1 ]]; then
265 for x in "${PATCHES[@]}"; do
266 epatch "${x}"
267 done
268 elif [[ -n "${PATCHES}" ]]; then
269 for x in ${PATCHES}; do
270 epatch "${x}"
271 done
272 # For non-default directory bulk patching
273 elif [[ -n "${PATCH_LOC}" ]] ; then
274 epatch ${PATCH_LOC}
275 # For standard bulk patching
276 elif [[ -d "${EPATCH_SOURCE}" ]] ; then
277 epatch
278 fi
279 }
280
281 # @FUNCTION: x-modular_reconf_source
282 # @USAGE:
283 # @DESCRIPTION:
284 # Run eautoreconf if necessary, and run elibtoolize.
285 x-modular_reconf_source() {
286 if [[ "${SNAPSHOT}" = "yes" ]]
287 then
288 # If possible, generate configure if it doesn't exist
289 if [ -f "./configure.ac" ]
290 then
291 eautoreconf
292 fi
293 fi
294
295 # Joshua Baergen - October 23, 2005
296 # Fix shared lib issues on MIPS, FBSD, etc etc
297 elibtoolize
298 }
299
300 # @FUNCTION: x-modular_src_unpack
301 # @USAGE:
302 # @DESCRIPTION:
303 # Unpack a package, performing all X-related tasks.
304 x-modular_src_unpack() {
305 x-modular_specs_check
306 x-modular_server_supports_drivers_check
307 x-modular_dri_check
308 x-modular_unpack_source
309 x-modular_patch_source
310 x-modular_reconf_source
311 }
312
313 # @FUNCTION: x-modular_font_configure
314 # @USAGE:
315 # @DESCRIPTION:
316 # If a font package, perform any necessary configuration steps
317 x-modular_font_configure() {
318 if [[ -n "${FONT}" ]]; then
319 # Might be worth adding an option to configure your desired font
320 # and exclude all others. Also, should this USE be nls or minimal?
321 if ! use nls; then
322 FONT_OPTIONS="${FONT_OPTIONS}
323 --disable-iso8859-2
324 --disable-iso8859-3
325 --disable-iso8859-4
326 --disable-iso8859-5
327 --disable-iso8859-6
328 --disable-iso8859-7
329 --disable-iso8859-8
330 --disable-iso8859-9
331 --disable-iso8859-10
332 --disable-iso8859-11
333 --disable-iso8859-12
334 --disable-iso8859-13
335 --disable-iso8859-14
336 --disable-iso8859-15
337 --disable-iso8859-16
338 --disable-jisx0201
339 --disable-koi8-r"
340 fi
341 fi
342 }
343
344 # @FUNCTION: x-modular_debug_setup
345 # @USAGE:
346 # @DESCRIPTION:
347 # Set up CFLAGS for a debug build
348 x-modular_debug_setup() {
349 if [[ -n "${DEBUGGABLE}" ]]; then
350 if use debug; then
351 strip-flags
352 append-flags -g
353 fi
354 fi
355 }
356
357 # @FUNCTION: x-modular_src_configure
358 # @USAGE:
359 # @DESCRIPTION:
360 # Perform any necessary pre-configuration steps, then run configure
361 x-modular_src_configure() {
362 x-modular_font_configure
363 x-modular_debug_setup
364
365 # @VARIABLE: CONFIGURE_OPTIONS
366 # @DESCRIPTION:
367 # Any options to pass to configure
368 [[ -n ${CONFIGURE_OPTIONS} ]]
369
370 # If prefix isn't set here, .pc files cause problems
371 if [[ -x ${ECONF_SOURCE:-.}/configure ]]; then
372 econf --prefix=${XDIR} \
373 --datadir=${XDIR}/share \
374 ${FONT_OPTIONS} \
375 ${DRIVER_OPTIONS} \
376 ${CONFIGURE_OPTIONS}
377 fi
378 }
379
380 # @FUNCTION: x-modular_src_make
381 # @USAGE:
382 # @DESCRIPTION:
383 # Run make.
384 x-modular_src_make() {
385 emake || die "emake failed"
386 }
387
388 # @FUNCTION: x-modular_src_configure
389 # @USAGE:
390 # @DESCRIPTION:
391 # Compile a package, performing all X-related tasks.
392 x-modular_src_compile() {
393 x-modular_src_configure
394 x-modular_src_make
395 }
396
397 # @FUNCTION: x-modular_src_install
398 # @USAGE:
399 # @DESCRIPTION:
400 # Install a built package to ${D}, performing any necessary steps.
401 # Creates a ChangeLog from git if using live ebuilds.
402 x-modular_src_install() {
403 # Install everything to ${XDIR}
404 if [[ ${CATEGORY} = x11-proto ]]; then
405 make \
406 ${PN/proto/}docdir=/usr/share/doc/${PF} \
407 DESTDIR="${D}" \
408 install \
409 || die
410 else
411 make \
412 DESTDIR="${D}" \
413 install \
414 || die
415 fi
416 # Shouldn't be necessary in XDIR=/usr
417 # einstall forces datadir, so we need to re-force it
418 # datadir=${XDIR}/share \
419 # mandir=${XDIR}/share/man \
420
421 if [[ -n ${GIT_ECLASS} ]]; then
422 pushd "${EGIT_STORE_DIR}/${EGIT_CLONE_DIR}"
423 git log ${GIT_TREE} > "${S}"/ChangeLog
424 popd
425 fi
426
427 if [[ -e ${S}/ChangeLog ]]; then
428 dodoc "${S}"/ChangeLog
429 fi
430 # @VARIABLE: DOCS
431 # @DESCRIPTION:
432 # Any documentation to install
433 [[ -n ${DOCS} ]] && dodoc ${DOCS}
434
435 # Don't install libtool archives for server modules
436 if [[ -e ${D}/usr/$(get_libdir)/xorg/modules ]]; then
437 find "${D}"/usr/$(get_libdir)/xorg/modules -name '*.la' \
438 | xargs rm -f
439 fi
440
441 if [[ -n "${FONT}" ]]; then
442 remove_font_metadata
443 fi
444
445 if [[ -n "${DRIVER}" ]]; then
446 install_driver_hwdata
447 fi
448 }
449
450 # @FUNCTION: x-modular_pkg_preinst
451 # @USAGE:
452 # @DESCRIPTION:
453 # This function doesn't do anything right now, but it may in the future.
454 x-modular_pkg_preinst() {
455 # We no longer do anything here, but we can't remove it from the API
456 :
457 }
458
459 # @FUNCTION: x-modular_pkg_postinst
460 # @USAGE:
461 # @DESCRIPTION:
462 # Run X-specific post-installation tasks on the live filesystem. The
463 # only task right now is some setup for font packages.
464 x-modular_pkg_postinst() {
465 if [[ -n "${FONT}" ]]; then
466 setup_fonts
467 fi
468 }
469
470 # @FUNCTION: x-modular_pkg_postrm
471 # @USAGE:
472 # @DESCRIPTION:
473 # Run X-specific post-removal tasks on the live filesystem. The only
474 # task right now is some cleanup for font packages.
475 x-modular_pkg_postrm() {
476 if [[ -n "${FONT}" ]]; then
477 cleanup_fonts
478 font_pkg_postrm
479 fi
480 }
481
482 # @FUNCTION: cleanup_fonts
483 # @USAGE:
484 # @DESCRIPTION:
485 # Get rid of font directories that only contain generated files
486 cleanup_fonts() {
487 local ALLOWED_FILES="encodings.dir fonts.cache-1 fonts.dir fonts.scale"
488 for DIR in ${FONT_DIR}; do
489 unset KEEP_FONTDIR
490 REAL_DIR=${ROOT}usr/share/fonts/${DIR}
491
492 ebegin "Checking ${REAL_DIR} for useless files"
493 pushd ${REAL_DIR} &> /dev/null
494 for FILE in *; do
495 unset MATCH
496 for ALLOWED_FILE in ${ALLOWED_FILES}; do
497 if [[ ${FILE} = ${ALLOWED_FILE} ]]; then
498 # If it's allowed, then move on to the next file
499 MATCH="yes"
500 break
501 fi
502 done
503 # If we found a match in allowed files, move on to the next file
504 if [[ -n ${MATCH} ]]; then
505 continue
506 fi
507 # If we get this far, there wasn't a match in the allowed files
508 KEEP_FONTDIR="yes"
509 # We don't need to check more files if we're already keeping it
510 break
511 done
512 popd &> /dev/null
513 # If there are no files worth keeping, then get rid of the dir
514 if [[ -z "${KEEP_FONTDIR}" ]]; then
515 rm -rf ${REAL_DIR}
516 fi
517 eend 0
518 done
519 }
520
521 # @FUNCTION: setup_fonts
522 # @USAGE:
523 # @DESCRIPTION:
524 # Generates needed files for fonts and fixes font permissions
525 setup_fonts() {
526 if [[ ! -n "${FONT_DIR}" ]]; then
527 msg="FONT_DIR is empty. The ebuild should set it to at least one subdir of /usr/share/fonts."
528 eerror "${msg}"
529 die "${msg}"
530 fi
531
532 create_fonts_scale
533 create_fonts_dir
534 fix_font_permissions
535 create_font_cache
536 }
537
538 # @FUNCTION: remove_font_metadata
539 # @USAGE:
540 # @DESCRIPTION:
541 # Don't let the package install generated font files that may overlap
542 # with other packages. Instead, they're generated in pkg_postinst().
543 remove_font_metadata() {
544 local DIR
545 for DIR in ${FONT_DIR}; do
546 if [[ "${DIR}" != "Speedo" ]] && \
547 [[ "${DIR}" != "CID" ]] ; then
548 # Delete font metadata files
549 # fonts.scale, fonts.dir, fonts.cache-1
550 rm -f "${D}"/usr/share/fonts/${DIR}/fonts.{scale,dir,cache-1}
551 fi
552 done
553 }
554
555 # @FUNCTION: install_driver_hwdata
556 # @USAGE:
557 # @DESCRIPTION:
558 # Installs device-to-driver mappings for system-config-display and
559 # anything else that uses hwdata.
560 install_driver_hwdata() {
561 insinto /usr/share/hwdata/videoaliases
562 for i in "${FILESDIR}"/*.xinf; do
563 # We need this for the case when none exist,
564 # so *.xinf doesn't expand
565 if [[ -e $i ]]; then
566 doins $i
567 fi
568 done
569 }
570
571 # @FUNCTION: discover_font_dirs
572 # @USAGE:
573 # @DESCRIPTION:
574 # Deprecated. Sets up the now-unused FONT_DIRS variable.
575 discover_font_dirs() {
576 FONT_DIRS="${FONT_DIR}"
577 }
578
579 # @FUNCTION: create_fonts_scale
580 # @USAGE:
581 # @DESCRIPTION:
582 # Create fonts.scale file, used by the old server-side fonts subsystem.
583 create_fonts_scale() {
584 ebegin "Creating fonts.scale files"
585 local x
586 for DIR in ${FONT_DIR}; do
587 x=${ROOT}/usr/share/fonts/${DIR}
588 [[ -z "$(ls ${x}/)" ]] && continue
589 [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
590
591 # Only generate .scale files if truetype, opentype or type1
592 # fonts are present ...
593
594 # NOTE: There is no way to regenerate Speedo/CID fonts.scale
595 # <dberkholz@gentoo.org> 2 August 2004
596 if [[ "${x/encodings}" = "${x}" ]] \
597 && [[ -n "$(find ${x} -iname '*.[pot][ft][abcf]' -print)" ]]; then
598 mkfontscale \
599 -a "${ROOT}"/usr/share/fonts/encodings/encodings.dir \
600 -- ${x}
601 fi
602 done
603 eend 0
604 }
605
606 # @FUNCTION: create_fonts_dir
607 # @USAGE:
608 # @DESCRIPTION:
609 # Create fonts.dir file, used by the old server-side fonts subsystem.
610 create_fonts_dir() {
611 ebegin "Generating fonts.dir files"
612 for DIR in ${FONT_DIR}; do
613 x=${ROOT}/usr/share/fonts/${DIR}
614 [[ -z "$(ls ${x}/)" ]] && continue
615 [[ "$(ls ${x}/)" = "fonts.cache-1" ]] && continue
616
617 if [[ "${x/encodings}" = "${x}" ]]; then
618 mkfontdir \
619 -e "${ROOT}"/usr/share/fonts/encodings \
620 -e "${ROOT}"/usr/share/fonts/encodings/large \
621 -- ${x}
622 fi
623 done
624 eend 0
625 }
626
627 # @FUNCTION: fix_font_permissions
628 # @USAGE:
629 # @DESCRIPTION:
630 # Font files should have 644 permissions. Ensure this is the case.
631 fix_font_permissions() {
632 ebegin "Fixing permissions"
633 for DIR in ${FONT_DIR}; do
634 find "${ROOT}"/usr/share/fonts/${DIR} -type f -name 'font.*' \
635 -exec chmod 0644 {} \;
636 done
637 eend 0
638 }
639
640 # @FUNCTION: create_font_cache
641 # @USAGE:
642 # @DESCRIPTION:
643 # Create fonts.cache-1 files, used by the new client-side fonts
644 # subsystem.
645 create_font_cache() {
646 font_pkg_postinst
647 }
648
649 EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_postrm

  ViewVC Help
Powered by ViewVC 1.1.20