Root/
Source at commit 73ceffa51d3450d2d20ce933e7fc6da187e09fc8 created 8 years 5 months ago. By Maarten ter Huurne, Fix bug in section directory creation method | |
---|---|
1 | #!/bin/sh |
2 | # a u t o g e n . s h |
3 | # |
4 | # Copyright (c) 2005-2009 United States Government as represented by |
5 | # the U.S. Army Research Laboratory. |
6 | # |
7 | # Redistribution and use in source and binary forms, with or without |
8 | # modification, are permitted provided that the following conditions |
9 | # are met: |
10 | # |
11 | # 1. Redistributions of source code must retain the above copyright |
12 | # notice, this list of conditions and the following disclaimer. |
13 | # |
14 | # 2. Redistributions in binary form must reproduce the above |
15 | # copyright notice, this list of conditions and the following |
16 | # disclaimer in the documentation and/or other materials provided |
17 | # with the distribution. |
18 | # |
19 | # 3. The name of the author may not be used to endorse or promote |
20 | # products derived from this software without specific prior written |
21 | # permission. |
22 | # |
23 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS |
24 | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
25 | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
26 | # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
27 | # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
28 | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |
29 | # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
30 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
31 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
32 | # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
33 | # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
34 | # |
35 | ### |
36 | # |
37 | # Script for automatically preparing the sources for compilation by |
38 | # performing the myriad of necessary steps. The script attempts to |
39 | # detect proper version support, and outputs warnings about particular |
40 | # systems that have autotool peculiarities. |
41 | # |
42 | # Basically, if everything is set up and installed correctly, the |
43 | # script will validate that minimum versions of the GNU Build System |
44 | # tools are installed, account for several common configuration |
45 | # issues, and then simply run autoreconf for you. |
46 | # |
47 | # If autoreconf fails, which can happen for many valid configurations, |
48 | # this script proceeds to run manual preparation steps effectively |
49 | # providing a POSIX shell script (mostly complete) reimplementation of |
50 | # autoreconf. |
51 | # |
52 | # The AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER |
53 | # environment variables and corresponding _OPTIONS variables (e.g. |
54 | # AUTORECONF_OPTIONS) may be used to override the default automatic |
55 | # detection behaviors. Similarly the _VERSION variables will override |
56 | # the minimum required version numbers. |
57 | # |
58 | # Examples: |
59 | # |
60 | # To obtain help on usage: |
61 | # ./autogen.sh --help |
62 | # |
63 | # To obtain verbose output: |
64 | # ./autogen.sh --verbose |
65 | # |
66 | # To skip autoreconf and prepare manually: |
67 | # AUTORECONF=false ./autogen.sh |
68 | # |
69 | # To verbosely try running with an older (unsupported) autoconf: |
70 | # AUTOCONF_VERSION=2.50 ./autogen.sh --verbose |
71 | # |
72 | # Author: |
73 | # Christopher Sean Morrison <morrison@brlcad.org> |
74 | # |
75 | # Patches: |
76 | # Sebastian Pipping <sebastian@pipping.org> |
77 | # |
78 | ###################################################################### |
79 | |
80 | # set to minimum acceptable version of autoconf |
81 | if [ "x$AUTOCONF_VERSION" = "x" ] ; then |
82 | AUTOCONF_VERSION=2.52 |
83 | fi |
84 | # set to minimum acceptable version of automake |
85 | if [ "x$AUTOMAKE_VERSION" = "x" ] ; then |
86 | AUTOMAKE_VERSION=1.6.0 |
87 | fi |
88 | # set to minimum acceptable version of libtool |
89 | if [ "x$LIBTOOL_VERSION" = "x" ] ; then |
90 | LIBTOOL_VERSION=1.4.2 |
91 | fi |
92 | |
93 | |
94 | ################## |
95 | # ident function # |
96 | ################## |
97 | ident ( ) { |
98 | # extract copyright from header |
99 | __copyright="`grep Copyright $AUTOGEN_SH | head -${HEAD_N}1 | awk '{print $4}'`" |
100 | if [ "x$__copyright" = "x" ] ; then |
101 | __copyright="`date +%Y`" |
102 | fi |
103 | |
104 | # extract version from CVS Id string |
105 | __id="$Id: autogen.sh 33925 2009-03-01 23:27:06Z brlcad $" |
106 | __version="`echo $__id | sed 's/.*\([0-9][0-9][0-9][0-9]\)[-\/]\([0-9][0-9]\)[-\/]\([0-9][0-9]\).*/\1\2\3/'`" |
107 | if [ "x$__version" = "x" ] ; then |
108 | __version="" |
109 | fi |
110 | |
111 | echo "autogen.sh build preparation script by Christopher Sean Morrison" |
112 | echo " + config.guess download patch by Sebastian Pipping (2008-12-03)" |
113 | echo "revised 3-clause BSD-style license, copyright (c) $__copyright" |
114 | echo "script version $__version, ISO/IEC 9945 POSIX shell script" |
115 | } |
116 | |
117 | |
118 | ################## |
119 | # USAGE FUNCTION # |
120 | ################## |
121 | usage ( ) { |
122 | echo "Usage: $AUTOGEN_SH [-h|--help] [-v|--verbose] [-q|--quiet] [-d|--download] [--version]" |
123 | echo " --help Help on $NAME_OF_AUTOGEN usage" |
124 | echo " --verbose Verbose progress output" |
125 | echo " --quiet Quiet suppressed progress output" |
126 | echo " --download Download the latest config.guess from gnulib" |
127 | echo " --version Only perform GNU Build System version checks" |
128 | echo |
129 | echo "Description: This script will validate that minimum versions of the" |
130 | echo "GNU Build System tools are installed and then run autoreconf for you." |
131 | echo "Should autoreconf fail, manual preparation steps will be run" |
132 | echo "potentially accounting for several common preparation issues. The" |
133 | |
134 | echo "AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER," |
135 | echo "PROJECT, & CONFIGURE environment variables and corresponding _OPTIONS" |
136 | echo "variables (e.g. AUTORECONF_OPTIONS) may be used to override the" |
137 | echo "default automatic detection behavior." |
138 | echo |
139 | |
140 | ident |
141 | |
142 | return 0 |
143 | } |
144 | |
145 | |
146 | ########################## |
147 | # VERSION_ERROR FUNCTION # |
148 | ########################## |
149 | version_error ( ) { |
150 | if [ "x$1" = "x" ] ; then |
151 | echo "INTERNAL ERROR: version_error was not provided a version" |
152 | exit 1 |
153 | fi |
154 | if [ "x$2" = "x" ] ; then |
155 | echo "INTERNAL ERROR: version_error was not provided an application name" |
156 | exit 1 |
157 | fi |
158 | $ECHO |
159 | $ECHO "ERROR: To prepare the ${PROJECT} build system from scratch," |
160 | $ECHO " at least version $1 of $2 must be installed." |
161 | $ECHO |
162 | $ECHO "$NAME_OF_AUTOGEN does not need to be run on the same machine that will" |
163 | $ECHO "run configure or make. Either the GNU Autotools will need to be installed" |
164 | $ECHO "or upgraded on this system, or $NAME_OF_AUTOGEN must be run on the source" |
165 | $ECHO "code on another system and then transferred to here. -- Cheers!" |
166 | $ECHO |
167 | } |
168 | |
169 | ########################## |
170 | # VERSION_CHECK FUNCTION # |
171 | ########################## |
172 | version_check ( ) { |
173 | if [ "x$1" = "x" ] ; then |
174 | echo "INTERNAL ERROR: version_check was not provided a minimum version" |
175 | exit 1 |
176 | fi |
177 | _min="$1" |
178 | if [ "x$2" = "x" ] ; then |
179 | echo "INTERNAL ERROR: version check was not provided a comparison version" |
180 | exit 1 |
181 | fi |
182 | _cur="$2" |
183 | |
184 | # needed to handle versions like 1.10 and 1.4-p6 |
185 | _min="`echo ${_min}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`" |
186 | _cur="`echo ${_cur}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`" |
187 | |
188 | _min_major="`echo $_min | cut -d. -f1`" |
189 | _min_minor="`echo $_min | cut -d. -f2`" |
190 | _min_patch="`echo $_min | cut -d. -f3`" |
191 | |
192 | _cur_major="`echo $_cur | cut -d. -f1`" |
193 | _cur_minor="`echo $_cur | cut -d. -f2`" |
194 | _cur_patch="`echo $_cur | cut -d. -f3`" |
195 | |
196 | if [ "x$_min_major" = "x" ] ; then |
197 | _min_major=0 |
198 | fi |
199 | if [ "x$_min_minor" = "x" ] ; then |
200 | _min_minor=0 |
201 | fi |
202 | if [ "x$_min_patch" = "x" ] ; then |
203 | _min_patch=0 |
204 | fi |
205 | if [ "x$_cur_minor" = "x" ] ; then |
206 | _cur_major=0 |
207 | fi |
208 | if [ "x$_cur_minor" = "x" ] ; then |
209 | _cur_minor=0 |
210 | fi |
211 | if [ "x$_cur_patch" = "x" ] ; then |
212 | _cur_patch=0 |
213 | fi |
214 | |
215 | $VERBOSE_ECHO "Checking if ${_cur_major}.${_cur_minor}.${_cur_patch} is greater than ${_min_major}.${_min_minor}.${_min_patch}" |
216 | |
217 | if [ $_min_major -lt $_cur_major ] ; then |
218 | return 0 |
219 | elif [ $_min_major -eq $_cur_major ] ; then |
220 | if [ $_min_minor -lt $_cur_minor ] ; then |
221 | return 0 |
222 | elif [ $_min_minor -eq $_cur_minor ] ; then |
223 | if [ $_min_patch -lt $_cur_patch ] ; then |
224 | return 0 |
225 | elif [ $_min_patch -eq $_cur_patch ] ; then |
226 | return 0 |
227 | fi |
228 | fi |
229 | fi |
230 | return 1 |
231 | } |
232 | |
233 | |
234 | ###################################### |
235 | # LOCATE_CONFIGURE_TEMPLATE FUNCTION # |
236 | ###################################### |
237 | locate_configure_template ( ) { |
238 | _pwd="`pwd`" |
239 | if test -f "./configure.ac" ; then |
240 | echo "./configure.ac" |
241 | elif test -f "./configure.in" ; then |
242 | echo "./configure.in" |
243 | elif test -f "$_pwd/configure.ac" ; then |
244 | echo "$_pwd/configure.ac" |
245 | elif test -f "$_pwd/configure.in" ; then |
246 | echo "$_pwd/configure.in" |
247 | elif test -f "$PATH_TO_AUTOGEN/configure.ac" ; then |
248 | echo "$PATH_TO_AUTOGEN/configure.ac" |
249 | elif test -f "$PATH_TO_AUTOGEN/configure.in" ; then |
250 | echo "$PATH_TO_AUTOGEN/configure.in" |
251 | fi |
252 | } |
253 | |
254 | |
255 | ################## |
256 | # argument check # |
257 | ################## |
258 | ARGS="$*" |
259 | PATH_TO_AUTOGEN="`dirname $0`" |
260 | NAME_OF_AUTOGEN="`basename $0`" |
261 | AUTOGEN_SH="$PATH_TO_AUTOGEN/$NAME_OF_AUTOGEN" |
262 | |
263 | LIBTOOL_M4="${PATH_TO_AUTOGEN}/misc/libtool.m4" |
264 | |
265 | if [ "x$HELP" = "x" ] ; then |
266 | HELP=no |
267 | fi |
268 | if [ "x$QUIET" = "x" ] ; then |
269 | QUIET=no |
270 | fi |
271 | if [ "x$VERBOSE" = "x" ] ; then |
272 | VERBOSE=no |
273 | fi |
274 | if [ "x$VERSION_ONLY" = "x" ] ; then |
275 | VERSION_ONLY=no |
276 | fi |
277 | if [ "x$DOWNLOAD" = "x" ] ; then |
278 | DOWNLOAD=no |
279 | fi |
280 | if [ "x$AUTORECONF_OPTIONS" = "x" ] ; then |
281 | AUTORECONF_OPTIONS="-i -f" |
282 | fi |
283 | if [ "x$AUTOCONF_OPTIONS" = "x" ] ; then |
284 | AUTOCONF_OPTIONS="-f" |
285 | fi |
286 | if [ "x$AUTOMAKE_OPTIONS" = "x" ] ; then |
287 | AUTOMAKE_OPTIONS="-a -c -f" |
288 | fi |
289 | ALT_AUTOMAKE_OPTIONS="-a -c" |
290 | if [ "x$LIBTOOLIZE_OPTIONS" = "x" ] ; then |
291 | LIBTOOLIZE_OPTIONS="--automake -c -f" |
292 | fi |
293 | ALT_LIBTOOLIZE_OPTIONS="--automake --copy --force" |
294 | if [ "x$ACLOCAL_OPTIONS" = "x" ] ; then |
295 | ACLOCAL_OPTIONS="" |
296 | fi |
297 | if [ "x$AUTOHEADER_OPTIONS" = "x" ] ; then |
298 | AUTOHEADER_OPTIONS="" |
299 | fi |
300 | if [ "x$CONFIG_GUESS_URL" = "x" ] ; then |
301 | CONFIG_GUESS_URL="http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=build-aux/config.guess;hb=HEAD" |
302 | fi |
303 | for arg in $ARGS ; do |
304 | case "x$arg" in |
305 | x--help) HELP=yes ;; |
306 | x-[hH]) HELP=yes ;; |
307 | x--quiet) QUIET=yes ;; |
308 | x-[qQ]) QUIET=yes ;; |
309 | x--verbose) VERBOSE=yes ;; |
310 | x-[dD]) DOWNLOAD=yes ;; |
311 | x--download) DOWNLOAD=yes ;; |
312 | x-[vV]) VERBOSE=yes ;; |
313 | x--version) VERSION_ONLY=yes ;; |
314 | *) |
315 | echo "Unknown option: $arg" |
316 | echo |
317 | usage |
318 | exit 1 |
319 | ;; |
320 | esac |
321 | done |
322 | |
323 | |
324 | ##################### |
325 | # environment check # |
326 | ##################### |
327 | |
328 | # sanity check before recursions potentially begin |
329 | if [ ! -f "$AUTOGEN_SH" ] ; then |
330 | echo "INTERNAL ERROR: $AUTOGEN_SH does not exist" |
331 | if [ ! "x$0" = "x$AUTOGEN_SH" ] ; then |
332 | echo "INTERNAL ERROR: dirname/basename inconsistency: $0 != $AUTOGEN_SH" |
333 | fi |
334 | exit 1 |
335 | fi |
336 | |
337 | # force locale setting to C so things like date output as expected |
338 | LC_ALL=C |
339 | |
340 | # commands that this script expects |
341 | for __cmd in echo head tail pwd ; do |
342 | echo "test" | $__cmd > /dev/null 2>&1 |
343 | if [ $? != 0 ] ; then |
344 | echo "INTERNAL ERROR: '${__cmd}' command is required" |
345 | exit 2 |
346 | fi |
347 | done |
348 | echo "test" | grep "test" > /dev/null 2>&1 |
349 | if test ! x$? = x0 ; then |
350 | echo "INTERNAL ERROR: grep command is required" |
351 | exit 1 |
352 | fi |
353 | echo "test" | sed "s/test/test/" > /dev/null 2>&1 |
354 | if test ! x$? = x0 ; then |
355 | echo "INTERNAL ERROR: sed command is required" |
356 | exit 1 |
357 | fi |
358 | |
359 | |
360 | # determine the behavior of echo |
361 | case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in |
362 | *c*,-n*) ECHO_N= ECHO_C=' |
363 | ' ECHO_T=' ' ;; |
364 | *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; |
365 | *) ECHO_N= ECHO_C='\c' ECHO_T= ;; |
366 | esac |
367 | |
368 | # determine the behavior of head |
369 | case "x`echo 'head' | head -n 1 2>&1`" in |
370 | *xhead*) HEAD_N="n " ;; |
371 | *) HEAD_N="" ;; |
372 | esac |
373 | |
374 | # determine the behavior of tail |
375 | case "x`echo 'tail' | tail -n 1 2>&1`" in |
376 | *xtail*) TAIL_N="n " ;; |
377 | *) TAIL_N="" ;; |
378 | esac |
379 | |
380 | VERBOSE_ECHO=: |
381 | ECHO=: |
382 | if [ "x$QUIET" = "xyes" ] ; then |
383 | if [ "x$VERBOSE" = "xyes" ] ; then |
384 | echo "Verbose output quelled by quiet option. Further output disabled." |
385 | fi |
386 | else |
387 | ECHO=echo |
388 | if [ "x$VERBOSE" = "xyes" ] ; then |
389 | echo "Verbose output enabled" |
390 | VERBOSE_ECHO=echo |
391 | fi |
392 | fi |
393 | |
394 | |
395 | # allow a recursive run to disable further recursions |
396 | if [ "x$RUN_RECURSIVE" = "x" ] ; then |
397 | RUN_RECURSIVE=yes |
398 | fi |
399 | |
400 | |
401 | ################################################ |
402 | # check for help arg and bypass version checks # |
403 | ################################################ |
404 | if [ "x`echo $ARGS | sed 's/.*[hH][eE][lL][pP].*/help/'`" = "xhelp" ] ; then |
405 | HELP=yes |
406 | fi |
407 | if [ "x$HELP" = "xyes" ] ; then |
408 | usage |
409 | $ECHO "---" |
410 | $ECHO "Help was requested. No preparation or configuration will be performed." |
411 | exit 0 |
412 | fi |
413 | |
414 | |
415 | ####################### |
416 | # set up signal traps # |
417 | ####################### |
418 | untrap_abnormal ( ) { |
419 | for sig in 1 2 13 15; do |
420 | trap - $sig |
421 | done |
422 | } |
423 | |
424 | # do this cleanup whenever we exit. |
425 | trap ' |
426 | # start from the root |
427 | if test -d "$START_PATH" ; then |
428 | cd "$START_PATH" |
429 | fi |
430 | |
431 | # restore/delete backup files |
432 | if test "x$PFC_INIT" = "x1" ; then |
433 | recursive_restore |
434 | fi |
435 | ' 0 |
436 | |
437 | # trap SIGHUP (1), SIGINT (2), SIGPIPE (13), SIGTERM (15) |
438 | for sig in 1 2 13 15; do |
439 | trap ' |
440 | $ECHO "" |
441 | $ECHO "Aborting $NAME_OF_AUTOGEN: caught signal '$sig'" |
442 | |
443 | # start from the root |
444 | if test -d "$START_PATH" ; then |
445 | cd "$START_PATH" |
446 | fi |
447 | |
448 | # clean up on abnormal exit |
449 | $VERBOSE_ECHO "rm -rf autom4te.cache" |
450 | rm -rf autom4te.cache |
451 | |
452 | if test -f "acinclude.m4.$$.backup" ; then |
453 | $VERBOSE_ECHO "cat acinclude.m4.$$.backup > acinclude.m4" |
454 | chmod u+w acinclude.m4 |
455 | cat acinclude.m4.$$.backup > acinclude.m4 |
456 | |
457 | $VERBOSE_ECHO "rm -f acinclude.m4.$$.backup" |
458 | rm -f acinclude.m4.$$.backup |
459 | fi |
460 | |
461 | { (exit 1); exit 1; } |
462 | ' $sig |
463 | done |
464 | |
465 | |
466 | ############################# |
467 | # look for a configure file # |
468 | ############################# |
469 | if [ "x$CONFIGURE" = "x" ] ; then |
470 | CONFIGURE="`locate_configure_template`" |
471 | if [ ! "x$CONFIGURE" = "x" ] ; then |
472 | $VERBOSE_ECHO "Found a configure template: $CONFIGURE" |
473 | fi |
474 | else |
475 | $ECHO "Using CONFIGURE environment variable override: $CONFIGURE" |
476 | fi |
477 | if [ "x$CONFIGURE" = "x" ] ; then |
478 | if [ "x$VERSION_ONLY" = "xyes" ] ; then |
479 | CONFIGURE=/dev/null |
480 | else |
481 | $ECHO |
482 | $ECHO "A configure.ac or configure.in file could not be located implying" |
483 | $ECHO "that the GNU Build System is at least not used in this directory. In" |
484 | $ECHO "any case, there is nothing to do here without one of those files." |
485 | $ECHO |
486 | $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`" |
487 | exit 1 |
488 | fi |
489 | fi |
490 | |
491 | #################### |
492 | # get project name # |
493 | #################### |
494 | if [ "x$PROJECT" = "x" ] ; then |
495 | PROJECT="`grep AC_INIT $CONFIGURE | grep -v '.*#.*AC_INIT' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_INIT(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
496 | if [ "x$PROJECT" = "xAC_INIT" ] ; then |
497 | # projects might be using the older/deprecated arg-less AC_INIT .. look for AM_INIT_AUTOMAKE instead |
498 | PROJECT="`grep AM_INIT_AUTOMAKE $CONFIGURE | grep -v '.*#.*AM_INIT_AUTOMAKE' | tail -${TAIL_N}1 | sed 's/^[ ]*AM_INIT_AUTOMAKE(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
499 | fi |
500 | if [ "x$PROJECT" = "xAM_INIT_AUTOMAKE" ] ; then |
501 | PROJECT="project" |
502 | fi |
503 | if [ "x$PROJECT" = "x" ] ; then |
504 | PROJECT="project" |
505 | fi |
506 | else |
507 | $ECHO "Using PROJECT environment variable override: $PROJECT" |
508 | fi |
509 | $ECHO "Preparing the $PROJECT build system...please wait" |
510 | $ECHO |
511 | |
512 | |
513 | ######################## |
514 | # check for autoreconf # |
515 | ######################## |
516 | HAVE_AUTORECONF=no |
517 | if [ "x$AUTORECONF" = "x" ] ; then |
518 | for AUTORECONF in autoreconf ; do |
519 | $VERBOSE_ECHO "Checking autoreconf version: $AUTORECONF --version" |
520 | $AUTORECONF --version > /dev/null 2>&1 |
521 | if [ $? = 0 ] ; then |
522 | HAVE_AUTORECONF=yes |
523 | break |
524 | fi |
525 | done |
526 | else |
527 | HAVE_AUTORECONF=yes |
528 | $ECHO "Using AUTORECONF environment variable override: $AUTORECONF" |
529 | fi |
530 | |
531 | |
532 | ########################## |
533 | # autoconf version check # |
534 | ########################## |
535 | _acfound=no |
536 | if [ "x$AUTOCONF" = "x" ] ; then |
537 | for AUTOCONF in autoconf ; do |
538 | $VERBOSE_ECHO "Checking autoconf version: $AUTOCONF --version" |
539 | $AUTOCONF --version > /dev/null 2>&1 |
540 | if [ $? = 0 ] ; then |
541 | _acfound=yes |
542 | break |
543 | fi |
544 | done |
545 | else |
546 | _acfound=yes |
547 | $ECHO "Using AUTOCONF environment variable override: $AUTOCONF" |
548 | fi |
549 | |
550 | _report_error=no |
551 | if [ ! "x$_acfound" = "xyes" ] ; then |
552 | $ECHO "ERROR: Unable to locate GNU Autoconf." |
553 | _report_error=yes |
554 | else |
555 | _version="`$AUTOCONF --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" |
556 | if [ "x$_version" = "x" ] ; then |
557 | _version="0.0.0" |
558 | fi |
559 | $ECHO "Found GNU Autoconf version $_version" |
560 | version_check "$AUTOCONF_VERSION" "$_version" |
561 | if [ $? -ne 0 ] ; then |
562 | _report_error=yes |
563 | fi |
564 | fi |
565 | if [ "x$_report_error" = "xyes" ] ; then |
566 | version_error "$AUTOCONF_VERSION" "GNU Autoconf" |
567 | exit 1 |
568 | fi |
569 | |
570 | |
571 | ########################## |
572 | # automake version check # |
573 | ########################## |
574 | _amfound=no |
575 | if [ "x$AUTOMAKE" = "x" ] ; then |
576 | for AUTOMAKE in automake ; do |
577 | $VERBOSE_ECHO "Checking automake version: $AUTOMAKE --version" |
578 | $AUTOMAKE --version > /dev/null 2>&1 |
579 | if [ $? = 0 ] ; then |
580 | _amfound=yes |
581 | break |
582 | fi |
583 | done |
584 | else |
585 | _amfound=yes |
586 | $ECHO "Using AUTOMAKE environment variable override: $AUTOMAKE" |
587 | fi |
588 | |
589 | |
590 | _report_error=no |
591 | if [ ! "x$_amfound" = "xyes" ] ; then |
592 | $ECHO |
593 | $ECHO "ERROR: Unable to locate GNU Automake." |
594 | _report_error=yes |
595 | else |
596 | _version="`$AUTOMAKE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" |
597 | if [ "x$_version" = "x" ] ; then |
598 | _version="0.0.0" |
599 | fi |
600 | $ECHO "Found GNU Automake version $_version" |
601 | version_check "$AUTOMAKE_VERSION" "$_version" |
602 | if [ $? -ne 0 ] ; then |
603 | _report_error=yes |
604 | fi |
605 | fi |
606 | if [ "x$_report_error" = "xyes" ] ; then |
607 | version_error "$AUTOMAKE_VERSION" "GNU Automake" |
608 | exit 1 |
609 | fi |
610 | |
611 | |
612 | ######################## |
613 | # check for libtoolize # |
614 | ######################## |
615 | HAVE_LIBTOOLIZE=yes |
616 | HAVE_ALT_LIBTOOLIZE=no |
617 | _ltfound=no |
618 | if [ "x$LIBTOOLIZE" = "x" ] ; then |
619 | LIBTOOLIZE=libtoolize |
620 | $VERBOSE_ECHO "Checking libtoolize version: $LIBTOOLIZE --version" |
621 | $LIBTOOLIZE --version > /dev/null 2>&1 |
622 | if [ ! $? = 0 ] ; then |
623 | HAVE_LIBTOOLIZE=no |
624 | $ECHO |
625 | if [ "x$HAVE_AUTORECONF" = "xno" ] ; then |
626 | $ECHO "Warning: libtoolize does not appear to be available." |
627 | else |
628 | $ECHO "Warning: libtoolize does not appear to be available. This means that" |
629 | $ECHO "the automatic build preparation via autoreconf will probably not work." |
630 | $ECHO "Preparing the build by running each step individually, however, should" |
631 | $ECHO "work and will be done automatically for you if autoreconf fails." |
632 | fi |
633 | |
634 | # look for some alternates |
635 | for tool in glibtoolize libtoolize15 libtoolize14 libtoolize13 ; do |
636 | $VERBOSE_ECHO "Checking libtoolize alternate: $tool --version" |
637 | _glibtoolize="`$tool --version > /dev/null 2>&1`" |
638 | if [ $? = 0 ] ; then |
639 | $VERBOSE_ECHO "Found $tool --version" |
640 | _glti="`which $tool`" |
641 | if [ "x$_glti" = "x" ] ; then |
642 | $VERBOSE_ECHO "Cannot find $tool with which" |
643 | continue; |
644 | fi |
645 | if test ! -f "$_glti" ; then |
646 | $VERBOSE_ECHO "Cannot use $tool, $_glti is not a file" |
647 | continue; |
648 | fi |
649 | _gltidir="`dirname $_glti`" |
650 | if [ "x$_gltidir" = "x" ] ; then |
651 | $VERBOSE_ECHO "Cannot find $tool path with dirname of $_glti" |
652 | continue; |
653 | fi |
654 | if test ! -d "$_gltidir" ; then |
655 | $VERBOSE_ECHO "Cannot use $tool, $_gltidir is not a directory" |
656 | continue; |
657 | fi |
658 | HAVE_ALT_LIBTOOLIZE=yes |
659 | LIBTOOLIZE="$tool" |
660 | $ECHO |
661 | $ECHO "Fortunately, $tool was found which means that your system may simply" |
662 | $ECHO "have a non-standard or incomplete GNU Autotools install. If you have" |
663 | $ECHO "sufficient system access, it may be possible to quell this warning by" |
664 | $ECHO "running:" |
665 | $ECHO |
666 | sudo -V > /dev/null 2>&1 |
667 | if [ $? = 0 ] ; then |
668 | $ECHO " sudo ln -s $_glti $_gltidir/libtoolize" |
669 | $ECHO |
670 | else |
671 | $ECHO " ln -s $_glti $_gltidir/libtoolize" |
672 | $ECHO |
673 | $ECHO "Run that as root or with proper permissions to the $_gltidir directory" |
674 | $ECHO |
675 | fi |
676 | _ltfound=yes |
677 | break |
678 | fi |
679 | done |
680 | else |
681 | _ltfound=yes |
682 | fi |
683 | else |
684 | _ltfound=yes |
685 | $ECHO "Using LIBTOOLIZE environment variable override: $LIBTOOLIZE" |
686 | fi |
687 | |
688 | |
689 | ############################ |
690 | # libtoolize version check # |
691 | ############################ |
692 | _report_error=no |
693 | if [ ! "x$_ltfound" = "xyes" ] ; then |
694 | $ECHO |
695 | $ECHO "ERROR: Unable to locate GNU Libtool." |
696 | _report_error=yes |
697 | else |
698 | _version="`$LIBTOOLIZE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" |
699 | if [ "x$_version" = "x" ] ; then |
700 | _version="0.0.0" |
701 | fi |
702 | $ECHO "Found GNU Libtool version $_version" |
703 | version_check "$LIBTOOL_VERSION" "$_version" |
704 | if [ $? -ne 0 ] ; then |
705 | _report_error=yes |
706 | fi |
707 | fi |
708 | if [ "x$_report_error" = "xyes" ] ; then |
709 | version_error "$LIBTOOL_VERSION" "GNU Libtool" |
710 | exit 1 |
711 | fi |
712 | |
713 | |
714 | ##################### |
715 | # check for aclocal # |
716 | ##################### |
717 | if [ "x$ACLOCAL" = "x" ] ; then |
718 | for ACLOCAL in aclocal ; do |
719 | $VERBOSE_ECHO "Checking aclocal version: $ACLOCAL --version" |
720 | $ACLOCAL --version > /dev/null 2>&1 |
721 | if [ $? = 0 ] ; then |
722 | break |
723 | fi |
724 | done |
725 | else |
726 | $ECHO "Using ACLOCAL environment variable override: $ACLOCAL" |
727 | fi |
728 | |
729 | |
730 | ######################## |
731 | # check for autoheader # |
732 | ######################## |
733 | if [ "x$AUTOHEADER" = "x" ] ; then |
734 | for AUTOHEADER in autoheader ; do |
735 | $VERBOSE_ECHO "Checking autoheader version: $AUTOHEADER --version" |
736 | $AUTOHEADER --version > /dev/null 2>&1 |
737 | if [ $? = 0 ] ; then |
738 | break |
739 | fi |
740 | done |
741 | else |
742 | $ECHO "Using AUTOHEADER environment variable override: $AUTOHEADER" |
743 | fi |
744 | |
745 | |
746 | ######################### |
747 | # check if version only # |
748 | ######################### |
749 | $VERBOSE_ECHO "Checking whether to only output version information" |
750 | if [ "x$VERSION_ONLY" = "xyes" ] ; then |
751 | $ECHO |
752 | ident |
753 | $ECHO "---" |
754 | $ECHO "Version requested. No preparation or configuration will be performed." |
755 | exit 0 |
756 | fi |
757 | |
758 | |
759 | ################################# |
760 | # PROTECT_FROM_CLOBBER FUNCTION # |
761 | ################################# |
762 | protect_from_clobber ( ) { |
763 | PFC_INIT=1 |
764 | |
765 | # protect COPYING & INSTALL from overwrite by automake. the |
766 | # automake force option will (inappropriately) ignore the existing |
767 | # contents of a COPYING and/or INSTALL files (depending on the |
768 | # version) instead of just forcing *missing* files like it does |
769 | # for AUTHORS, NEWS, and README. this is broken but extremely |
770 | # prevalent behavior, so we protect against it by keeping a backup |
771 | # of the file that can later be restored. |
772 | |
773 | for file in COPYING INSTALL ; do |
774 | if test -f ${file} ; then |
775 | if test -f ${file}.$$.protect_from_automake.backup ; then |
776 | $VERBOSE_ECHO "Already backed up ${file} in `pwd`" |
777 | else |
778 | $VERBOSE_ECHO "Backing up ${file} in `pwd`" |
779 | $VERBOSE_ECHO "cp -p ${file} ${file}.$$.protect_from_automake.backup" |
780 | cp -p ${file} ${file}.$$.protect_from_automake.backup |
781 | fi |
782 | fi |
783 | done |
784 | } |
785 | |
786 | |
787 | ############################## |
788 | # RECURSIVE_PROTECT FUNCTION # |
789 | ############################## |
790 | recursive_protect ( ) { |
791 | |
792 | # for projects using recursive configure, run the build |
793 | # preparation steps for the subdirectories. this function assumes |
794 | # START_PATH was set to pwd before recursion begins so that |
795 | # relative paths work. |
796 | |
797 | # git 'r done, protect COPYING and INSTALL from being clobbered |
798 | protect_from_clobber |
799 | |
800 | if test -d autom4te.cache ; then |
801 | $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it" |
802 | $VERBOSE_ECHO "rm -rf autom4te.cache" |
803 | rm -rf autom4te.cache |
804 | fi |
805 | |
806 | # find configure template |
807 | _configure="`locate_configure_template`" |
808 | if [ "x$_configure" = "x" ] ; then |
809 | return |
810 | fi |
811 | # $VERBOSE_ECHO "Looking for configure template found `pwd`/$_configure" |
812 | |
813 | # look for subdirs |
814 | # $VERBOSE_ECHO "Looking for subdirs in `pwd`" |
815 | _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
816 | CHECK_DIRS="" |
817 | for dir in $_det_config_subdirs ; do |
818 | if test -d "`pwd`/$dir" ; then |
819 | CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\"" |
820 | fi |
821 | done |
822 | |
823 | # process subdirs |
824 | if [ ! "x$CHECK_DIRS" = "x" ] ; then |
825 | $VERBOSE_ECHO "Recursively scanning the following directories:" |
826 | $VERBOSE_ECHO " $CHECK_DIRS" |
827 | for dir in $CHECK_DIRS ; do |
828 | $VERBOSE_ECHO "Protecting files from automake in $dir" |
829 | cd "$START_PATH" |
830 | eval "cd $dir" |
831 | |
832 | # recursively git 'r done |
833 | recursive_protect |
834 | done |
835 | fi |
836 | } # end of recursive_protect |
837 | |
838 | |
839 | ############################# |
840 | # RESTORE_CLOBBERED FUNCION # |
841 | ############################# |
842 | restore_clobbered ( ) { |
843 | |
844 | # The automake (and autoreconf by extension) -f/--force-missing |
845 | # option may overwrite COPYING and INSTALL even if they do exist. |
846 | # Here we restore the files if necessary. |
847 | |
848 | spacer=no |
849 | |
850 | for file in COPYING INSTALL ; do |
851 | if test -f ${file}.$$.protect_from_automake.backup ; then |
852 | if test -f ${file} ; then |
853 | # compare entire content, restore if needed |
854 | if test "x`cat ${file}`" != "x`cat ${file}.$$.protect_from_automake.backup`" ; then |
855 | if test "x$spacer" = "xno" ; then |
856 | $VERBOSE_ECHO |
857 | spacer=yes |
858 | fi |
859 | # restore the backup |
860 | $VERBOSE_ECHO "Restoring ${file} from backup (automake -f likely clobbered it)" |
861 | $VERBOSE_ECHO "rm -f ${file}" |
862 | rm -f ${file} |
863 | $VERBOSE_ECHO "mv ${file}.$$.protect_from_automake.backup ${file}" |
864 | mv ${file}.$$.protect_from_automake.backup ${file} |
865 | fi # check contents |
866 | elif test -f ${file}.$$.protect_from_automake.backup ; then |
867 | $VERBOSE_ECHO "mv ${file}.$$.protect_from_automake.backup ${file}" |
868 | mv ${file}.$$.protect_from_automake.backup ${file} |
869 | fi # -f ${file} |
870 | |
871 | # just in case |
872 | $VERBOSE_ECHO "rm -f ${file}.$$.protect_from_automake.backup" |
873 | rm -f ${file}.$$.protect_from_automake.backup |
874 | fi # -f ${file}.$$.protect_from_automake.backup |
875 | done |
876 | |
877 | CONFIGURE="`locate_configure_template`" |
878 | if [ "x$CONFIGURE" = "x" ] ; then |
879 | return |
880 | fi |
881 | |
882 | _aux_dir="`grep AC_CONFIG_AUX_DIR $CONFIGURE | grep -v '.*#.*AC_CONFIG_AUX_DIR' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_CONFIG_AUX_DIR(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
883 | if test ! -d "$_aux_dir" ; then |
884 | _aux_dir=. |
885 | fi |
886 | |
887 | for file in config.guess config.sub ltmain.sh ; do |
888 | if test -f "${_aux_dir}/${file}" ; then |
889 | $VERBOSE_ECHO "rm -f \"${_aux_dir}/${file}.backup\"" |
890 | rm -f "${_aux_dir}/${file}.backup" |
891 | fi |
892 | done |
893 | } # end of restore_clobbered |
894 | |
895 | |
896 | ############################## |
897 | # RECURSIVE_RESTORE FUNCTION # |
898 | ############################## |
899 | recursive_restore ( ) { |
900 | |
901 | # restore COPYING and INSTALL from backup if they were clobbered |
902 | # for each directory recursively. |
903 | |
904 | # git 'r undone |
905 | restore_clobbered |
906 | |
907 | # find configure template |
908 | _configure="`locate_configure_template`" |
909 | if [ "x$_configure" = "x" ] ; then |
910 | return |
911 | fi |
912 | |
913 | # look for subdirs |
914 | _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
915 | CHECK_DIRS="" |
916 | for dir in $_det_config_subdirs ; do |
917 | if test -d "`pwd`/$dir" ; then |
918 | CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\"" |
919 | fi |
920 | done |
921 | |
922 | # process subdirs |
923 | if [ ! "x$CHECK_DIRS" = "x" ] ; then |
924 | $VERBOSE_ECHO "Recursively scanning the following directories:" |
925 | $VERBOSE_ECHO " $CHECK_DIRS" |
926 | for dir in $CHECK_DIRS ; do |
927 | $VERBOSE_ECHO "Checking files for automake damage in $dir" |
928 | cd "$START_PATH" |
929 | eval "cd $dir" |
930 | |
931 | # recursively git 'r undone |
932 | recursive_restore |
933 | done |
934 | fi |
935 | } # end of recursive_restore |
936 | |
937 | |
938 | ####################### |
939 | # INITIALIZE FUNCTION # |
940 | ####################### |
941 | initialize ( ) { |
942 | |
943 | # this routine performs a variety of directory-specific |
944 | # initializations. some are sanity checks, some are preventive, |
945 | # and some are necessary setup detection. |
946 | # |
947 | # this function sets: |
948 | # CONFIGURE |
949 | # SEARCH_DIRS |
950 | # CONFIG_SUBDIRS |
951 | |
952 | ################################## |
953 | # check for a configure template # |
954 | ################################## |
955 | CONFIGURE="`locate_configure_template`" |
956 | if [ "x$CONFIGURE" = "x" ] ; then |
957 | $ECHO |
958 | $ECHO "A configure.ac or configure.in file could not be located implying" |
959 | $ECHO "that the GNU Build System is at least not used in this directory. In" |
960 | $ECHO "any case, there is nothing to do here without one of those files." |
961 | $ECHO |
962 | $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`" |
963 | exit 1 |
964 | fi |
965 | |
966 | ##################### |
967 | # detect an aux dir # |
968 | ##################### |
969 | _aux_dir="`grep AC_CONFIG_AUX_DIR $CONFIGURE | grep -v '.*#.*AC_CONFIG_AUX_DIR' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_CONFIG_AUX_DIR(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
970 | if test ! -d "$_aux_dir" ; then |
971 | _aux_dir=. |
972 | else |
973 | $VERBOSE_ECHO "Detected auxillary directory: $_aux_dir" |
974 | fi |
975 | |
976 | ################################ |
977 | # detect a recursive configure # |
978 | ################################ |
979 | CONFIG_SUBDIRS="" |
980 | _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $CONFIGURE | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
981 | for dir in $_det_config_subdirs ; do |
982 | if test -d "`pwd`/$dir" ; then |
983 | $VERBOSE_ECHO "Detected recursive configure directory: `pwd`/$dir" |
984 | CONFIG_SUBDIRS="$CONFIG_SUBDIRS `pwd`/$dir" |
985 | fi |
986 | done |
987 | |
988 | ########################################################### |
989 | # make sure certain required files exist for GNU projects # |
990 | ########################################################### |
991 | _marker_found="" |
992 | _marker_found_message_intro='Detected non-GNU marker "' |
993 | _marker_found_message_mid='" in ' |
994 | for marker in foreign cygnus ; do |
995 | _marker_found_message=${_marker_found_message_intro}${marker}${_marker_found_message_mid} |
996 | _marker_found="`grep 'AM_INIT_AUTOMAKE.*'${marker} $CONFIGURE`" |
997 | if [ ! "x$_marker_found" = "x" ] ; then |
998 | $VERBOSE_ECHO "${_marker_found_message}`basename \"$CONFIGURE\"`" |
999 | break |
1000 | fi |
1001 | if test -f "`dirname \"$CONFIGURE\"/Makefile.am`" ; then |
1002 | _marker_found="`grep 'AUTOMAKE_OPTIONS.*'${marker} Makefile.am`" |
1003 | if [ ! "x$_marker_found" = "x" ] ; then |
1004 | $VERBOSE_ECHO "${_marker_found_message}Makefile.am" |
1005 | break |
1006 | fi |
1007 | fi |
1008 | done |
1009 | if [ "x${_marker_found}" = "x" ] ; then |
1010 | _suggest_foreign=no |
1011 | for file in AUTHORS COPYING ChangeLog INSTALL NEWS README ; do |
1012 | if [ ! -f $file ] ; then |
1013 | $VERBOSE_ECHO "Touching ${file} since it does not exist" |
1014 | _suggest_foreign=yes |
1015 | touch $file |
1016 | fi |
1017 | done |
1018 | |
1019 | if [ "x${_suggest_foreign}" = "xyes" ] ; then |
1020 | $ECHO |
1021 | $ECHO "Warning: Several files expected of projects that conform to the GNU" |
1022 | $ECHO "coding standards were not found. The files were automatically added" |
1023 | $ECHO "for you since you do not have a 'foreign' declaration specified." |
1024 | $ECHO |
1025 | $ECHO "Considered adding 'foreign' to AM_INIT_AUTOMAKE in `basename \"$CONFIGURE\"`" |
1026 | if test -f "`dirname \"$CONFIGURE\"/Makefile.am`" ; then |
1027 | $ECHO "or to AUTOMAKE_OPTIONS in your top-level Makefile.am file." |
1028 | fi |
1029 | $ECHO |
1030 | fi |
1031 | fi |
1032 | |
1033 | ################################################## |
1034 | # make sure certain generated files do not exist # |
1035 | ################################################## |
1036 | for file in config.guess config.sub ltmain.sh ; do |
1037 | if test -f "${_aux_dir}/${file}" ; then |
1038 | $VERBOSE_ECHO "mv -f \"${_aux_dir}/${file}\" \"${_aux_dir}/${file}.backup\"" |
1039 | mv -f "${_aux_dir}/${file}" "${_aux_dir}/${file}.backup" |
1040 | fi |
1041 | done |
1042 | |
1043 | ############################ |
1044 | # search alternate m4 dirs # |
1045 | ############################ |
1046 | SEARCH_DIRS="" |
1047 | for dir in m4 ; do |
1048 | if [ -d $dir ] ; then |
1049 | $VERBOSE_ECHO "Found extra aclocal search directory: $dir" |
1050 | SEARCH_DIRS="$SEARCH_DIRS -I $dir" |
1051 | fi |
1052 | done |
1053 | |
1054 | ###################################### |
1055 | # remove any previous build products # |
1056 | ###################################### |
1057 | if test -d autom4te.cache ; then |
1058 | $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it" |
1059 | $VERBOSE_ECHO "rm -rf autom4te.cache" |
1060 | rm -rf autom4te.cache |
1061 | fi |
1062 | # tcl/tk (and probably others) have a customized aclocal.m4, so can't delete it |
1063 | # if test -f aclocal.m4 ; then |
1064 | # $VERBOSE_ECHO "Found an aclocal.m4 file, deleting it" |
1065 | # $VERBOSE_ECHO "rm -f aclocal.m4" |
1066 | # rm -f aclocal.m4 |
1067 | # fi |
1068 | |
1069 | } # end of initialize() |
1070 | |
1071 | |
1072 | ############## |
1073 | # initialize # |
1074 | ############## |
1075 | |
1076 | # stash path |
1077 | START_PATH="`pwd`" |
1078 | |
1079 | # Before running autoreconf or manual steps, some prep detection work |
1080 | # is necessary or useful. Only needs to occur once per directory, but |
1081 | # does need to traverse the entire subconfigure hierarchy to protect |
1082 | # files from being clobbered even by autoreconf. |
1083 | recursive_protect |
1084 | |
1085 | # start from where we started |
1086 | cd "$START_PATH" |
1087 | |
1088 | # get ready to process |
1089 | initialize |
1090 | |
1091 | |
1092 | ######################################### |
1093 | # DOWNLOAD_GNULIB_CONFIG_GUESS FUNCTION # |
1094 | ######################################### |
1095 | |
1096 | # TODO - should make sure wget/curl exist and/or work before trying to |
1097 | # use them. |
1098 | |
1099 | download_gnulib_config_guess () { |
1100 | # abuse gitweb to download gnulib's latest config.guess via HTTP |
1101 | config_guess_temp="config.guess.$$.download" |
1102 | ret=1 |
1103 | for __cmd in wget curl fetch ; do |
1104 | $VERBOSE_ECHO "Checking for command ${__cmd}" |
1105 | ${__cmd} --version > /dev/null 2>&1 |
1106 | ret=$? |
1107 | if [ ! $ret = 0 ] ; then |
1108 | continue |
1109 | fi |
1110 | |
1111 | __cmd_version=`${__cmd} --version | head -n 1 | sed -e 's/^[^0-9]\+//' -e 's/ .*//'` |
1112 | $VERBOSE_ECHO "Found ${__cmd} ${__cmd_version}" |
1113 | |
1114 | opts="" |
1115 | case ${__cmd} in |
1116 | wget) |
1117 | opts="-O" |
1118 | ;; |
1119 | curl) |
1120 | opts="-o" |
1121 | ;; |
1122 | fetch) |
1123 | opts="-t 5 -f" |
1124 | ;; |
1125 | esac |
1126 | |
1127 | $VERBOSE_ECHO "Running $__cmd \"${CONFIG_GUESS_URL}\" $opts \"${config_guess_temp}\"" |
1128 | eval "$__cmd \"${CONFIG_GUESS_URL}\" $opts \"${config_guess_temp}\"" > /dev/null 2>&1 |
1129 | if [ $? = 0 ] ; then |
1130 | mv -f "${config_guess_temp}" ${_aux_dir}/config.guess |
1131 | ret=0 |
1132 | break |
1133 | fi |
1134 | done |
1135 | |
1136 | if [ ! $ret = 0 ] ; then |
1137 | $ECHO "Warning: config.guess download failed from: $CONFIG_GUESS_URL" |
1138 | rm -f "${config_guess_temp}" |
1139 | fi |
1140 | } |
1141 | |
1142 | |
1143 | ############################## |
1144 | # LIBTOOLIZE_NEEDED FUNCTION # |
1145 | ############################## |
1146 | libtoolize_needed () { |
1147 | ret=1 # means no, don't need libtoolize |
1148 | for feature in AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT ; do |
1149 | $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" |
1150 | found="`grep \"^$feature.*\" $CONFIGURE`" |
1151 | if [ ! "x$found" = "x" ] ; then |
1152 | ret=0 # means yes, need to run libtoolize |
1153 | break |
1154 | fi |
1155 | done |
1156 | return ${ret} |
1157 | } |
1158 | |
1159 | |
1160 | |
1161 | ############################################ |
1162 | # prepare build via autoreconf or manually # |
1163 | ############################################ |
1164 | reconfigure_manually=no |
1165 | if [ "x$HAVE_AUTORECONF" = "xyes" ] ; then |
1166 | $ECHO |
1167 | $ECHO $ECHO_N "Automatically preparing build ... $ECHO_C" |
1168 | |
1169 | $VERBOSE_ECHO "$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS" |
1170 | autoreconf_output="`$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS 2>&1`" |
1171 | ret=$? |
1172 | $VERBOSE_ECHO "$autoreconf_output" |
1173 | |
1174 | if [ ! $ret = 0 ] ; then |
1175 | if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then |
1176 | if [ ! "x`echo \"$autoreconf_output\" | grep libtoolize | grep \"No such file or directory\"`" = "x" ] ; then |
1177 | $ECHO |
1178 | $ECHO "Warning: autoreconf failed but due to what is usually a common libtool" |
1179 | $ECHO "misconfiguration issue. This problem is encountered on systems that" |
1180 | $ECHO "have installed libtoolize under a different name without providing a" |
1181 | $ECHO "symbolic link or without setting the LIBTOOLIZE environment variable." |
1182 | $ECHO |
1183 | $ECHO "Restarting the preparation steps with LIBTOOLIZE set to $LIBTOOLIZE" |
1184 | |
1185 | export LIBTOOLIZE |
1186 | RUN_RECURSIVE=no |
1187 | export RUN_RECURSIVE |
1188 | untrap_abnormal |
1189 | |
1190 | $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" |
1191 | sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" |
1192 | exit $? |
1193 | fi |
1194 | fi |
1195 | |
1196 | $ECHO "Warning: $AUTORECONF failed" |
1197 | |
1198 | if test -f ltmain.sh ; then |
1199 | $ECHO "libtoolize being run by autoreconf is not creating ltmain.sh in the auxillary directory like it should" |
1200 | fi |
1201 | |
1202 | $ECHO "Attempting to run the preparation steps individually" |
1203 | reconfigure_manually=yes |
1204 | else |
1205 | if [ "x$DOWNLOAD" = "xyes" ] ; then |
1206 | if libtoolize_needed ; then |
1207 | download_gnulib_config_guess |
1208 | fi |
1209 | fi |
1210 | fi |
1211 | else |
1212 | reconfigure_manually=yes |
1213 | fi |
1214 | |
1215 | |
1216 | ############################ |
1217 | # LIBTOOL_FAILURE FUNCTION # |
1218 | ############################ |
1219 | libtool_failure ( ) { |
1220 | |
1221 | # libtool is rather error-prone in comparison to the other |
1222 | # autotools and this routine attempts to compensate for some |
1223 | # common failures. the output after a libtoolize failure is |
1224 | # parsed for an error related to AC_PROG_LIBTOOL and if found, we |
1225 | # attempt to inject a project-provided libtool.m4 file. |
1226 | |
1227 | _autoconf_output="$1" |
1228 | |
1229 | if [ "x$RUN_RECURSIVE" = "xno" ] ; then |
1230 | # we already tried the libtool.m4, don't try again |
1231 | return 1 |
1232 | fi |
1233 | |
1234 | if test -f "$LIBTOOL_M4" ; then |
1235 | found_libtool="`$ECHO $_autoconf_output | grep AC_PROG_LIBTOOL`" |
1236 | if test ! "x$found_libtool" = "x" ; then |
1237 | if test -f acinclude.m4 ; then |
1238 | rm -f acinclude.m4.$$.backup |
1239 | $VERBOSE_ECHO "cat acinclude.m4 > acinclude.m4.$$.backup" |
1240 | cat acinclude.m4 > acinclude.m4.$$.backup |
1241 | fi |
1242 | $VERBOSE_ECHO "cat \"$LIBTOOL_M4\" >> acinclude.m4" |
1243 | chmod u+w acinclude.m4 |
1244 | cat "$LIBTOOL_M4" >> acinclude.m4 |
1245 | |
1246 | # don't keep doing this |
1247 | RUN_RECURSIVE=no |
1248 | export RUN_RECURSIVE |
1249 | untrap_abnormal |
1250 | |
1251 | $ECHO |
1252 | $ECHO "Restarting the preparation steps with libtool macros in acinclude.m4" |
1253 | $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" |
1254 | sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" |
1255 | exit $? |
1256 | fi |
1257 | fi |
1258 | } |
1259 | |
1260 | |
1261 | ########################### |
1262 | # MANUAL_AUTOGEN FUNCTION # |
1263 | ########################### |
1264 | manual_autogen ( ) { |
1265 | |
1266 | ################################################## |
1267 | # Manual preparation steps taken are as follows: # |
1268 | # aclocal [-I m4] # |
1269 | # libtoolize --automake -c -f # |
1270 | # aclocal [-I m4] # |
1271 | # autoconf -f # |
1272 | # autoheader # |
1273 | # automake -a -c -f # |
1274 | ################################################## |
1275 | |
1276 | ########### |
1277 | # aclocal # |
1278 | ########### |
1279 | $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS" |
1280 | aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`" |
1281 | ret=$? |
1282 | $VERBOSE_ECHO "$aclocal_output" |
1283 | if [ ! $ret = 0 ] ; then $ECHO "ERROR: $ACLOCAL failed" && exit 2 ; fi |
1284 | |
1285 | ############## |
1286 | # libtoolize # |
1287 | ############## |
1288 | if libtoolize_needed ; then |
1289 | if [ "x$HAVE_LIBTOOLIZE" = "xyes" ] ; then |
1290 | $VERBOSE_ECHO "$LIBTOOLIZE $LIBTOOLIZE_OPTIONS" |
1291 | libtoolize_output="`$LIBTOOLIZE $LIBTOOLIZE_OPTIONS 2>&1`" |
1292 | ret=$? |
1293 | $VERBOSE_ECHO "$libtoolize_output" |
1294 | |
1295 | if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi |
1296 | else |
1297 | if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then |
1298 | $VERBOSE_ECHO "$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS" |
1299 | libtoolize_output="`$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS 2>&1`" |
1300 | ret=$? |
1301 | $VERBOSE_ECHO "$libtoolize_output" |
1302 | |
1303 | if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi |
1304 | fi |
1305 | fi |
1306 | |
1307 | ########### |
1308 | # aclocal # |
1309 | ########### |
1310 | # re-run again as instructed by libtoolize |
1311 | $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS" |
1312 | aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`" |
1313 | ret=$? |
1314 | $VERBOSE_ECHO "$aclocal_output" |
1315 | |
1316 | # libtoolize might put ltmain.sh in the wrong place |
1317 | if test -f ltmain.sh ; then |
1318 | if test ! -f "${_aux_dir}/ltmain.sh" ; then |
1319 | $ECHO |
1320 | $ECHO "Warning: $LIBTOOLIZE is creating ltmain.sh in the wrong directory" |
1321 | $ECHO |
1322 | $ECHO "Fortunately, the problem can be worked around by simply copying the" |
1323 | $ECHO "file to the appropriate location (${_aux_dir}/). This has been done for you." |
1324 | $ECHO |
1325 | $VERBOSE_ECHO "cp -p ltmain.sh \"${_aux_dir}/ltmain.sh\"" |
1326 | cp -p ltmain.sh "${_aux_dir}/ltmain.sh" |
1327 | $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C" |
1328 | fi |
1329 | fi # ltmain.sh |
1330 | |
1331 | if [ "x$DOWNLOAD" = "xyes" ] ; then |
1332 | download_gnulib_config_guess |
1333 | fi |
1334 | fi # libtoolize_needed |
1335 | |
1336 | ############ |
1337 | # autoconf # |
1338 | ############ |
1339 | $VERBOSE_ECHO |
1340 | $VERBOSE_ECHO "$AUTOCONF $AUTOCONF_OPTIONS" |
1341 | autoconf_output="`$AUTOCONF $AUTOCONF_OPTIONS 2>&1`" |
1342 | ret=$? |
1343 | $VERBOSE_ECHO "$autoconf_output" |
1344 | |
1345 | if [ ! $ret = 0 ] ; then |
1346 | # retry without the -f and check for usage of macros that are too new |
1347 | ac2_59_macros="AC_C_RESTRICT AC_INCLUDES_DEFAULT AC_LANG_ASSERT AC_LANG_WERROR AS_SET_CATFILE" |
1348 | ac2_55_macros="AC_COMPILER_IFELSE AC_FUNC_MBRTOWC AC_HEADER_STDBOOL AC_LANG_CONFTEST AC_LANG_SOURCE AC_LANG_PROGRAM AC_LANG_CALL AC_LANG_FUNC_TRY_LINK AC_MSG_FAILURE AC_PREPROC_IFELSE" |
1349 | ac2_54_macros="AC_C_BACKSLASH_A AC_CONFIG_LIBOBJ_DIR AC_GNU_SOURCE AC_PROG_EGREP AC_PROG_FGREP AC_REPLACE_FNMATCH AC_FUNC_FNMATCH_GNU AC_FUNC_REALLOC AC_TYPE_MBSTATE_T" |
1350 | |
1351 | macros_to_search="" |
1352 | ac_major="`echo ${AUTOCONF_VERSION}. | cut -d. -f1 | sed 's/[^0-9]//g'`" |
1353 | ac_minor="`echo ${AUTOCONF_VERSION}. | cut -d. -f2 | sed 's/[^0-9]//g'`" |
1354 | |
1355 | if [ $ac_major -lt 2 ] ; then |
1356 | macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros" |
1357 | else |
1358 | if [ $ac_minor -lt 54 ] ; then |
1359 | macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros" |
1360 | elif [ $ac_minor -lt 55 ] ; then |
1361 | macros_to_search="$ac2_59_macros $ac2_55_macros" |
1362 | elif [ $ac_minor -lt 59 ] ; then |
1363 | macros_to_search="$ac2_59_macros" |
1364 | fi |
1365 | fi |
1366 | |
1367 | configure_ac_macros=__none__ |
1368 | for feature in $macros_to_search ; do |
1369 | $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" |
1370 | found="`grep \"^$feature.*\" $CONFIGURE`" |
1371 | if [ ! "x$found" = "x" ] ; then |
1372 | if [ "x$configure_ac_macros" = "x__none__" ] ; then |
1373 | configure_ac_macros="$feature" |
1374 | else |
1375 | configure_ac_macros="$feature $configure_ac_macros" |
1376 | fi |
1377 | fi |
1378 | done |
1379 | if [ ! "x$configure_ac_macros" = "x__none__" ] ; then |
1380 | $ECHO |
1381 | $ECHO "Warning: Unsupported macros were found in $CONFIGURE" |
1382 | $ECHO |
1383 | $ECHO "The `basename \"$CONFIGURE\"` file was scanned in order to determine if any" |
1384 | $ECHO "unsupported macros are used that exceed the minimum version" |
1385 | $ECHO "settings specified within this file. As such, the following macros" |
1386 | $ECHO "should be removed from configure.ac or the version numbers in this" |
1387 | $ECHO "file should be increased:" |
1388 | $ECHO |
1389 | $ECHO "$configure_ac_macros" |
1390 | $ECHO |
1391 | $ECHO $ECHO_N "Ignorantly continuing build preparation ... $ECHO_C" |
1392 | fi |
1393 | |
1394 | ################### |
1395 | # autoconf, retry # |
1396 | ################### |
1397 | $VERBOSE_ECHO |
1398 | $VERBOSE_ECHO "$AUTOCONF" |
1399 | autoconf_output="`$AUTOCONF 2>&1`" |
1400 | ret=$? |
1401 | $VERBOSE_ECHO "$autoconf_output" |
1402 | |
1403 | if [ ! $ret = 0 ] ; then |
1404 | # test if libtool is busted |
1405 | libtool_failure "$autoconf_output" |
1406 | |
1407 | # let the user know what went wrong |
1408 | cat <<EOF |
1409 | $autoconf_output |
1410 | EOF |
1411 | $ECHO "ERROR: $AUTOCONF failed" |
1412 | exit 2 |
1413 | else |
1414 | # autoconf sans -f and possibly sans unsupported options succeed so warn verbosely |
1415 | $ECHO |
1416 | $ECHO "Warning: autoconf seems to have succeeded by removing the following options:" |
1417 | $ECHO " AUTOCONF_OPTIONS=\"$AUTOCONF_OPTIONS\"" |
1418 | $ECHO |
1419 | $ECHO "Removing those options should not be necessary and indicate some other" |
1420 | $ECHO "problem with the build system. The build preparation is highly suspect" |
1421 | $ECHO "and may result in configuration or compilation errors. Consider" |
1422 | if [ "x$VERBOSE_ECHO" = "x:" ] ; then |
1423 | $ECHO "rerunning the build preparation with verbose output enabled." |
1424 | $ECHO " $AUTOGEN_SH --verbose" |
1425 | else |
1426 | $ECHO "reviewing the minimum GNU Autotools version settings contained in" |
1427 | $ECHO "this script along with the macros being used in your `basename \"$CONFIGURE\"` file." |
1428 | fi |
1429 | $ECHO |
1430 | $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C" |
1431 | fi # autoconf ret = 0 |
1432 | fi # autoconf ret = 0 |
1433 | |
1434 | ############## |
1435 | # autoheader # |
1436 | ############## |
1437 | need_autoheader=no |
1438 | for feature in AM_CONFIG_HEADER AC_CONFIG_HEADER ; do |
1439 | $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" |
1440 | found="`grep \"^$feature.*\" $CONFIGURE`" |
1441 | if [ ! "x$found" = "x" ] ; then |
1442 | need_autoheader=yes |
1443 | break |
1444 | fi |
1445 | done |
1446 | if [ "x$need_autoheader" = "xyes" ] ; then |
1447 | $VERBOSE_ECHO "$AUTOHEADER $AUTOHEADER_OPTIONS" |
1448 | autoheader_output="`$AUTOHEADER $AUTOHEADER_OPTIONS 2>&1`" |
1449 | ret=$? |
1450 | $VERBOSE_ECHO "$autoheader_output" |
1451 | if [ ! $ret = 0 ] ; then $ECHO "ERROR: $AUTOHEADER failed" && exit 2 ; fi |
1452 | fi # need_autoheader |
1453 | |
1454 | ############ |
1455 | # automake # |
1456 | ############ |
1457 | need_automake=no |
1458 | for feature in AM_INIT_AUTOMAKE ; do |
1459 | $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" |
1460 | found="`grep \"^$feature.*\" $CONFIGURE`" |
1461 | if [ ! "x$found" = "x" ] ; then |
1462 | need_automake=yes |
1463 | break |
1464 | fi |
1465 | done |
1466 | |
1467 | if [ "x$need_automake" = "xyes" ] ; then |
1468 | $VERBOSE_ECHO "$AUTOMAKE $AUTOMAKE_OPTIONS" |
1469 | automake_output="`$AUTOMAKE $AUTOMAKE_OPTIONS 2>&1`" |
1470 | ret=$? |
1471 | $VERBOSE_ECHO "$automake_output" |
1472 | |
1473 | if [ ! $ret = 0 ] ; then |
1474 | |
1475 | ################### |
1476 | # automake, retry # |
1477 | ################### |
1478 | $VERBOSE_ECHO |
1479 | $VERBOSE_ECHO "$AUTOMAKE $ALT_AUTOMAKE_OPTIONS" |
1480 | # retry without the -f |
1481 | automake_output="`$AUTOMAKE $ALT_AUTOMAKE_OPTIONS 2>&1`" |
1482 | ret=$? |
1483 | $VERBOSE_ECHO "$automake_output" |
1484 | |
1485 | if [ ! $ret = 0 ] ; then |
1486 | # test if libtool is busted |
1487 | libtool_failure "$automake_output" |
1488 | |
1489 | # let the user know what went wrong |
1490 | cat <<EOF |
1491 | $automake_output |
1492 | EOF |
1493 | $ECHO "ERROR: $AUTOMAKE failed" |
1494 | exit 2 |
1495 | fi # automake retry |
1496 | fi # automake ret = 0 |
1497 | fi # need_automake |
1498 | } # end of manual_autogen |
1499 | |
1500 | |
1501 | ##################################### |
1502 | # RECURSIVE_MANUAL_AUTOGEN FUNCTION # |
1503 | ##################################### |
1504 | recursive_manual_autogen ( ) { |
1505 | |
1506 | # run the build preparation steps manually for this directory |
1507 | manual_autogen |
1508 | |
1509 | # for projects using recursive configure, run the build |
1510 | # preparation steps for the subdirectories. |
1511 | if [ ! "x$CONFIG_SUBDIRS" = "x" ] ; then |
1512 | $VERBOSE_ECHO "Recursively configuring the following directories:" |
1513 | $VERBOSE_ECHO " $CONFIG_SUBDIRS" |
1514 | for dir in $CONFIG_SUBDIRS ; do |
1515 | $VERBOSE_ECHO "Processing recursive configure in $dir" |
1516 | cd "$START_PATH" |
1517 | cd "$dir" |
1518 | |
1519 | # new directory, prepare |
1520 | initialize |
1521 | |
1522 | # run manual steps for the subdir and any others below |
1523 | recursive_manual_autogen |
1524 | done |
1525 | fi |
1526 | } |
1527 | |
1528 | |
1529 | ################################ |
1530 | # run manual preparation steps # |
1531 | ################################ |
1532 | if [ "x$reconfigure_manually" = "xyes" ] ; then |
1533 | $ECHO |
1534 | $ECHO $ECHO_N "Preparing build ... $ECHO_C" |
1535 | |
1536 | recursive_manual_autogen |
1537 | fi |
1538 | |
1539 | |
1540 | ######################### |
1541 | # restore and summarize # |
1542 | ######################### |
1543 | cd "$START_PATH" |
1544 | |
1545 | # restore COPYING and INSTALL from backup if necessary |
1546 | recursive_restore |
1547 | |
1548 | # make sure we end up with a configure script |
1549 | config_ac="`locate_configure_template`" |
1550 | config="`echo $config_ac | sed 's/\.ac$//' | sed 's/\.in$//'`" |
1551 | if [ "x$config" = "x" ] ; then |
1552 | $VERBOSE_ECHO "Could not locate the configure template (from `pwd`)" |
1553 | fi |
1554 | |
1555 | # summarize |
1556 | $ECHO "done" |
1557 | $ECHO |
1558 | if test "x$config" = "x" -o ! -f "$config" ; then |
1559 | $ECHO "WARNING: The $PROJECT build system should now be prepared but there" |
1560 | $ECHO "does not seem to be a resulting configure file. This is unexpected" |
1561 | $ECHO "and likely the result of an error. You should run $NAME_OF_AUTOGEN" |
1562 | $ECHO "with the --verbose option to get more details on a potential" |
1563 | $ECHO "misconfiguration." |
1564 | else |
1565 | $ECHO "The $PROJECT build system is now prepared. To build here, run:" |
1566 | $ECHO " $config" |
1567 | $ECHO " make" |
1568 | fi |
1569 | |
1570 | |
1571 | # Local Variables: |
1572 | # mode: sh |
1573 | # tab-width: 8 |
1574 | # sh-basic-offset: 4 |
1575 | # sh-indentation: 4 |
1576 | # indent-tabs-mode: t |
1577 | # End: |
1578 | # ex: shiftwidth=4 tabstop=8 |
1579 |
Branches:
install_locations
master
opkrun
packages