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

Contents of /eclass/autotools.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.169 - (hide annotations) (download)
Sat Nov 15 07:50:02 2014 UTC (2 years, 10 months ago) by vapier
Branch: MAIN
Changes since 1.168: +12 -1 lines
abort when AUTOTOOLS_AUTO_DEPEND changes on us as it will not work and is not intended behavior #409611 by Michał Górny

1 slyfox 1.161 # Copyright 1999-2014 Gentoo Foundation
2 vapier 1.6 # Distributed under the terms of the GNU General Public License v2
3 vapier 1.169 # $Header: /var/cvsroot/gentoo-x86/eclass/autotools.eclass,v 1.168 2014/11/15 07:11:41 vapier 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.146 inherit libtool multiprocessing
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 vapier 1.157 _LATEST_AUTOMAKE=( 1.13:1.13 1.14:1.14 )
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.146 local x g multitop
167 jmbsvicetto 1.81
168 vapier 1.146 if [[ -z ${AT_TOPLEVEL_EAUTORECONF} ]] ; then
169     AT_TOPLEVEL_EAUTORECONF="yes"
170     multitop="yes"
171     multijob_init
172     fi
173    
174     if [[ -z ${AT_NO_RECURSIVE} ]] ; then
175 flameeyes 1.39 # Take care of subdirs
176 vapier 1.137 for x in $(autotools_check_macro_val AC_CONFIG_SUBDIRS) ; do
177 flameeyes 1.39 if [[ -d ${x} ]] ; then
178 vapier 1.91 pushd "${x}" >/dev/null
179 zmedico 1.150 if [[ -z ${PAST_TOPLEVEL_EAUTORECONF} ]] ; then
180     PAST_TOPLEVEL_EAUTORECONF="yes" AT_NOELIBTOOLIZE="yes" \
181     multijob_child_init eautoreconf || die
182     else
183     # Avoid unsafe nested multijob_finish_one for bug #426512.
184     AT_NOELIBTOOLIZE="yes" eautoreconf || die
185     fi
186 vapier 1.91 popd >/dev/null
187 flameeyes 1.39 fi
188     done
189     fi
190 azarah 1.11
191 vapier 1.137 einfo "Running eautoreconf in '${PWD}' ..."
192    
193     local m4dirs=$(autotools_check_macro_val AC_CONFIG_{AUX,MACRO}_DIR)
194     [[ -n ${m4dirs} ]] && mkdir -p ${m4dirs}
195 flameeyes 1.38
196 vapier 1.139 # Run all the tools before aclocal so we can gather the .m4 files.
197     local i tools=(
198     # <tool> <was run> <command>
199 mgorny 1.144 glibgettext false "autotools_run_tool glib-gettextize --copy --force"
200 vapier 1.145 gettext false "autotools_run_tool --at-missing autopoint --force"
201 vapier 1.140 # intltool must come after autopoint.
202 mgorny 1.144 intltool false "autotools_run_tool intltoolize --automake --copy --force"
203 vapier 1.145 gtkdoc false "autotools_run_tool --at-missing gtkdocize --copy"
204     gnomedoc false "autotools_run_tool --at-missing gnome-doc-prepare --copy --force"
205 mgorny 1.144 libtool false "_elibtoolize --install --copy --force"
206 vapier 1.139 )
207     for (( i = 0; i < ${#tools[@]}; i += 3 )) ; do
208     if _at_uses_${tools[i]} ; then
209     tools[i+1]=true
210     ${tools[i+2]}
211     fi
212     done
213    
214     # Generate aclocal.m4 with our up-to-date m4 files.
215     local rerun_aclocal=false
216 vapier 1.130 eaclocal
217 vapier 1.139
218     # Check to see if we had macros expanded by other macros or in other
219     # m4 files that we couldn't detect early. This is uncommon, but some
220     # packages do this, so we have to handle it correctly.
221     for (( i = 0; i < ${#tools[@]}; i += 3 )) ; do
222     if ! ${tools[i+1]} && _at_uses_${tools[i]} ; then
223     ${tools[i+2]}
224     rerun_aclocal=true
225     fi
226     done
227     ${rerun_aclocal} && eaclocal
228    
229 vapier 1.130 eautoconf
230     eautoheader
231 robbat2 1.122 [[ ${AT_NOEAUTOMAKE} != "yes" ]] && FROM_EAUTORECONF="yes" eautomake ${AM_OPTS}
232 azarah 1.1
233 vapier 1.146 if [[ ${AT_NOELIBTOOLIZE} != "yes" ]] ; then
234     # Call it here to prevent failures due to elibtoolize called _before_
235 vapier 1.159 # eautoreconf.
236     elibtoolize --force "${PWD}"
237 vapier 1.146 fi
238 flameeyes 1.32
239 vapier 1.146 if [[ -n ${multitop} ]] ; then
240     unset AT_TOPLEVEL_EAUTORECONF
241     multijob_finish || die
242     fi
243 flameeyes 1.30
244 flameeyes 1.21 return 0
245 azarah 1.12 }
246    
247 vapier 1.139 # @FUNCTION: _at_uses_pkg
248     # @USAGE: <macros>
249     # @INTERNAL
250     # See if the specified macros are enabled.
251     _at_uses_pkg() {
252 vapier 1.142 if [[ -n $(autotools_check_macro "$@") ]] ; then
253     return 0
254 vapier 1.139 else
255 vapier 1.142 # If the trace didn't find it (perhaps because aclocal.m4 hasn't
256     # been generated yet), cheat, but be conservative.
257 vapier 1.139 local macro args=()
258     for macro ; do
259     args+=( -e "^[[:space:]]*${macro}\>" )
260     done
261     egrep -q "${args[@]}" configure.??
262     fi
263     }
264 vapier 1.156 _at_uses_autoheader() { _at_uses_pkg A{C,M}_CONFIG_HEADER{S,}; }
265 mgorny 1.144 _at_uses_automake() { _at_uses_pkg AM_INIT_AUTOMAKE; }
266     _at_uses_gettext() { _at_uses_pkg AM_GNU_GETTEXT_VERSION; }
267     _at_uses_glibgettext() { _at_uses_pkg AM_GLIB_GNU_GETTEXT; }
268     _at_uses_intltool() { _at_uses_pkg {AC,IT}_PROG_INTLTOOL; }
269     _at_uses_gtkdoc() { _at_uses_pkg GTK_DOC_CHECK; }
270     _at_uses_gnomedoc() { _at_uses_pkg GNOME_DOC_INIT; }
271     _at_uses_libtool() { _at_uses_pkg A{C,M}_PROG_LIBTOOL LT_INIT; }
272 vapier 1.139
273 vapier 1.107 # @FUNCTION: eaclocal_amflags
274 vapier 1.76 # @DESCRIPTION:
275 vapier 1.107 # Extract the ACLOCAL_AMFLAGS value from the Makefile.am and try to handle
276     # (most) of the crazy crap that people throw at us.
277     eaclocal_amflags() {
278     local aclocal_opts amflags_file
279 azarah 1.12
280 vapier 1.74 for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in ; do
281     [[ -e ${amflags_file} ]] || continue
282 vapier 1.103 # setup the env in case the pkg does something crazy
283     # in their ACLOCAL_AMFLAGS. like run a shell script
284 vapier 1.107 # which turns around and runs autotools. #365401
285     # or split across multiple lines. #383525
286 vapier 1.103 autotools_env_setup
287 vapier 1.107 aclocal_opts=$(sed -n \
288     "/^ACLOCAL_AMFLAGS[[:space:]]*=/{ \
289     # match the first line
290     s:[^=]*=::p; \
291     # then gobble up all escaped lines
292     : nextline /\\\\$/{ n; p; b nextline; } \
293     }" ${amflags_file})
294     eval aclocal_opts=\""${aclocal_opts}"\"
295 vapier 1.74 break
296     done
297    
298 vapier 1.107 echo ${aclocal_opts}
299     }
300    
301     # @FUNCTION: eaclocal
302     # @DESCRIPTION:
303     # These functions runs the autotools using autotools_run_tool with the
304     # specified parametes. The name of the tool run is the same of the function
305     # without e prefix.
306     # They also force installing the support files for safety.
307     # Respects AT_M4DIR for additional directories to search for macro's.
308     eaclocal() {
309 flameeyes 1.22 [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && \
310 vapier 1.115 autotools_run_tool --at-m4flags aclocal "$@" $(eaclocal_amflags)
311 azarah 1.12 }
312    
313 vapier 1.76 # @FUNCTION: _elibtoolize
314     # @DESCRIPTION:
315 vapier 1.164 # Runs libtoolize.
316 vapier 1.135 #
317 vapier 1.164 # Note the '_' prefix: avoid collision with elibtoolize() from libtool.eclass.
318 azarah 1.12 _elibtoolize() {
319 grobian 1.148 local LIBTOOLIZE=${LIBTOOLIZE:-$(type -P glibtoolize > /dev/null && echo glibtoolize || echo libtoolize)}
320 vapier 1.135
321     [[ -f GNUmakefile.am || -f Makefile.am ]] && set -- "$@" --automake
322 swegener 1.20
323 vapier 1.165 autotools_run_tool ${LIBTOOLIZE} "$@"
324 azarah 1.11 }
325 azarah 1.1
326 vapier 1.76 # @FUNCTION: eautoheader
327     # @DESCRIPTION:
328     # Runs autoheader.
329 azarah 1.11 eautoheader() {
330 vapier 1.139 _at_uses_autoheader || return 0
331 vapier 1.115 autotools_run_tool --at-no-fail --at-m4flags autoheader "$@"
332 azarah 1.11 }
333 azarah 1.1
334 vapier 1.76 # @FUNCTION: eautoconf
335     # @DESCRIPTION:
336     # Runs autoconf.
337 azarah 1.11 eautoconf() {
338 azarah 1.12 if [[ ! -f configure.ac && ! -f configure.in ]] ; then
339     echo
340 vapier 1.91 eerror "No configure.{ac,in} present in '${PWD}'!"
341 azarah 1.12 echo
342     die "No configure.{ac,in} present!"
343     fi
344 vapier 1.166 if [[ -e configure.in ]] ; then
345     eqawarn "This package has a configure.in file which has long been deprecated. Please"
346     eqawarn "update it to use configure.ac instead as newer versions of autotools will die"
347     eqawarn "when it finds this file. See https://bugs.gentoo.org/426262 for details."
348     fi
349 azarah 1.12
350 vapier 1.115 autotools_run_tool --at-m4flags autoconf "$@"
351 azarah 1.11 }
352 azarah 1.1
353 vapier 1.76 # @FUNCTION: eautomake
354     # @DESCRIPTION:
355     # Runs automake.
356 azarah 1.11 eautomake() {
357 vapier 1.160 local extra_opts=()
358 flameeyes 1.70 local makefile_name
359 flameeyes 1.24
360 vapier 1.98 # Run automake if:
361     # - a Makefile.am type file exists
362 vapier 1.117 # - the configure script is using the AM_INIT_AUTOMAKE directive
363     for makefile_name in {GNUmakefile,{M,m}akefile}.am "" ; do
364 vapier 1.98 [[ -f ${makefile_name} ]] && break
365     done
366    
367 vapier 1.160 _automake_version() {
368 vapier 1.167 autotools_run_tool --at-output automake --version 2>/dev/null |
369     sed -n -e '1{s:.*(GNU automake) ::p;q}'
370 vapier 1.160 }
371    
372 vapier 1.117 if [[ -z ${makefile_name} ]] ; then
373 vapier 1.139 _at_uses_automake || return 0
374 flameeyes 1.24
375 vapier 1.98 elif [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name%.am}.in ]]; then
376 flameeyes 1.35 local used_automake
377     local installed_automake
378    
379 vapier 1.160 installed_automake=$(WANT_AUTOMAKE= _automake_version)
380 vapier 1.98 used_automake=$(head -n 1 < ${makefile_name%.am}.in | \
381 flameeyes 1.35 sed -e 's:.*by automake \(.*\) from .*:\1:')
382    
383     if [[ ${installed_automake} != ${used_automake} ]]; then
384 vapier 1.167 ewarn "Automake used for the package (${used_automake}) differs from" \
385     "the installed version (${installed_automake})."
386     ewarn "Forcing a full rebuild of the autotools to workaround."
387 flameeyes 1.35 eautoreconf
388 flameeyes 1.36 return 0
389 flameeyes 1.35 fi
390     fi
391    
392 vapier 1.109 [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS && -f README ]] \
393 vapier 1.160 || extra_opts+=( --foreign )
394    
395     # Older versions of automake do not support --force-missing. But we want
396     # to use this whenever possible to update random bundled files #133489.
397     case $(_automake_version) in
398     1.4|1.4[.-]*) ;;
399     *) extra_opts+=( --force-missing ) ;;
400     esac
401 flameeyes 1.24
402 vapier 1.160 autotools_run_tool automake --add-missing --copy "${extra_opts[@]}" "$@"
403 azarah 1.1 }
404    
405 vapier 1.90 # @FUNCTION: eautopoint
406     # @DESCRIPTION:
407     # Runs autopoint (from the gettext package).
408     eautopoint() {
409     autotools_run_tool autopoint "$@"
410     }
411    
412 vapier 1.118 # @FUNCTION: config_rpath_update
413     # @USAGE: [destination]
414     # @DESCRIPTION:
415     # Some packages utilize the config.rpath helper script, but don't
416     # use gettext directly. So we have to copy it in manually since
417     # we can't let `autopoint` do it for us.
418     config_rpath_update() {
419     local dst src=$(type -P gettext | sed 's:bin/gettext:share/gettext/config.rpath:')
420    
421     [[ $# -eq 0 ]] && set -- $(find -name config.rpath)
422     [[ $# -eq 0 ]] && return 0
423    
424     einfo "Updating all config.rpath files"
425     for dst in "$@" ; do
426     einfo " ${dst}"
427     cp "${src}" "${dst}" || die
428     done
429     }
430    
431 vapier 1.137 # @FUNCTION: autotools_env_setup
432     # @INTERNAL
433     # @DESCRIPTION:
434     # Process the WANT_AUTO{CONF,MAKE} flags.
435 vapier 1.103 autotools_env_setup() {
436 vapier 1.120 # We do the "latest" → version switch here because it solves
437 flameeyes 1.86 # possible order problems, see bug #270010 as an example.
438 flameeyes 1.96 if [[ ${WANT_AUTOMAKE} == "latest" ]]; then
439 vapier 1.128 local pv
440     for pv in ${_LATEST_AUTOMAKE[@]/#*:} ; do
441     # has_version respects ROOT, but in this case, we don't want it to,
442     # thus "ROOT=/" prefix:
443     ROOT=/ has_version "=sys-devel/automake-${pv}*" && export WANT_AUTOMAKE="${pv}"
444     done
445 flameeyes 1.96 [[ ${WANT_AUTOMAKE} == "latest" ]] && \
446 vapier 1.168 die "Cannot find the latest automake! Tried ${_LATEST_AUTOMAKE[*]}"
447 flameeyes 1.96 fi
448 flameeyes 1.86 [[ ${WANT_AUTOCONF} == "latest" ]] && export WANT_AUTOCONF=2.5
449 vapier 1.103 }
450 vapier 1.137
451     # @FUNCTION: autotools_run_tool
452 vapier 1.167 # @USAGE: [--at-no-fail] [--at-m4flags] [--at-missing] [--at-output] <autotool> [tool-specific flags]
453 vapier 1.137 # @INTERNAL
454     # @DESCRIPTION:
455     # Run the specified autotool helper, but do logging and error checking
456     # around it in the process.
457 vapier 1.103 autotools_run_tool() {
458 vapier 1.115 # Process our own internal flags first
459 vapier 1.167 local autofail=true m4flags=false missing_ok=false return_output=false
460 vapier 1.115 while [[ -n $1 ]] ; do
461     case $1 in
462     --at-no-fail) autofail=false;;
463     --at-m4flags) m4flags=true;;
464 vapier 1.145 --at-missing) missing_ok=true;;
465 vapier 1.167 --at-output) return_output=true;;
466 vapier 1.115 # whatever is left goes to the actual tool
467     *) break;;
468     esac
469     shift
470     done
471    
472 vapier 1.116 if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
473     ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase"
474     fi
475    
476 vapier 1.145 if ${missing_ok} && ! type -P ${1} >/dev/null ; then
477     einfo "Skipping '$*' due $1 not installed"
478     return 0
479     fi
480    
481 vapier 1.103 autotools_env_setup
482 flameeyes 1.86
483 vapier 1.85 local STDERR_TARGET="${T}/$1.out"
484     # most of the time, there will only be one run, but if there are
485     # more, make sure we get unique log filenames
486     if [[ -e ${STDERR_TARGET} ]] ; then
487 vapier 1.104 local i=1
488     while :; do
489     STDERR_TARGET="${T}/$1-${i}.out"
490     [[ -e ${STDERR_TARGET} ]] || break
491     : $(( i++ ))
492     done
493 vapier 1.85 fi
494 azarah 1.17
495 vapier 1.115 if ${m4flags} ; then
496 vapier 1.116 set -- "${1}" $(autotools_m4dir_include) "${@:2}" $(autotools_m4sysdir_include)
497 vapier 1.115 fi
498    
499 vapier 1.167 # If the caller wants to probe something, then let them do it directly.
500     if ${return_output} ; then
501     "$@"
502     return
503     fi
504    
505 vapier 1.85 printf "***** $1 *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}"
506 azarah 1.17
507 azarah 1.27 ebegin "Running $@"
508 vapier 1.85 "$@" >> "${STDERR_TARGET}" 2>&1
509 vapier 1.115 if ! eend $? && ${autofail} ; then
510 azarah 1.17 echo
511     eerror "Failed Running $1 !"
512     eerror
513     eerror "Include in your bugreport the contents of:"
514     eerror
515 vapier 1.85 eerror " ${STDERR_TARGET}"
516 azarah 1.17 echo
517     die "Failed Running $1 !"
518     fi
519     }
520    
521     # Internal function to check for support
522 vapier 1.137
523     # Keep a list of all the macros we might use so that we only
524     # have to run the trace code once. Order doesn't matter.
525     ALL_AUTOTOOLS_MACROS=(
526 vapier 1.156 A{C,M}_PROG_LIBTOOL LT_INIT
527     A{C,M}_CONFIG_HEADER{S,}
528 vapier 1.137 AC_CONFIG_SUBDIRS
529     AC_CONFIG_AUX_DIR AC_CONFIG_MACRO_DIR
530     AM_INIT_AUTOMAKE
531 mgorny 1.144 AM_GLIB_GNU_GETTEXT
532 vapier 1.139 AM_GNU_GETTEXT_VERSION
533 vapier 1.141 {AC,IT}_PROG_INTLTOOL
534 mgorny 1.144 GTK_DOC_CHECK
535     GNOME_DOC_INIT
536 vapier 1.137 )
537 azarah 1.17 autotools_check_macro() {
538 vapier 1.77 [[ -f configure.ac || -f configure.in ]] || return 0
539 vapier 1.137
540     # We can run in multiple dirs, so we have to cache the trace
541     # data in $PWD rather than an env var.
542     local trace_file=".__autoconf_trace_data"
543 scarabeus 1.149 if [[ ! -e ${trace_file} ]] || [[ ! aclocal.m4 -ot ${trace_file} ]] ; then
544 vapier 1.137 WANT_AUTOCONF="2.5" autoconf \
545     $(autotools_m4dir_include) \
546     ${ALL_AUTOTOOLS_MACROS[@]/#/--trace=} > ${trace_file} 2>/dev/null
547     fi
548    
549     local macro args=()
550 vapier 1.77 for macro ; do
551 vapier 1.137 has ${macro} ${ALL_AUTOTOOLS_MACROS[@]} || die "internal error: add ${macro} to ALL_AUTOTOOLS_MACROS"
552     args+=( -e ":${macro}:" )
553 vapier 1.77 done
554 vapier 1.137 grep "${args[@]}" ${trace_file}
555 azarah 1.17 }
556    
557 vapier 1.136 # @FUNCTION: autotools_check_macro_val
558     # @USAGE: <macro> [macros]
559     # @INTERNAL
560     # @DESCRIPTION:
561     # Look for a macro and extract its value.
562 vapier 1.112 autotools_check_macro_val() {
563 vapier 1.136 local macro scan_out
564 vapier 1.112
565 vapier 1.136 for macro ; do
566     autotools_check_macro "${macro}" | \
567     gawk -v macro="${macro}" \
568     '($0 !~ /^[[:space:]]*(#|dnl)/) {
569     if (match($0, macro ":(.*)$", res))
570     print res[1]
571     }' | uniq
572     done
573 azarah 1.16
574 azarah 1.17 return 0
575 azarah 1.11 }
576 azarah 1.17
577 vapier 1.115 _autotools_m4dir_include() {
578 vapier 1.151 local x include_opts flag
579    
580     # Use the right flag to autoconf based on the version #448986
581     [[ ${WANT_AUTOCONF} == "2.1" ]] \
582     && flag="l" \
583     || flag="I"
584 flameeyes 1.102
585 vapier 1.115 for x in "$@" ; do
586     case ${x} in
587     # We handle it below
588 vapier 1.151 -${flag}) ;;
589 flameeyes 1.102 *)
590     [[ ! -d ${x} ]] && ewarn "autotools.eclass: '${x}' does not exist"
591 vapier 1.151 include_opts+=" -${flag} ${x}"
592 flameeyes 1.102 ;;
593     esac
594     done
595    
596 vapier 1.113 echo ${include_opts}
597 flameeyes 1.102 }
598 vapier 1.115 autotools_m4dir_include() { _autotools_m4dir_include ${AT_M4DIR} ; }
599     autotools_m4sysdir_include() { _autotools_m4dir_include $(eval echo ${AT_SYS_M4DIR}) ; }
600 vapier 1.111
601     fi

  ViewVC Help
Powered by ViewVC 1.1.20