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

Contents of /eclass/autotools.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.86 - (hide annotations) (download)
Mon May 18 11:24:30 2009 UTC (5 years, 6 months ago) by flameeyes
Branch: MAIN
Changes since 1.85: +8 -3 lines
Replace the “latest” string with the correct version during the autotools_run_tool.

Instead of doing that during the main evaluation, wait for it, so that
it's done at the very last moment; this solves bug #270010 properly,
without forcing an older automake version.

It should also be possible to move the latest handling into the
wrappers and use them if the new version is present, but that's
another problem.

1 vapier 1.72 # Copyright 1999-2008 Gentoo Foundation
2 vapier 1.6 # Distributed under the terms of the GNU General Public License v2
3 flameeyes 1.86 # $Header: /var/cvsroot/gentoo-x86/eclass/autotools.eclass,v 1.85 2009/05/04 22:27:05 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 azarah 1.11 # NB: If you add anything, please comment it!
14 azarah 1.1
15 flameeyes 1.37 inherit eutils libtool
16 azarah 1.11
17 vapier 1.76 # @ECLASS-VARIABLE: WANT_AUTOCONF
18     # @DESCRIPTION:
19     # The major version of autoconf your package needs
20 flameeyes 1.63 [[ -z ${WANT_AUTOCONF} ]] && WANT_AUTOCONF="latest"
21 vapier 1.76
22     # @ECLASS-VARIABLE: WANT_AUTOMAKE
23     # @DESCRIPTION:
24     # The major version of automake your package needs
25 flameeyes 1.63 [[ -z ${WANT_AUTOMAKE} ]] && WANT_AUTOMAKE="latest"
26    
27 vapier 1.40 _automake_atom="sys-devel/automake"
28     _autoconf_atom="sys-devel/autoconf"
29 peper 1.55 if [[ -n ${WANT_AUTOMAKE} ]]; then
30 flameeyes 1.49 case ${WANT_AUTOMAKE} in
31 vapier 1.67 none) _automake_atom="" ;; # some packages don't require automake at all
32 flameeyes 1.86 # if you change the “latest” version here, change also autotools_run_tool
33 vapier 1.64 latest) _automake_atom="=sys-devel/automake-1.10*" ;;
34 vapier 1.67 *) _automake_atom="=sys-devel/automake-${WANT_AUTOMAKE}*" ;;
35 flameeyes 1.49 esac
36 vapier 1.64 export WANT_AUTOMAKE
37 flameeyes 1.48 fi
38    
39 vapier 1.45 if [[ -n ${WANT_AUTOCONF} ]] ; then
40 flameeyes 1.41 case ${WANT_AUTOCONF} in
41 vapier 1.67 none) _autoconf_atom="" ;; # some packages don't require autoconf at all
42     2.1) _autoconf_atom="=sys-devel/autoconf-${WANT_AUTOCONF}*" ;;
43 flameeyes 1.86 # if you change the “latest” version here, change also autotools_run_tool
44 vapier 1.67 latest|2.5) _autoconf_atom=">=sys-devel/autoconf-2.61" ;;
45 vapier 1.68 *) _autoconf_atom="INCORRECT-WANT_AUTOCONF-SETTING-IN-EBUILD" ;;
46 flameeyes 1.41 esac
47 vapier 1.64 export WANT_AUTOCONF
48 flameeyes 1.41 fi
49 vapier 1.40 DEPEND="${_automake_atom}
50 vapier 1.82 ${_autoconf_atom}"
51     [[ ${CATEGORY}/${PN} != "sys-devel/libtool" ]] && DEPEND="${DEPEND} sys-devel/libtool"
52 flameeyes 1.46 RDEPEND=""
53 vapier 1.40 unset _automake_atom _autoconf_atom
54 azarah 1.11
55 vapier 1.76 # @ECLASS-VARIABLE: AM_OPTS
56     # @DESCRIPTION:
57     # Additional options to pass to automake during
58     # eautoreconf call.
59    
60     # @ECLASS-VARIABLE: AT_NOELIBTOOLIZE
61     # @DESCRIPTION:
62     # Don't run elibtoolize command if set to 'yes',
63     # useful when elibtoolize needs to be ran with
64     # particular options
65 azarah 1.16
66 cardoe 1.66 # XXX: M4DIR should be deprecated
67 vapier 1.76 # @ECLASS-VARIABLE: AT_M4DIR
68     # @DESCRIPTION:
69     # Additional director(y|ies) aclocal should search
70 azarah 1.16 AT_M4DIR=${AT_M4DIR:-${M4DIR}}
71     AT_GNUCONF_UPDATE="no"
72    
73 azarah 1.11
74 vapier 1.76 # @FUNCTION: eautoreconf
75     # @DESCRIPTION:
76 azarah 1.17 # This function mimes the behavior of autoreconf, but uses the different
77     # eauto* functions to run the tools. It doesn't accept parameters, but
78     # the directory with include files can be specified with AT_M4DIR variable.
79 jmbsvicetto 1.81 #
80 vapier 1.76 # Should do a full autoreconf - normally what most people will be interested in.
81     # Also should handle additional directories specified by AC_CONFIG_SUBDIRS.
82 azarah 1.17 eautoreconf() {
83 grobian 1.83 local pwd=$(pwd) x auxdir g=
84 jmbsvicetto 1.81
85 flameeyes 1.39 if [[ -z ${AT_NO_RECURSIVE} ]]; then
86     # Take care of subdirs
87     for x in $(autotools_get_subdirs); do
88     if [[ -d ${x} ]] ; then
89     cd "${x}"
90     AT_NOELIBTOOLIZE="yes" eautoreconf
91     cd "${pwd}"
92     fi
93     done
94     fi
95 azarah 1.11
96 flameeyes 1.38 auxdir=$(autotools_get_auxdir)
97    
98 flameeyes 1.26 einfo "Running eautoreconf in '$(pwd)' ..."
99 flameeyes 1.38 [[ -n ${auxdir} ]] && mkdir -p ${auxdir}
100 azarah 1.17 eaclocal
101 grobian 1.83 [[ ${CHOST} == *-darwin* ]] && g=g
102     if ${LIBTOOLIZE:-${g}libtoolize} -n --install >& /dev/null ; then
103 vapier 1.72 _elibtoolize --copy --force --install
104     else
105     _elibtoolize --copy --force
106     fi
107 azarah 1.17 eautoconf
108     eautoheader
109 flameeyes 1.35 FROM_EAUTORECONF="yes" eautomake ${AM_OPTS}
110 azarah 1.1
111 flameeyes 1.32 [[ ${AT_NOELIBTOOLIZE} == "yes" ]] && return 0
112    
113 flameeyes 1.30 # Call it here to prevent failures due to elibtoolize called _before_
114 vapier 1.84 # eautoreconf. We set $S because elibtoolize runs on that #265319
115     S=${pwd} elibtoolize
116 flameeyes 1.30
117 flameeyes 1.21 return 0
118 azarah 1.12 }
119    
120 vapier 1.76 # @FUNCTION: eaclocal
121     # @DESCRIPTION:
122 azarah 1.11 # These functions runs the autotools using autotools_run_tool with the
123     # specified parametes. The name of the tool run is the same of the function
124     # without e prefix.
125     # They also force installing the support files for safety.
126 vapier 1.76 # Respects AT_M4DIR for additional directories to search for macro's.
127 azarah 1.11 eaclocal() {
128 azarah 1.12 local aclocal_opts
129    
130 vapier 1.74 local amflags_file
131     for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in ; do
132     [[ -e ${amflags_file} ]] || continue
133     aclocal_opts=$(sed -n '/^ACLOCAL_AMFLAGS[[:space:]]*=/s:[^=]*=::p' ${amflags_file})
134 vapier 1.75 eval aclocal_opts=\"${aclocal_opts}\"
135 vapier 1.74 break
136     done
137    
138 azarah 1.16 if [[ -n ${AT_M4DIR} ]] ; then
139     for x in ${AT_M4DIR} ; do
140     case "${x}" in
141     "-I")
142     # We handle it below
143     ;;
144     *)
145     [[ ! -d ${x} ]] && ewarn "eaclocal: '${x}' does not exist"
146     aclocal_opts="${aclocal_opts} -I ${x}"
147     ;;
148     esac
149     done
150     fi
151 flameeyes 1.15
152 flameeyes 1.22 [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && \
153 azarah 1.12 autotools_run_tool aclocal "$@" ${aclocal_opts}
154     }
155    
156 vapier 1.76 # @FUNCTION: _elibtoolize
157     # @DESCRIPTION:
158     # Runs libtoolize. Note the '_' prefix .. to not collide with elibtoolize() from
159     # libtool.eclass.
160 azarah 1.12 _elibtoolize() {
161 grobian 1.83 local opts g=
162 swegener 1.20
163 flameeyes 1.34 # Check if we should run libtoolize (AM_PROG_LIBTOOL is an older macro,
164     # check for both it and the current AC_PROG_LIBTOOL)
165 vapier 1.77 [[ -n $(autotools_check_macro AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT) ]] || return 0
166 azarah 1.19
167 flameeyes 1.70 [[ -f GNUmakefile.am || -f Makefile.am ]] && opts="--automake"
168 swegener 1.20
169 grobian 1.83 [[ ${CHOST} == *-darwin* ]] && g=g
170     autotools_run_tool ${LIBTOOLIZE:-${g}libtoolize} "$@" ${opts}
171 flameeyes 1.15
172 azarah 1.12 # Need to rerun aclocal
173     eaclocal
174 azarah 1.11 }
175 azarah 1.1
176 vapier 1.76 # @FUNCTION: eautoheader
177     # @DESCRIPTION:
178     # Runs autoheader.
179 azarah 1.11 eautoheader() {
180 azarah 1.12 # Check if we should run autoheader
181     [[ -n $(autotools_check_macro "AC_CONFIG_HEADERS") ]] || return 0
182 flameeyes 1.58 NO_FAIL=1 autotools_run_tool autoheader "$@"
183 azarah 1.11 }
184 azarah 1.1
185 vapier 1.76 # @FUNCTION: eautoconf
186     # @DESCRIPTION:
187     # Runs autoconf.
188 azarah 1.11 eautoconf() {
189 azarah 1.12 if [[ ! -f configure.ac && ! -f configure.in ]] ; then
190     echo
191     eerror "No configure.{ac,in} present in '$(pwd | sed -e 's:.*/::')'!"
192     echo
193     die "No configure.{ac,in} present!"
194     fi
195    
196 azarah 1.11 autotools_run_tool autoconf "$@"
197     }
198 azarah 1.1
199 vapier 1.76 # @FUNCTION: eautomake
200     # @DESCRIPTION:
201     # Runs automake.
202 azarah 1.11 eautomake() {
203 flameeyes 1.24 local extra_opts
204 flameeyes 1.70 local makefile_name
205 flameeyes 1.24
206 flameeyes 1.70 if [[ -f GNUmakefile.am ]]; then
207     makefile_name="GNUmakefile"
208     elif [[ -f Makefile.am ]]; then
209     makefile_name="Makefile"
210     else
211     return 0
212     fi
213 flameeyes 1.24
214 flameeyes 1.70 if [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name}.in ]]; then
215 flameeyes 1.35 local used_automake
216     local installed_automake
217    
218     installed_automake=$(automake --version | head -n 1 | \
219     sed -e 's:.*(GNU automake) ::')
220 flameeyes 1.70 used_automake=$(head -n 1 < ${makefile_name}.in | \
221 flameeyes 1.35 sed -e 's:.*by automake \(.*\) from .*:\1:')
222    
223     if [[ ${installed_automake} != ${used_automake} ]]; then
224     einfo "Automake used for the package (${used_automake}) differs from"
225     einfo "the installed version (${installed_automake})."
226     eautoreconf
227 flameeyes 1.36 return 0
228 flameeyes 1.35 fi
229     fi
230    
231 flameeyes 1.33 [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS ]] \
232 flameeyes 1.24 || extra_opts="${extra_opts} --foreign"
233    
234 flameeyes 1.14 # --force-missing seems not to be recognized by some flavours of automake
235 flameeyes 1.24 autotools_run_tool automake --add-missing --copy ${extra_opts} "$@"
236 azarah 1.1 }
237    
238 azarah 1.17 # Internal function to run an autotools' tool
239     autotools_run_tool() {
240 jmbsvicetto 1.81 if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
241 flameeyes 1.71 ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase"
242     fi
243    
244 flameeyes 1.86 # We do the “latest” → version switch here because it solves
245     # possible order problems, see bug #270010 as an example.
246     [[ ${WANT_AUTOMAKE} == "latest" ]] && export WANT_AUTOMAKE=1.10
247     [[ ${WANT_AUTOCONF} == "latest" ]] && export WANT_AUTOCONF=2.5
248    
249 vapier 1.85 local STDERR_TARGET="${T}/$1.out"
250     # most of the time, there will only be one run, but if there are
251     # more, make sure we get unique log filenames
252     if [[ -e ${STDERR_TARGET} ]] ; then
253     STDERR_TARGET="${T}/$1-$$.out"
254     fi
255 azarah 1.17
256 vapier 1.85 printf "***** $1 *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}"
257 azarah 1.17
258 azarah 1.27 ebegin "Running $@"
259 vapier 1.85 "$@" >> "${STDERR_TARGET}" 2>&1
260     eend $?
261 azarah 1.17
262 vapier 1.85 if [[ $? != 0 && ${NO_FAIL} != 1 ]] ; then
263 azarah 1.17 echo
264     eerror "Failed Running $1 !"
265     eerror
266     eerror "Include in your bugreport the contents of:"
267     eerror
268 vapier 1.85 eerror " ${STDERR_TARGET}"
269 azarah 1.17 echo
270     die "Failed Running $1 !"
271     fi
272     }
273    
274     # Internal function to check for support
275     autotools_check_macro() {
276 vapier 1.77 [[ -f configure.ac || -f configure.in ]] || return 0
277     local macro
278     for macro ; do
279     WANT_AUTOCONF="2.5" autoconf --trace="${macro}" 2>/dev/null
280     done
281 azarah 1.17 return 0
282     }
283    
284     # Internal function to get additional subdirs to configure
285     autotools_get_subdirs() {
286     local subdirs_scan_out
287    
288     subdirs_scan_out=$(autotools_check_macro "AC_CONFIG_SUBDIRS")
289     [[ -n ${subdirs_scan_out} ]] || return 0
290    
291     echo "${subdirs_scan_out}" | gawk \
292     '($0 !~ /^[[:space:]]*(#|dnl)/) {
293 azarah 1.25 if (match($0, /AC_CONFIG_SUBDIRS:(.*)$/, res))
294     print res[1]
295 azarah 1.17 }' | uniq
296 azarah 1.16
297 azarah 1.17 return 0
298 azarah 1.11 }
299 azarah 1.17
300 flameeyes 1.38 autotools_get_auxdir() {
301     local auxdir_scan_out
302    
303     auxdir_scan_out=$(autotools_check_macro "AC_CONFIG_AUX_DIR")
304     [[ -n ${auxdir_scan_out} ]] || return 0
305    
306     echo ${auxdir_scan_out} | gawk \
307     '($0 !~ /^[[:space:]]*(#|dnl)/) {
308     if (match($0, /AC_CONFIG_AUX_DIR:(.*)$/, res))
309     print res[1]
310     }' | uniq
311    
312     return 0
313 vapier 1.40 }

  ViewVC Help
Powered by ViewVC 1.1.20