Improve AC_FUNC_MMAP comments
[autoconf.git] / TODO
blobcd98426ea1c950cb1f6efa04f3ab8b8857eeb050
1 -*- outline -*-
3 Things it might be nice to do someday.  I haven't evaluated all of
4 these suggestions... their presence here doesn't imply my endorsement.
5 -djm & his successors.
8 ------------------------------------------------------------------------------
10 * Soon
12 ** AC_CHECK_HEADERS
13 and the like, don't have a consistent way to handle multi-line
14 arguments.  Fix, test, and document.
16 ** --target & AC_ARG_PROGRAM
17 Shouldn't *any* 'program' be installed as '$target_alias-program' even
18 if AC_ARG_PROGRAM is not called?  That would be much more predictable.
19 Ian?
21 ** AC_CHECK_TOOL...
22 Write a test that checks that it honors the values set by the user.
24 ** autom4te and warnings.
25 Decide what must be done.
27 ** AC_DEFINE(func, rpl_func)
28 This scheme causes problems: if for instance, #define malloc
29 rpl_malloc, then the rest of configure will use an undefined malloc.
30 Hence some tests fail.  Up to now we simply #undef these functions
31 where we had a problem (cf. AC_FUNC_MKTIME and AC_FUNC_MMAP for
32 instance).  This is _bad_.  Maybe the #define func rpl_malloc should
33 be performed in another file than confdefs.h, say confh.h, which is
34 used for config.h generation, but not used in configure's own tests.
36 ** AC_PROG_CC
37 Have a way to specify different default flags to try; see this thread
38 for more information:
39 <https://lists.gnu.org/archive/html/bug-autoconf/2008-08/msg00009.html>.
42 * Later
44 ** config.site
45 This guy is really a problem.  It's contents should be read before
46 handling the options, so that the latter properly override the latter,
47 but most people would want a means to have a config.site that depends
48 on $prefix for instance.
50 Some other would like config.site to be looked for in the current
51 directory.
53 Harlan:
55    I'll go further.
57    I'd like to see several layers of config.site available.
59    I'm starting to use "modules" at more places to handle software
60    installation, and it would be helpful to set general things like:
62         prefix=/opt/pkg/@PACKAGE@/@VERSION@
64    once at a global level, and then, for example, have things like:
66         --with-etcdir=$prefix/etc
68    stuffed "above" the various versions of SSH so I wouldn't have to hunt for
69    these things every time it was time to recompile a new version of a
70    previously installed package.
72    Something like:
74      src/config.site            Global stuff
75      ...
76      src/ssh/config.site                package-specific stuff
77      src/ssh/ssh-1.2.27/                the actual source code
79    I'd like to see automake/autoconf better support packaging tools (like
80    modules, the *BSD ports/ stuff, and others would like hooks for RPMs).
83 ** Languages
84 Integrate other Fortrans etc.
86 ** Picky compilers, e.g., gcc -Werror
87 Many Autoconf-generated tests do the wrong thing if someone configures
88 with CC='gcc -Werror' or with similar options.  It would be nice if
89 these tests worked better with picky compilers.  This will require
90 significant reworking in some cases, e.g., AC_CHECK_FUNCS will need
91 to know the headers declaring the functions.
93 ** AC_CHECK_FUNCS and AC_TRY_LINK_FUNC
94 I have still not understood what's the difference  between the two
95 which requires to have two different sources: AC_LANG_CALL and
96 AC_LANG_FUNC_LINK_TRY (which names seem to be inappropriate).
97 Wouldn't one be enough?
99 ** Libtool
100 Define once for all the hooks they need, any redefinition of
101 AC_PROG_CC etc. is way too dangerous and too limiting.  The GCC team
102 certainly has requirements too.
104 ** AC_SEARCH_LIBS
105 From: Tom Tromey <tromey@cygnus.com>
106 Subject: AC_SEARCH_LIBS
108 I think AC_SEARCH_LIBS has an unfortunate interface.
110 ACTION-IF-FOUND is run in addition to the default action.  Most
111 autoconf macros don't work this way.  This is confusing.
113 In my case I can't use this macro because it always appends to LIBS.
114 I don't want that.  Instead I want to use ACTION-IF-FOUND to set my
115 own macro.
117 Also there is no documentation on the format of library names expected
118 by the macro.  Even a reference to some other function (e.g., "the
119 library name can have the same forms as with AC_HAVE_LIBRARY" (if that
120 is true, which I haven't looked up) would be fine.
122 ** Revamp the language support
123 We should probably have a language for C89, and C99.  We must give the
124 means to the users to specify some needs over the compilers, and
125 actually look for a good compiler, instead of stopping at the first
126 compiler we find.
128 In fact, the AC_CHECK_PROG macro and variations have proved their
129 limitation: we really need something more powerful and simpler too.
131 We must take into account the specific problems of the GCC team.  We
132 must extend AC_CHECK_FUNCS in order to use the headers instead of fake
133 declarations as we currently do.  Default headers could be triggered
134 on when C99, but not with the other languages?
136 At the end, we should have a simple macro, such as AC_LANG_COMPILER
137 for instance, which is built over simpler macros.  Each language
138 support should come with these simpler macros, but each language
139 should follow the same process.
141 We also need to check the srcext which are supported by the compiler.
142 In fact, this macro is also probably the right place to check for
143 objext and exeext.
145 ** AC_PROG_CC
146 How should the desired ISO version be specified?  AC_PROG_CC_C89
147 do not play well with each other, or with AC_PROG_CC.
148 Should be: AC_PROG_CC_ISO?  Or even more specific for the ISO version?
149 Should include more tests (e.g., AC_C_CONST etc.)?  See Peter for very
150 useful comments on the technology.  Should we make this a new
151 language?  AC_LANG(ISO C).  It would be great to introduce
152 AC_LANG_COMPILER in this release too.
154 ** autoupdate
155 We should probably install the files which do not depend upon the
156 user, just the Autoconf library files.  But conversely autoupdate must
157 be opened to user macros, i.e., for instance libtool itself must be
158 able to say that AM_PROG_LIBTOOL is now AC_PROG_LIBTOOL, and have
159 autoupdate do its job on old configure.ac.
161 * Even later
163 ** Pentateuch
164 Heck, there is nothing after 'Deuteronomy'!  We're stuck, but we
165 _must_ update the 'history' section.  Can't go to 'New testament', we
166 might hurt feelings?  In addition, it means that the Messiah has come,
167 which might be slightly presumptuous :).  Still, someone fluent in
168 English should write it.
170 ** AC_PATH_X
171 Hi Robert,
173 > Hi, autoconf people.  While packaging plotutils-2.2 (just released),
174 > I noticed what looks like a small error in the autoconf-2.13 texinfo
175 > documentation, the entry for AC_PATH_XTRA, in particular.
177 > The documentation says that AC_PATH_XTRA
178 >       ... adds the C compiler flags that X needs to output variable
179 >       'X_CFLAGS', and the X linker flags to 'X_LIBS'.  If X is not
180 >       available, adds '-DX_DISPLAY_MISSING' to 'X_CFLAGS'.
182 > It doesn't seem to add -DX_DISPLAY_MISSING to X_CFLAGS.  X_DISPLAY_MISSING
183 > ends up defined in config.h, instead.
185 That's only because you're no doubt using AC_CONFIG_HEADERS([..]) to send
186 your defines to a config.h-style file.  If you were to not use
187 AC_CONFIG_HEADERS and X was not available, then you would see
188 -DX_DISPLAY_MISSING being added to @DEFS@ as your output files were being
189 generated.
191 But you are right--the documentation is not clear about this.  I'll change
194 > In fact it looks to me as if right now, X_CFLAGS is used only for
195 > specifying directories where X include files are stored, via the '-I' option.
196 > Maybe it should really be called X_CPPFLAGS?
198 Well, perhaps.  If you feel strongly about this, feel free to submit a
199 change-request.  With the way it reads in the manual right now, it's
200 designed to allow the user to set additional flags in the environment
201 prior to running configure--and these don't need to be limited to just
202 -I flags.  Nevertheless, I can see a few clean ways to improve this.
204 ** AC_SYS_INTERPRETER
205 Defines $interpval.  This is not a standard name.  Do we want to keep
206 this?  Clarify our policy on those names.
208 ** Allow --recursive to config.status
209 So that --recheck does not pass --no-recursive to configure.
211 * autoconf.texi
212 Move the specific macro documentation blocks into the source files,
213 and use a doc-block extraction/merge technique to get documentation
214 into texi-file.  This should help avoid bit-rot in the doc, and make
215 the doc easier to update when people add/change macros.  The name
216 "autodoc" is probably already taken so we probably need another one.
218 ------------------------------------------------------------------------------
220 * m4
222 ** I18n
223 The error messages for indir and dumpdef are uselessly different.  Fix
224 this for translators.
226 ** Tracing 'builtin'
227 F**k!  --trace FOO does not catch indir([FOO], $@)!
228 Fixed in M4 1.6, but we can't rely on it yet.
230 ** m4 loops
231 As of 2.63, m4_for has a fixed iteration count for speed in the common
232 usage case.  But it used to allow the user to alter iteration count by
233 reassigning the iterator, allowing a break-like functionality (or even
234 infloops).  Does this need a new (but maybe slower) macro?  Should we
235 also provide something like m4_while([TEST], [EXPR])?  Maybe an
236 m4_break() that works inside a looping construct?
237 https://lists.gnu.org/archive/html/autoconf-patches/2008-08/msg00121.html
239 * Autoconf 3
241 ** Cache name spaces.
242 Cf the discussion with Kaveh.  One would like to
243 AC_CHECK_FUNCS(bar)
244 # Do something that changes the environment
245 AC_CACHE_PUSH(foo)
246 AC_CHECK_FUNCS(bar)
247 AC_CACHE_POP
248 in order not to erase the results of a check with another.
250 ** Cache var names
251 should depend upon the current language.
253 ** Use m4 lists?
254 I think one sad decision in Autoconf was to use white space separated
255 lists for some arguments.  For instance AC_CHECK_FUNCS(foo bar).  I
256 tend to think that, even if it is not as nice, we should use m4 lists,
257 i.e., AC_CHECK_FUNCS([foo, bar]) in this case.  This would ease
258 specializing loops, and more importantly, make them much more robust.
260 A typical example of things that can be performed if we use m4 lists
261 instead of white space separated lists is the case of things that have
262 a space in their names, eg, structures.
264 With the current scheme it would be extremely difficult to loop over
265 AC_CHECK_STRUCTS(struct foo struct bar), while it natural and well
266 defined for m4 lists: AC_CHECK_STRUCTS([struct foo, struct bar]).
268 I know that makes a huge difference in syntax, but a major release
269 should be ready to settle a new world.  We *can* provide helping tools
270 for the transition.  Considering the benefits, I really think it is
271 worth thinking. --akim
273 ** Forbid shell variables as main arguments
274 The fact that we have to support shell variables as main argument
275 forbids many interesting constructions (specialization are not always
276 possible, equally for AC_REQUIRE'ing macros *with their arguments*).
277 Any loop should be handled by m4 itself, and nothing should be hidden
278 to it.  As a consequence, shell variables on the main arguments become
279 useless (the main reason we support shell variables is to allow the
280 loop versions of single argument macros, eg, to go from AC_CHECK_FUNC
281 to AC_CHECK_FUNCS). --akim
283 ** Use the @SUBST@ technology also for headers instead of #undef.
284 This requires that acconfig.h becomes completely obsolete: autoheader
285 should generate all the templates.
287 ** Specializing loops.
288 For instance, make AC_CHECK_FUNC[S] automatically use any particular
289 macros for the listed functions.
290 This requires to obsolete the feature 'break' in ACTION-IF, since all
291 the loops are to be handled by m4, not sh.
293 ** Faces of a test
294 Each macro can potentially come with several faces: of course the
295 configure snippet (AC_foo), a config.h snippet (AH_foo), a system.h
296 snippet (AS_foo), documentation (AD_foo) and, why not, the some C code
297 for instance to replace a function.
299 The motivation for the 'faces' is to encapsulate.  It is abnormal that
300 once one has a configure macro, then she has to read somewhere to find
301 the piece of system.h to use etc.  The macros should come in a
302 self-contained way, or, said it another way, PnP.
304 A major issue is that of specialization.  AC_CHECK_HEADER (or another
305 name) for instance, will have as an effect, via system.h to include
306 the header.  But if the test for the header is specific, the generic
307 AS_CHECK_HEADER will still be used.  Conversely, some headers may not
308 require a specific AC_ tests, but a specialized AS_ macro.
310 ------------------------------------------------------------------------------
312 * Make AC_CHECK_LIB check whether the function is already available
313   before checking for the library.  This might involve adding another
314   kind of cache variable to indicate whether a given function needs a
315   given library.  The current ac_cv_func_ variables are intended to
316   indicate whether the function is in the default libraries, but
317   actually also take into account whatever value LIBS had when they
318   were checked for.
320   Isn't this the issue of AC_SEARCH_LIB? --akim
321   How come the list of libraries to browse not an additional parameter
322   of AC_CHECK_FUNC, exactly like for the headers? --akim
324 ------------------------------------------------------------------------------
326 * Select the right CONFIG_SHELL automatically (for Ultrix, Lynx especially.)
328 ------------------------------------------------------------------------------
330 * Doc: Centralize information on POSIX, MS-DOS, cross-compiling, and
331   other important topics.
333 ------------------------------------------------------------------------------
335 * Mike Haertel's suggestions:
337 ** Cross compiling:
339 *** Error messages include instructions for overriding defaults using
340 config.site.
342 *** Distribute a config.site corresponding to a hypothetical bare POSIX system with c89.
344 ** Site defaults:
346 *** 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.
348 ------------------------------------------------------------------------------
350 * Look at user contributed macros:
351         IEEE double precision math
352         more
354 ------------------------------------------------------------------------------
356 * Provide a way to create a config.h *and* set the DEFS variable from within
357 the same configure script.
359 ------------------------------------------------------------------------------
361 In config.status comment, put the host/target/build types, if used.
363 ------------------------------------------------------------------------------
365 It would be nice if I could (in the Makefile.in files) set the
366 relative name of config.h. You have config.h ../config.h
367 ../../config.h's all over the place, in the findutils-4.1 directory.
368 From: "Randall S. Winchester" <rsw@eng.umd.edu>
370 ------------------------------------------------------------------------------
372         ls -lt configure configure.in | sort
373 doesn't work right if configure.in is from a symlink farm, where the
374 symlink has either a timestamp of its own, or under BSD 4.4, it has
375 the timestamp of the current directory, neither of which
376 helps. Changing it to
377         ls -Llt configure configure.in | sort
378 works for me, though I don't know how portable that is
379 _Mark_ <eichin@cygnus.com>
381 ------------------------------------------------------------------------------
383 Here is the thing I would like the most;
384 AC_PKG_WITH(PACKAGE, HELP_STRING, PACKAGE-ROOT, PACKAGE-LIBS, PACKAGE-DEFS,
385         PACKAGE-CCPFLAGS)
386 like
388 AC_PKG_WITH(kerberos,,/usr/local/athena,-lkrb -ldes,[KERBEROS KRB4
389 CRYPT],include)
390 AC_PKG_WITH(hesiod,
391 [if hesiod is not in kerberos-root add --with-hesiod-root=somewhere]
392 ,,-lhesiod,HESIOD,,)
393 AC_PKG_WITH(glue,,,-lglue,GLUE,,)
394 AC_PKG_WITH(bind,,/usr/local/bind, [lib/resolv.a lib/lib44bsd.a], ,include)
395 After the appropriate checks, the existence of the files, and libs and such
396 LIBS=$LIBS $PKG-LIBS
397 DEFS=$DEFS $PKG-DEFS
398 CPPFLAGS=$PKG-CPPFLAGS $CPPFLAGS
399 $PKG-ROOT=$PKG-ROOT
400 The cppflags should reverse the order so that you can have;
401 -I/usr/local/bind/include -I/usr/local/athena/include
403 -L/usr/local/athena/lib -lkrb -ldes /usr/local/bind/lib/libresolv.a
404 as order matters.
406 also an AC_PKG_CHK_HEADER
407 and an AC_PKG_CHK_FUNCTION
408 so one can give alternate names to check for stuff ($PKG-ROOT/lib for
409 example)
410 From: Randall Winchester
412 ------------------------------------------------------------------------------
414 AC_C_CROSS assumes that configure was called like 'CC=target-gcc;
415 ./configure'. I want to write a package that has target dependent
416 libraries and host dependent tools. So I don't like to lose the
417 distinction between CC and [G]CC_FOR_TARGET.  AC_C_CROSS should check
418 for equality of target and host.
420 It would be great if
422 GCC_FOR_TARGET
423 AR_FOR_TARGET
424 RANLIB_FOR_TARGET
426 would be set automatically if host != target.
427 AC_LANG_CROSS_C would be nice too, to check header files
428 etc. with GCC_FOR_TARGET instead of CC
430 Here is one simple test
432 if test "x$host" != "x$target"; then
433 AC_CHECK_PROGS(AR_FOR_TARGET,
434                [$target-ar, $prefix/$target/bin/ar], $target-ar)
435 AC_CHECK_PROGS(RANLIB_FOR_TARGET, $target-ranlib, $target-ranlib)
436                [$target-ranlib, $prefix/$target/bin/ranlib], $target-ranlib)
437 AC_CHECK_PROGS(GCC_FOR_TARGET, $target-gcc, $target-gcc)
438                [$target-gcc, $prefix/$target/bin/gcc], $target-gcc)
441 From: nennker@cs.tu-berlin.DE (Axel Nennker)
443 (also look in the autoconf mailing list archives for the proposed
444 CHECK_TARGET_TOOL macro from Nathanael Nerode, a gcc configury guru).
446 ------------------------------------------------------------------------------
448 The problem occurs with the following libc functions in SunOS 5.4:
450         fnmatch glob globfree regcomp regexec regerror regfree wordexp wordfree
452 It also occurs with a bunch more libposix4 functions that most people
453 probably aren't worried about yet, e.g. shm_open.
455 All these functions fail with errno set to ENOSYS (89)
456 "Operation not applicable".
458 Perhaps Autoconf should have a specific macro for fnmatch, another for
459 glob+globfree, another for regcomp+regexec+regerror+regfree, and
460 another for wordexp+wordfree.  This wouldn't solve the problem in
461 general, but it should work for Solaris 2.4.  Or Autoconf could limit
462 itself to fnmatch and regcomp, the only two functions that I know have
463 been a problem so far.
465 From Paul Eggert.
467 ------------------------------------------------------------------------------
469 Make easy macros for checking for X functions and libraries, such as Motif.
471 ------------------------------------------------------------------------------
473 There are basically three ways to lock files
474         lockf, fnctl, flock
475 I'd be interested in adding a macro to pick the "right one" if you're
476 interested.
478 From:    Rich Salz <rsalz@osf.org>
480 ------------------------------------------------------------------------------
482 Timezone calculations checks.
484 ------------------------------------------------------------------------------
486 Support different default file system layouts, e.g. SVR4, Linux.
487 Of course, this can be done locally with config.site.
489 ------------------------------------------------------------------------------
491 I wonder if it is possible to get the name of X11's app-defaults
492 directory by autoconf. Moreover, I'd like to have a general way of
493 accessing imake variables by autoconf, something like
495 AC_DEFINE(WINE_APP_DEFAULTS, AC_IMAKE_VAR(XAPPLOADDIR))
497 Slaven Rezic <eserte@cabulja.herceg.de>
499 ------------------------------------------------------------------------------
501 Every user running X11 usually has a directory like *X11* in his PATH
502 variable. By replacing bin by include, you can find good places to
503 look for the include files or libraries.
505 From: rcb5@win.tue.nl (Richard Verhoeven)
507 ------------------------------------------------------------------------------
509 In most cases, when autoscan suggests something, using the search or
510 index command into the Info reader for autoconf manual quickly
511 explains me what the test is about.  However, for header files and
512 functions, the search might fail, because the test is not of the
513 specific kind.  The Autoconf manual should reflect somewhere all
514 header files or functions (non-specific features, generally)
515 triggering autoscan to generate tests, and tell in a few words what is
516 the problem, and the suggested approach for a solution; that is, how
517 one should use the result of testing the feature.
519 From: pinard@iro.umontreal.ca
521 ------------------------------------------------------------------------------
523 It would be nice if the configure script would handle an option such as
524 --x-libraries="/usr/openwin/lib /usr/dt/lib".
526 Rick Boykin <rboykin@cscsun3.larc.nasa.gov>
528 Under Solaris 2.4, the regular X includes and libs and the Motif
529 includes and libs are in different places.  The Emacs configure script
530 actually allows dir1:dir2:dir3 --
532     if test "${x_libraries}" != NONE && test -n "${x_libraries}"; then
533       LD_SWITCH_X_SITE=-L`echo ${x_libraries} | sed -e "s/:/ -L/g"`
534       LD_SWITCH_X_SITE_AUX=-R`echo ${x_libraries} | sed -e "s/:/ -R/g"`
535     fi
536     if test "${x_includes}" != NONE && test -n "${x_includes}"; then
537       C_SWITCH_X_SITE=-I`echo ${x_includes} | sed -e "s/:/ -I/g"`
538     fi
540 ------------------------------------------------------------------------------
542     What messages should be produced by default, if any?
544 Probably only the few most important ones, like which configuration
545 name was used, whether X or Xt are in use, etc. The specific
546 decisions, and progress messages, should be recorded on the terminal
547 only if --verbose is used.
549     --silent just suppresses the "checking for...result"
550     messages, not the "creating FOO" messages.
552 I think the default should be to suppress both.
553 From: Richard Stallman <rms@gnu.ai.mit.edu>
555 There is no distinction now between
556 important decisions (we have X) vs minor decisions (we have lstat).
557 However, there are probably only a few things you deem important enough to
558 announce and only those few things will need to be changed.
559 Perhaps config.status could be written with comments saying what was
560 decided.
561 From: Roland McGrath <roland@gnu.ai.mit.edu>
563 ------------------------------------------------------------------------------
565 Another thing I wish for is a macro which figures out which libraries are
566 needed for BSD-style sockets.  AC_PATH_X already detects this
567 correctly...so it's just a matter of separating out the socket-related code.
568 From: "Joel N. Weber II" <nemo@koa.iolani.honolulu.hi.us>
570 ------------------------------------------------------------------------------
572 in order to use the AC_CANONICAL_SYSTEM macro, I have to have
573 install-sh somewhere nearby --- why is this?  I have no real reason to
574 distribute install-sh, other than that its absence breaks this code.
576 Shouldn't the above loop be looking for config.sub and config.guess?
577 From: jimb@totoro.bio.indiana.edu (Jim Blandy)
579 adding AC_CANONICAL_HOST to my configure.in script caused
580 all sorts of odd/unexplained errors.  Obviously, I had to go
581 get copies of config.guess, config.sub and install-sh from the
582 autoconf distribution, but the error messages and autoconf docs
583 didn't explain that very well.
584 From: bostic@bsdi.com (Keith Bostic)
586 ------------------------------------------------------------------------------
588 Perhaps also have AC_TRY_COMPILER try to link an invalid program, and
589 die if the compiler seemed to succeed--in which case it's not usable
590 with autoconf scripts.
592 ------------------------------------------------------------------------------
594 Copyright (C) 1994-1996, 1999-2002, 2007-2017, 2020-2023 Free Software
595 Foundation, Inc.
597 Copying and distribution of this file, with or without modification,
598 are permitted in any medium without royalty provided the copyright
599 notice and this notice are preserved.  This file is offered as-is,
600 without warranty of any kind.