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

Contents of /eclass/autotools.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.172 - (hide annotations) (download)
Mon Jan 12 14:21:17 2015 UTC (2 years, 8 months ago) by polynomial-c
Branch: MAIN
Changes since 1.171: +2 -2 lines
Use "--force" when running eautoconf through eautoreconf (bug #527506)

1 polynomial-c 1.171 # Copyright 1999-2015 Gentoo Foundation
2 vapier 1.6 # Distributed under the terms of the GNU General Public License v2
3 polynomial-c 1.172 # $Header: /var/cvsroot/gentoo-x86/eclass/autotools.eclass,v 1.171 2015/01/08 23:26:56 polynomial-c Exp $
4 vapier 1.76
5     # @ECLASS: autotools.eclass
6     # @MAINTAINER:
7     # base-system@gentoo.org
8     # @BLURB: Regenerates auto* build scripts
9     # @DESCRIPTION:
10     # This eclass is for safely handling autotooled software packages that need to
11     # regenerate their build scripts. All functions will abort in case of errors.
12 azarah 1.1
13 vapier 1.114 # Note: We require GNU m4, as does autoconf. So feel free to use any features
14     # from the GNU version of m4 without worrying about other variants (i.e. BSD).
15    
16 vapier 1.169 if [[ ${__AUTOTOOLS_AUTO_DEPEND+set} == "set" ]] ; then
17     # See if we were included already, but someone changed the value
18     # of AUTOTOOLS_AUTO_DEPEND on us. We could reload the entire
19     # eclass at that point, but that adds overhead, and it's trivial
20     # to re-order inherit in eclasses/ebuilds instead. #409611
21     if [[ ${__AUTOTOOLS_AUTO_DEPEND} != ${AUTOTOOLS_AUTO_DEPEND} ]] ; then
22     die "AUTOTOOLS_AUTO_DEPEND changed value between inherits; please inherit autotools.eclass first! ${__AUTOTOOLS_AUTO_DEPEND} -> ${AUTOTOOLS_AUTO_DEPEND}"
23     fi
24     fi
25    
26 ulm 1.162 if [[ -z ${_AUTOTOOLS_ECLASS} ]]; then
27     _AUTOTOOLS_ECLASS=1
28 vapier 1.111
29 vapier 1.170 inherit libtool
30 azarah 1.11
31 vapier 1.76 # @ECLASS-VARIABLE: WANT_AUTOCONF
32     # @DESCRIPTION:
33     # The major version of autoconf your package needs
34 vapier 1.94 : ${WANT_AUTOCONF:=latest}
35 vapier 1.76
36     # @ECLASS-VARIABLE: WANT_AUTOMAKE
37     # @DESCRIPTION:
38     # The major version of automake your package needs
39 vapier 1.94 : ${WANT_AUTOMAKE:=latest}
40 flameeyes 1.63
41 vapier 1.105 # @ECLASS-VARIABLE: WANT_LIBTOOL
42     # @DESCRIPTION:
43     # Do you want libtool? Valid values here are "latest" and "none".
44     : ${WANT_LIBTOOL:=latest}
45    
46 robbat2 1.95 # @ECLASS-VARIABLE: _LATEST_AUTOMAKE
47 vapier 1.100 # @INTERNAL
48 robbat2 1.95 # @DESCRIPTION:
49     # CONSTANT!
50 vapier 1.128 # The latest major version/slot of automake available on each arch. #312315
51 vapier 1.153 # We should list both the latest stable, and the latest unstable. #465732
52     # This way the stable builds will still work, but the unstable are allowed
53     # to build & test things for us ahead of time (if they have it installed).
54 flameeyes 1.127 # If a newer slot is stable on any arch, and is NOT reflected in this list,
55 robbat2 1.95 # then circular dependencies may arise during emerge @system bootstraps.
56     # Do NOT change this variable in your ebuilds!
57 vapier 1.128 # If you want to force a newer minor version, you can specify the correct
58 vapier 1.147 # WANT value by using a colon: <PV>:<WANT_AUTOMAKE>
59 polynomial-c 1.171 _LATEST_AUTOMAKE=( 1.13:1.13 1.15:1.15 )
60 robbat2 1.95
61 vapier 1.40 _automake_atom="sys-devel/automake"
62     _autoconf_atom="sys-devel/autoconf"
63 peper 1.55 if [[ -n ${WANT_AUTOMAKE} ]]; then
64 flameeyes 1.49 case ${WANT_AUTOMAKE} in
65 vapier 1.133 # Even if the package doesn't use automake, we still need to depend
66     # on it because we run aclocal to process m4 macros. This matches
67     # the autoreconf tool, so this requirement is correct. #401605
68     none) ;;
69 flameeyes 1.127 latest)
70 vapier 1.128 # Use SLOT deps if we can. For EAPI=0, we get pretty close.
71     if [[ ${EAPI:-0} != 0 ]] ; then
72     _automake_atom="|| ( `printf '>=sys-devel/automake-%s:%s ' ${_LATEST_AUTOMAKE[@]/:/ }` )"
73 flameeyes 1.127 else
74 vapier 1.128 _automake_atom="|| ( `printf '>=sys-devel/automake-%s ' ${_LATEST_AUTOMAKE[@]/%:*}` )"
75 flameeyes 1.127 fi
76     ;;
77 vapier 1.128 *) _automake_atom="=sys-devel/automake-${WANT_AUTOMAKE}*" ;;
78 flameeyes 1.49 esac
79 vapier 1.64 export WANT_AUTOMAKE
80 flameeyes 1.48 fi
81    
82 vapier 1.45 if [[ -n ${WANT_AUTOCONF} ]] ; then
83 flameeyes 1.41 case ${WANT_AUTOCONF} in
84 vapier 1.67 none) _autoconf_atom="" ;; # some packages don't require autoconf at all
85     2.1) _autoconf_atom="=sys-devel/autoconf-${WANT_AUTOCONF}*" ;;
86 vapier 1.120 # if you change the "latest" version here, change also autotools_env_setup
87 vapier 1.163 latest|2.5) _autoconf_atom=">=sys-devel/autoconf-2.69" ;;
88 vapier 1.106 *) die "Invalid WANT_AUTOCONF value '${WANT_AUTOCONF}'" ;;
89 flameeyes 1.41 esac
90 vapier 1.64 export WANT_AUTOCONF
91 flameeyes 1.41 fi
92 vapier 1.93
93 vapier 1.164 _libtool_atom=">=sys-devel/libtool-2.4"
94 vapier 1.105 if [[ -n ${WANT_LIBTOOL} ]] ; then
95     case ${WANT_LIBTOOL} in
96     none) _libtool_atom="" ;;
97     latest) ;;
98 vapier 1.106 *) die "Invalid WANT_LIBTOOL value '${WANT_LIBTOOL}'" ;;
99 vapier 1.105 esac
100     export WANT_LIBTOOL
101     fi
102    
103 vapier 1.158 # Force people (nicely) to upgrade to a newer version of gettext as
104     # older ones are known to be crappy. #496454
105     AUTOTOOLS_DEPEND="!<sys-devel/gettext-0.18.1.1-r3
106     ${_automake_atom}
107     ${_autoconf_atom}
108     ${_libtool_atom}"
109 flameeyes 1.46 RDEPEND=""
110 vapier 1.93
111     # @ECLASS-VARIABLE: AUTOTOOLS_AUTO_DEPEND
112     # @DESCRIPTION:
113     # Set to 'no' to disable automatically adding to DEPEND. This lets
114     # ebuilds former conditional depends by using ${AUTOTOOLS_DEPEND} in
115     # their own DEPEND string.
116 vapier 1.94 : ${AUTOTOOLS_AUTO_DEPEND:=yes}
117 vapier 1.93 if [[ ${AUTOTOOLS_AUTO_DEPEND} != "no" ]] ; then
118     DEPEND=${AUTOTOOLS_DEPEND}
119     fi
120 vapier 1.169 __AUTOTOOLS_AUTO_DEPEND=${AUTOTOOLS_AUTO_DEPEND} # See top of eclass
121 vapier 1.93
122 vapier 1.40 unset _automake_atom _autoconf_atom
123 azarah 1.11
124 vapier 1.76 # @ECLASS-VARIABLE: AM_OPTS
125 vapier 1.100 # @DEFAULT_UNSET
126 vapier 1.76 # @DESCRIPTION:
127     # Additional options to pass to automake during
128     # eautoreconf call.
129    
130 robbat2 1.122 # @ECLASS-VARIABLE: AT_NOEAUTOMAKE
131     # @DEFAULT_UNSET
132     # @DESCRIPTION:
133 vapier 1.130 # Don't run eautomake command if set to 'yes'; only used to workaround
134     # broken packages. Generally you should, instead, fix the package to
135     # not call AM_INIT_AUTOMAKE if it doesn't actually use automake.
136 robbat2 1.122
137 vapier 1.76 # @ECLASS-VARIABLE: AT_NOELIBTOOLIZE
138 vapier 1.100 # @DEFAULT_UNSET
139 vapier 1.76 # @DESCRIPTION:
140     # Don't run elibtoolize command if set to 'yes',
141     # useful when elibtoolize needs to be ran with
142     # particular options
143 azarah 1.16
144 vapier 1.76 # @ECLASS-VARIABLE: AT_M4DIR
145     # @DESCRIPTION:
146     # Additional director(y|ies) aclocal should search
147 vapier 1.114 : ${AT_M4DIR:=}
148 azarah 1.11
149 vapier 1.113 # @ECLASS-VARIABLE: AT_SYS_M4DIR
150     # @INTERNAL
151     # @DESCRIPTION:
152     # For system integrators, a list of additional aclocal search paths.
153     # This variable gets eval-ed, so you can use variables in the definition
154     # that may not be valid until eautoreconf & friends are run.
155     : ${AT_SYS_M4DIR:=}
156    
157 vapier 1.76 # @FUNCTION: eautoreconf
158     # @DESCRIPTION:
159 azarah 1.17 # This function mimes the behavior of autoreconf, but uses the different
160     # eauto* functions to run the tools. It doesn't accept parameters, but
161     # the directory with include files can be specified with AT_M4DIR variable.
162 jmbsvicetto 1.81 #
163 vapier 1.76 # Should do a full autoreconf - normally what most people will be interested in.
164     # Also should handle additional directories specified by AC_CONFIG_SUBDIRS.
165 azarah 1.17 eautoreconf() {
166 vapier 1.170 local x g
167 vapier 1.146
168 vapier 1.170 # Subdirs often share a common build dir #529404. If so, we can't safely
169     # run in parallel because many tools clobber the content in there. Libtool
170     # and automake both `rm && cp` while aclocal reads the output. We might be
171     # able to handle this if we split the steps and grab locks on the dirs the
172     # tools actually write to. Then we'd run all the common tools that use
173     # those inputs. Doing this in bash does not scale easily.
174     # If we do re-enable parallel support, make sure #426512 is handled.
175 vapier 1.146 if [[ -z ${AT_NO_RECURSIVE} ]] ; then
176 flameeyes 1.39 # Take care of subdirs
177 vapier 1.137 for x in $(autotools_check_macro_val AC_CONFIG_SUBDIRS) ; do
178 flameeyes 1.39 if [[ -d ${x} ]] ; then
179 vapier 1.91 pushd "${x}" >/dev/null
180 vapier 1.170 # Avoid unsafe nested multijob_finish_one for bug #426512.
181     AT_NOELIBTOOLIZE="yes" eautoreconf || die
182 vapier 1.91 popd >/dev/null
183 flameeyes 1.39 fi
184     done
185     fi
186 azarah 1.11
187 vapier 1.137 einfo "Running eautoreconf in '${PWD}' ..."
188    
189     local m4dirs=$(autotools_check_macro_val AC_CONFIG_{AUX,MACRO}_DIR)
190     [[ -n ${m4dirs} ]] && mkdir -p ${m4dirs}
191 flameeyes 1.38
192 vapier 1.139 # Run all the tools before aclocal so we can gather the .m4 files.
193     local i tools=(
194     # <tool> <was run> <command>
195 mgorny 1.144 glibgettext false "autotools_run_tool glib-gettextize --copy --force"
196 vapier 1.145 gettext false "autotools_run_tool --at-missing autopoint --force"
197 vapier 1.140 # intltool must come after autopoint.
198 mgorny 1.144 intltool false "autotools_run_tool intltoolize --automake --copy --force"
199 vapier 1.145 gtkdoc false "autotools_run_tool --at-missing gtkdocize --copy"
200     gnomedoc false "autotools_run_tool --at-missing gnome-doc-prepare --copy --force"
201 mgorny 1.144 libtool false "_elibtoolize --install --copy --force"
202 vapier 1.139 )
203     for (( i = 0; i < ${#tools[@]}; i += 3 )) ; do
204     if _at_uses_${tools[i]} ; then
205     tools[i+1]=true
206     ${tools[i+2]}
207     fi
208     done
209    
210     # Generate aclocal.m4 with our up-to-date m4 files.
211     local rerun_aclocal=false
212 vapier 1.130 eaclocal
213 vapier 1.139
214     # Check to see if we had macros expanded by other macros or in other
215     # m4 files that we couldn't detect early. This is uncommon, but some
216     # packages do this, so we have to handle it correctly.
217     for (( i = 0; i < ${#tools[@]}; i += 3 )) ; do
218     if ! ${tools[i+1]} && _at_uses_${tools[i]} ; then
219     ${tools[i+2]}
220     rerun_aclocal=true
221     fi
222     done
223     ${rerun_aclocal} && eaclocal
224    
225 polynomial-c 1.172 eautoconf --force
226 vapier 1.130 eautoheader
227 robbat2 1.122 [[ ${AT_NOEAUTOMAKE} != "yes" ]] && FROM_EAUTORECONF="yes" eautomake ${AM_OPTS}
228 azarah 1.1
229 vapier 1.146 if [[ ${AT_NOELIBTOOLIZE} != "yes" ]] ; then
230     # Call it here to prevent failures due to elibtoolize called _before_
231 vapier 1.159 # eautoreconf.
232     elibtoolize --force "${PWD}"
233 vapier 1.146 fi
234 flameeyes 1.32
235 flameeyes 1.21 return 0
236 azarah 1.12 }
237    
238 vapier 1.139 # @FUNCTION: _at_uses_pkg
239     # @USAGE: <macros>
240     # @INTERNAL
241     # See if the specified macros are enabled.
242     _at_uses_pkg() {
243 vapier 1.142 if [[ -n $(autotools_check_macro "$@") ]] ; then
244     return 0
245 vapier 1.139 else
246 vapier 1.142 # If the trace didn't find it (perhaps because aclocal.m4 hasn't
247     # been generated yet), cheat, but be conservative.
248 vapier 1.139 local macro args=()
249     for macro ; do
250     args+=( -e "^[[:space:]]*${macro}\>" )
251     done
252     egrep -q "${args[@]}" configure.??
253     fi
254     }
255 vapier 1.156 _at_uses_autoheader() { _at_uses_pkg A{C,M}_CONFIG_HEADER{S,}; }
256 mgorny 1.144 _at_uses_automake() { _at_uses_pkg AM_INIT_AUTOMAKE; }
257     _at_uses_gettext() { _at_uses_pkg AM_GNU_GETTEXT_VERSION; }
258     _at_uses_glibgettext() { _at_uses_pkg AM_GLIB_GNU_GETTEXT; }
259     _at_uses_intltool() { _at_uses_pkg {AC,IT}_PROG_INTLTOOL; }
260     _at_uses_gtkdoc() { _at_uses_pkg GTK_DOC_CHECK; }
261     _at_uses_gnomedoc() { _at_uses_pkg GNOME_DOC_INIT; }
262     _at_uses_libtool() { _at_uses_pkg A{C,M}_PROG_LIBTOOL LT_INIT; }
263 vapier 1.139
264 vapier 1.107 # @FUNCTION: eaclocal_amflags
265 vapier 1.76 # @DESCRIPTION:
266 vapier 1.107 # Extract the ACLOCAL_AMFLAGS value from the Makefile.am and try to handle
267     # (most) of the crazy crap that people throw at us.
268     eaclocal_amflags() {
269     local aclocal_opts amflags_file
270 azarah 1.12
271 vapier 1.74 for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in ; do
272     [[ -e ${amflags_file} ]] || continue
273 vapier 1.103 # setup the env in case the pkg does something crazy
274     # in their ACLOCAL_AMFLAGS. like run a shell script
275 vapier 1.107 # which turns around and runs autotools. #365401
276     # or split across multiple lines. #383525
277 vapier 1.103 autotools_env_setup
278 vapier 1.107 aclocal_opts=$(sed -n \
279     "/^ACLOCAL_AMFLAGS[[:space:]]*=/{ \
280     # match the first line
281     s:[^=]*=::p; \
282     # then gobble up all escaped lines
283     : nextline /\\\\$/{ n; p; b nextline; } \
284     }" ${amflags_file})
285     eval aclocal_opts=\""${aclocal_opts}"\"
286 vapier 1.74 break
287     done
288    
289 vapier 1.107 echo ${aclocal_opts}
290     }
291    
292     # @FUNCTION: eaclocal
293     # @DESCRIPTION:
294     # These functions runs the autotools using autotools_run_tool with the
295     # specified parametes. The name of the tool run is the same of the function
296     # without e prefix.
297     # They also force installing the support files for safety.
298     # Respects AT_M4DIR for additional directories to search for macro's.
299     eaclocal() {
300 flameeyes 1.22 [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && \
301 vapier 1.115 autotools_run_tool --at-m4flags aclocal "$@" $(eaclocal_amflags)
302 azarah 1.12 }
303    
304 vapier 1.76 # @FUNCTION: _elibtoolize
305     # @DESCRIPTION:
306 vapier 1.164 # Runs libtoolize.
307 vapier 1.135 #
308 vapier 1.164 # Note the '_' prefix: avoid collision with elibtoolize() from libtool.eclass.
309 azarah 1.12 _elibtoolize() {
310 grobian 1.148 local LIBTOOLIZE=${LIBTOOLIZE:-$(type -P glibtoolize > /dev/null && echo glibtoolize || echo libtoolize)}
311 vapier 1.135
312     [[ -f GNUmakefile.am || -f Makefile.am ]] && set -- "$@" --automake
313 swegener 1.20
314 vapier 1.165 autotools_run_tool ${LIBTOOLIZE} "$@"
315 azarah 1.11 }
316 azarah 1.1
317 vapier 1.76 # @FUNCTION: eautoheader
318     # @DESCRIPTION:
319     # Runs autoheader.
320 azarah 1.11 eautoheader() {
321 vapier 1.139 _at_uses_autoheader || return 0
322 vapier 1.115 autotools_run_tool --at-no-fail --at-m4flags autoheader "$@"
323 azarah 1.11 }
324 azarah 1.1
325 vapier 1.76 # @FUNCTION: eautoconf
326     # @DESCRIPTION:
327     # Runs autoconf.
328 azarah 1.11 eautoconf() {
329 azarah 1.12 if [[ ! -f configure.ac && ! -f configure.in ]] ; then
330     echo
331 vapier 1.91 eerror "No configure.{ac,in} present in '${PWD}'!"
332 azarah 1.12 echo
333     die "No configure.{ac,in} present!"
334     fi
335 vapier 1.166 if [[ -e configure.in ]] ; then
336     eqawarn "This package has a configure.in file which has long been deprecated. Please"
337     eqawarn "update it to use configure.ac instead as newer versions of autotools will die"
338     eqawarn "when it finds this file. See https://bugs.gentoo.org/426262 for details."
339     fi
340 azarah 1.12
341 vapier 1.115 autotools_run_tool --at-m4flags autoconf "$@"
342 azarah 1.11 }
343 azarah 1.1
344 vapier 1.76 # @FUNCTION: eautomake
345     # @DESCRIPTION:
346     # Runs automake.
347 azarah 1.11 eautomake() {
348 vapier 1.160 local extra_opts=()
349 flameeyes 1.70 local makefile_name
350 flameeyes 1.24
351 vapier 1.98 # Run automake if:
352     # - a Makefile.am type file exists
353 vapier 1.117 # - the configure script is using the AM_INIT_AUTOMAKE directive
354     for makefile_name in {GNUmakefile,{M,m}akefile}.am "" ; do
355 vapier 1.98 [[ -f ${makefile_name} ]] && break
356     done
357    
358 vapier 1.160 _automake_version() {
359 vapier 1.167 autotools_run_tool --at-output automake --version 2>/dev/null |
360     sed -n -e '1{s:.*(GNU automake) ::p;q}'
361 vapier 1.160 }
362    
363 vapier 1.117 if [[ -z ${makefile_name} ]] ; then
364 vapier 1.139 _at_uses_automake || return 0
365 flameeyes 1.24
366 vapier 1.98 elif [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name%.am}.in ]]; then
367 flameeyes 1.35 local used_automake
368     local installed_automake
369    
370 vapier 1.160 installed_automake=$(WANT_AUTOMAKE= _automake_version)
371 vapier 1.98 used_automake=$(head -n 1 < ${makefile_name%.am}.in | \
372 flameeyes 1.35 sed -e 's:.*by automake \(.*\) from .*:\1:')
373    
374     if [[ ${installed_automake} != ${used_automake} ]]; then
375 vapier 1.167 ewarn "Automake used for the package (${used_automake}) differs from" \
376     "the installed version (${installed_automake})."
377     ewarn "Forcing a full rebuild of the autotools to workaround."
378 flameeyes 1.35 eautoreconf
379 flameeyes 1.36 return 0
380 flameeyes 1.35 fi
381     fi
382    
383 vapier 1.109 [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS && -f README ]] \
384 vapier 1.160 || extra_opts+=( --foreign )
385    
386     # Older versions of automake do not support --force-missing. But we want
387     # to use this whenever possible to update random bundled files #133489.
388     case $(_automake_version) in
389     1.4|1.4[.-]*) ;;
390     *) extra_opts+=( --force-missing ) ;;
391     esac
392 flameeyes 1.24
393 vapier 1.160 autotools_run_tool automake --add-missing --copy "${extra_opts[@]}" "$@"
394 azarah 1.1 }
395    
396 vapier 1.90 # @FUNCTION: eautopoint
397     # @DESCRIPTION:
398     # Runs autopoint (from the gettext package).
399     eautopoint() {
400     autotools_run_tool autopoint "$@"
401     }
402    
403 vapier 1.118 # @FUNCTION: config_rpath_update
404     # @USAGE: [destination]
405     # @DESCRIPTION:
406     # Some packages utilize the config.rpath helper script, but don't
407     # use gettext directly. So we have to copy it in manually since
408     # we can't let `autopoint` do it for us.
409     config_rpath_update() {
410     local dst src=$(type -P gettext | sed 's:bin/gettext:share/gettext/config.rpath:')
411    
412     [[ $# -eq 0 ]] && set -- $(find -name config.rpath)
413     [[ $# -eq 0 ]] && return 0
414    
415     einfo "Updating all config.rpath files"
416     for dst in "$@" ; do
417     einfo " ${dst}"
418     cp "${src}" "${dst}" || die
419     done
420     }
421    
422 vapier 1.137 # @FUNCTION: autotools_env_setup
423     # @INTERNAL
424     # @DESCRIPTION:
425     # Process the WANT_AUTO{CONF,MAKE} flags.
426 vapier 1.103 autotools_env_setup() {
427 vapier 1.120 # We do the "latest" → version switch here because it solves
428 flameeyes 1.86 # possible order problems, see bug #270010 as an example.
429 flameeyes 1.96 if [[ ${WANT_AUTOMAKE} == "latest" ]]; then
430 vapier 1.128 local pv
431     for pv in ${_LATEST_AUTOMAKE[@]/#*:} ; do
432     # has_version respects ROOT, but in this case, we don't want it to,
433     # thus "ROOT=/" prefix:
434     ROOT=/ has_version "=sys-devel/automake-${pv}*" && export WANT_AUTOMAKE="${pv}"
435     done
436 flameeyes 1.96 [[ ${WANT_AUTOMAKE} == "latest" ]] && \
437 vapier 1.168 die "Cannot find the latest automake! Tried ${_LATEST_AUTOMAKE[*]}"
438 flameeyes 1.96 fi
439 flameeyes 1.86 [[ ${WANT_AUTOCONF} == "latest" ]] && export WANT_AUTOCONF=2.5
440 vapier 1.103 }
441 vapier 1.137
442     # @FUNCTION: autotools_run_tool
443 vapier 1.167 # @USAGE: [--at-no-fail] [--at-m4flags] [--at-missing] [--at-output] <autotool> [tool-specific flags]
444 vapier 1.137 # @INTERNAL
445     # @DESCRIPTION:
446     # Run the specified autotool helper, but do logging and error checking
447     # around it in the process.
448 vapier 1.103 autotools_run_tool() {
449 vapier 1.115 # Process our own internal flags first
450 vapier 1.167 local autofail=true m4flags=false missing_ok=false return_output=false
451 vapier 1.115 while [[ -n $1 ]] ; do
452     case $1 in
453     --at-no-fail) autofail=false;;
454     --at-m4flags) m4flags=true;;
455 vapier 1.145 --at-missing) missing_ok=true;;
456 vapier 1.167 --at-output) return_output=true;;
457 vapier 1.115 # whatever is left goes to the actual tool
458     *) break;;
459     esac
460     shift
461     done
462    
463 vapier 1.116 if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
464     ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase"
465     fi
466    
467 vapier 1.145 if ${missing_ok} && ! type -P ${1} >/dev/null ; then
468     einfo "Skipping '$*' due $1 not installed"
469     return 0
470     fi
471    
472 vapier 1.103 autotools_env_setup
473 flameeyes 1.86
474 vapier 1.85 local STDERR_TARGET="${T}/$1.out"
475     # most of the time, there will only be one run, but if there are
476     # more, make sure we get unique log filenames
477     if [[ -e ${STDERR_TARGET} ]] ; then
478 vapier 1.104 local i=1
479     while :; do
480     STDERR_TARGET="${T}/$1-${i}.out"
481     [[ -e ${STDERR_TARGET} ]] || break
482     : $(( i++ ))
483     done
484 vapier 1.85 fi
485 azarah 1.17
486 vapier 1.115 if ${m4flags} ; then
487 vapier 1.116 set -- "${1}" $(autotools_m4dir_include) "${@:2}" $(autotools_m4sysdir_include)
488 vapier 1.115 fi
489    
490 vapier 1.167 # If the caller wants to probe something, then let them do it directly.
491     if ${return_output} ; then
492     "$@"
493     return
494     fi
495    
496 vapier 1.85 printf "***** $1 *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}"
497 azarah 1.17
498 azarah 1.27 ebegin "Running $@"
499 vapier 1.85 "$@" >> "${STDERR_TARGET}" 2>&1
500 vapier 1.115 if ! eend $? && ${autofail} ; then
501 azarah 1.17 echo
502     eerror "Failed Running $1 !"
503     eerror
504     eerror "Include in your bugreport the contents of:"
505     eerror
506 vapier 1.85 eerror " ${STDERR_TARGET}"
507 azarah 1.17 echo
508     die "Failed Running $1 !"
509     fi
510     }
511    
512     # Internal function to check for support
513 vapier 1.137
514     # Keep a list of all the macros we might use so that we only
515     # have to run the trace code once. Order doesn't matter.
516     ALL_AUTOTOOLS_MACROS=(
517 vapier 1.156 A{C,M}_PROG_LIBTOOL LT_INIT
518     A{C,M}_CONFIG_HEADER{S,}
519 vapier 1.137 AC_CONFIG_SUBDIRS
520     AC_CONFIG_AUX_DIR AC_CONFIG_MACRO_DIR
521     AM_INIT_AUTOMAKE
522 mgorny 1.144 AM_GLIB_GNU_GETTEXT
523 vapier 1.139 AM_GNU_GETTEXT_VERSION
524 vapier 1.141 {AC,IT}_PROG_INTLTOOL
525 mgorny 1.144 GTK_DOC_CHECK
526     GNOME_DOC_INIT
527 vapier 1.137 )
528 azarah 1.17 autotools_check_macro() {
529 vapier 1.77 [[ -f configure.ac || -f configure.in ]] || return 0
530 vapier 1.137
531     # We can run in multiple dirs, so we have to cache the trace
532     # data in $PWD rather than an env var.
533     local trace_file=".__autoconf_trace_data"
534 scarabeus 1.149 if [[ ! -e ${trace_file} ]] || [[ ! aclocal.m4 -ot ${trace_file} ]] ; then
535 vapier 1.137 WANT_AUTOCONF="2.5" autoconf \
536     $(autotools_m4dir_include) \
537     ${ALL_AUTOTOOLS_MACROS[@]/#/--trace=} > ${trace_file} 2>/dev/null
538     fi
539    
540     local macro args=()
541 vapier 1.77 for macro ; do
542 vapier 1.137 has ${macro} ${ALL_AUTOTOOLS_MACROS[@]} || die "internal error: add ${macro} to ALL_AUTOTOOLS_MACROS"
543     args+=( -e ":${macro}:" )
544 vapier 1.77 done
545 vapier 1.137 grep "${args[@]}" ${trace_file}
546 azarah 1.17 }
547    
548 vapier 1.136 # @FUNCTION: autotools_check_macro_val
549     # @USAGE: <macro> [macros]
550     # @INTERNAL
551     # @DESCRIPTION:
552     # Look for a macro and extract its value.
553 vapier 1.112 autotools_check_macro_val() {
554 vapier 1.136 local macro scan_out
555 vapier 1.112
556 vapier 1.136 for macro ; do
557     autotools_check_macro "${macro}" | \
558     gawk -v macro="${macro}" \
559     '($0 !~ /^[[:space:]]*(#|dnl)/) {
560     if (match($0, macro ":(.*)$", res))
561     print res[1]
562     }' | uniq
563     done
564 azarah 1.16
565 azarah 1.17 return 0
566 azarah 1.11 }
567 azarah 1.17
568 vapier 1.115 _autotools_m4dir_include() {
569 vapier 1.151 local x include_opts flag
570    
571     # Use the right flag to autoconf based on the version #448986
572     [[ ${WANT_AUTOCONF} == "2.1" ]] \
573     && flag="l" \
574     || flag="I"
575 flameeyes 1.102
576 vapier 1.115 for x in "$@" ; do
577     case ${x} in
578     # We handle it below
579 vapier 1.151 -${flag}) ;;
580 flameeyes 1.102 *)
581     [[ ! -d ${x} ]] && ewarn "autotools.eclass: '${x}' does not exist"
582 vapier 1.151 include_opts+=" -${flag} ${x}"
583 flameeyes 1.102 ;;
584     esac
585     done
586    
587 vapier 1.113 echo ${include_opts}
588 flameeyes 1.102 }
589 vapier 1.115 autotools_m4dir_include() { _autotools_m4dir_include ${AT_M4DIR} ; }
590     autotools_m4sysdir_include() { _autotools_m4dir_include $(eval echo ${AT_SYS_M4DIR}) ; }
591 vapier 1.111
592     fi

  ViewVC Help
Powered by ViewVC 1.1.20