Next: Autoconf 1, Previous: autoupdate Invocation, Up: Obsolete Constructs
Several macros are obsoleted in Autoconf, for various reasons (typically they failed to quote properly, couldn't be extended for more recent issues, etc.). They are still supported, but deprecated: their use should be avoided.
During the jump from Autoconf version 1 to version 2, most of the macros were renamed to use a more uniform and descriptive naming scheme, but their signature did not change. See Macro Names, for a description of the new naming scheme. Below, if there is just the mapping from old names to new names for these macros, the reader is invited to refer to the definition of the new macro for the signature and the description.
If the C compiler supports a working
long doubletype with more range or precision than thedoubletype, defineHAVE_LONG_DOUBLE.You should use
AC_TYPE_LONG_DOUBLEorAC_TYPE_LONG_DOUBLE_WIDERinstead. See Particular Types.
Determine the system type and set output variables to the names of the canonical system types. See Canonicalizing, for details about the variables this macro sets.
The user is encouraged to use either
AC_CANONICAL_BUILD, orAC_CANONICAL_HOST, orAC_CANONICAL_TARGET, depending on the needs. UsingAC_CANONICAL_TARGETis enough to run the two other macros.
Autoconf, up to 2.13, used to provide this version of
AC_CHECK_TYPE, deprecated because of its flaws. First, although it is a member of theCHECKclan, it does more than just checking. Secondly, missing types are defined using#define, nottypedef, and this can lead to problems in the case of pointer types.This use of
AC_CHECK_TYPEis obsolete and discouraged; see Generic Types, for the description of the current macro.If the type type is not defined, define it to be the C (or C++) builtin type default, e.g., ‘short int’ or ‘unsigned int’.
This macro is equivalent to:
AC_CHECK_TYPE([type], [], [AC_DEFINE_UNQUOTED([type], [default], [Define to `default' if <sys/types.h> does not define.])])In order to keep backward compatibility, the two versions of
AC_CHECK_TYPEare implemented, selected by a simple heuristics:
- If there are three or four arguments, the modern version is used.
- If the second argument appears to be a C or C++ type, then the obsolete version is used. This happens if the argument is a C or C++ builtin type or a C identifier ending in ‘_t’, optionally followed by one of ‘[(* ’ and then by a string of zero or more characters taken from the set ‘[]()* _a-zA-Z0-9’.
- If the second argument is spelled with the alphabet of valid C and C++ types, the user is warned and the modern version is used.
- Otherwise, the modern version is used.
You are encouraged either to use a valid builtin type, or to use the equivalent modern code (see above), or better yet, to use
AC_CHECK_TYPEStogether with#if !HAVE_LOFF_T typedef loff_t off_t; #endif
This is an obsolete version of
AC_TRY_COMPILEitself replaced byAC_COMPILE_IFELSE(see Running the Compiler), with the addition that it prints ‘checking for echo-text’ to the standard output first, if echo-text is non-empty. UseAC_MSG_CHECKINGandAC_MSG_RESULTinstead to print messages (see Printing Messages).
Check for the Cygwin environment in which case the shell variable
CYGWINis set to ‘yes’. Don't use this macro, the dignified means to check the nature of the host is usingAC_CANONICAL_HOST. As a matter of fact this macro is defined as:AC_REQUIRE([AC_CANONICAL_HOST])[]dnl case $host_os in *cygwin* ) CYGWIN=yes;; * ) CYGWIN=no;; esacBeware that the variable
CYGWINhas a special meaning when running Cygwin, and should not be changed. That's yet another reason not to use this macro.
AC_CHECK_DECLS([sys_siglist], [], [],
[#include <signal.h>
/* NetBSD declares sys_siglist in unistd.h. */
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
])
Like calling
AC_FUNC_CLOSEDIR_VOIDandAC_HEADER_DIRENT, but defines a different set of C preprocessor macros to indicate which header file is found:
Header Old Symbol New Symbol dirent.h DIRENTHAVE_DIRENT_Hsys/ndir.h SYSNDIRHAVE_SYS_NDIR_Hsys/dir.h SYSDIRHAVE_SYS_DIR_Hndir.h NDIRHAVE_NDIR_H
If on DYNIX/ptx, add -lseq to output variable
LIBS. This macro used to be defined asAC_CHECK_LIB([seq], [getmntent], [LIBS="-lseq $LIBS"])now it is just
AC_FUNC_GETMNTENT.
Defined the output variable
EXEEXTbased on the output of the compiler, which is now done automatically. Typically set to empty string if Posix and ‘.exe’ if a DOS variant.
If
wait3is found and fills in the contents of its third argument (a ‘struct rusage *’), which HP-UX does not do, defineHAVE_WAIT3.These days portable programs should use
waitpid, notwait3, aswait3has been removed from Posix.
This macro is equivalent to calling
AC_CHECK_LIBwith a function argument ofmain. In addition, library can be written as any of ‘foo’, -lfoo, or ‘libfoo.a’. In all of those cases, the compiler is passed -lfoo. However, library cannot be a shell variable; it must be a literal name.
Formerly
AC_INITused to have a single argument, and was equivalent to:AC_INIT AC_CONFIG_SRCDIR(unique-file-in-source-dir)
If the C type
intis 16 bits wide, defineINT_16_BITS. Use ‘AC_CHECK_SIZEOF(int)’ instead.
If on irix (Silicon Graphics Unix), add -lsun to output
LIBS. If you were using it to getgetmntent, useAC_FUNC_GETMNTENTinstead. If you used it for the NIS versions of the password and group functions, use ‘AC_CHECK_LIB(sun, getpwnam)’. Up to Autoconf 2.13, it used to beAC_CHECK_LIB([sun], [getmntent], [LIBS="-lsun $LIBS"])now it is defined as
AC_FUNC_GETMNTENT AC_CHECK_LIB([sun], [getpwnam])
Select the language that is saved on the top of the stack, as set by
AC_LANG_SAVE, remove it from the stack, and callAC_LANG(language).
Remember the current language (as set by
AC_LANG) on a stack. The current language does not change.AC_LANG_PUSHis preferred.
This is an obsolete version of
AC_CONFIG_LINKS. An updated version of:AC_LINK_FILES(config/$machine.h config/$obj_format.h, host.h object.h)is:
AC_CONFIG_LINKS([host.h:config/$machine.h object.h:config/$obj_format.h])
Define
LONG_64_BITSif the C typelong intis 64 bits wide. Use the generic macro ‘AC_CHECK_SIZEOF([long int])’ instead.
If the C compiler supports a working
long doubletype with more range or precision than thedoubletype, defineHAVE_LONG_DOUBLE.You should use
AC_TYPE_LONG_DOUBLEorAC_TYPE_LONG_DOUBLE_WIDERinstead. See Particular Types.
Used to define
NEED_MEMORY_Hif thememfunctions were defined in memory.h. Today it is equivalent to ‘AC_CHECK_HEADERS([memory.h])’. Adjust your code to depend uponHAVE_MEMORY_H, notNEED_MEMORY_H; see Standard Symbols.
Similar to
AC_CYGWINbut checks for the MinGW compiler environment and setsMINGW32.
Defined the output variable
OBJEXTbased on the output of the compiler, after .c files have been excluded. Typically set to ‘o’ if Posix, ‘obj’ if a DOS variant. Now the compiler checking macros handle this automatically.
Make M4 print a message to the standard error output warning that this-macro-name is obsolete, and giving the file and line number where it was called. this-macro-name should be the name of the macro that is calling
AC_OBSOLETE. If suggestion is given, it is printed at the end of the warning message; for example, it can be a suggestion for what to use instead of this-macro-name.For instance
AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnlYou are encouraged to use
AU_DEFUNinstead, since it gives better services to the user.
The use of
AC_OUTPUTwith argument is deprecated. This obsoleted interface is equivalent to:AC_CONFIG_FILES(file...) AC_CONFIG_COMMANDS([default], extra-cmds, init-cmds) AC_OUTPUT
Specify additional shell commands to run at the end of config.status, and shell commands to initialize any variables from configure. This macro may be called multiple times. It is obsolete, replaced by
AC_CONFIG_COMMANDS.Here is an unrealistic example:
fubar=27 AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.], [fubar=$fubar]) AC_OUTPUT_COMMANDS([echo this is another, extra, bit], [echo init bit])Aside from the fact that
AC_CONFIG_COMMANDSrequires an additional key, an important difference is thatAC_OUTPUT_COMMANDSis quoting its arguments twice, unlikeAC_CONFIG_COMMANDS. This means thatAC_CONFIG_COMMANDScan safely be given macro calls as arguments:AC_CONFIG_COMMANDS(foo, [my_FOO()])Conversely, where one level of quoting was enough for literal strings with
AC_OUTPUT_COMMANDS, you need two withAC_CONFIG_COMMANDS. The following lines are equivalent:AC_OUTPUT_COMMANDS([echo "Square brackets: []"]) AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
If on SCO Unix, add -lintl to output variable
LIBS. This macro used to do this:AC_CHECK_LIB([intl], [strftime], [LIBS="-lintl $LIBS"])Now it just calls
AC_FUNC_STRFTIMEinstead.
If the system automatically restarts a system call that is interrupted by a signal, define
HAVE_RESTARTABLE_SYSCALLS. This macro does not check whether system calls are restarted in general—it checks whether a signal handler installed withsignal(but notsigaction) causes system calls to be restarted. It does not check whether system calls can be restarted when interrupted by signals that have no handler.These days portable programs should use
sigactionwithSA_RESTARTif they want restartable system calls. They should not rely onHAVE_RESTARTABLE_SYSCALLS, since nowadays whether a system call is restartable is a dynamic issue, not a configuration-time issue.
AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[includes]], [[function-body]])], [action-if-true], [action-if-false])See Running the Compiler.
This macro double quotes both includes and function-body.
For C and C++, includes is any
#includestatements needed by the code in function-body (includes is ignored if the currently selected language is Fortran or Fortran 77). The compiler and compilation flags are determined by the current language (see Language Choice).
AC_PREPROC_IFELSE( [AC_LANG_SOURCE([[input]])], [action-if-true], [action-if-false])This macro double quotes the input.
AC_LINK_IFELSE( [AC_LANG_PROGRAM([[includes]], [[function-body]])], [action-if-true], [action-if-false])See Running the Compiler.
This macro double quotes both includes and function-body.
Depending on the current language (see Language Choice), create a test program to see whether a function whose body consists of function-body can be compiled and linked. If the file compiles and links successfully, run shell commands action-if-found, otherwise run action-if-not-found.
This macro double quotes both includes and function-body.
For C and C++, includes is any
#includestatements needed by the code in function-body (includes is ignored if the currently selected language is Fortran or Fortran 77). The compiler and compilation flags are determined by the current language (see Language Choice), and in additionLDFLAGSandLIBSare used for linking.
This macro is equivalent to ‘AC_LINK_IFELSE([AC_LANG_CALL([], [function])], [action-if-found], [action-if-not-found])’.
AC_RUN_IFELSE( [AC_LANG_SOURCE([[program]])], [action-if-true], [action-if-false], [action-if-cross-compiling])See Runtime.
Define
USGif the BSD string functions are defined in strings.h. You should no longer depend uponUSG, but onHAVE_STRING_H; see Standard Symbols.
If the cache file is inconsistent with the current host, target and build system types, it used to execute cmd or print a default error message. This is now handled by default.
This macro used to add -lx to output variable
LIBSif on Xenix. Also, if dirent.h is being checked for, added -ldir toLIBS. Now it is merely an alias ofAC_HEADER_DIRENTinstead, plus some code to detect whether running xenix on which you should not depend:AC_MSG_CHECKING([for Xenix]) AC_EGREP_CPP([yes], [#if defined M_XENIX && !defined M_UNIX yes #endif], [AC_MSG_RESULT([yes]); XENIX=yes], [AC_MSG_RESULT([no]); XENIX=])