FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Gentoo > Gentoo Development

 
 
LinkBack Thread Tools
 
Old 03-25-2009, 05:25 PM
Peter Alfredsen
 
Default Please review: poppler.eclass

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_PKGCONFIG[@]}"
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"
}
 
Old 03-25-2009, 05:34 PM
Tomáš Chvátal
 
Default Please review: poppler.eclass

Dne středa 25 Březen 2009 19:25:02 Peter Alfredsen napsal(a):
I will just pick parts with notes. Some of them apply on more places :]

> # @ECLASS-VARIABLE: HOMEPAGE
> # @DESCRIPTION:
> # HOMEPAGE is set to http://poppler.freedesktop.org
> HOMEPAGE="http://poppler.freedesktop.org/"
Why you describe the variable with default value? it shows up default value in
the eclassdoc based on the real HOMEPAGE value, so it is just duplicating :]

> # @FUNCTION: poppler_src_unpack
> # @DESCRIPTION:
> # Runs unpack ${A}
> poppler_src_unpack() {
> unpack ${A}
> }
Why not just use base_src_unpack
>
> # @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
Why not rather use base_src_prepare
> 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" }
Are you sure that the find is safe with soemthing like space in the path? ;]
>
> # @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"
No need for die, it dies itself.
>
> }

Cheers
Tomas
 
Old 03-25-2009, 06:29 PM
Peter Alfredsen
 
Default Please review: poppler.eclass

On Wed, 25 Mar 2009 19:34:01 +0100
Tomáš Chvátal <scarabeus@gentoo.org> wrote:

> Dne středa 25 Březen 2009 19:25:02 Peter Alfredsen napsal(a):
> I will just pick parts with notes. Some of them apply on more
> places :]
>
> > # @ECLASS-VARIABLE: HOMEPAGE
> > # @DESCRIPTION:
> > # HOMEPAGE is set to http://poppler.freedesktop.org
> > HOMEPAGE="http://poppler.freedesktop.org/"
> Why you describe the variable with default value? it shows up default
> value in the eclassdoc based on the real HOMEPAGE value, so it is
> just duplicating :]

Fixed. Thanks. Also added @ECLASS and generally made eclass-manpages
like it.

> > 's#$(top_builddir)/poppler/libpoppler.la#-lpoppler#'
> > $(find . -type f -name 'Makefile.in') || die "Failed to sed proper lib into
> > Makefile.am"
> Are you sure that the find is safe with something like space in the
> path? ;]

Not a problem in this case. Known working-environment.

> > econf --disable-static
[...]
> > ${POPPLER_CONF}
> > || die "configuration failed"
> No need for die, it dies itself.

Fixed.

(The reason why I don't use inherited functions is that I want
everything to be explicit, available in one eclass, so I don't have to
hunt through all the inherited eclasses to see which function is
actually being used. It doesn't hurt to do it dumb-but-simple in
eclasses.)

/loki_val
 

Thread Tools




All times are GMT. The time now is 07:04 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org