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

Contents of /eclass/autotools.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.39 - (show annotations) (download)
Mon Jul 3 18:42:54 2006 UTC (8 years, 1 month ago) by flameeyes
Branch: MAIN
Changes since 1.38: +11 -9 lines
Allow to not use recursive rebuild.

1 # Copyright 1999-2005 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/autotools.eclass,v 1.38 2006/06/28 00:15:32 flameeyes Exp $
4 #
5 # Author: Diego Pettenò <flameeyes@gentoo.org>
6 # Enhancements: Martin Schlemmer <azarah@gentoo.org>
7 #
8 # This eclass is for handling autotooled software packages that
9 # needs to regenerate their build scripts.
10 #
11 # NB: If you add anything, please comment it!
12
13 inherit eutils libtool
14
15 DEPEND="sys-devel/automake
16 sys-devel/autoconf
17 sys-devel/libtool"
18
19 # Variables:
20 #
21 # AT_M4DIR - Additional director(y|ies) aclocal should search
22 # AM_OPTS - Additional options to pass to automake during
23 # eautoreconf call.
24
25 # Functions:
26 #
27 # eautoreconf() - Should do a full autoreconf - normally what most people
28 # will be interested in. Also should handle additional
29 # directories specified by AC_CONFIG_SUBDIRS.
30 # eaclocal() - Runs aclocal. Respects AT_M4DIR for additional directories
31 # to search for macro's.
32 # _elibtoolize() - Runs libtoolize. Note the '_' prefix .. to not collide
33 # with elibtoolize() from libtool.eclass
34 # eautoconf - Runs autoconf.
35 # eautoheader - Runs autoheader.
36 # eautomake - Runs automake
37 #
38
39 # XXX: M4DIR should be depreciated
40 AT_M4DIR=${AT_M4DIR:-${M4DIR}}
41 AT_GNUCONF_UPDATE="no"
42
43
44 # This function mimes the behavior of autoreconf, but uses the different
45 # eauto* functions to run the tools. It doesn't accept parameters, but
46 # the directory with include files can be specified with AT_M4DIR variable.
47 eautoreconf() {
48 local pwd=$(pwd) x auxdir
49
50 if [[ -z ${AT_NO_RECURSIVE} ]]; then
51 # Take care of subdirs
52 for x in $(autotools_get_subdirs); do
53 if [[ -d ${x} ]] ; then
54 cd "${x}"
55 AT_NOELIBTOOLIZE="yes" eautoreconf
56 cd "${pwd}"
57 fi
58 done
59 fi
60
61 auxdir=$(autotools_get_auxdir)
62
63 einfo "Running eautoreconf in '$(pwd)' ..."
64 [[ -n ${auxdir} ]] && mkdir -p ${auxdir}
65 eaclocal
66 _elibtoolize --copy --force
67 eautoconf
68 eautoheader
69 FROM_EAUTORECONF="yes" eautomake ${AM_OPTS}
70
71 [[ ${AT_NOELIBTOOLIZE} == "yes" ]] && return 0
72
73 # Call it here to prevent failures due to elibtoolize called _before_
74 # eautoreconf.
75 elibtoolize
76
77 return 0
78 }
79
80 # These functions runs the autotools using autotools_run_tool with the
81 # specified parametes. The name of the tool run is the same of the function
82 # without e prefix.
83 # They also force installing the support files for safety.
84 eaclocal() {
85 local aclocal_opts
86
87 if [[ -n ${AT_M4DIR} ]] ; then
88 for x in ${AT_M4DIR} ; do
89 case "${x}" in
90 "-I")
91 # We handle it below
92 ;;
93 *)
94 [[ ! -d ${x} ]] && ewarn "eaclocal: '${x}' does not exist"
95 aclocal_opts="${aclocal_opts} -I ${x}"
96 ;;
97 esac
98 done
99 fi
100
101 [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && \
102 autotools_run_tool aclocal "$@" ${aclocal_opts}
103 }
104
105 _elibtoolize() {
106 local opts
107 local lttest
108
109 # Check if we should run libtoolize (AM_PROG_LIBTOOL is an older macro,
110 # check for both it and the current AC_PROG_LIBTOOL)
111 lttest="$(autotools_check_macro "AC_PROG_LIBTOOL")$(autotools_check_macro "AM_PROG_LIBTOOL")"
112 [[ -n $lttest ]] || return 0
113
114 [[ -f Makefile.am ]] && opts="--automake"
115
116 [[ "${USERLAND}" == "Darwin" ]] && LIBTOOLIZE="glibtoolize"
117 autotools_run_tool ${LIBTOOLIZE:-libtoolize} "$@" ${opts}
118
119 # Need to rerun aclocal
120 eaclocal
121 }
122
123 eautoheader() {
124 # Check if we should run autoheader
125 [[ -n $(autotools_check_macro "AC_CONFIG_HEADERS") ]] || return 0
126 autotools_run_tool autoheader "$@"
127 }
128
129 eautoconf() {
130 if [[ ! -f configure.ac && ! -f configure.in ]] ; then
131 echo
132 eerror "No configure.{ac,in} present in '$(pwd | sed -e 's:.*/::')'!"
133 echo
134 die "No configure.{ac,in} present!"
135 fi
136
137 autotools_run_tool autoconf "$@"
138 }
139
140 eautomake() {
141 local extra_opts
142
143 [[ -f Makefile.am ]] || return 0
144
145 if [[ -z ${FROM_EAUTORECONF} && -f Makefile.in ]]; then
146 local used_automake
147 local installed_automake
148
149 installed_automake=$(automake --version | head -n 1 | \
150 sed -e 's:.*(GNU automake) ::')
151 used_automake=$(head -n 1 < Makefile.in | \
152 sed -e 's:.*by automake \(.*\) from .*:\1:')
153
154 if [[ ${installed_automake} != ${used_automake} ]]; then
155 einfo "Automake used for the package (${used_automake}) differs from"
156 einfo "the installed version (${installed_automake})."
157 eautoreconf
158 return 0
159 fi
160 fi
161
162 [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS ]] \
163 || extra_opts="${extra_opts} --foreign"
164
165 # --force-missing seems not to be recognized by some flavours of automake
166 autotools_run_tool automake --add-missing --copy ${extra_opts} "$@"
167 }
168
169
170
171 # Internal function to run an autotools' tool
172 autotools_run_tool() {
173 local STDERR_TARGET="${T}/$$.out"
174 local PATCH_TARGET="${T}/$$.patch"
175 local ris
176
177 echo "***** $1 *****" > ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}
178 echo >> ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}
179
180 ebegin "Running $@"
181 $@ >> ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/} 2>&1
182 ris=$?
183 eend ${ris}
184
185 if [[ ${ris} != 0 ]]; then
186 echo
187 eerror "Failed Running $1 !"
188 eerror
189 eerror "Include in your bugreport the contents of:"
190 eerror
191 eerror " ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}"
192 echo
193 die "Failed Running $1 !"
194 fi
195 }
196
197 # Internal function to check for support
198 autotools_check_macro() {
199 [[ -f configure.ac || -f configure.in ]] && \
200 WANT_AUTOCONF="2.5" autoconf --trace=$1 2>/dev/null
201 return 0
202 }
203
204 # Internal function to get additional subdirs to configure
205 autotools_get_subdirs() {
206 local subdirs_scan_out
207
208 subdirs_scan_out=$(autotools_check_macro "AC_CONFIG_SUBDIRS")
209 [[ -n ${subdirs_scan_out} ]] || return 0
210
211 echo "${subdirs_scan_out}" | gawk \
212 '($0 !~ /^[[:space:]]*(#|dnl)/) {
213 if (match($0, /AC_CONFIG_SUBDIRS:(.*)$/, res))
214 print res[1]
215 }' | uniq
216
217 return 0
218 }
219
220 autotools_get_auxdir() {
221 local auxdir_scan_out
222
223 auxdir_scan_out=$(autotools_check_macro "AC_CONFIG_AUX_DIR")
224 [[ -n ${auxdir_scan_out} ]] || return 0
225
226 echo ${auxdir_scan_out} | gawk \
227 '($0 !~ /^[[:space:]]*(#|dnl)/) {
228 if (match($0, /AC_CONFIG_AUX_DIR:(.*)$/, res))
229 print res[1]
230 }' | uniq
231
232 return 0
233 }

  ViewVC Help
Powered by ViewVC 1.1.20