Hi, we prepared new eclass for x11 packages that should be used as replacement for x-modular.eclass.
After long discussion with others on irc we choose to name it as xorg-2.eclass. Whats new/changed: 1 removed function call (pkg_preinst iirc) and 1 new added pkg_setup. Requires eapi3 or any later when added, so wont work with eapi 012. Removed most code that kept backcompat up to old mono xorg :] Added static-libs useflag hopefully everywhere where usefull. Fonts handling slightly rewritten to be done as written in specs (or i hope i did so :]). Removed weird debug useflag handling which just altered C/XX/FLAGS. Prefix support done. Its used everywhere in x11 overlay and you can see it also as attachment to this mail. Please help us to find issues we might miss, before inclusion. Which will happen in 14 days since today (4.3. 2010) if nothing major will be found. Cheers -------- Tomáš Chvátal Gentoo Linux Developer [Council/KDE/Overlays/QA/X11] E-Mail : scarab...@gentoo.org GnuPG FP : 94A4 5CCD 85D3 DE24 FE99 F924 1C1E 9CDE 0341 4587 GnuPG ID : 03414587
# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ # # @ECLASS: xorg-2.eclass # @MAINTAINER: # x...@gentoo.org # Author: Tomáš Chvátal <scarab...@gentoo.org> # Author: Donnie Berkholz <dberkh...@gentoo.org> # @BLURB: Reduces code duplication in the modularized X11 ebuilds. # @DESCRIPTION: # This eclass makes trivial X ebuilds possible for apps, fonts, drivers, # and more. Many things that would normally be done in various functions # can be accessed by setting variables instead, such as patching, # running eautoreconf, passing options to configure and installing docs. # # All you need to do in a basic ebuild is inherit this eclass and set # DESCRIPTION, KEYWORDS and RDEPEND/DEPEND. If your package is hosted # with the other X packages, you don't need to set SRC_URI. Pretty much # everything else should be automatic. GIT_ECLASS="" if [[ ${PV} == *9999* ]]; then GIT_ECLASS="git" SNAPSHOT="yes" SRC_URI="" fi # If we're a font package, but not the font.alias one FONT_ECLASS="" if [[ ${PN} == font* \ && ${CATEGORY} = media-fonts \ && ${PN} != font-alias \ && ${PN} != font-util ]]; then # Activate font code in the rest of the eclass FONT="yes" FONT_ECLASS="font" fi inherit eutils base libtool multilib toolchain-funcs flag-o-matic autotools \ ${FONT_ECLASS} ${GIT_ECLASS} EXPORTED_FUNCTIONS="src_unpack src_compile src_install pkg_postinst pkg_postrm" case "${EAPI:-0}" in 3) EXPORTED_FUNCTIONS="${EXPORTED_FUNCTIONS} src_prepare src_configure" ;; *) DEPEND="EAPI-UNSUPPORTED" ;; esac # exports must be ALWAYS after inherit EXPORT_FUNCTIONS ${EXPORTED_FUNCTIONS} # @ECLASS-VARIABLE: XDIR # @DESCRIPTION: # Directory prefix to use for everything. If you want to install to a # non-default prefix (e.g., /opt/xorg), change XDIR. This has not been # recently tested. You may need to uncomment the setting of datadir and # mandir in xorg-2_src_install() or add it back in if it's no longer # there. You may also want to change the SLOT. : ${XDIR:=/usr} IUSE="" HOMEPAGE="http://xorg.freedesktop.org/" # @ECLASS-VARIABLE: SNAPSHOT # @DESCRIPTION: # If set to 'yes' and configure.ac exists, eautoreconf will run. Set # before inheriting this eclass. : ${SNAPSHOT:="no"} # Set up SRC_URI for individual modular releases BASE_INDIVIDUAL_URI="http://xorg.freedesktop.org/releases/individual" # @ECLASS-VARIABLE: MODULE # @DESCRIPTION: # The subdirectory to download source from. Possible settings are app, # doc, data, util, driver, font, lib, proto, xserver. Set above the # inherit to override the default autoconfigured module. if [[ -z ${MODULE} ]]; then MODULE="" case ${CATEGORY} in app-doc) MODULE="doc" ;; media-fonts) MODULE="font" ;; x11-apps|x11-wm) MODULE="app" ;; x11-misc|x11-themes) MODULE="util" ;; x11-drivers) MODULE="driver" ;; x11-base) MODULE="xserver" ;; x11-proto) MODULE="proto" ;; x11-libs) MODULE="lib" ;; esac fi if [[ -n ${GIT_ECLASS} ]]; then EGIT_REPO_URI="git://anongit.freedesktop.org/git/xorg/${MODULE}/${PN}" else SRC_URI+=" ${BASE_INDIVIDUAL_URI}/${MODULE}/${P}.tar.bz2" fi : ${SLOT:=0} # Set the license for the package. This can be overridden by setting # LICENSE after the inherit. Nearly all FreeDesktop-hosted X packages # are under the MIT license. (This is what Red Hat does in their rpms) : ${LICENSE=MIT} # Set up shared dependencies if [[ ${SNAPSHOT} != no ]]; then DEPEND+=" >=sys-devel/libtool-2.2.6a sys-devel/m4" # These 2 versions MUST BE STABLE [[ ${PN} == util-macros ]] || DEPEND+=" >=x11-misc/util-macros-1.3.0" [[ ${PN} == font-util ]] || DEPEND+=" >=media-fonts/font-util-1.1.1-r1" WANT_AUTOCONF="latest" WANT_AUTOMAKE="latest" fi if [[ ${FONT} == yes ]]; then DEPEND+=" >=media-fonts/font-util-1.1.1-r1" RDEPEND+=" media-fonts/encodings x11-apps/mkfontscale x11-apps/mkfontdir" PDEPEND+=" media-fonts/font-alias" # @ECLASS-VARIABLE: FONT_DIR # @DESCRIPTION: # If you're creating a font package and the suffix of PN is not equal to # the subdirectory of /usr/share/fonts/ it should install into, set # FONT_DIR to that directory or directories. Set before inheriting this # eclass. [[ -z ${FONT_DIR} ]] && FONT_DIR=${PN##*-} # Fix case of font directories FONT_DIR=${FONT_DIR/ttf/TTF} FONT_DIR=${FONT_DIR/otf/OTF} FONT_DIR=${FONT_DIR/type1/Type1} FONT_DIR=${FONT_DIR/speedo/Speedo} # Set up configure options, wrapped so ebuilds can override if need be [[ -z ${FONT_OPTIONS} ]] && FONT_OPTIONS="--with-fontdir=\"${EPREFIX}/usr/share/fonts/${FONT_DIR}\"" [[ ${PN##*-} = misc || ${PN##*-} = 75dpi || ${PN##*-} = 100dpi || ${PN##*-} = cyrillic ]] && IUSE+=" nls" fi # If we're a driver package, then enable DRIVER case [[ ${PN} == xf86-video-* || ${PN} == xf86-input-* ]] && DRIVER="yes" # Add static-libs useflag where usefull. if [[ ${FONT} != yes \ && ${CATEGORY} != app-doc \ && ${CATEGORY} != x11-proto \ && ${CATEGORY} != x11-drivers \ && ${CATEGORY} != media-fonts \ && ${PN} != util-macros \ && ${PN} != xbitmaps \ && ${PN} != xorg-cf-files \ && ${PN/xcursor} = ${PN} ]]; then IUSE+=" static-libs" fi DEPEND+=" >=dev-util/pkgconfig-0.23" # Check deps on xorg-server has dri ${IUSE//+} && DEPEND+=" dri? ( >=x11-base/xorg-server-1.6.3.901-r2[-minimal] )" [[ -n "${DRIVER}" ]] && DEPEND+=" x11-base/xorg-server[xorg]" # @FUNCTION: xorg-2_pkg_setup # @USAGE: # @DESCRIPTION: # Setup prefix compat xorg-2_pkg_setup() { [[ ${FONT} == yes ]] && font_pkg_setup } # @FUNCTION: xorg-2_src_unpack # @USAGE: # @DESCRIPTION: # Simply unpack source code. xorg-2_src_unpack() { if [[ -n ${GIT_ECLASS} ]]; then git_src_unpack else unpack ${A} fi [[ -n ${FONT_OPTIONS} ]] && einfo "Detected font directory: ${FONT_DIR}" } # @FUNCTION: xorg-2_patch_source # @USAGE: # @DESCRIPTION: # Apply all patches xorg-2_patch_source() { # Use standardized names and locations with bulk patching # Patch directory is ${WORKDIR}/patch # See epatch() in eutils.eclass for more documentation EPATCH_SUFFIX=${EPATCH_SUFFIX:=patch} [[ -d "${EPATCH_SOURCE}" ]] && epatch base_src_prepare epatch_user } # @FUNCTION: xorg-2_reconf_source # @USAGE: # @DESCRIPTION: # Run eautoreconf if necessary, and run elibtoolize. xorg-2_reconf_source() { case ${CHOST} in *-interix* | *-aix* | *-winnt*) # some hosts need full eautoreconf [[ -e "./configure.ac" ]] && eautoreconf || ewarn "Unable to autoreconf the configure script. Things may fail." ;; *) [[ ${SNAPSHOT} != no && -e "./configure.ac" ]] && eautoreconf # Fix shared lib issues on MIPS, FBSD, etc etc elibtoolize ;; esac } # @FUNCTION: xorg-2_src_prepare # @USAGE: # @DESCRIPTION: # Prepare a package after unpacking, performing all X-related tasks. xorg-2_src_prepare() { [[ -n ${GIT_ECLASS} ]] && git_src_prepare xorg-2_patch_source xorg-2_reconf_source } # @FUNCTION: xorg-2_font_configure # @USAGE: # @DESCRIPTION: # If a font package, perform any necessary configuration steps xorg-2_font_configure() { if has nls ${IUSE//+} && ! use nls; then FONT_OPTIONS+=" --disable-iso8859-2 --disable-iso8859-3 --disable-iso8859-4 --disable-iso8859-5 --disable-iso8859-6 --disable-iso8859-7 --disable-iso8859-8 --disable-iso8859-9 --disable-iso8859-10 --disable-iso8859-11 --disable-iso8859-12 --disable-iso8859-13 --disable-iso8859-14 --disable-iso8859-15 --disable-iso8859-16 --disable-jisx0201 --disable-koi8-r" fi } # @FUNCTION: x-modular_flags_setup # @USAGE: # @DESCRIPTION: # Set up CFLAGS for a debug build xorg-2_flags_setup() { # Win32 require special define [[ ${CHOST} == *-winnt* ]] && append-flags -DWIN32 -D__STDC__ # hardened dependant ldflags if [[ ${PN} = xorg-server || -n ${DRIVER} ]]; then append-ldflags -Wl,-z,lazy # (#116698) breaks loading filter-ldflags -Wl,-z,now fi } # @FUNCTION: xorg-2_src_configure # @USAGE: # @DESCRIPTION: # Perform any necessary pre-configuration steps, then run configure xorg-2_src_configure() { local myopts="" xorg-2_flags_setup [[ -n "${FONT}" ]] && xorg-2_font_configure # @VARIABLE: CONFIGURE_OPTIONS # @DESCRIPTION: # Any options to pass to configure CONFIGURE_OPTIONS=${CONFIGURE_OPTIONS:=""} if [[ -x ${ECONF_SOURCE:-.}/configure ]]; then if has static-libs ${IUSE//+}; then myopts+=" $(use_enable static-libs static)" fi econf --prefix="${EPREFIX}"${XDIR} \ --datadir="${EPREFIX}"${XDIR}/share \ ${FONT_OPTIONS} \ ${CONFIGURE_OPTIONS} \ ${myopts} fi } # @FUNCTION: xorg-2_src_compile # @USAGE: # @DESCRIPTION: # Compile a package, performing all X-related tasks. xorg-2_src_compile() { base_src_compile } # @FUNCTION: xorg-2_src_install # @USAGE: # @DESCRIPTION: # Install a built package to ${D}, performing any necessary steps. # Creates a ChangeLog from git if using live ebuilds. xorg-2_src_install() { # Install everything to ${XDIR} if [[ ${CATEGORY} == x11-proto ]]; then emake \ ${PN/proto/}docdir=${EPREFIX}/usr/share/doc/${PF} \ DESTDIR="${D}" \ install \ || die "emake install failed" else emake \ docdir=${EPREFIX}/usr/share/doc/${PF} \ DESTDIR="${D}" \ install \ || die "emake install failed" fi if [[ -n ${GIT_ECLASS} ]]; then pushd "${EGIT_STORE_DIR}/${EGIT_CLONE_DIR}" > /dev/null git log ${GIT_TREE} > "${S}"/ChangeLog popd > /dev/null fi if [[ -e "${S}"/ChangeLog ]]; then dodoc "${S}"/ChangeLog fi # @VARIABLE: DOCS # @DESCRIPTION: # Any documentation to install if [[ -n ${DOCS} ]]; then dodoc ${DOCS} || die "dodoc failed" fi # Don't install libtool archives for server modules if [[ -e "${D%/}${EPREFIX}/usr/$(get_libdir)/xorg/modules" ]]; then find "${D%/}${EPREFIX}/usr/$(get_libdir)/xorg/modules" -name '*.la' \ | xargs rm -f fi [[ -n ${FONT} ]] && remove_font_metadata } # @FUNCTION: xorg-2_pkg_postinst # @USAGE: # @DESCRIPTION: # Run X-specific post-installation tasks on the live filesystem. The # only task right now is some setup for font packages. xorg-2_pkg_postinst() { [[ -n "${FONT}" ]] && setup_fonts } # @FUNCTION: xorg-2_pkg_postrm # @USAGE: # @DESCRIPTION: # Run X-specific post-removal tasks on the live filesystem. The only # task right now is some cleanup for font packages. xorg-2_pkg_postrm() { if [[ -n "${FONT}" ]]; then cleanup_fonts font_pkg_postrm fi } # @FUNCTION: cleanup_fonts # @USAGE: # @DESCRIPTION: # Get rid of font directories that only contain generated files cleanup_fonts() { local allowed_files="encodings.dir fonts.alias fonts.cache-1 fonts.dir fonts.scale" local real_dir=${EROOT}usr/share/fonts/${FONT_DIR} local fle allowed_file unset KEEP_FONTDIR einfo "Checking ${real_dir} for useless files" pushd ${real_dir} &> /dev/null for fle in *; do unset MATCH for allowed_file in ${allowed_files}; do if [[ ${fle} = ${allowed_file} ]]; then # If it's allowed, then move on to the next file MATCH="yes" break fi done # If we found a match in allowed files, move on to the next file [[ -n ${MATCH} ]] && continue # If we get this far, there wasn't a match in the allowed files KEEP_FONTDIR="yes" # We don't need to check more files if we're already keeping it break done popd &> /dev/null # If there are no files worth keeping, then get rid of the dir [[ -z "${KEEP_FONTDIR}" ]] && rm -rf ${real_dir} } # @FUNCTION: setup_fonts # @USAGE: # @DESCRIPTION: # Generates needed files for fonts and fixes font permissions setup_fonts() { create_fonts_scale create_fonts_dir font_pkg_postinst } # @FUNCTION: remove_font_metadata # @USAGE: # @DESCRIPTION: # Don't let the package install generated font files that may overlap # with other packages. Instead, they're generated in pkg_postinst(). remove_font_metadata() { if [[ ${FONT_DIR} != Speedo && ${FONT_DIR} != CID ]]; then einfo "Removing font metadata" rm -rf "${ED}"/usr/share/fonts/${FONT_DIR}/fonts.{scale,dir,cache-1} fi } # @FUNCTION: create_fonts_scale # @USAGE: # @DESCRIPTION: # Create fonts.scale file, used by the old server-side fonts subsystem. create_fonts_scale() { if [[ ${DIR} != Speedo && ${DIR} != CID ]]; then ebegin "Generating font.scale" mkfontscale \ -a "${EROOT}/usr/share/fonts/encodings/encodings.dir" \ -- "${EROOT}/usr/share/fonts/${FONT_DIR}" eend $? fi } # @FUNCTION: create_fonts_dir # @USAGE: # @DESCRIPTION: # Create fonts.dir file, used by the old server-side fonts subsystem. create_fonts_dir() { ebegin "Generating fonts.dir" mkfontdir \ -e "${EROOT}"/usr/share/fonts/encodings \ -e "${EROOT}"/usr/share/fonts/encodings/large \ -- "${EROOT}/usr/share/fonts/${FONT_DIR}" eend $? }
signature.asc
Description: OpenPGP digital signature