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

Contents of /eclass/autotools.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.166 - (hide annotations) (download)
Sat Nov 15 05:10:47 2014 UTC (3 years, 3 months ago) by vapier
Branch: MAIN
Changes since 1.165: +6 -1 lines
eautoconf: dump a QA warning when we find old configure.in files instead of configure.ac #426262

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

  ViewVC Help
Powered by ViewVC 1.1.20