/[gentoo-x86]/eclass/autotools-utils.eclass
Gentoo

Contents of /eclass/autotools-utils.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show annotations) (download)
Sat Jan 22 20:28:53 2011 UTC (3 years, 11 months ago) by reavertm
Branch: MAIN
Changes since 1.6: +2 -2 lines
Fix another example wrt bug 350423

1 # Copyright 1999-2010 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/autotools-utils.eclass,v 1.6 2011/01/20 00:12:59 reavertm Exp $
4
5 # @ECLASS: autotools-utils.eclass
6 # @MAINTAINER:
7 # Maciej Mrozowski <reavertm@gentoo.org>
8 # @BLURB: common ebuild functions for autotools-based packages
9 # @DESCRIPTION:
10 # autotools-utils.eclass is autotools.eclass(5) and base.eclass(5) wrapper
11 # providing all inherited features along with econf arguments as Bash array,
12 # out of source build with overridable build dir location, static archives
13 # handling, libtool files removal, enable/disable debug handling.
14 #
15 # @EXAMPLE:
16 # Typical ebuild using autotools-utils.eclass:
17 #
18 # @CODE
19 # EAPI="2"
20 #
21 # inherit autotools-utils
22 #
23 # DESCRIPTION="Foo bar application"
24 # HOMEPAGE="http://example.org/foo/"
25 # SRC_URI="mirror://sourceforge/foo/${P}.tar.bz2"
26 #
27 # LICENSE="LGPL-2.1"
28 # KEYWORDS=""
29 # SLOT="0"
30 # IUSE="debug doc examples qt4 static-libs tiff"
31 #
32 # CDEPEND="
33 # media-libs/libpng:0
34 # qt4? (
35 # x11-libs/qt-core:4
36 # x11-libs/qt-gui:4
37 # )
38 # tiff? ( media-libs/tiff:0 )
39 # "
40 # RDEPEND="${CDEPEND}
41 # !media-gfx/bar
42 # "
43 # DEPEND="${CDEPEND}
44 # doc? ( app-doc/doxygen )
45 # "
46 #
47 # # bug 123456
48 # AUTOTOOLS_IN_SOURCE_BUILD=1
49 #
50 # DOCS=(AUTHORS ChangeLog README "Read me.txt" TODO)
51 #
52 # PATCHES=(
53 # "${FILESDIR}/${P}-gcc44.patch" # bug 123458
54 # "${FILESDIR}/${P}-as-needed.patch"
55 # "${FILESDIR}/${P}-unbundle_libpng.patch"
56 # )
57 #
58 # src_configure() {
59 # local myeconfargs=(
60 # $(use_with qt4)
61 # $(use_enable threads multithreading)
62 # $(use_with tiff)
63 # )
64 # autotools-utils_src_configure
65 # }
66 #
67 # src_compile() {
68 # autotools-utils_src_compile
69 # use doc && autotools-utils_src_compile docs
70 # }
71 #
72 # src_install() {
73 # use doc && HTML_DOCS=("${AUTOTOOLS_BUILD_DIR}/apidocs/html/")
74 # autotools-utils_src_install
75 # if use examples; then
76 # dobin "${AUTOTOOLS_BUILD_DIR}"/foo_example{1,2,3} \\
77 # || die 'dobin examples failed'
78 # fi
79 # }
80 #
81 # @CODE
82
83 # Keep variable names synced with cmake-utils and the other way around!
84
85 case ${EAPI:-0} in
86 2|3) ;;
87 *) die "EAPI=${EAPI} is not supported" ;;
88 esac
89
90 inherit autotools base
91
92 EXPORT_FUNCTIONS src_prepare src_configure src_compile src_install src_test
93
94 # @ECLASS-VARIABLE: AUTOTOOLS_BUILD_DIR
95 # @DESCRIPTION:
96 # Build directory, location where all autotools generated files should be
97 # placed. For out of source builds it defaults to ${WORKDIR}/${P}_build.
98
99 # @ECLASS-VARIABLE: AUTOTOOLS_IN_SOURCE_BUILD
100 # @DESCRIPTION:
101 # Set to enable in-source build.
102
103 # @ECLASS-VARIABLE: ECONF_SOURCE
104 # @DESCRIPTION:
105 # Specify location of autotools' configure script. By default it uses ${S}.
106
107 # @ECLASS-VARIABLE: myeconfargs
108 # @DESCRIPTION:
109 # Optional econf arguments as Bash array. Should be defined before calling src_configure.
110 # @CODE
111 # src_configure() {
112 # local myeconfargs=(
113 # --disable-readline
114 # --with-confdir="/etc/nasty foo confdir/"
115 # $(use_enable debug cnddebug)
116 # $(use_enable threads multithreading)
117 # )
118 # autotools-utils_src_configure
119 # }
120 # @CODE
121
122 # Determine using IN or OUT source build
123 _check_build_dir() {
124 : ${ECONF_SOURCE:=${S}}
125 if [[ -n ${AUTOTOOLS_IN_SOURCE_BUILD} ]]; then
126 AUTOTOOLS_BUILD_DIR="${ECONF_SOURCE}"
127 else
128 : ${AUTOTOOLS_BUILD_DIR:=${WORKDIR}/${P}_build}
129 fi
130 echo ">>> Working in BUILD_DIR: \"$AUTOTOOLS_BUILD_DIR\""
131 }
132
133 # @FUNCTION: remove_libtool_files
134 # @USAGE: [all|none]
135 # @DESCRIPTION:
136 # Determines unnecessary libtool files (.la) and libtool static archives (.a)
137 # and removes them from installation image.
138 # To unconditionally remove all libtool files, pass 'all' as argument.
139 # To leave all libtool files alone, pass 'none' as argument.
140 # Unnecessary static archives are removed in any case.
141 #
142 # In most cases it's not necessary to manually invoke this function.
143 # See autotools-utils_src_install for reference.
144 remove_libtool_files() {
145 debug-print-function ${FUNCNAME} "$@"
146
147 local f
148 for f in $(find "${D}" -type f -name '*.la'); do
149 # Keep only .la files with shouldnotlink=yes - likely plugins
150 local shouldnotlink=$(sed -ne '/^shouldnotlink=yes$/p' "${f}")
151 if [[ "$1" == 'all' || -z ${shouldnotlink} ]]; then
152 if [[ "$1" != 'none' ]]; then
153 echo "Removing unnecessary ${f}"
154 rm -f "${f}"
155 fi
156 fi
157 # Remove static libs we're not supposed to link against
158 if [[ -n ${shouldnotlink} ]]; then
159 local remove=${f/%.la/.a}
160 [[ "${f}" != "${remove}" ]] || die 'regex sanity check failed'
161 echo "Removing unnecessary ${remove}"
162 rm -f "${remove}"
163 fi
164 done
165 }
166
167 # @FUNCTION: autotools-utils_src_prepare
168 # @DESCRIPTION:
169 # The src_prepare function.
170 #
171 # Supporting PATCHES array and user patches. See base.eclass(5) for reference.
172 autotools-utils_src_prepare() {
173 debug-print-function ${FUNCNAME} "$@"
174
175 base_src_prepare
176 }
177
178 # @FUNCTION: autotools-utils_src_configure
179 # @DESCRIPTION:
180 # The src_configure function. For out of source build it creates build
181 # directory and runs econf there. Configuration parameters defined
182 # in myeconfargs are passed here to econf. Additionally following USE
183 # flags are known:
184 #
185 # IUSE="debug" passes --disable-debug/--enable-debug to econf respectively.
186 #
187 # IUSE="static-libs" passes --enable-shared and either --disable-static/--enable-static
188 # to econf respectively.
189 autotools-utils_src_configure() {
190 debug-print-function ${FUNCNAME} "$@"
191
192 # Common args
193 local econfargs=()
194
195 # Handle debug found in IUSE
196 if has debug ${IUSE//+}; then
197 econfargs+=($(use_enable debug))
198 fi
199
200 # Handle static-libs found in IUSE, disable them by default
201 if has static-libs ${IUSE//+}; then
202 econfargs+=(
203 --enable-shared
204 $(use_enable static-libs static)
205 )
206 fi
207
208 # Append user args
209 econfargs+=("${myeconfargs[@]}")
210
211 _check_build_dir
212 mkdir -p "${AUTOTOOLS_BUILD_DIR}" || die "mkdir '${AUTOTOOLS_BUILD_DIR}' failed"
213 pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
214 base_src_configure "${econfargs[@]}" "$@"
215 popd > /dev/null
216 }
217
218 # @FUNCTION: autotools-utils_src_compile
219 # @DESCRIPTION:
220 # The autotools src_compile function, invokes emake in specified AUTOTOOLS_BUILD_DIR.
221 autotools-utils_src_compile() {
222 debug-print-function ${FUNCNAME} "$@"
223
224 _check_build_dir
225 pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
226 base_src_compile "$@"
227 popd > /dev/null
228 }
229
230 # @FUNCTION: autotools-utils_src_install
231 # @DESCRIPTION:
232 # The autotools src_install function. Runs emake install, unconditionally
233 # removes unnecessary static libs (based on shouldnotlink libtool property)
234 # and removes unnecessary libtool files when static-libs USE flag is defined
235 # and unset.
236 #
237 # DOCS and HTML_DOCS arrays are supported. See base.eclass(5) for reference.
238 autotools-utils_src_install() {
239 debug-print-function ${FUNCNAME} "$@"
240
241 _check_build_dir
242 pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
243 base_src_install
244 popd > /dev/null
245
246 # Remove libtool files and unnecessary static libs
247 local args
248 has static-libs ${IUSE//+} && ! use static-libs || args='none'
249 remove_libtool_files ${args}
250 }
251
252 # @FUNCTION: autotools-utils_src_test
253 # @DESCRIPTION:
254 # The autotools src_test function. Runs emake check in build directory.
255 autotools-utils_src_test() {
256 debug-print-function ${FUNCNAME} "$@"
257
258 _check_build_dir
259 pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
260 # Run default src_test as defined in ebuild.sh
261 default_src_test
262 popd > /dev/null
263 }

  ViewVC Help
Powered by ViewVC 1.1.20