blob: a779d86db62059a693cfe76d927b14a191bbab92 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001#!/bin/sh
2
3#--------------------------------------------------------------------------
4# die prints argument string to stdout and exits this shell script.
5#
6die(){
7 echo "buildconf: $@"
8 exit 1
9}
10
11#--------------------------------------------------------------------------
12# findtool works as 'which' but we use a different name to make it more
13# obvious we aren't using 'which'! ;-)
14#
15findtool(){
16 file="$1"
17
18 if { echo "$file" | grep "/" >/dev/null 2>&1; } then
19 # when file is given with a path check it first
20 if test -f "$file"; then
21 echo "$file"
22 return
23 fi
24 fi
25
26 old_IFS=$IFS; IFS=':'
27 for path in $PATH
28 do
29 IFS=$old_IFS
30 # echo "checks for $file in $path" >&2
31 if test -f "$path/$file"; then
32 echo "$path/$file"
33 return
34 fi
35 done
36 IFS=$old_IFS
37}
38
39#--------------------------------------------------------------------------
40# removethis() removes all files and subdirectories with the given name,
41# inside and below the current subdirectory at invocation time.
42#
43removethis(){
44 if test "$#" = "1"; then
45 find . -depth -name $1 -print > buildconf.tmp.$$
46 while read fdname
47 do
48 if test -f "$fdname"; then
49 rm -f "$fdname"
50 elif test -d "$fdname"; then
51 rm -f -r "$fdname"
52 fi
53 done < buildconf.tmp.$$
54 rm -f buildconf.tmp.$$
55 fi
56}
57
58#--------------------------------------------------------------------------
59# Ensure that buildconf runs from the subdirectory where configure.ac lives
60#
61if test ! -f configure.ac ||
62 test ! -f ares_init.c ||
63 test ! -f m4/cares-functions.m4; then
64 echo "Can not run buildconf from outside of c-ares source subdirectory!"
65 echo "Change to the subdirectory where buildconf is found, and try again."
66 exit 1
67fi
68
69#--------------------------------------------------------------------------
70# GNU libtool preliminary check
71#
72want_lt_major=1
73want_lt_minor=4
74want_lt_patch=2
75want_lt_version=1.4.2
76
77# This approach that tries 'glibtoolize first is intended for systems that
78# have GNU libtool named as 'glibtoolize' and libtoolize not being GNU's.
79
80libtoolize=`findtool glibtoolize 2>/dev/null`
81if test ! -x "$libtoolize"; then
82 libtoolize=`findtool ${LIBTOOLIZE:-libtoolize}`
83fi
84if test -z "$libtoolize"; then
85 echo "buildconf: libtoolize not found."
86 echo " You need GNU libtoolize $want_lt_version or newer installed."
87 exit 1
88fi
89
90lt_pver=`$libtoolize --version 2>/dev/null|head -n 1`
91lt_qver=`echo $lt_pver|sed -e "s/([^)]*)//g" -e "s/^[^0-9]*//g"`
92lt_version=`echo $lt_qver|sed -e "s/[- ].*//" -e "s/\([a-z]*\)$//"`
93if test -z "$lt_version"; then
94 echo "buildconf: libtoolize not found."
95 echo " You need GNU libtoolize $want_lt_version or newer installed."
96 exit 1
97fi
98old_IFS=$IFS; IFS='.'; set $lt_version; IFS=$old_IFS
99lt_major=$1
100lt_minor=$2
101lt_patch=$3
102
103if test -z "$lt_major"; then
104 lt_status="bad"
105elif test "$lt_major" -gt "$want_lt_major"; then
106 lt_status="good"
107elif test "$lt_major" -lt "$want_lt_major"; then
108 lt_status="bad"
109elif test -z "$lt_minor"; then
110 lt_status="bad"
111elif test "$lt_minor" -gt "$want_lt_minor"; then
112 lt_status="good"
113elif test "$lt_minor" -lt "$want_lt_minor"; then
114 lt_status="bad"
115elif test -z "$lt_patch"; then
116 lt_status="bad"
117elif test "$lt_patch" -gt "$want_lt_patch"; then
118 lt_status="good"
119elif test "$lt_patch" -lt "$want_lt_patch"; then
120 lt_status="bad"
121else
122 lt_status="good"
123fi
124if test "$lt_status" != "good"; then
125 echo "buildconf: libtoolize version $lt_version found."
126 echo " You need GNU libtoolize $want_lt_version or newer installed."
127 exit 1
128fi
129
130#--------------------------------------------------------------------------
131# perl check
132#
133PERL=`findtool ${PERL:-perl}`
134if test -z "$PERL"; then
135 echo "buildconf: perl not found"
136 exit 1
137fi
138
139#--------------------------------------------------------------------------
140# Remove files generated on previous buildconf/configure run.
141#
142for fname in .deps \
143 .libs \
144 *.la \
145 *.lo \
146 *.a \
147 *.o \
148 Makefile \
149 Makefile.in \
150 aclocal.m4 \
151 aclocal.m4.bak \
152 ares_build.h \
153 ares_config.h \
154 ares_config.h.in \
155 autom4te.cache \
156 compile \
157 config.guess \
158 config.log \
159 config.lt \
160 config.status \
161 config.sub \
162 configure \
163 depcomp \
164 libcares.pc \
165 libtool \
166 libtool.m4 \
167 libtool.m4.tmp \
168 ltmain.sh \
169 ltoptions.m4 \
170 ltsugar.m4 \
171 ltversion.m4 \
172 lt~obsolete.m4 \
173 missing \
174 stamp-h1 \
175 stamp-h2 ; do
176 removethis "$fname"
177done
178
179#--------------------------------------------------------------------------
180# run the correct scripts now
181#
182
183echo "buildconf: running libtoolize"
184${libtoolize} --copy --automake --force || die "libtoolize command failed"
185
186# When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4
187# subdirectory and this local copy is patched to fix some warnings that
188# are triggered when running aclocal and using autoconf 2.62 or later.
189
190if test "$lt_major" = "1" && test "$lt_minor" = "5"; then
191 if test -z "$lt_patch" || test "$lt_patch" -lt "26"; then
192 echo "buildconf: copying libtool.m4 to local m4 subdir"
193 ac_dir=`${ACLOCAL:-aclocal} --print-ac-dir`
194 if test -f $ac_dir/libtool.m4; then
195 cp -f $ac_dir/libtool.m4 m4/libtool.m4
196 else
197 echo "buildconf: $ac_dir/libtool.m4 not found"
198 fi
199 if test -f m4/libtool.m4; then
200 echo "buildconf: renaming some variables in local m4/libtool.m4"
201 $PERL -i.tmp -pe \
202 's/lt_prog_compiler_pic_works/lt_cv_prog_compiler_pic_works/g; \
203 s/lt_prog_compiler_static_works/lt_cv_prog_compiler_static_works/g;' \
204 m4/libtool.m4
205 rm -f m4/libtool.m4.tmp
206 fi
207 fi
208fi
209
210if test -f m4/libtool.m4; then
211 echo "buildconf: converting all mv to mv -f in local m4/libtool.m4"
212 $PERL -i.tmp -pe 's/\bmv +([^-\s])/mv -f $1/g' m4/libtool.m4
213 rm -f m4/libtool.m4.tmp
214fi
215
216echo "buildconf: running aclocal"
217${ACLOCAL:-aclocal} -I m4 $ACLOCAL_FLAGS || die "aclocal command failed"
218
219echo "buildconf: converting all mv to mv -f in local aclocal.m4"
220$PERL -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
221
222echo "buildconf: running autoheader"
223${AUTOHEADER:-autoheader} || die "autoheader command failed"
224
225echo "buildconf: running autoconf"
226${AUTOCONF:-autoconf} || die "autoconf command failed"
227
228echo "buildconf: running automake"
229${AUTOMAKE:-automake} --add-missing --copy || die "automake command failed"
230
231#--------------------------------------------------------------------------
232# GNU libtool complementary check
233#
234# Depending on the libtool and automake versions being used, config.guess
235# might not be installed in the subdirectory until automake has finished.
236# So we can not attempt to use it until this very last buildconf stage.
237#
238if test ! -f ./config.guess; then
239 echo "buildconf: config.guess not found"
240else
241 buildhost=`./config.guess 2>/dev/null|head -n 1`
242 case $buildhost in
243 *-*-darwin*)
244 need_lt_major=1
245 need_lt_minor=5
246 need_lt_patch=26
247 need_lt_check="yes"
248 ;;
249 *-*-hpux*)
250 need_lt_major=1
251 need_lt_minor=5
252 need_lt_patch=24
253 need_lt_check="yes"
254 ;;
255 esac
256 if test ! -z "$need_lt_check"; then
257 if test -z "$lt_major"; then
258 lt_status="bad"
259 elif test "$lt_major" -gt "$need_lt_major"; then
260 lt_status="good"
261 elif test "$lt_major" -lt "$need_lt_major"; then
262 lt_status="bad"
263 elif test -z "$lt_minor"; then
264 lt_status="bad"
265 elif test "$lt_minor" -gt "$need_lt_minor"; then
266 lt_status="good"
267 elif test "$lt_minor" -lt "$need_lt_minor"; then
268 lt_status="bad"
269 elif test -z "$lt_patch"; then
270 lt_status="bad"
271 elif test "$lt_patch" -gt "$need_lt_patch"; then
272 lt_status="good"
273 elif test "$lt_patch" -lt "$need_lt_patch"; then
274 lt_status="bad"
275 else
276 lt_status="good"
277 fi
278 if test "$lt_status" != "good"; then
279 need_lt_version="$need_lt_major.$need_lt_minor.$need_lt_patch"
280 echo "buildconf: libtool version $lt_version found."
281 echo " $buildhost requires GNU libtool $need_lt_version or newer installed."
282 rm -f configure
283 exit 1
284 fi
285 fi
286fi
287
288#--------------------------------------------------------------------------
289# Finished successfully.
290#
291echo "buildconf: OK"
292
293if test -f "test/buildconf"; then
294 cd test && ./buildconf
295fi
296
297exit 0