1 |
vapier 11/10/02 19:39:07 |
2 |
|
3 |
Added: ac-wrapper-12.sh |
4 |
Log: |
5 |
Optimize version lookup a bit, and handle the case where $0 is not a full path #385201 by Florian Philipp. |
6 |
|
7 |
(Portage version: 2.2.0_alpha59/cvs/Linux x86_64) |
8 |
|
9 |
Revision Changes Path |
10 |
1.1 sys-devel/autoconf-wrapper/files/ac-wrapper-12.sh |
11 |
|
12 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-devel/autoconf-wrapper/files/ac-wrapper-12.sh?rev=1.1&view=markup |
13 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-devel/autoconf-wrapper/files/ac-wrapper-12.sh?rev=1.1&content-type=text/plain |
14 |
|
15 |
Index: ac-wrapper-12.sh |
16 |
=================================================================== |
17 |
#!/bin/sh |
18 |
# Copyright 1999-2011 Gentoo Foundation |
19 |
# Distributed under the terms of the GNU General Public License v2 |
20 |
# $Header: /var/cvsroot/gentoo-x86/sys-devel/autoconf-wrapper/files/ac-wrapper-12.sh,v 1.1 2011/10/02 19:39:07 vapier Exp $ |
21 |
|
22 |
# Based on the ac-wrapper.pl script provided by MandrakeSoft |
23 |
# Rewritten in bash by Gregorio Guidi |
24 |
# |
25 |
# Executes the correct autoconf version. |
26 |
# |
27 |
# - defaults to newest version available (hopefully autoconf-2.60) |
28 |
# - runs autoconf 2.13 if: |
29 |
# - envvar WANT_AUTOCONF is set to `2.1' |
30 |
# -or- |
31 |
# - `ac{local,include}.m4' or `configure.{in,ac}' have AC_PREREQ(2.1) (not higher) |
32 |
# -or- |
33 |
# - `configure' is already present and was generated by autoconf 2.13 |
34 |
|
35 |
warn() { printf "ac-wrapper: $*\n" 1>&2; } |
36 |
err() { warn "$@"; exit 1; } |
37 |
unset IFS |
38 |
which() { |
39 |
local p |
40 |
IFS=: # we don't use IFS anywhere, so don't bother saving/restoring |
41 |
for p in ${PATH} ; do |
42 |
p="${p}/$1" |
43 |
[ -e "${p}" ] && echo "${p}" && return 0 |
44 |
done |
45 |
unset IFS |
46 |
return 1 |
47 |
} |
48 |
|
49 |
# |
50 |
# Sanitize argv[0] since it isn't always a full path #385201 |
51 |
# |
52 |
argv0=${0##*/} |
53 |
case ${0} in |
54 |
${argv0}) |
55 |
# find it in PATH |
56 |
if ! full_argv0=$(which "${argv0}") ; then |
57 |
err "could not locate ${argv0}; file a bug" |
58 |
fi |
59 |
;; |
60 |
*) |
61 |
# re-use full/relative paths |
62 |
full_argv0=$0 |
63 |
;; |
64 |
esac |
65 |
|
66 |
if [ "${argv0}" = "ac-wrapper.sh" ] ; then |
67 |
err "Don't call this script directly" |
68 |
fi |
69 |
|
70 |
if [ "${WANT_AUTOCONF}" = "2.1" ] && [ "${argv0}" = "autom4te" ] ; then |
71 |
err "Autoconf 2.13 doesn't contain autom4te.\n" \ |
72 |
" Either unset WANT_AUTOCONF or don't execute anything\n" \ |
73 |
" that would use autom4te." |
74 |
fi |
75 |
|
76 |
if ! seq 0 0 2>/dev/null 1>&2 ; then #338518 |
77 |
seq() { |
78 |
local f l i |
79 |
case $# in |
80 |
1) f=1 i=1 l=$1;; |
81 |
2) f=$1 i=1 l=$2;; |
82 |
3) f=$1 i=$2 l=$3;; |
83 |
esac |
84 |
while :; do |
85 |
[ $l -lt $f -a $i -gt 0 ] && break |
86 |
[ $f -lt $l -a $i -lt 0 ] && break |
87 |
echo $f |
88 |
: $(( f += i )) |
89 |
done |
90 |
return 0 |
91 |
} |
92 |
fi |
93 |
|
94 |
# |
95 |
# Set up bindings between actual version and WANT_AUTOCONF; |
96 |
# Start at last known stable to speed up lookup process. |
97 |
# |
98 |
STABLE_AUTOCONF="2.68:2.5" |
99 |
vers="${STABLE_AUTOCONF} 9999:2.5 $(printf '2.%s:2.5 ' `seq 99 -1 59`) 2.13:2.1" |
100 |
|
101 |
binary="" |
102 |
for v in ${vers} ; do |
103 |
auto_ver=${v%:*} |
104 |
if [ -z "${binary}" ] && [ -x "${full_argv0}-${auto_ver}" ] ; then |
105 |
binary="${full_argv0}-${auto_ver}" |
106 |
break |
107 |
fi |
108 |
done |
109 |
if [ -z "${binary}" ] ; then |
110 |
err "Unable to locate any usuable version of autoconf.\n" \ |
111 |
"\tI tried these versions: ${vers}\n" \ |
112 |
"\tWith a base name of '${full_argv0}'." |
113 |
fi |
114 |
|
115 |
# |
116 |
# Check the WANT_AUTOCONF setting. We accept a whitespace delimited |
117 |
# list of autoconf versions. |
118 |
# |
119 |
if [ -n "${WANT_AUTOCONF}" ] ; then |
120 |
for v in ${vers} x ; do |
121 |
if [ "${v}" = "x" ] ; then |
122 |
warn "warning: invalid WANT_AUTOCONF '${WANT_AUTOCONF}'; ignoring." |
123 |
unset WANT_AUTOCONF |
124 |
break |
125 |
fi |
126 |
|
127 |
auto_ver=${v%:*} |
128 |
want_ver=${v#*:} |
129 |
for wx in ${WANT_AUTOCONF} ; do |
130 |
if [ "${wx}" = "${want_ver}" ] && [ -x "${full_argv0}-${auto_ver}" ] ; then |
131 |
binary="${full_argv0}-${auto_ver}" |
132 |
v="x" |
133 |
fi |
134 |
done |
135 |
[ "${v}" = "x" ] && break |
136 |
done |
137 |
fi |
138 |
|
139 |
# |
140 |
# autodetect helpers |
141 |
# |
142 |
acprereq_version() { |
143 |
gawk \ |
144 |
'($0 !~ /^[[:space:]]*(#|dnl)/) { |
145 |
if (match($0, "AC_PREREQ\\(\\[?([0-9]\\.[0-9])", res)) |
146 |
VERSIONS[COUNT++] = res[1] |
147 |
} |
148 |
|
149 |
END { |
150 |
asort(VERSIONS) |
151 |
print VERSIONS[COUNT] |
152 |
}' "$@" |
153 |
} |
154 |
|
155 |
generated_version() { |
156 |
gawk \ |
157 |
'{ |
158 |
if (match($0, |
159 |
"^# Generated (by (GNU )?Autoconf|automatically using autoconf version) ([0-9].[0-9])", |
160 |
res)) { |
161 |
print res[3] |
162 |
exit |
163 |
} |
164 |
}' "$@" |
165 |
} |
166 |
|
167 |
# |
168 |
# autodetect routine |
169 |
# |
170 |
if [ "${WANT_AUTOCONF}" = "2.1" ] && [ -f "configure.ac" ] ; then |
171 |
err "Since configure.ac is present, aclocal always use\n" \ |
172 |
"\tautoconf 2.59+, which conflicts with your choice and\n" \ |
173 |
"\tcauses error. You have two options:\n" \ |
174 |
"\t1. Try execute command again after removing configure.ac\n" \ |
175 |
"\t2. Don't set WANT_AUTOCONF" |
176 |
fi |
177 |
|
178 |
if [ "${WANT_AUTOCONF}" != "2.5" ] && [ -n "${WANT_AUTOMAKE}" ] ; then |
179 |
# Automake-1.7 and better require autoconf-2.5x so if WANT_AUTOMAKE |
180 |
# is set to an older version, let's do some sanity checks. |
181 |
case "${WANT_AUTOMAKE}" in |
182 |
1.[456]) |
183 |
acfiles=$(ls ac{local,include}.m4 configure.{in,ac} 2>/dev/null) |
184 |
[ -n "${acfiles}" ] && confversion=$(acprereq_version ${acfiles}) |
185 |
|
186 |
[ -z "${confversion}" ] && [ -r "configure" ] \ |
187 |
&& confversion=$(generated_version configure) |
188 |
|
189 |
if [ "${confversion}" = "2.1" ] && [ ! -f "configure.ac" ] ; then |
190 |
binary="${full_argv0}-2.13" |
191 |
fi |
192 |
esac |
193 |
fi |
194 |
|
195 |
if [ -n "${WANT_ACWRAPPER_DEBUG}" ] ; then |
196 |
if [ -n "${WANT_AUTOCONF}" ] ; then |
197 |
warn "DEBUG: WANT_AUTOCONF is set to ${WANT_AUTOCONF}" |
198 |
fi |
199 |
warn "DEBUG: will execute <${binary}>" |
200 |
fi |
201 |
|
202 |
# |
203 |
# for further consistency |
204 |
# |
205 |
for v in ${vers} ; do |
206 |
auto_ver=${v%:*} |
207 |
want_ver=${v#*:} |
208 |
if [ "${binary}" = "${full_argv0}-${auto_ver}" ] ; then |
209 |
export WANT_AUTOCONF="${want_ver}" |
210 |
break |
211 |
fi |
212 |
done |
213 |
|
214 |
# |
215 |
# Now try to run the binary |
216 |
# |
217 |
if [ ! -x "${binary}" ] ; then |
218 |
# this shouldn't happen |
219 |
err "${binary} is missing or not executable.\n" \ |
220 |
"\tPlease try emerging the correct version of autoconf." |
221 |
fi |
222 |
|
223 |
exec "${binary}" "$@" |
224 |
|
225 |
err "was unable to exec ${binary} !?" |