-*- outline -*- Things it might be nice to do someday. I haven't evaluated all of these suggestions... their presence here doesn't imply my endorsement. -djm ------------------------------------------------------------------------------ * Make AC_CHECK_LIB check whether the function is already available before checking for the library. This might involve adding another kind of cache variable to indicate whether a given function needs a given library. The current ac_cv_func_ variables are intended to indicate whether the function is in the default libraries, but actually also take into account whatever value LIBS had when they were checked for. ------------------------------------------------------------------------------ * Add AC_PROG_CC_POSIX to replace the current ad-hoc macros for AIX, Minix, ISC, etc. ------------------------------------------------------------------------------ * Use AC_EGREP_CPP instead of AC_TRY_LINK to detect structures and members. ------------------------------------------------------------------------------ * Make AC_CHECK_FUNC[S] automatically use any particular macros for the listed functions. ------------------------------------------------------------------------------ * Support creating both config.h and DEFS in the same configure. ------------------------------------------------------------------------------ * Select the right CONFIG_SHELL automatically (for Ultrix, Lynx especially.) ------------------------------------------------------------------------------ * Doc: Add a concept index. ------------------------------------------------------------------------------ * Doc: Centralize information on POSIX, MS-DOS, cross-compiling, and other important topics. ------------------------------------------------------------------------------ * Split up AC_SUBST substitutions using a loop to accomodate shells with severely limited here document sizes, if it turns out to be a problem. I'm not sure whether the limit is on lines or bytes; if bytes, it will be less of a problem than it was with the long lines used for creating a header file. ------------------------------------------------------------------------------ * Allow [ and ] in AC_DEFINE args. ------------------------------------------------------------------------------ * Mike Haertel's suggestions: ** Provide header files containing decls for alloca, strings, etc. ** Cross compiling: *** Error messages include instructions for overriding defaults using config.site. *** Distribute a config.site corresponding to a hypothetical bare POSIX system with c89. ** Site defaults: *** Convention for consistency checking of env vars and options in config.site so config.site can print obnoxious messages if it doesn't like options or env vars that users use. ------------------------------------------------------------------------------ * autoscan: Tell the files that caused inclusion of each macro, in a dnl comment. (Seems to be hard.) ------------------------------------------------------------------------------ * Look at user contributed macros: prototypes IEEE double precision math more ------------------------------------------------------------------------------ For AC_TYPE_SIGNAL signal handlers, provide a way for code to know whether to do "return 0" or "return" (int vs void) to avoid compiler warnings. (Roland McGrath) ------------------------------------------------------------------------------ In config.status comment, put the host/target/build types, if used. ------------------------------------------------------------------------------ Have AC_CANONICAL_* cache the host/build/target types. They have to be overridden by the command line arguments, just as for X includes and libraries. Should they be cached all in one variable, or three? In that case, what if only one or two of the cache variables are set? ------------------------------------------------------------------------------ The argument HELP-STRING is a description of the option which ... Avoid tabs in the help string. You'll need to enclose it in `[' and `]' in order to produce the leading spaces. Except that [...] is the convention for telling the user the default, So I guess a changequote(`,') or something would be in order in some cases. From: "K. Berry" ------------------------------------------------------------------------------ The default of unlimited permission is fine, but there should be some easy way for configure to have copyright terms passed through from configure.in. Maybe AC_LICENSE([...]). From: roland@gnu.ai.mit.edu (Roland McGrath) ------------------------------------------------------------------------------ AC_MSG_CHECKING([checking for ANSI #stringize]) AC_REVISION([ #(@) revision 2.1 ]) causes bogus code to be generated for whatever immediately follows. The problem goes away if the '#' is removed. Probably the macros are not disabling the m4 "comment" feature when processing user-supplied strings. -Jim Avera jima@netcom.com ------------------------------------------------------------------------------ on hal.gnu.ai.mit.edu, configure is getting the wrong answer for AC_CHECK_FUNCS(select). The problem here is that there's severe namespace pollution: when conftest.c includes to pick up any __stub macro definitions, it's getting a prototype declaration for select(), which collides with the dummy declaration in conftest.c. (The chain of includes is conftest.c -> -> -> -> -> .) #define $ac_func __dummy_$ac_func #include #undef $ac_func From: kwzh@gnu.ai.mit.edu (Karl Heuer) The test for the isascii function was failing because that function is also a macro. He proposed that the test file look like this: /* Remove any macro definition. */ #undef isascii /* Override any gcc2 internal prototype to avoid an error. */ char isascii(); isascii(); Andreas Schwab ------------------------------------------------------------------------------ put all the config.* stuff somewhere like config/? All these extraneous files sure clutter up a toplevel directory. From: "Randall S. Winchester" ------------------------------------------------------------------------------ It would be nice if I could (in the Makefile.in files) set the path to config.h. You have config.h ../config.h ../../config.h's all over the place, in the findutils-4.1 directory. From: "Randall S. Winchester" ------------------------------------------------------------------------------ In libc and make in aclocal.m4 I have AC_CHECK_SYMBOL, which checks for sys_siglist et al. Using AC_CHECK_FUNC doesn't work on some system that winds up caring that you reference it as a function and it is really a variable. My version always declares the symbol as a char *[]; if that ends up a bad idea, we can have it take an arg with the C decl, but that is a bit verbose to write if it's actually superfluous. From Roland McGrath. [I'd call it AC_CHECK_VAR, I think. -djm] ------------------------------------------------------------------------------ In a future version (after 2.2), make AC_PROG_{CC,RANLIB,anything else} use AC_CHECK_TOOL. From Roland McGrath. ------------------------------------------------------------------------------ ls -lt configure configure.in | sort doesn't work right if configure.in is from a symlink farm, where the symlink has either a timestamp of its own, or under BSD 4.4, it has the timestamp of the current directory, neither of which helps. Changing it to ls -Llt configure configure.in | sort works for me, though I don't know how portable that is _Mark_ ------------------------------------------------------------------------------ Here is the thing I would like the most; AC_PKG_WITH(PACKAGE, HELP_STRING, PACKAGE-ROOT, PACKAGE-LIBS, PACKAGE-DEFS, PACKAGE-CCPFLAGS) like AC_PKG_WITH(kerberos,,/usr/local/athena,-lkrb -ldes,[KERBEROS KRB4 CRYPT],include) AC_PKG_WITH(hesiod, [if hesiod is not in kerberos-root add --with-hesiod-root=somewhere] ,,-lhesiod,HESIOD,,) AC_PKG_WITH(glue,,,-lglue,GLUE,,) AC_PKG_WITH(bind,,/usr/local/bind, [lib/resolv.a lib/lib44bsd.a], ,include) After the apropriate checks, the existance of the paths, and libs and such LIBS=$LIBS $PKG-LIBS DEFS=$DEFS $PKG-DEFS CPPFLAGS=$PKG-CPPFLAGS $CPPFLAGS $PKG-ROOT=$PKG-ROOT The cppflags should reverse the order so that you can have; -I/usr/local/bind/include -I/usr/local/athena/include and -L/usr/local/athena/lib -lkrb -ldes /usr/local/bind/lib/libresolv.a as order matters. also an AC_PKG_CHK_HEADER and an AC_PKG_CHK_FUNCTION so one can give alternate paths to check for stuff ($PKG-ROOT/lib for example) From: Randall Winchester ------------------------------------------------------------------------------ AC_C_CROSS assumes that configure was called like 'CC=target-gcc; ./configure'. I want to write a package that has target dependent libraries and host dependent tools. So I don't like to lose the distinction between CC and [G]CC_FOR_TARGET. AC_C_CROSS should check for equality of target and host. It would be great if GCC_FOR_TARGET AR_FOR_TARGET RANLIB_FOR_TARGET would be set automatically if host != target. AC_LANG_CROSS_C would be nice too, to check header files etc. with GCC_FOR_TARGET instead of CC Here is one simple test if test "x$host" != "x$target"; then AC_PROGRAMS_CHECK(AR_FOR_TARGET, $target-ar, $target-ar, ar) AC_PROGRAMS_CHECK(RANLIB_FOR_TARGET, $target-ranlib, $target-ranlib, ranlib) AC_PROGRAMS_CHECK(GCC_FOR_TARGET, $target-gcc, $target-gcc, gcc) fi This could be improved to also look for gcc in PATH, but require the prefix to contain the target e.g.: target=m68k-coff -->GCC_FOR_TARGET = /usr/gnu/m68k-coff/bin/gcc From: nennker@cs.tu-berlin.DE (Axel Nennker) ------------------------------------------------------------------------------ The problem occurs with the following libc functions in SunOS 5.4: fnmatch glob globfree regcomp regexec regerror regfree wordexp wordfree It also occurs with a bunch more libposix4 functions that most people probably aren't worried about yet, e.g. shm_open. All these functions fail with errno set to ENOSYS (89) ``Operation not applicable''. Perhaps autoconf should have a specific macro for fnmatch, another for glob+globfree, another for regcomp+regexec+regerror+regfree, and another for wordexp+wordfree. This wouldn't solve the problem in general, but it should work for Solaris 2.4. Or autoconf could limit itself to fnmatch and regcomp, the only two functions that I know have been a problem so far. From Paul Eggert. ------------------------------------------------------------------------------ Make easy macros for checking for X functions and libraries, such as Motif. ------------------------------------------------------------------------------ * Test suite: more things to test: ** That the shell scripts produce correct output on some simple data. ** Configuration header files. That autoheader does the right thing, and so does AC_CONFIG_HEADER when autoconf is run. ------------------------------------------------------------------------------ Autoheader in autoconf-2.4 doesn't produce entries for: AC_CHECK_TYPE(ssize_t, int) and it seems like it could easily do so. In general, it seems to me like autoconf isn't set up to let me periodically run autoheader, and then include my "local" tests -- autoheader gets most stuff right, I'd like to rerun it periodically without losing my local changes to config.h.in. One of the things that I need is to know is the type to use for a fixed size on disk, e.g., what is the system's name for an unsigned-32-bit integer? I can use: AC_CHECK_SIZEOF(unsigned int) and, in fact, that's what I do. But I still have to build sets of #if tests to get from there to the name of the type. From: bostic@bsdi.com (Keith Bostic) ------------------------------------------------------------------------------ There are basically three ways to lock files lockf, fnctl, flock I'd be interested in adding a macro to pick the "right one" if you're interested. From: Rich Salz ------------------------------------------------------------------------------ It is IMHO a bug that `config.status' cannot handle multiple simultaneous invocations. It should include the process id (`$$' in sh) as part of the name of any temporary files it creates. From: fjh@kryten.cs.mu.oz.au (Fergus Henderson) ------------------------------------------------------------------------------ Timezone calculations checks. ------------------------------------------------------------------------------ Support different default filesystem layouts, e.g. SVR4, Linux. Of course, this can be done locally with config.site. ------------------------------------------------------------------------------ Mention automake, libtool, etc. in the autoconf manual. ------------------------------------------------------------------------------ I wonder if it is possible to get the path for X11's app-defaults directory by autoconf. Moreover, I'd like to have a general way of accessing imake variables by autoconf, something like AC_DEFINE(WINE_APP_DEFAULTS, AC_IMAKE_VAR(XAPPLOADDIR)) Slaven Rezic ------------------------------------------------------------------------------ Question: at least one common UNIX variant has a "cc" that is old K&R and "c89" for ANSI C. Is there any reason why AC_PROG_CC couldn't check for c89 before cc if it can't find gcc? hpa@yggdrasil.com (H. Peter Anvin) ------------------------------------------------------------------------------ Cache consistency checking: ignore cache if environment (CC or PATH) differs. From Mike Haertel So we need a general mechanism for storing variables' values in the cache, and checking if they are the same after reading the cache. Then we can add to the list of variables as we come across the need. So far we want LD_LIBRARY_PATH and the internal variables for some of (all?) the args. From: roland@gnu.ai.mit.edu (Roland McGrath) Hmm. That list might include LD_LIBRARY_PATH, LD_RUN_PATH (for solaris), and PATH. I can't think of any others so far. From: friedman@splode.com (Noah Friedman) ------------------------------------------------------------------------------ So how about an option to configure --reset-cache, that says to ignore all existing cached values for tests that configure runs, and then update the cache normally. This should be utterly trivial to do in AC_CACHE_VAL; check the flag variable and always compute the value if it's set. ------------------------------------------------------------------------------ A number of people have tried to fix configuration problems by editing acconfig.h. (Despite comments at the top of the file.) I think they're confused because anything.h looks like a regular source file name. Maybe acconfig.h could be called acconfig.extra or something? From: kb@cs.umb.edu (K. Berry) ------------------------------------------------------------------------------ Every user running X11 usually has a directory like *X11* in his PATH variable. By replacing bin by include, you can find good places to look for the include files or libraries. From: rcb5@win.tue.nl (Richard Verhoeven) ------------------------------------------------------------------------------ When using CONFIG_FILES= and CONFIG_HEADERS= for controlling partial configuration, any AC_LINK_FILES is repeated in each case (that is, usually, once for config.h and once per subdirectory). This is not elegant. Maybe Autoconf could use some kind of CONFIG_LINKS=, having all such AC_LINK(ed)_FILES by default, but usable by each Makefile.in in rules for updating the particular links they need. From: pinard@iro.umontreal.ca ------------------------------------------------------------------------------ Perhaps autoconf could have a single @magic@ frob that gets replaced with assignments for all the *dir variables? There is quite a plethora for each Makefile.in to have foodir = @foodir@. From: Roland McGrath ------------------------------------------------------------------------------ In most cases, when autoscan suggests something, using the search or index command into the Info reader for autoconf manual quickly explains me what the test is about. However, for header files and functions, the search might fail, because the test is not of the specific kind. The Autoconf manual should reflect somewhere all header files or functions (non-specific features, generally) triggering autoscan to generate tests, and tell in a few words what is the problem, and the suggested approach for a solution; that is, how one should use the result of testing the feature. From: pinard@iro.umontreal.ca ------------------------------------------------------------------------------ It would be nice if the configure script would handle an option such as --x-libraries="/usr/openwin/lib /usr/dt/lib". Rick Boykin Under Solaris 2.4, the regular X includes and libs and the Motif includes and libs are in different places. The Emacs configure script actually allows dir1:dir2:dir3 -- if test "${x_libraries}" != NONE && test -n "${x_libraries}"; then LD_SWITCH_X_SITE=-L`echo ${x_libraries} | sed -e "s/:/ -L/g"` LD_SWITCH_X_SITE_AUX=-R`echo ${x_libraries} | sed -e "s/:/ -R/g"` fi if test "${x_includes}" != NONE && test -n "${x_includes}"; then C_SWITCH_X_SITE=-I`echo ${x_includes} | sed -e "s/:/ -I/g"` fi ------------------------------------------------------------------------------ What messages should be produced by default, if any? Probably only the few most important ones, like which configuration name was used, whether X or Xt are in use, etc. The specific decisions, and progress messages, should be recorded on the terminal only if --verbose is used. --silent just supresses the "checking for...result" messages, not the "creating FOO" messages. I think the default should be to suppress both. From: Richard Stallman There is no distinction now between important decisions (we have X) vs minor decisions (we have lstat). However, there are probably only a few things you deem important enough to announce and only those few things will need to be changed. Perhaps config.status could be written with comments saying what was decided. From: Roland McGrath ------------------------------------------------------------------------------ Use automake to generate autoconf's Makefile.in's? ------------------------------------------------------------------------------ about the idea of using small configure.in/aclocal.m4 snippets: this is the one idea in metaconfig (the autoconf-like program used by Perl) that I like. metaconfig looks for a "U" directory, and includes each ".U" file into the generated Configure script (according to various complicated rules). From: Tom Tromey ------------------------------------------------------------------------------ I'd much prefer to see the absolute paths substituted for all the standard "dir" variables. It would be nice to have variables in configure that held the absolute paths. And it is nice to be able to substitute them into other files without relying on the destination file supporting ${...} syntax. (It works in Perl, sh, and make -- but not guile) From: Tom Tromey ------------------------------------------------------------------------------ Another thing I wish for is a macro which figures out which libraries are needed for BSD-sytle sockets. AC_PATH_X already detects this correctly...so it's just a matter of seperating out the socket-related code. From: "Joel N. Weber II" ------------------------------------------------------------------------------ Merge the two lex macros, AC_PROG_LEX and AC_DECL_YYTEXT? ------------------------------------------------------------------------------ in order to use the AC_CANONICAL_SYSTEM macro, I have to have install-sh somewhere nearby --- why is this? I have no real reason to distribute install-sh, other than that its absence breaks this code. Shouldn't the above loop be looking for config.sub and config.guess? From: jimb@totoro.bio.indiana.edu (Jim Blandy) adding AC_CANONICAL_HOST to my configure.in script caused all sorts of odd/unexplained errors. Obviously, I had to go get copies of config.guess, config.sub and install-sh from the autoconf distribution, but the error messages and autoconf docs didn't explain that very well. From: bostic@bsdi.com (Keith Bostic) ------------------------------------------------------------------------------ Perhaps also have AC_TRY_COMPILER try to link an invalid program, and die if the compiler seemed to succeed--in which case it's not usable with autoconf scripts. ------------------------------------------------------------------------------ there is absolutely no guarantee that 'a' to 'z' are contiguous, and the ISLOWER macro is not guaranteed to correctly reproduce the result of islower. In all variants of ASCII however, it will work correctly in the C locale. There is also no guarantee that toupper(i) - i is the same constant if non-zero. TOUPPER, hence, is not correct either. But, in all variants of ASCII in the C locale, it works. Tanmoy Bhattacharya (tanmoy@qcd.lanl.gov> ------------------------------------------------------------------------------ autoreconf doesn't support having (in the same tree) both directories that are parts of a larger package (sharing aclocal.m4 and acconfig.h), and directories that are independent packages (each with their own ac*). It assumes that they are all part of the same package, if you use --localdir, or that each directory is a separate package, if you don't use it. autoreconf should automatically figure out which ac* files to use--the closest ones up the tree from each directory, probably, unless overridden by --localdir. Also, autoreconf recurses on all subdirectories containing a configure.in, not just those given by an AC_CONFIG_SUBDIRS directive. This may not be a problem in practice. ------------------------------------------------------------------------------