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

Contents of /eclass/autotools.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.177 - (hide annotations) (download)
Fri Jul 17 09:36:24 2015 UTC (13 months, 1 week ago) by vapier
Branch: MAIN
CVS Tags: HEAD
Changes since 1.176: +2 -2 lines
update automake version to match stable ebuilds #553738

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

  ViewVC Help
Powered by ViewVC 1.1.20