From: David MacKenzie Date: Tue, 23 Aug 1994 20:24:36 +0000 (+0000) Subject: fix x, add history X-Git-Tag: fsf-origin~542 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5c63cb83ebec680a74fdae5f752a2a0ad729bb7;p=thirdparty%2Fautoconf.git fix x, add history --- diff --git a/TODO b/TODO index e111ed951..63a9b5f5d 100644 --- a/TODO +++ b/TODO @@ -18,8 +18,7 @@ Required for 2.0: ------------------------------------------------------------------------------ -* Fix AC_ARG_{ENABLE,WITH}, and AC_PATH_X*, and AC_REQUIRE - interrupting messages. +* Fix AC_ARG_{ENABLE,WITH}, and AC_REQUIRE interrupting messages. ------------------------------------------------------------------------------ @@ -39,6 +38,14 @@ functions (POSIX, NIS) that do everything necessary, instead. ------------------------------------------------------------------------------ +* Add a --indent option to autoconf to call shindent. + +------------------------------------------------------------------------------ + +* Doc: Add indexes of concepts, env vars. + +------------------------------------------------------------------------------ + * Supply a template Makefile.in that people can adapt (what GNU hello was going to be). diff --git a/acspecific.m4 b/acspecific.m4 index c6f347604..214a2c56b 100644 --- a/acspecific.m4 +++ b/acspecific.m4 @@ -1444,45 +1444,48 @@ fi dnl AC_DEFUN(AC_PATH_X, [AC_REQUIRE_CPP()dnl Set CPP; we run AC_PATH_X_DIRECT conditionally. -# If we find X, set shell vars x_includes and x_libraries to the paths. -no_x=yes -if test "x$with_x" != xno; then +# If we find X, set shell vars x_includes and x_libraries to the +# paths, otherwise set no_x=yes. +# Uses ac_ vars as temps to allow command line to override cache and checks. +# --without-x overrides everything else, but does not touch the cache. +AC_MSG_CHECKING(for X) -# Command line options override cache. -# FIXME We need to allow --x=includes= to work, I think. -test -n "$x_includes" && ac_cv_x_includes="$x_includes" -test -n "$x_libraries" && ac_cv_x_includes="$x_libraries" -if test "${ac_cv_x_includes+set}" = set && - test "${ac_cv_x_libraries+set}" = set; then - AC_VERBOSE(using cached values for ac_cv_x_includes and ac_cv_x_libraries) +if test "x$with_x" = xno; then + no_x=yes else + if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then + no_x= + else +AC_CACHE_VAL(ac_cv_path_x, +[# One or both of the vars are not set, and there is no cached value. +no_x=yes AC_PATH_X_XMKMF -fi -if test "${ac_cv_x_includes+set}" != set || - test "${ac_cv_x_libraries+set}" != set; then +if test "$no_x" = yes; then AC_PATH_X_DIRECT fi -test -z "$ac_cv_x_includes" && ac_cv_x_includes=NONE -test -z "$ac_cv_x_libraries" && ac_cv_x_libraries=NONE +if test "$no_x" = yes; then + ac_cv_path_x="no_x=yes" +else + ac_cv_path_x="no_x= ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" +fi])dnl + fi + eval "$ac_cv_path_x" +fi # $with_x != no -# FIXME can we reliably distinguish cache values that are set to empty -# from those that aren't set? -if test -z "$x_includes" && test "$ac_cv_x_includes" != NONE; then - x_includes="$ac_cv_x_includes" -fi -if test -z "$x_libraries" && test "$ac_cv_x_libraries" != NONE; then - x_libraries="$ac_cv_x_libraries" +if test "$no_x" = yes; then + AC_MSG_RESULT(no) +else + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + ac_cv_path_x="no_x= ac_x_includes=$x_includes ac_x_libraries=$x_libraries" + AC_MSG_RESULT([libraries $x_libraries, headers $x_includes]) fi - -test -n "$x_includes" && AC_VERBOSE(X11 headers are in $x_includes) -test -n "$x_libraries" && AC_VERBOSE(X11 libraries are in $x_libraries) -fi # No --with-x=no. ])dnl dnl dnl Internal subroutine of AC_PATH_X. +dnl Set ac_x_includes, ac_x_libraries, and no_x (initially yes). AC_DEFUN(AC_PATH_X_XMKMF, -[AC_CHECKING(for X include and library files with xmkmf) -rm -fr conftestdir +[rm -fr conftestdir if mkdir conftestdir; then cd conftestdir # Make sure to not put "make" in the Imakefile rules, since we grep it out. @@ -1501,11 +1504,11 @@ EOF fi case "$ac_im_incroot" in /usr/include) ;; - *) test -z "$ac_cv_x_includes" && ac_cv_x_includes="$ac_im_incroot" ;; + *) ac_x_includes="$ac_im_incroot" ;; esac case "$ac_im_usrlibdir" in /usr/lib | /lib) ;; - *) test -z "$ac_cv_x_libraries" && ac_cv_x_libraries="$ac_im_usrlibdir" ;; + *) ac_x_libraries="$ac_im_usrlibdir" ;; esac fi cd .. @@ -1514,12 +1517,12 @@ fi ])dnl dnl dnl Internal subroutine of AC_PATH_X. +dnl Set ac_x_includes, ac_x_libraries, and no_x (initially yes). AC_DEFUN(AC_PATH_X_DIRECT, -[AC_CHECKING(for X include and library files directly) -test -z "$x_direct_test_library" && x_direct_test_library=Xt +[test -z "$x_direct_test_library" && x_direct_test_library=Xt test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h -AC_TRY_CPP([#include <$x_direct_test_include>], no_x=, - for ac_dir in \ +AC_TRY_CPP([#include <$x_direct_test_include>], [no_x= ac_x_includes=], +[ for ac_dir in \ /usr/X11R6/include \ /usr/X11R5/include \ /usr/X11R4/include \ @@ -1557,16 +1560,15 @@ AC_TRY_CPP([#include <$x_direct_test_include>], no_x=, ; \ do if test -r "$ac_dir/$x_direct_test_include"; then - test -z "$ac_cv_x_includes" && ac_cv_x_includes=$ac_dir - no_x= + no_x= ac_x_includes=$ac_dir break fi - done) + done]) # Check for the libraries. First see if replacing the include by # lib works. -AC_HAVE_LIBRARY("$x_direct_test_library", no_x=, -for ac_dir in `echo "$ac_cv_x_includes" | sed s/include/lib/` \ +AC_CHECK_LIB("$x_direct_test_library", main, [no_x= ac_x_libraries=], +[for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \ /usr/X11R6/lib \ /usr/X11R5/lib \ /usr/X11R4/lib \ @@ -1605,61 +1607,58 @@ for ac_dir in `echo "$ac_cv_x_includes" | sed s/include/lib/` \ do for ac_extension in a so sl; do if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then - test -z "$ac_cv_x_libraries" && ac_cv_x_libraries=$ac_dir - no_x= + no_x= ac_x_libraries=$ac_dir break 2 fi done -done)])dnl +done])])dnl dnl dnl Find additional X libraries, magic flags, etc. AC_DEFUN(AC_PATH_XTRA, [AC_REQUIRE([AC_OS_ISC])dnl AC_REQUIRE([AC_PATH_X])dnl AC_CHECKING(for additional X libraries and flags) -if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" -elif test "$no_x" = yes; then +if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. X_CFLAGS="$X_CFLAGS -DX_DISPLAY_MISSING" -fi +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi -# It would be nice to have a more robust check for the -R ld option than -# just checking for Solaris. -# It would also be nice to do this for all -L options, not just this one. -if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - if test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then - X_LIBS="$X_LIBS -R$x_libraries" + # It would be nice to have a more robust check for the -R ld option than + # just checking for Solaris. + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + if test "`(uname) 2>/dev/null`" = SunOS && + uname -r | grep '^5' >/dev/null; then + X_LIBS="$X_LIBS -R$x_libraries" + fi fi -fi -# Check for additional X libraries. + # Check for additional X libraries. -if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" -else - # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And karl@cs.umb.edu says - # the Alpha needs dnet_stub (dnet does not exist). - AC_CHECK_LIB(dnet, dnet_ntoa, - [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" ac_have_dnet=yes], ac_have_dnet=no) - if test "$ac_have_dnet" = no; then - AC_CHECK_LIB(dnet_stub, dnet_ntoa, - [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"]) - fi - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT 2.0. - # But -lsocket is broken on IRIX, according to simon@lia.di.epfl.ch. - if test "`(uname) 2>/dev/null`" != IRIX; then - AC_CHECK_LIB(socket, socket, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lsocket"]) + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And karl@cs.umb.edu says + # the Alpha needs dnet_stub (dnet does not exist). + AC_CHECK_LIB(dnet, dnet_ntoa, + [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" ac_have_dnet=yes], ac_have_dnet=no) + if test "$ac_have_dnet" = no; then + AC_CHECK_LIB(dnet_stub, dnet_ntoa, + [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"]) + fi + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT 2.0. + # But -lsocket is broken on IRIX, according to simon@lia.di.epfl.ch. + if test "`(uname) 2>/dev/null`" != IRIX; then + AC_CHECK_LIB(socket, socket, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lsocket"]) + fi fi fi -# -AC_VERBOSE(X compiler flags: $X_CFLAGS) -AC_VERBOSE(X library flags: $X_LIBS) -AC_VERBOSE(extra X libraries: $X_EXTRA_LIBS) AC_SUBST(X_CFLAGS)dnl AC_SUBST(X_LIBS)dnl AC_SUBST(X_EXTRA_LIBS)dnl diff --git a/autoconf.texi b/autoconf.texi index b67c219bd..15b5442df 100644 --- a/autoconf.texi +++ b/autoconf.texi @@ -105,6 +105,7 @@ package. This is edition @value{EDITION}, for Autoconf version @value{VERSION}. * Site Default Values:: Providing local defaults for @code{configure}. * Old Macro Names:: Backward compatibility macros. * Example:: Sample Autoconf input files. +* History:: History of Autoconf. * Preprocessor Symbol Index:: Index of C preprocessor symbols defined. * Macro Index:: Index of Autoconf macros. @@ -189,6 +190,14 @@ An Example * Sample configure.in:: An example of a @file{configure} template. * Sample Makefile.in:: An example of a @file{Makefile} template. + +History of Autoconf + +* Genesis:: Prehistory and naming of @code{configure}. +* Exodus:: The plagues of @code{m4} and Perl. +* Leviticus:: The priestly code of portability arrives. +* Numbers:: Listing of growth and contributors. +* Deuteronomy:: Approaching the promises of easy configuration. @end menu @node Introduction, Distributing, Top, Top @@ -1239,12 +1248,12 @@ library, in case only some of them use the code in @code{LIBOBJS}. If this macro finds @file{alloca.h}, it defines @code{HAVE_ALLOCA_H}. -This macro does not try to get @code{alloca} from the SVR3 @file{libPW} -or the SVR4 @file{libucb} because those libraries contain some -incompatible functions that cause trouble. Some versions do not even -contain @code{alloca} or contain a buggy version. If you still want to -use their @code{alloca}, use @code{ar} to extract @file{alloca.o} from -them instead of compiling @file{alloca.c}. +This macro does not try to get @code{alloca} from the System V R3 +@file{libPW} or the System V R4 @file{libucb} because those libraries +contain some incompatible functions that cause trouble. Some versions +do not even contain @code{alloca} or contain a buggy version. If you +still want to use their @code{alloca}, use @code{ar} to extract +@file{alloca.o} from them instead of compiling @file{alloca.c}. Source files that use @code{alloca} should start with a piece of code like the following, to declare it properly. Note that in some versions @@ -2958,19 +2967,21 @@ error (in case the file doesn't exist) of @code{grep} to whether it found a match. To check whether the Autoconf macros have already defined a certain C -preprocessor symbol, you can use a @code{case} statement like this: +preprocessor symbol, test the value of the appropriate cache variable, +as in this example: @example -case "$DEFS" in - *HAVE_FOO*) ;; - *) LIBOBJS="$LIBOBJS foo.o" ;; -esac +AC_CHECK_FUNC(vprintf, AC_DEFINE(HAVE_VPRINTF)) +if test "$ac_cv_func_vprintf" != yes; then +AC_CHECK_FUNC(_doprnt, AC_DEFINE(HAVE_DOPRNT)) +fi @end example @noindent -Make sure to enclose the variable name you are checking (usually -@code{DEFS}) in double quotes, because otherwise some old versions of -@code{bash} misinterpret the statement. +Unlike in Autoconf version 1, there is no shell variable @code{DEFS} set +while @code{configure} is running. This difference is because properly +quoting the contents of that variable turned out to be too cumbersome to +do every time @code{AC_DEFINE} is called. @node Test Programs, Multiple Cases, Checking for Symbols, Writing Macros @section Test Programs @@ -3805,7 +3816,7 @@ removed @code{AC_OS_DYNIX} @end table -@node Example, Preprocessor Symbol Index, Old Macro Names, Top +@node Example, History, Old Macro Names, Top @chapter An Example Here are sample @file{configure.in} and @file{Makefile.in} files, to @@ -3889,8 +3900,8 @@ RTAPELIB = @@RTAPELIB@@ CFLAGS = -g LDFLAGS = -g -prefix = /usr/local -exec_prefix = $(prefix) +prefix = @@prefix@@ +exec_prefix = @@exec_prefix@@ binprefix = manprefix = @@ -3986,7 +3997,193 @@ dist: $(DISTFILES) rm -rf `cat .fname` .fname @end example -@node Preprocessor Symbol Index, Macro Index, Example, Top +@node History, Preprocessor Symbol Index, Example, Top +@chapter History of Autoconf + +You may be wondering, Why was Autoconf originally written? How did it +get into its present form? (Why does it look like gorilla spit?) If +you're not wondering, then this chapter contains no information useful +to you, and you might as well skip it. If you @emph{are} wondering, +then let there be light. + +@menu +* Genesis:: Prehistory and naming of @code{configure}. +* Exodus:: The plagues of @code{m4} and Perl. +* Leviticus:: The priestly code of portability arrives. +* Numbers:: Listing of growth and contributors. +* Deuteronomy:: Approaching the promises of easy configuration. +@end menu + +@node Genesis, Exodus, , History +@section Genesis + +In June 1991 I was maintaining many of the GNU utilities for the Free +Software Foundation. As they were ported to more platforms and more +programs were added, the number of @samp{-D} options that users had to +select in the @file{Makefile} (around 20) became burdensome. Especially +for me---I had to test each new release on a bunch of different systems. +So I wrote a little shell script to guess some of the correct settings +for the fileutils package, and released it as part of fileutils 2.0. +That @code{configure} script worked well enough that the next month I +adapted it (by hand) to create similar @code{configure} scripts for +several other GNU utilities packages. Brian Berliner also adapted one +of my scripts for his CVS revision control system. + +Later that summer, I learned that Richard Stallman and Richard Pixley +were developing similar scripts to use in the GNU compiler tools; so I +adapted my @code{configure} scripts to support their evolving interface: +using the file name @file{Makefile.in} as the templates; adding +@samp{+srcdir}, the first option (of many); and creating +@file{config.status} files. + +@node Exodus, Leviticus, Genesis, History +@section Exodus + +As I got feedback from users, I incorporated many improvements, using +Emacs to search and replace, cut and paste, similar changes in each of +the scripts. As I adapted more GNU utilities packages to use +@code{configure} scripts, updating them all by hand became burdensome. +Rich Murphey, the maintainer of the GNU graphics utilities, sent me mail +saying that the @code{configure} scripts were great, and asking if I had +a program for generating them that I could send him. No, I thought, but +I should! So I started to work out how to generate them. And the +journey from the bondage of hand-written @file{configure} scripts to the +promise of Autoconf began. + +I looked briefly into using Larry Wall's Metaconfig program, but I +decided not to for several reasons. The @code{Configure} scripts it +produces are interactive, which I find quite inconvenient; I didn't like +the ways it checked for some features (such as library functions); it +was not being maintained, and its scripts didn't work on many modern +systems (such as System V R4 and NeXT); it wasn't very flexible in what +it could do in response to a feature's presence or absence; I found it +confusing to learn; and it was too big and complex for my needs (I +didn't realize then how much Autoconf would eventually have to grow). I +considered using Perl to generate my style of @code{configure} scripts, +but decided that @code{m4} was better suited to the job of simple +textual substitutions: it gets in the way less, because output is +implicit. Plus, everyone already has it. (Initially I didn't rely on +the GNU extensions to @code{m4}.) Also, some of my friends at the +University of Maryland had recently been putting @code{m4} front ends on +several programs, including @code{tvtwm}, and I was interested in trying +out a new language. + +@node Leviticus, Numbers, Exodus, History +@section Leviticus + +Since my @code{configure} scripts determine the system's capabilities +automatically, with no interactive user intervention, I decided to call +the program that generates them Autoconfig. But with a version number +tacked on, that name would be too long for System V R3 file systems, so +I shortened it to Autoconf. + +I called together a group of priests of portability (er, alpha testers) +to give me feedback as I encapsulated pieces of my handwritten scripts +in @code{m4} macros and continued to add features and improve the +techniques used in the checks. Prominent among the testers were +@ifinfo +Franc,ois +@end ifinfo +@tex +Fran\c cois +@end tex +Pinard, who came up with the idea of making an @file{autoconf} shell +script to run @code{m4} and check for unresolved macro calls; Karl +Berry, who championed standardizing the @code{HAVE_@var{feature}} form +for C preprocessor symbols; and Ian Taylor, who added support for +creating a C header file as an alternative to putting @samp{-D} options +in a @file{Makefile}, so he could use it in his UUCP package. The alpha +testers cheerfully adjusted their files again and again as the names and +calling conventions of the Autoconf macros changed from release to +release. They all contributed many specific checks, great ideas, and +bug fixes. + +@node Numbers, Deuteronomy, Leviticus, History +@section Numbers + +In July 1992, after months of alpha testing, I released Autoconf 1.0, +and converted many of GNU packages to use it. I was surprised by how +positive the reaction to it was. More people started using it than I +could keep track of, including people working on software that wasn't +part of the GNU Project (such as TCL, FSP, @TeX{}, and Kerberos v5). +Autoconf continued to improve rapidly, as many people using the +@code{configure} scripts reported problems they encountered. + +Autoconf turned out to be a good torture test for @code{m4} +implementations. Unix @code{m4} started to dump core because of the +length of the macros that Autoconf defined, and several bugs showed up +in GNU @code{m4} as well. Eventually, we realized that we needed to use +some features that only GNU @code{m4} has. BSD @code{m4}, in +particular, has an impoverished set of builtin macros; the System V +version is better, but still doesn't have everything we need. + +More development occurred as people put Autoconf under more stresses +(and to uses I'd never imagined). Karl Berry added checks for X11. +david zuhn contributed C++ support. +@ifinfo +Franc,ois +@end ifinfo +@tex +Fran\c cois +@end tex +Pinard made it diagnose invalid arguments. Jim Blandy bravely coerced +it into configuring GNU Emacs, laying the groundwork for several later +improvements. Roland McGrath got it to configure the GNU C Library, +wrote the @code{autoheader} script to automate the creation of C header +file templates, and added a @samp{--verbose} option to @code{configure}. +Noah Friedman added the @samp{--macrodir} option and @code{AC_MACRODIR} +environment variable. Roland and Noah improved the quoting protection +in @code{AC_DEFINE} and fixed many bugs, especially when I got sick of +dealing with portability problems from February through June, 1993. + +@node Deuteronomy, , Numbers, History +@section Deuteronomy + +A long wish list for major features had accumulated, and the effect of +several years of patching by various people had left some residual +cruft. In April 1994, while working for Cygnus Support, I began a major +revision of Autoconf. I added most of the features of the Cygnus +@code{configure} that Autoconf had lacked; for example, support for +using @file{config.sub} and options like @samp{--host}, derived from +work that david zuhn and Ken Raeburn contributed while converting GNU +@code{as} to use Autoconf. Rob Savoye required the ability to run +@code{configure} scripts in subdirectories when he made DejaGNU use +Autoconf. + +I added more features in response to other peoples' requests. Many +people had asked for @code{configure} scripts to share the results of +the checks between runs, because (particularly when configuring a large +source tree, like Cygnus does) they were frustratingly slow. Mike +Haertel suggested adding site-specific initialization scripts. People +distributing software that had to unpack on MS-DOS asked for a way to +override the @file{.in} extension on the file names. Jim Avera did an +extensive examination of the problems with quoting in @code{AC_DEFINE} +and contributed significant improvements to it. Richard Stallman asked +that compiler output be sent to @file{config.log} instead of +@file{/dev/null}, to help people debug the Emacs @code{configure} +script. + +I made some other changes because of my dissatisfaction with the quality +of the program. I made the messages showing results of the checks less +ambiguous, always printing a result. I regularized the names of the +macros and cleaned up coding style inconsistencies. I added several +useful auxiliary utilities that I had developed to help convert source +code packages to use Autoconf. And I began a testsuite, because +experience had shown that Autoconf had a pronounced tendency to regress +when we changed it. + +Again, several alpha testers gave invaluable feedback, especially +@ifinfo +Franc,ois +@end ifinfo +@tex +Fran\c cois +@end tex +Pinard, Rob Savoye, and Ken Raeburn. + +Finally, version 2.0 was ready. + +@node Preprocessor Symbol Index, Macro Index, History, Top @unnumbered Preprocessor Symbol Index This is an alphabetical list of the C preprocessor symbols that the diff --git a/doc/autoconf.texi b/doc/autoconf.texi index b67c219bd..15b5442df 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -105,6 +105,7 @@ package. This is edition @value{EDITION}, for Autoconf version @value{VERSION}. * Site Default Values:: Providing local defaults for @code{configure}. * Old Macro Names:: Backward compatibility macros. * Example:: Sample Autoconf input files. +* History:: History of Autoconf. * Preprocessor Symbol Index:: Index of C preprocessor symbols defined. * Macro Index:: Index of Autoconf macros. @@ -189,6 +190,14 @@ An Example * Sample configure.in:: An example of a @file{configure} template. * Sample Makefile.in:: An example of a @file{Makefile} template. + +History of Autoconf + +* Genesis:: Prehistory and naming of @code{configure}. +* Exodus:: The plagues of @code{m4} and Perl. +* Leviticus:: The priestly code of portability arrives. +* Numbers:: Listing of growth and contributors. +* Deuteronomy:: Approaching the promises of easy configuration. @end menu @node Introduction, Distributing, Top, Top @@ -1239,12 +1248,12 @@ library, in case only some of them use the code in @code{LIBOBJS}. If this macro finds @file{alloca.h}, it defines @code{HAVE_ALLOCA_H}. -This macro does not try to get @code{alloca} from the SVR3 @file{libPW} -or the SVR4 @file{libucb} because those libraries contain some -incompatible functions that cause trouble. Some versions do not even -contain @code{alloca} or contain a buggy version. If you still want to -use their @code{alloca}, use @code{ar} to extract @file{alloca.o} from -them instead of compiling @file{alloca.c}. +This macro does not try to get @code{alloca} from the System V R3 +@file{libPW} or the System V R4 @file{libucb} because those libraries +contain some incompatible functions that cause trouble. Some versions +do not even contain @code{alloca} or contain a buggy version. If you +still want to use their @code{alloca}, use @code{ar} to extract +@file{alloca.o} from them instead of compiling @file{alloca.c}. Source files that use @code{alloca} should start with a piece of code like the following, to declare it properly. Note that in some versions @@ -2958,19 +2967,21 @@ error (in case the file doesn't exist) of @code{grep} to whether it found a match. To check whether the Autoconf macros have already defined a certain C -preprocessor symbol, you can use a @code{case} statement like this: +preprocessor symbol, test the value of the appropriate cache variable, +as in this example: @example -case "$DEFS" in - *HAVE_FOO*) ;; - *) LIBOBJS="$LIBOBJS foo.o" ;; -esac +AC_CHECK_FUNC(vprintf, AC_DEFINE(HAVE_VPRINTF)) +if test "$ac_cv_func_vprintf" != yes; then +AC_CHECK_FUNC(_doprnt, AC_DEFINE(HAVE_DOPRNT)) +fi @end example @noindent -Make sure to enclose the variable name you are checking (usually -@code{DEFS}) in double quotes, because otherwise some old versions of -@code{bash} misinterpret the statement. +Unlike in Autoconf version 1, there is no shell variable @code{DEFS} set +while @code{configure} is running. This difference is because properly +quoting the contents of that variable turned out to be too cumbersome to +do every time @code{AC_DEFINE} is called. @node Test Programs, Multiple Cases, Checking for Symbols, Writing Macros @section Test Programs @@ -3805,7 +3816,7 @@ removed @code{AC_OS_DYNIX} @end table -@node Example, Preprocessor Symbol Index, Old Macro Names, Top +@node Example, History, Old Macro Names, Top @chapter An Example Here are sample @file{configure.in} and @file{Makefile.in} files, to @@ -3889,8 +3900,8 @@ RTAPELIB = @@RTAPELIB@@ CFLAGS = -g LDFLAGS = -g -prefix = /usr/local -exec_prefix = $(prefix) +prefix = @@prefix@@ +exec_prefix = @@exec_prefix@@ binprefix = manprefix = @@ -3986,7 +3997,193 @@ dist: $(DISTFILES) rm -rf `cat .fname` .fname @end example -@node Preprocessor Symbol Index, Macro Index, Example, Top +@node History, Preprocessor Symbol Index, Example, Top +@chapter History of Autoconf + +You may be wondering, Why was Autoconf originally written? How did it +get into its present form? (Why does it look like gorilla spit?) If +you're not wondering, then this chapter contains no information useful +to you, and you might as well skip it. If you @emph{are} wondering, +then let there be light. + +@menu +* Genesis:: Prehistory and naming of @code{configure}. +* Exodus:: The plagues of @code{m4} and Perl. +* Leviticus:: The priestly code of portability arrives. +* Numbers:: Listing of growth and contributors. +* Deuteronomy:: Approaching the promises of easy configuration. +@end menu + +@node Genesis, Exodus, , History +@section Genesis + +In June 1991 I was maintaining many of the GNU utilities for the Free +Software Foundation. As they were ported to more platforms and more +programs were added, the number of @samp{-D} options that users had to +select in the @file{Makefile} (around 20) became burdensome. Especially +for me---I had to test each new release on a bunch of different systems. +So I wrote a little shell script to guess some of the correct settings +for the fileutils package, and released it as part of fileutils 2.0. +That @code{configure} script worked well enough that the next month I +adapted it (by hand) to create similar @code{configure} scripts for +several other GNU utilities packages. Brian Berliner also adapted one +of my scripts for his CVS revision control system. + +Later that summer, I learned that Richard Stallman and Richard Pixley +were developing similar scripts to use in the GNU compiler tools; so I +adapted my @code{configure} scripts to support their evolving interface: +using the file name @file{Makefile.in} as the templates; adding +@samp{+srcdir}, the first option (of many); and creating +@file{config.status} files. + +@node Exodus, Leviticus, Genesis, History +@section Exodus + +As I got feedback from users, I incorporated many improvements, using +Emacs to search and replace, cut and paste, similar changes in each of +the scripts. As I adapted more GNU utilities packages to use +@code{configure} scripts, updating them all by hand became burdensome. +Rich Murphey, the maintainer of the GNU graphics utilities, sent me mail +saying that the @code{configure} scripts were great, and asking if I had +a program for generating them that I could send him. No, I thought, but +I should! So I started to work out how to generate them. And the +journey from the bondage of hand-written @file{configure} scripts to the +promise of Autoconf began. + +I looked briefly into using Larry Wall's Metaconfig program, but I +decided not to for several reasons. The @code{Configure} scripts it +produces are interactive, which I find quite inconvenient; I didn't like +the ways it checked for some features (such as library functions); it +was not being maintained, and its scripts didn't work on many modern +systems (such as System V R4 and NeXT); it wasn't very flexible in what +it could do in response to a feature's presence or absence; I found it +confusing to learn; and it was too big and complex for my needs (I +didn't realize then how much Autoconf would eventually have to grow). I +considered using Perl to generate my style of @code{configure} scripts, +but decided that @code{m4} was better suited to the job of simple +textual substitutions: it gets in the way less, because output is +implicit. Plus, everyone already has it. (Initially I didn't rely on +the GNU extensions to @code{m4}.) Also, some of my friends at the +University of Maryland had recently been putting @code{m4} front ends on +several programs, including @code{tvtwm}, and I was interested in trying +out a new language. + +@node Leviticus, Numbers, Exodus, History +@section Leviticus + +Since my @code{configure} scripts determine the system's capabilities +automatically, with no interactive user intervention, I decided to call +the program that generates them Autoconfig. But with a version number +tacked on, that name would be too long for System V R3 file systems, so +I shortened it to Autoconf. + +I called together a group of priests of portability (er, alpha testers) +to give me feedback as I encapsulated pieces of my handwritten scripts +in @code{m4} macros and continued to add features and improve the +techniques used in the checks. Prominent among the testers were +@ifinfo +Franc,ois +@end ifinfo +@tex +Fran\c cois +@end tex +Pinard, who came up with the idea of making an @file{autoconf} shell +script to run @code{m4} and check for unresolved macro calls; Karl +Berry, who championed standardizing the @code{HAVE_@var{feature}} form +for C preprocessor symbols; and Ian Taylor, who added support for +creating a C header file as an alternative to putting @samp{-D} options +in a @file{Makefile}, so he could use it in his UUCP package. The alpha +testers cheerfully adjusted their files again and again as the names and +calling conventions of the Autoconf macros changed from release to +release. They all contributed many specific checks, great ideas, and +bug fixes. + +@node Numbers, Deuteronomy, Leviticus, History +@section Numbers + +In July 1992, after months of alpha testing, I released Autoconf 1.0, +and converted many of GNU packages to use it. I was surprised by how +positive the reaction to it was. More people started using it than I +could keep track of, including people working on software that wasn't +part of the GNU Project (such as TCL, FSP, @TeX{}, and Kerberos v5). +Autoconf continued to improve rapidly, as many people using the +@code{configure} scripts reported problems they encountered. + +Autoconf turned out to be a good torture test for @code{m4} +implementations. Unix @code{m4} started to dump core because of the +length of the macros that Autoconf defined, and several bugs showed up +in GNU @code{m4} as well. Eventually, we realized that we needed to use +some features that only GNU @code{m4} has. BSD @code{m4}, in +particular, has an impoverished set of builtin macros; the System V +version is better, but still doesn't have everything we need. + +More development occurred as people put Autoconf under more stresses +(and to uses I'd never imagined). Karl Berry added checks for X11. +david zuhn contributed C++ support. +@ifinfo +Franc,ois +@end ifinfo +@tex +Fran\c cois +@end tex +Pinard made it diagnose invalid arguments. Jim Blandy bravely coerced +it into configuring GNU Emacs, laying the groundwork for several later +improvements. Roland McGrath got it to configure the GNU C Library, +wrote the @code{autoheader} script to automate the creation of C header +file templates, and added a @samp{--verbose} option to @code{configure}. +Noah Friedman added the @samp{--macrodir} option and @code{AC_MACRODIR} +environment variable. Roland and Noah improved the quoting protection +in @code{AC_DEFINE} and fixed many bugs, especially when I got sick of +dealing with portability problems from February through June, 1993. + +@node Deuteronomy, , Numbers, History +@section Deuteronomy + +A long wish list for major features had accumulated, and the effect of +several years of patching by various people had left some residual +cruft. In April 1994, while working for Cygnus Support, I began a major +revision of Autoconf. I added most of the features of the Cygnus +@code{configure} that Autoconf had lacked; for example, support for +using @file{config.sub} and options like @samp{--host}, derived from +work that david zuhn and Ken Raeburn contributed while converting GNU +@code{as} to use Autoconf. Rob Savoye required the ability to run +@code{configure} scripts in subdirectories when he made DejaGNU use +Autoconf. + +I added more features in response to other peoples' requests. Many +people had asked for @code{configure} scripts to share the results of +the checks between runs, because (particularly when configuring a large +source tree, like Cygnus does) they were frustratingly slow. Mike +Haertel suggested adding site-specific initialization scripts. People +distributing software that had to unpack on MS-DOS asked for a way to +override the @file{.in} extension on the file names. Jim Avera did an +extensive examination of the problems with quoting in @code{AC_DEFINE} +and contributed significant improvements to it. Richard Stallman asked +that compiler output be sent to @file{config.log} instead of +@file{/dev/null}, to help people debug the Emacs @code{configure} +script. + +I made some other changes because of my dissatisfaction with the quality +of the program. I made the messages showing results of the checks less +ambiguous, always printing a result. I regularized the names of the +macros and cleaned up coding style inconsistencies. I added several +useful auxiliary utilities that I had developed to help convert source +code packages to use Autoconf. And I began a testsuite, because +experience had shown that Autoconf had a pronounced tendency to regress +when we changed it. + +Again, several alpha testers gave invaluable feedback, especially +@ifinfo +Franc,ois +@end ifinfo +@tex +Fran\c cois +@end tex +Pinard, Rob Savoye, and Ken Raeburn. + +Finally, version 2.0 was ready. + +@node Preprocessor Symbol Index, Macro Index, History, Top @unnumbered Preprocessor Symbol Index This is an alphabetical list of the C preprocessor symbols that the diff --git a/lib/autoconf/specific.m4 b/lib/autoconf/specific.m4 index c6f347604..214a2c56b 100644 --- a/lib/autoconf/specific.m4 +++ b/lib/autoconf/specific.m4 @@ -1444,45 +1444,48 @@ fi dnl AC_DEFUN(AC_PATH_X, [AC_REQUIRE_CPP()dnl Set CPP; we run AC_PATH_X_DIRECT conditionally. -# If we find X, set shell vars x_includes and x_libraries to the paths. -no_x=yes -if test "x$with_x" != xno; then +# If we find X, set shell vars x_includes and x_libraries to the +# paths, otherwise set no_x=yes. +# Uses ac_ vars as temps to allow command line to override cache and checks. +# --without-x overrides everything else, but does not touch the cache. +AC_MSG_CHECKING(for X) -# Command line options override cache. -# FIXME We need to allow --x=includes= to work, I think. -test -n "$x_includes" && ac_cv_x_includes="$x_includes" -test -n "$x_libraries" && ac_cv_x_includes="$x_libraries" -if test "${ac_cv_x_includes+set}" = set && - test "${ac_cv_x_libraries+set}" = set; then - AC_VERBOSE(using cached values for ac_cv_x_includes and ac_cv_x_libraries) +if test "x$with_x" = xno; then + no_x=yes else + if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then + no_x= + else +AC_CACHE_VAL(ac_cv_path_x, +[# One or both of the vars are not set, and there is no cached value. +no_x=yes AC_PATH_X_XMKMF -fi -if test "${ac_cv_x_includes+set}" != set || - test "${ac_cv_x_libraries+set}" != set; then +if test "$no_x" = yes; then AC_PATH_X_DIRECT fi -test -z "$ac_cv_x_includes" && ac_cv_x_includes=NONE -test -z "$ac_cv_x_libraries" && ac_cv_x_libraries=NONE +if test "$no_x" = yes; then + ac_cv_path_x="no_x=yes" +else + ac_cv_path_x="no_x= ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" +fi])dnl + fi + eval "$ac_cv_path_x" +fi # $with_x != no -# FIXME can we reliably distinguish cache values that are set to empty -# from those that aren't set? -if test -z "$x_includes" && test "$ac_cv_x_includes" != NONE; then - x_includes="$ac_cv_x_includes" -fi -if test -z "$x_libraries" && test "$ac_cv_x_libraries" != NONE; then - x_libraries="$ac_cv_x_libraries" +if test "$no_x" = yes; then + AC_MSG_RESULT(no) +else + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + ac_cv_path_x="no_x= ac_x_includes=$x_includes ac_x_libraries=$x_libraries" + AC_MSG_RESULT([libraries $x_libraries, headers $x_includes]) fi - -test -n "$x_includes" && AC_VERBOSE(X11 headers are in $x_includes) -test -n "$x_libraries" && AC_VERBOSE(X11 libraries are in $x_libraries) -fi # No --with-x=no. ])dnl dnl dnl Internal subroutine of AC_PATH_X. +dnl Set ac_x_includes, ac_x_libraries, and no_x (initially yes). AC_DEFUN(AC_PATH_X_XMKMF, -[AC_CHECKING(for X include and library files with xmkmf) -rm -fr conftestdir +[rm -fr conftestdir if mkdir conftestdir; then cd conftestdir # Make sure to not put "make" in the Imakefile rules, since we grep it out. @@ -1501,11 +1504,11 @@ EOF fi case "$ac_im_incroot" in /usr/include) ;; - *) test -z "$ac_cv_x_includes" && ac_cv_x_includes="$ac_im_incroot" ;; + *) ac_x_includes="$ac_im_incroot" ;; esac case "$ac_im_usrlibdir" in /usr/lib | /lib) ;; - *) test -z "$ac_cv_x_libraries" && ac_cv_x_libraries="$ac_im_usrlibdir" ;; + *) ac_x_libraries="$ac_im_usrlibdir" ;; esac fi cd .. @@ -1514,12 +1517,12 @@ fi ])dnl dnl dnl Internal subroutine of AC_PATH_X. +dnl Set ac_x_includes, ac_x_libraries, and no_x (initially yes). AC_DEFUN(AC_PATH_X_DIRECT, -[AC_CHECKING(for X include and library files directly) -test -z "$x_direct_test_library" && x_direct_test_library=Xt +[test -z "$x_direct_test_library" && x_direct_test_library=Xt test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h -AC_TRY_CPP([#include <$x_direct_test_include>], no_x=, - for ac_dir in \ +AC_TRY_CPP([#include <$x_direct_test_include>], [no_x= ac_x_includes=], +[ for ac_dir in \ /usr/X11R6/include \ /usr/X11R5/include \ /usr/X11R4/include \ @@ -1557,16 +1560,15 @@ AC_TRY_CPP([#include <$x_direct_test_include>], no_x=, ; \ do if test -r "$ac_dir/$x_direct_test_include"; then - test -z "$ac_cv_x_includes" && ac_cv_x_includes=$ac_dir - no_x= + no_x= ac_x_includes=$ac_dir break fi - done) + done]) # Check for the libraries. First see if replacing the include by # lib works. -AC_HAVE_LIBRARY("$x_direct_test_library", no_x=, -for ac_dir in `echo "$ac_cv_x_includes" | sed s/include/lib/` \ +AC_CHECK_LIB("$x_direct_test_library", main, [no_x= ac_x_libraries=], +[for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \ /usr/X11R6/lib \ /usr/X11R5/lib \ /usr/X11R4/lib \ @@ -1605,61 +1607,58 @@ for ac_dir in `echo "$ac_cv_x_includes" | sed s/include/lib/` \ do for ac_extension in a so sl; do if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then - test -z "$ac_cv_x_libraries" && ac_cv_x_libraries=$ac_dir - no_x= + no_x= ac_x_libraries=$ac_dir break 2 fi done -done)])dnl +done])])dnl dnl dnl Find additional X libraries, magic flags, etc. AC_DEFUN(AC_PATH_XTRA, [AC_REQUIRE([AC_OS_ISC])dnl AC_REQUIRE([AC_PATH_X])dnl AC_CHECKING(for additional X libraries and flags) -if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" -elif test "$no_x" = yes; then +if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. X_CFLAGS="$X_CFLAGS -DX_DISPLAY_MISSING" -fi +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi -# It would be nice to have a more robust check for the -R ld option than -# just checking for Solaris. -# It would also be nice to do this for all -L options, not just this one. -if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - if test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then - X_LIBS="$X_LIBS -R$x_libraries" + # It would be nice to have a more robust check for the -R ld option than + # just checking for Solaris. + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + if test "`(uname) 2>/dev/null`" = SunOS && + uname -r | grep '^5' >/dev/null; then + X_LIBS="$X_LIBS -R$x_libraries" + fi fi -fi -# Check for additional X libraries. + # Check for additional X libraries. -if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" -else - # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And karl@cs.umb.edu says - # the Alpha needs dnet_stub (dnet does not exist). - AC_CHECK_LIB(dnet, dnet_ntoa, - [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" ac_have_dnet=yes], ac_have_dnet=no) - if test "$ac_have_dnet" = no; then - AC_CHECK_LIB(dnet_stub, dnet_ntoa, - [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"]) - fi - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT 2.0. - # But -lsocket is broken on IRIX, according to simon@lia.di.epfl.ch. - if test "`(uname) 2>/dev/null`" != IRIX; then - AC_CHECK_LIB(socket, socket, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lsocket"]) + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And karl@cs.umb.edu says + # the Alpha needs dnet_stub (dnet does not exist). + AC_CHECK_LIB(dnet, dnet_ntoa, + [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" ac_have_dnet=yes], ac_have_dnet=no) + if test "$ac_have_dnet" = no; then + AC_CHECK_LIB(dnet_stub, dnet_ntoa, + [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"]) + fi + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT 2.0. + # But -lsocket is broken on IRIX, according to simon@lia.di.epfl.ch. + if test "`(uname) 2>/dev/null`" != IRIX; then + AC_CHECK_LIB(socket, socket, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lsocket"]) + fi fi fi -# -AC_VERBOSE(X compiler flags: $X_CFLAGS) -AC_VERBOSE(X library flags: $X_LIBS) -AC_VERBOSE(extra X libraries: $X_EXTRA_LIBS) AC_SUBST(X_CFLAGS)dnl AC_SUBST(X_LIBS)dnl AC_SUBST(X_EXTRA_LIBS)dnl