Gentoo Archives: gentoo-commits

From: "Mike Frysinger (vapier)" <vapier@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in sys-devel/autoconf-wrapper/files: ac-wrapper-12.sh
Date: Sun, 02 Oct 2011 19:39:17
Message-Id: 20111002193907.E9C432004B@flycatcher.gentoo.org
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} !?"