summaryrefslogtreecommitdiff
blob: 722ef7d3d64a82a07fd02bd5af5adf348f6f2a4b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/poppler.eclass,v 1.6 2010/01/03 19:10:49 scarabeus Exp $

# @ECLASS: poppler.eclass
# @MAINTAINER:
# Peter Alfredsen <loki_val@gentoo.org>
# @BLURB: Reduces code duplication in the modularized poppler ebuilds.
# @DESCRIPTION:
# Provides an easy template for making modularized poppler-based ebuilds.

inherit base multilib libtool

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

EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install

RDEPEND="
	!app-text/poppler
	!app-text/poppler-bindings
	"
DEPEND="
	dev-util/pkgconfig
	userland_GNU? ( >=sys-apps/findutils-4.4.0 )
	"


# @ECLASS-VARIABLE: HOMEPAGE
# @DESCRIPTION:
# Default HOMEPAGE
HOMEPAGE="http://poppler.freedesktop.org/"

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

# @ECLASS-VARIABLE: S
# @DESCRIPTION:
# Default working directory
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.
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:
# @CODE
# 	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)"
# @CODE
#
# 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
# @USAGE:
# @DESCRIPTION:
# Runs unpack ${A}
poppler_src_unpack() {
	unpack ${A}
}

# @FUNCTION: poppler_src_prepare
# @USAGE:
# @DESCRIPTION:
# Runs autopatch from base.eclass.
# Uses sed to replace libpoppler.la references with -lpoppler
poppler_src_prepare() {
	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"
	elibtoolize
}

# @FUNCTION: poppler_src_configure
# @USAGE:
# @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 POPPLER_GLIB glib-2.0 gobject-2.0

	econf 	--disable-static		\
		--enable-poppler-qt4		\
		--enable-poppler-glib		\
		--enable-xpdf-headers		\
		--enable-libjpeg		\
		--enable-libopenjpeg		\
		--enable-zlib			\
		--enable-splash-output		\
		${POPPLER_CONF}
}

# @FUNCTION: poppler_src_compile
# @USAGE:
# @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
# @USAGE:
# @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"
}