Hi,
This is an eclass that provides functionality needed to further split
poppler into its constituent libraries and utilities. The current way
of doing this, where we have poppler with utils in app-text/poppler and
the bindings for qt3, qt4 and glib in app-text/poppler-bindings is
suboptimal.

1) it requires us to either enable by default a useflag that will pull
in a major toolkit or die when all use-flags are unset.
2) The cairo use-flag is a subset of the gtk use-flag (which is in
itself misnamed) and thus enabling [cairo] will enable [gtk] but
without this being reflected in the metadata.

Also, as part of the restructuring, I will be able to move packages
around a bit so the libs are put in dev-libs/poppler{,-glib,-qt3,-qt4}
and the utils are put in app-text/poppler-utils.

Without further ado, the eclass:


inherit base multilib

has 2 ${EAPI} || DEPEND="EAPI-TOO-OLD"

EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install

# @ECLASS-VARIABLE: HOMEPAGE
# @DESCRIPTION:
# HOMEPAGE is set to http://poppler.freedesktop.org
HOMEPAGE="http://poppler.freedesktop.org/";

# @ECLASS-VARIABLE: SRC_URI
# @DESCRIPTION:
# SRC_URI is set to http://poppler.freedesktop.org/poppler-${PV}.tar.gz
SRC_URI="http://poppler.freedesktop.org/poppler-${PV}.tar.gz";

# @ECLASS-VARIABLE: S
# @DESCRIPTION:
# S is set to ${WORKDIR}/poppler-${PV}
S=${WORKDIR}/poppler-${PV}

# @ECLASS-VARIABLE: POPPLER_MODULE
# @DESCRIPTION:
# The name of the poppler module. Must be set by the ebuild before inheriting
# the poppler eclass.
POPPLER_MODULE=${POPPLER_MODULE}

# @ECLASS-VARIABLE: POPPLER_MODULE_S
# @DESCRIPTION:
# The working directory of the poppler module. Set by default to
# ${S}/${POPPLER_MODULE}
POPPLER_MODULE_S=${S}/${POPPLER_MODULE}

# @FUNCTION: pkg_check_modules_override
# @USAGE: <GROUP> [package1] [package2]
# @DESCRIPTION:
# Will export the appropriate variables to override PKG_CHECK_MODULES autoconf
# macros, with the string " " by default. If packages are specified, they will
# be looked up with pkg-config and the appropriate LIBS and CFLAGS substituted.
# LIBS and CFLAGS can also be specified per-package with the following syntax:
# @CODE
#       package=LIBS%CFLAGS
# @CODE
# = and % have no effect unless both are specified.
# Here is an example:
# @CODE
#       pkg_check_modules_override GASH "gtk+-2.0=-jule%" gobject-2.0
# @CODE
# The above example will do:
# export GASH_CFLAGS+=" -jule"
# export GASH_LIBS+=" "
# export GASH_CFLAGS+=" $(pkg-config --cflags gobject-2.0)"
# export GASH_LIBS+=" $(pkg-config --libs gobject-2.0)"
#
# NOTE: If a package is not found, the string " " will be inserted in place of
# <GROUP>_CFLAGS  and <GROUP>_LIBS
pkg_check_modules_override() {
        local package
        local group="${1}"
        local packages="${*:2}"
        export ${group}_CFLAGS=" "
        export ${group}_LIBS=" "

        if [[ $...@} -lt 1 ]]
        then
                eerror "${FUNCNAME[0]} requires at least one parameter: GROUP"
                eerror "PKG_CHECK_MODULES(GROUP, package1 package2 etc)"
                die "${FUNCNAME[0]} requires at least one parameter: GROUP"
        fi

        for package in $packages
        do
                if [[ ${package/=} != ${package} && ${package/\%} != ${package} 
]]
                then
                        package_cflag_libs=${package##*=}
                        export ${group}_CFLAGS+=" ${package_cflag_libs%%\%*}"
                        export ${group}_LIBS+=" ${package_cflag_libs##*\%}"
                else
                        if pkg-config --exists $package
                        then
                                export ${group}_CFLAGS+=" $(pkg-config --cflags 
$package)"
                                export ${group}_LIBS+=" $(pkg-config --libs 
$package)"
                        else
                        export ${group}_CFLAGS+=" "
                        export ${group}_LIBS+=" "
                        fi
                fi
        done
}
# @FUNCTION: poppler_src_unpack
# @DESCRIPTION:
# Runs unpack ${A}
poppler_src_unpack() {
        unpack ${A}
}

# @FUNCTION: poppler_src_prepare
# @DESCRIPTION:
# Runs autopatch from base.eclass.
# Uses sed to replace libpoppler.la references with -lpoppler
poppler_src_prepare() {
        base_src_util autopatch
        sed -i  \
                -e 's#$(top_builddir)/poppler/libpoppler.la#-lpoppler#' \
                $(find . -type f -name 'Makefile.in') || die "Failed to sed 
proper lib into Makefile.am"
}

# @FUNCTION: poppler_src_configure
# @DESCRIPTION:
# Makes sure we get a uniform Makefile environment by using 
pkg_check_modules_override to
# fill out some blanks that configure wants filled. Probably not really needed, 
but
# insures against future breakage.
# Calls econf with some defaults.
poppler_src_configure() {
        pkg_check_modules_override CAIRO cairo
        pkg_check_modules_override POPPLER_GLIB glib-2.0
        pkg_check_modules_override POPPLER_QT4 QtCore QtGui QtXml
        pkg_check_modules_override POPPLER_QT4_TEST QtTest
        pkg_check_modules_override ABIWORD libxml-2.0
        pkg_check_modules_override GTK_TEST gtk+-2.0 gdk-pixbuf-2.0 
libglade-2.0 gthread-2.0
        pkg_check_modules_override GDK gdk-2.0
        pkg_check_modules_override POPPLER_GLIB glib-2.0 gobject-2.0

        econf   --disable-static                \
                --enable-gdk                    \
                --enable-poppler-qt4            \
                --enable-poppler-glib           \
                --enable-poppler-qt             \
                --enable-xpdf-headers           \
                --enable-libjpeg                \
                --enable-libopenjpeg            \
                --enable-zlib                   \
                --enable-splash-output          \
                ${POPPLER_CONF}                 \
                || die "configuration failed"
}

# @FUNCTION: poppler_src_compile
# @DESCRIPTION:
# Removes top_srcdir Makefile to ensure that no accidental recursion happens. 
The build
# will just die if it tries to go through top_srcdir.
# Runs emake "$@" in POPPLER_MODULE_S
poppler_src_compile() {
        rm -f "${S}"/Makefile* &> /dev/null
        cd $POPPLER_MODULE_S || die "POPPLER_MODULE_S=${POPPLER_MODULE_S} - cd 
failed"
        einfo "Now in $POPPLER_MODULE_S"
        emake "$@" || die "emake failed"
}

# @FUNCTION: poppler_src_install
# @DESCRIPTION:
# Runs emake DESTDIR="${D}" ${@:-install} in POPPLER_MODULE_S
# Removes .la files.
poppler_src_install() {
        cd $POPPLER_MODULE_S
        emake DESTDIR="${D}" ${@:-install} || die "make install failed"
        for pfile in "${poppler_pkgconf...@]}"
        do
                insinto /usr/$(get_libdir)/pkgconfig
                if [[ ${pfile/=} != ${pfile} ]]
                then
                        if use ${pfile%=*}
                        then
                                pfile=${pfile#*=}
                        else
                                pfile=false
                        fi
                fi
                [[ ${pfile} != "false" ]] && doins "${S}/${pfile}"
        done

        find "${D}" -type f -name '*.la' -exec rm -rf '{}' '+' || die "la 
removal failed"
}

Reply via email to