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 double
type with more range or precision than thedouble
type, defineHAVE_LONG_DOUBLE
.You should use
AC_TYPE_LONG_DOUBLE
orAC_TYPE_LONG_DOUBLE_WIDER
instead. 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_TARGET
is 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 theCHECK
clan, 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_TYPE
is 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_TYPE
are 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_TYPES
together with#if !HAVE_LOFF_T typedef loff_t off_t; #endif
This is an obsolete version of
AC_TRY_COMPILE
itself 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_CHECKING
andAC_MSG_RESULT
instead to print messages (see Printing Messages).
Check for the Cygwin environment in which case the shell variable
CYGWIN
is 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
CYGWIN
has 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_VOID
andAC_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 DIRENT
HAVE_DIRENT_H
sys/ndir.h SYSNDIR
HAVE_SYS_NDIR_H
sys/dir.h SYSDIR
HAVE_SYS_DIR_H
ndir.h NDIR
HAVE_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
EXEEXT
based 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
wait3
is 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
, aswait3
has been removed from Posix.
This macro is equivalent to calling
AC_CHECK_LIB
with 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_INIT
used to have a single argument, and was equivalent to:AC_INIT AC_CONFIG_SRCDIR(unique-file-in-source-dir)
If the C type
int
is 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_GETMNTENT
instead. 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_PUSH
is 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_BITS
if the C typelong int
is 64 bits wide. Use the generic macro ‘AC_CHECK_SIZEOF([long int])’ instead.
If the C compiler supports a working
long double
type with more range or precision than thedouble
type, defineHAVE_LONG_DOUBLE
.You should use
AC_TYPE_LONG_DOUBLE
orAC_TYPE_LONG_DOUBLE_WIDER
instead. See Particular Types.
Used to define
NEED_MEMORY_H
if themem
functions 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_CYGWIN
but checks for the MinGW compiler environment and setsMINGW32
.
Defined the output variable
OBJEXT
based 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_DEFUN
instead, since it gives better services to the user.
The use of
AC_OUTPUT
with 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_COMMANDS
requires an additional key, an important difference is thatAC_OUTPUT_COMMANDS
is quoting its arguments twice, unlikeAC_CONFIG_COMMANDS
. This means thatAC_CONFIG_COMMANDS
can 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_STRFTIME
instead.
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
sigaction
withSA_RESTART
if 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
#include
statements 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
#include
statements 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 additionLDFLAGS
andLIBS
are 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
USG
if 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
LIBS
if on Xenix. Also, if dirent.h is being checked for, added -ldir toLIBS
. Now it is merely an alias ofAC_HEADER_DIRENT
instead, 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=])