[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros test for particular system features that packages might need or want to use. If you need to test for a kind of feature that none of these macros check for, you can probably do it by calling primitive test macros with appropriate arguments (see section Writing Tests).
These tests print messages telling the user which feature they're
checking for, and what they find. They cache their results for future
configure
runs (see section Caching Results).
Some of these macros set output variables. See section Substitutions in Makefiles, for how to get their values. The phrase "define name" is used below as a shorthand to mean "define C preprocessor symbol name to the value 1". See section Defining C Preprocessor Symbols, for how to get those symbol definitions into your program.
5.1 Common Behavior | Macros' standard schemes | |
5.2 Alternative Programs | Selecting between alternative programs | |
5.3 Files | Checking for the existence of files | |
5.4 Library Files | Library archives that might be missing | |
5.5 Library Functions | C library functions that might be missing | |
5.6 Header Files | Header files that might be missing | |
5.7 Declarations | Declarations that may be missing | |
5.8 Structures | Structures or members that might be missing | |
5.9 Types | Types that might be missing | |
5.10 Compilers and Preprocessors | Checking for compiling programs | |
5.11 Compiling and preprocessing Fortran | ||
5.12 System Services | Operating system services | |
5.13 UNIX Variants | Special kludges for specific UNIX variants |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Much effort has been expended to make Autoconf easy to learn. The most obvious way to reach this goal is simply to enforce standard interfaces and behaviors, avoiding exceptions as much as possible. Because of history and inertia, unfortunately, there are still too many exceptions in Autoconf; nevertheless, this section describes some of the common rules.
5.1.1 Standard Symbols | Symbols defined by the macros | |
5.1.2 Default Includes | Includes used by the generic macros |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
All the generic macros that AC_DEFINE
a symbol as a result of
their test transform their arguments to a standard alphabet.
First, argument is converted to upper case and any asterisks
(`*') are each converted to `P'. Any remaining characters
that are not alphanumeric are converted to underscores.
For instance,
AC_CHECK_TYPES(struct $Expensive*) |
will define the symbol `HAVE_STRUCT__EXPENSIVEP' if the check succeeds.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Several tests depend upon a set of header files. Since these headers are not universally available, tests actually have to provide a set of protected includes, such as:
#if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> #else # if HAVE_SYS_TIME_H # include <sys/time.h> # else # include <time.h> # endif #endif |
Unless you know exactly what you are doing, you should avoid using unconditional includes, and check the existence of the headers you include beforehand (see section Header Files).
Most generic macros use the following macro to provide the default set of includes:
Expand to include-directives if defined, otherwise to:
#include <stdio.h> #if HAVE_SYS_TYPES_H # include <sys/types.h> #endif #if HAVE_SYS_STAT_H # include <sys/stat.h> #endif #if STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # if HAVE_STDLIB_H # include <stdlib.h> # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #if HAVE_STRINGS_H # include <strings.h> #endif #if HAVE_INTTYPES_H # include <inttypes.h> #else # if HAVE_STDINT_H # include <stdint.h> # endif #endif #if HAVE_UNISTD_H # include <unistd.h> #endif |
If the default includes are used, then check for the presence of these
headers and their compatibility, i.e., you don't need to run
AC_HEADERS_STDC
, nor check for `stdlib.h' etc.
These headers are checked for in the same order as they are included.
For instance, on some systems `string.h' and `strings.h' both
exist, but conflict. Then HAVE_STRING_H
will be defined, but
HAVE_STRINGS_H
won't.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros check for the presence or behavior of particular programs. They are used to choose between several alternative programs and to decide what to do once one has been chosen. If there is no macro specifically defined to check for a program you need, and you don't need to check for any special properties of it, then you can use one of the general program-check macros.
5.2.1 Particular Program Checks | Special handling to find certain programs | |
5.2.2 Generic Program and File Checks | How to find other programs |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros check for particular programs--whether they exist, and in some cases whether they support certain features.
Check for gawk
, mawk
, nawk
, and awk
, in that
order, and set output variable AWK
to the first one that is found.
It tries gawk
first because that is reported to be the
best implementation.
Check for grep -E
and egrep
, in that order, and set
output variable EGREP
to the first one that is found.
Check for grep -F
and fgrep
, in that order, and set
output variable FGREP
to the first one that is found.
Set output variable INSTALL
to the path of a BSD-compatible
install
program, if one is found in the current PATH
.
Otherwise, set INSTALL
to `dir/install-sh -c',
checking the directories specified to AC_CONFIG_AUX_DIR
(or its
default directories) to determine dir (see section Outputting Files). Also set
the variables INSTALL_PROGRAM
and INSTALL_SCRIPT
to
`${INSTALL}' and INSTALL_DATA
to `${INSTALL} -m 644'.
This macro screens out various instances of install
known not to
work. It prefers to find a C program rather than a shell script, for
speed. Instead of `install-sh', it can also use `install.sh',
but that name is obsolete because some make
programs have a rule
that creates `install' from it if there is no `Makefile'.
Autoconf comes with a copy of `install-sh' that you can use. If
you use AC_PROG_INSTALL
, you must include either
`install-sh' or `install.sh' in your distribution, or
configure
will produce an error message saying it can't find
them--even if the system you're on has a good install
program.
This check is a safety measure to prevent you from accidentally leaving
that file out, which would prevent your package from installing on
systems that don't have a BSD-compatible install
program.
If you need to use your own installation program because it has features
not found in standard install
programs, there is no reason to use
AC_PROG_INSTALL
; just put the file name of your program into your
`Makefile.in' files.
If flex
is found, set output variable LEX
to `flex'
and LEXLIB
to `-lfl', if that library is in a standard
place. Otherwise set LEX
to `lex' and LEXLIB
to
`-ll'.
Define YYTEXT_POINTER
if yytext
is a `char *' instead
of a `char []'. Also set output variable LEX_OUTPUT_ROOT
to
the base of the file name that the lexer generates; usually
`lex.yy', but sometimes something else. These results vary
according to whether lex
or flex
is being used.
You are encouraged to use Flex in your sources, since it is both more
pleasant to use than plain Lex and the C source it produces is portable.
In order to ensure portability, however, you must either provide a
function yywrap
or, if you don't use it (e.g., your scanner has
no `#include'-like feature), simply include a `%noyywrap'
statement in the scanner's source. Once this done, the scanner is
portable (unless you felt free to use nonportable constructs) and
does not depend on any library. In this case, and in this case only, it
is suggested that you use this Autoconf snippet:
AC_PROG_LEX if test "$LEX" != flex; then LEX="$SHELL $missing_dir/missing flex" AC_SUBST(LEX_OUTPUT_ROOT, lex.yy) AC_SUBST(LEXLIB, '') fi |
The shell script missing
can be found in the Automake
distribution.
To ensure backward compatibility, Automake's AM_PROG_LEX
invokes
(indirectly) this macro twice, which will cause an annoying but benign
"AC_PROG_LEX
invoked multiple times" warning. Future versions
of Automake will fix this issue; meanwhile, just ignore this message.
If `ln -s' works on the current file system (the operating system
and file system support symbolic links), set the output variable
LN_S
to `ln -s'; otherwise, if `ln' works, set
LN_S
to `ln', and otherwise set it to `cp -p'.
If you make a link in a directory other than the current directory, its
meaning depends on whether `ln' or `ln -s' is used. To safely
create links using `$(LN_S)', either find out which form is used
and adjust the arguments, or always invoke ln
in the directory
where the link is to be created.
In other words, it does not work to do:
$(LN_S) foo /x/bar |
Instead, do:
(cd /x && $(LN_S) foo bar) |
Set output variable RANLIB
to `ranlib' if ranlib
is found, and otherwise to `:' (do nothing).
If bison
is found, set output variable YACC
to `bison
-y'. Otherwise, if byacc
is found, set YACC
to
`byacc'. Otherwise set YACC
to `yacc'.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros are used to find programs not covered by the "particular"
test macros. If you need to check the behavior of a program as well as
find out whether it is present, you have to write your own test for it
(see section Writing Tests). By default, these macros use the environment
variable PATH
. If you need to check for a program that might not
be in the user's PATH
, you can pass a modified path to use
instead, like this:
AC_PATH_PROG([INETD], [inetd], [/usr/libexec/inetd], [$PATH:/usr/libexec:/usr/sbin:/usr/etc:etc]) |
You are strongly encouraged to declare the variable passed to
AC_CHECK_PROG
etc. as precious, See section Setting Output Variables,
AC_ARG_VAR
, for more details.
Check whether program prog-to-check-for exists in PATH
. If
it is found, set variable to value-if-found, otherwise to
value-if-not-found, if given. Always pass over reject (an
absolute file name) even if it is the first found in the search path; in
that case, set variable using the absolute file name of the
prog-to-check-for found that is not reject. If
variable was already set, do nothing. Calls AC_SUBST
for
variable.
Check for each program in the whitespace-separated list
progs-to-check-for existing in the PATH
. If one is found, set
variable to the name of that program. Otherwise, continue
checking the next program in the list. If none of the programs in the
list are found, set variable to value-if-not-found; if
value-if-not-found is not specified, the value of variable
is not changed. Calls AC_SUBST
for variable.
Like AC_CHECK_PROG
, but first looks for prog-to-check-for
with a prefix of the host type as determined by
AC_CANONICAL_HOST
, followed by a dash (see section Getting the Canonical System Type).
For example, if the user runs `configure --host=i386-gnu', then
this call:
AC_CHECK_TOOL(RANLIB, ranlib, :) |
sets RANLIB
to `i386-gnu-ranlib' if that program exists in
PATH
, or otherwise to `ranlib' if that program exists in
PATH
, or to `:' if neither program exists.
Like AC_CHECK_TOOL
, each of the tools in the list
progs-to-check-for are checked with a prefix of the host type as
determined by AC_CANONICAL_HOST
, followed by a dash
(see section Getting the Canonical System Type). If none of the tools can be found with a
prefix, then the first one without a prefix is used. If a tool is found,
set variable to the name of that program. If none of the tools in
the list are found, set variable to value-if-not-found; if
value-if-not-found is not specified, the value of variable
is not changed. Calls AC_SUBST
for variable.
Like AC_CHECK_PROG
, but set variable to the entire
path of prog-to-check-for if found.
Like AC_CHECK_PROGS
, but if any of progs-to-check-for
are found, set variable to the entire path of the program
found.
Like AC_CHECK_TOOL
, but set variable to the entire
path of the program if it is found.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
You might also need to check for the existence of files. Before using these macros, ask yourself whether a run-time test might not be a better solution. Be aware that, like most Autoconf macros, they test a feature of the host machine, and therefore, they die when cross-compiling.
Check whether file file exists on the native system. If it is found, execute action-if-found, otherwise do action-if-not-found, if given.
Executes AC_CHECK_FILE
once for each file listed in files.
Additionally, defines `HAVE_file' (see section Standard Symbols)
for each file found.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for the presence of certain C, C++, or Fortran library archive files.
Depending on the current language(see section Language Choice), try to ensure that the C, C++, or Fortran function function is available by checking whether a test program can be linked with the library library to get the function. library is the base name of the library; e.g., to check for `-lmp', use `mp' as the library argument.
action-if-found is a list of shell commands to run if the link
with the library succeeds; action-if-not-found is a list of shell
commands to run if the link fails. If action-if-found is not
specified, the default action will prepend `-llibrary' to
LIBS
and define `HAVE_LIBlibrary' (in all
capitals). This macro is intended to support building LIBS
in
a right-to-left (least-dependent to most-dependent) fashion such that
library dependencies are satisfied as a natural side-effect of
consecutive tests. Some linkers are very sensitive to library ordering
so the order in which LIBS
is generated is important to reliable
detection of libraries.
If linking with library results in unresolved symbols that would
be resolved by linking with additional libraries, give those libraries
as the other-libraries argument, separated by spaces:
e.g., `-lXt -lX11'. Otherwise, this macro will fail to detect
that library is present, because linking the test program will
always fail with unresolved symbols. The other-libraries argument
should be limited to cases where it is desirable to test for one library
in the presence of another that is not already in LIBS
.
Search for a library defining function if it's not already available. This equates to calling `AC_LINK_IFELSE([AC_LANG_CALL([], [function])])' first with no libraries, then for each library listed in search-libs.
Add `-llibrary' to LIBS
for the first library found
to contain function, and run action-if-found. If the
function is not found, run action-if-not-found.
If linking with library results in unresolved symbols that would be resolved by linking with additional libraries, give those libraries as the other-libraries argument, separated by spaces: e.g., `-lXt -lX11'. Otherwise, this macro will fail to detect that function is present, because linking the test program will always fail with unresolved symbols.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for particular C library functions. If there is no macro specifically defined to check for a function you need, and you don't need to check for any special properties of it, then you can use one of the general function-check macros.
5.5.1 Portability of C Functions | Pitfalls with usual functions | |
5.5.2 Particular Function Checks | Special handling to find certain functions | |
5.5.3 Generic Function Checks | How to find other functions |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Most usual functions can either be missing, or be buggy, or be limited on some architectures. This section tries to make an inventory of these portability issues. By definition, this list will always require additions. Please help us keeping it as complete as possible.
exit
Did you know that, on some older hosts, exit
returns int
?
This is because exit
predates void
, and there was a long
tradition of it returning int
.
putenv
POSIX specifies that putenv
puts the given string directly in
environ
, but some systems make a copy of it instead (eg.
glibc 2.0, or BSD). And when a copy is made, unsetenv
might
not free it, causing a memory leak (eg. FreeBSD 4).
POSIX specifies that putenv("FOO")
removes `FOO' from the
environment, but on some systems (eg. FreeBSD 4) this is not the
case and instead unsetenv
must be used.
On MINGW, a call putenv("FOO=")
removes `FOO' from the
environment, rather than inserting it with an empty value.
signal
handlerNormally signal
takes a handler function with a return type of
void
, but some old systems required int
instead. Any
actual int
value returned is not used, this is only a
difference in the function prototype demanded.
All systems we know of in current use take void
. Presumably
int
was to support K&R C, where of course void
is not
available. AC_TYPE_SIGNAL
(see section Particular Type Checks) can be
used to establish the correct type in all cases.
snprintf
The ISO C99 standard says that if the output array isn't big enough
and if no other errors occur, snprintf
and vsnprintf
truncate the output and return the number of bytes that ought to have
been produced. Some older systems return the truncated length (e.g.,
GNU C Library 2.0.x or IRIX 6.5), some a negative value
(e.g., earlier GNU C Library versions), and some the buffer
length without truncation (e.g., 32-bit Solaris 7). Also, some buggy
older systems ignore the length and overrun the buffer (e.g., 64-bit
Solaris 7).
sprintf
The ISO C standard says sprintf
and vsprintf
return the
number of bytes written, but on some old systems (SunOS 4 for
instance) they return the buffer pointer instead.
sscanf
On various old systems, e.g., HP-UX 9, sscanf
requires that its
input string be writable (though it doesn't actually change it). This
can be a problem when using gcc
since it normally puts
constant strings in read-only memory
(see Incompatibilities of GCC: (gcc)Incompatibilities section `Incompatibilities' in Using and Porting the GNU Compiler Collection). Apparently in some cases even
having format strings read-only can be a problem.
strnlen
AIX 4.3 provides a broken version which produces the following results:
strnlen ("foobar", 0) = 0 strnlen ("foobar", 1) = 3 strnlen ("foobar", 2) = 2 strnlen ("foobar", 3) = 1 strnlen ("foobar", 4) = 0 strnlen ("foobar", 5) = 6 strnlen ("foobar", 6) = 6 strnlen ("foobar", 7) = 6 strnlen ("foobar", 8) = 6 strnlen ("foobar", 9) = 6 |
sysconf
_SC_PAGESIZE
is standard, but some older systems (eg. HP-UX
9) have _SC_PAGE_SIZE
instead. This can be tested with
#ifdef
.
unlink
The POSIX spec says that unlink
causes the given file to be
removed only after there are no more open file handles for it. Not all
OS's support this behavior though. So even on systems that provide
unlink
, you cannot portably assume it is OK to call it on files
that are open. For example, on Windows 9x and ME, such a call would fail;
on DOS it could even lead to file system corruption, as the file might end
up being written to after the OS has removed it.
unsetenv
On MINGW, unsetenv
is not available, but a variable `FOO'
can be removed with a call putenv("FOO=")
, as described under
putenv
above.
va_copy
The ISO C99 standard provides va_copy
for copying
va_list
variables. It may be available in older environments
too, though possibly as __va_copy
(e.g., gcc
in strict
C89 mode). These can be tested with #ifdef
. A fallback to
memcpy (&dst, &src, sizeof(va_list))
will give maximum
portability.
va_list
va_list
is not necessarily just a pointer. It can be a
struct
(e.g., gcc
on Alpha), which means NULL
is
not portable. Or it can be an array (e.g., gcc
in some
PowerPC configurations), which means as a function parameter it can be
effectively call-by-reference and library routines might modify the
value back in the caller (e.g., vsnprintf
in the GNU C Library
2.1).
>>
Normally the C >>
right shift of a signed type replicates the
high bit, giving a so-called "arithmetic" shift. But care should be
taken since the ISO C standard doesn't require that behavior. On those
few processors without a native arithmetic shift (for instance Cray
vector systems) zero bits may be shifted in, the same as a shift of an
unsigned type.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros check for particular C functions--whether they exist, and in some cases how they respond when given certain arguments.
Check how to get alloca
. Tries to get a builtin version by
checking for `alloca.h' or the predefined C preprocessor macros
__GNUC__
and _AIX
. If this macro finds `alloca.h',
it defines HAVE_ALLOCA_H
.
If those attempts fail, it looks for the function in the standard C
library. If any of those methods succeed, it defines
HAVE_ALLOCA
. Otherwise, it sets the output variable
ALLOCA
to `alloca.o' and defines C_ALLOCA
(so
programs can periodically call `alloca(0)' to garbage collect).
This variable is separate from LIBOBJS
so multiple programs can
share the value of ALLOCA
without needing to create an actual
library, in case only some of them use the code in LIBOBJS
.
This macro does not try to get alloca
from the System V R3
`libPW' or the System V R4 `libucb' because those libraries
contain some incompatible functions that cause trouble. Some versions
do not even contain alloca
or contain a buggy version. If you
still want to use their alloca
, use ar
to extract
`alloca.o' from them instead of compiling `alloca.c'.
Source files that use alloca
should start with a piece of code
like the following, to declare it properly. In some versions of AIX,
the declaration of alloca
must precede everything else except for
comments and preprocessor directives. The #pragma
directive is
indented so that pre-ANSI C compilers will ignore it, rather than
choke on it.
/* AIX requires this to be the first thing in the file. */ #ifndef __GNUC__ # if HAVE_ALLOCA_H # include <alloca.h> # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif #endif |
If the chown
function is available and works (in particular, it
should accept `-1' for uid
and gid
), define
HAVE_CHOWN
.
If the closedir
function does not return a meaningful value,
define CLOSEDIR_VOID
. Otherwise, callers ought to check its
return value for an error indicator.
If the error_at_line
function is not found, require an
AC_LIBOBJ
replacement of `error'.
If the fnmatch
function conforms to POSIX, define
HAVE_FNMATCH
. Detect common implementation bugs, for example,
the bugs in Solaris 2.4.
Note that for historical reasons, contrary to the other specific
AC_FUNC
macros, AC_FUNC_FNMATCH
does not replace a
broken/missing fnmatch
. See AC_REPLACE_FNMATCH
below.
Behave like AC_REPLACE_FNMATCH
(replace) but also test
whether fnmatch
supports GNU extensions. Detect common
implementation bugs, for example, the bugs in the GNU C
Library 2.1.
This macro checks for the fork
and vfork
functions. If a
working fork
is found, define HAVE_WORKING_FORK
. This macro
checks whether fork
is just a stub by trying to run it.
If `vfork.h' is found, define HAVE_VFORK_H
. If a working
vfork
is found, define HAVE_WORKING_VFORK
. Otherwise,
define vfork
to be fork
for backward compatibility with
previous versions of autoconf
. This macro checks for several known
errors in implementations of vfork
and considers the system to not
have a working vfork
if it detects any of them. It is not considered
to be an implementation error if a child's invocation of signal
modifies the parent's signal handler, since child processes rarely change
their signal handlers.
Since this macro defines vfork
only for backward compatibility with
previous versions of autoconf
you're encouraged to define it
yourself in new code:
#if !HAVE_WORKING_VFORK # define vfork fork #endif |
If the fseeko
function is available, define HAVE_FSEEKO
.
Define _LARGEFILE_SOURCE
if necessary to make the prototype
visible on some systems (e.g. glibc 2.2). Otherwise linkage problems
may occur when compiling with AC_SYS_LARGEFILE
on
largefile-sensitive systems where off_t
does not default to a
64bit entity.
If the getgroups
function is available and works (unlike on
Ultrix 4.3, where `getgroups (0, 0)' always fails), define
HAVE_GETGROUPS
. Set GETGROUPS_LIBS
to any libraries
needed to get that function. This macro runs AC_TYPE_GETGROUPS
.
Check how to get the system load averages. To perform its tests
properly, this macro needs the file `getloadavg.c'; therefore, be
sure to set the AC_LIBOBJ
replacement directory properly (see
Generic Function Checks, AC_CONFIG_LIBOBJ_DIR
).
If the system has the getloadavg
function, define
HAVE_GETLOADAVG
, and set GETLOADAVG_LIBS
to any libraries
needed to get that function. Also add GETLOADAVG_LIBS
to
LIBS
. Otherwise, require an AC_LIBOBJ
replacement for
`getloadavg' with source code in `dir/getloadavg.c', and
possibly define several other C preprocessor macros and output
variables:
Define C_GETLOADAVG
.
Define SVR4
, DGUX
, UMAX
, or UMAX4_3
if on
those systems.
If `nlist.h' is found, define HAVE_NLIST_H
.
If `struct nlist' has an `n_un.n_name' member, define
HAVE_STRUCT_NLIST_N_UN_N_NAME
. The obsolete symbol
NLIST_NAME_UNION
is still defined, but do not depend upon it.
Programs may need to be installed setgid (or setuid) for
getloadavg
to work. In this case, define
GETLOADAVG_PRIVILEGED
, set the output variable NEED_SETGID
to `true' (and otherwise to `false'), and set
KMEM_GROUP
to the name of the group that should own the installed
program.
Check for getmntent
in the `sun', `seq', and `gen'
libraries, for IRIX 4, PTX, and Unixware, respectively. Then, if
getmntent
is available, define HAVE_GETMNTENT
.
Define GETPGRP_VOID
if it is an error to pass 0 to
getpgrp
; this is the POSIX behavior. On older BSD
systems, you must pass 0 to getpgrp
, as it takes an argument and
behaves like POSIX's getpgid
.
#if GETPGRP_VOID pid = getpgrp (); #else pid = getpgrp (0); #endif |
This macro does not check whether
getpgrp
exists at all; if you need to work in that situation,
first call AC_CHECK_FUNC
for getpgrp
.
If `link' is a symbolic link, then lstat
should treat
`link/' the same as `link/.'. However, many older
lstat
implementations incorrectly ignore trailing slashes.
It is safe to assume that if lstat
incorrectly ignores
trailing slashes, then other symbolic-link-aware functions like
unlink
also incorrectly ignore trailing slashes.
If lstat
behaves properly, define
LSTAT_FOLLOWS_SLASHED_SYMLINK
, otherwise require an
AC_LIBOBJ
replacement of lstat
.
If the malloc
function is compatible with the GNU C
library malloc
(i.e., `malloc (0)' returns a valid
pointer), define HAVE_MALLOC
to 1. Otherwise define
HAVE_MALLOC
to 0, ask for an AC_LIBOBJ
replacement for
`malloc', and define malloc
to rpl_malloc
so that the
native malloc
is not used in the main project.
Typically, the replacement file `malloc.c' should look like (note the `#undef malloc'):
#if HAVE_CONFIG_H # include <config.h> #endif #undef malloc #include <sys/types.h> void *malloc (); /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ void * rpl_malloc (size_t n) { if (n == 0) n = 1; return malloc (n); }
If the memcmp
function is not available, or does not work on
8-bit data (like the one on SunOS 4.1.3), or fails when comparing 16
bytes or more and with at least one buffer not starting on a 4-byte
boundary (such as the one on NeXT x86 OpenStep), require an
AC_LIBOBJ
replacement for `memcmp'.
Define HAVE_MBRTOWC
to 1 if the function mbrtowc
and the
type mbstate_t
are properly declared.
If the mktime
function is not available, or does not work
correctly, require an AC_LIBOBJ
replacement for `mktime'.
For the purposes of this test, mktime
should conform to the
POSIX standard and should be the inverse of
localtime
.
If the mmap
function exists and works correctly, define
HAVE_MMAP
. Only checks private fixed mapping of already-mapped
memory.
If the obstacks are found, define HAVE_OBSTACK
, else require an
AC_LIBOBJ
replacement for `obstack'.
If the realloc
function is compatible with the GNU C
library realloc
(i.e., `realloc (0, 0)' returns a
valid pointer), define HAVE_REALLOC
to 1. Otherwise define
HAVE_REALLOC
to 0, ask for an AC_LIBOBJ
replacement for
`realloc', and define realloc
to rpl_realloc
so that
the native realloc
is not used in the main project. See
AC_FUNC_MALLOC
for details.
Determines the correct type to be passed for each of the
select
function's arguments, and defines those types
in SELECT_TYPE_ARG1
, SELECT_TYPE_ARG234
, and
SELECT_TYPE_ARG5
respectively. SELECT_TYPE_ARG1
defaults
to `int', SELECT_TYPE_ARG234
defaults to `int *',
and SELECT_TYPE_ARG5
defaults to `struct timeval *'.
If setpgrp
takes no argument (the POSIX version), define
SETPGRP_VOID
. Otherwise, it is the BSD version, which takes
two process IDs as arguments. This macro does not check whether
setpgrp
exists at all; if you need to work in that situation,
first call AC_CHECK_FUNC
for setpgrp
.
Determine whether stat
or lstat
have the bug that it
succeeds when given the zero-length file name as argument. The stat
and lstat
from SunOS 4.1.4 and the Hurd (as of 1998-11-01) do
this.
If it does, then define HAVE_STAT_EMPTY_STRING_BUG
(or
HAVE_LSTAT_EMPTY_STRING_BUG
) and ask for an AC_LIBOBJ
replacement of it.
If setvbuf
takes the buffering type as its second argument and
the buffer pointer as the third, instead of the other way around, define
SETVBUF_REVERSED
.
If the strcoll
function exists and works correctly, define
HAVE_STRCOLL
. This does a bit more than
`AC_CHECK_FUNCS(strcoll)', because some systems have incorrect
definitions of strcoll
that should not be used.
If the strtod
function does not exist or doesn't work correctly,
ask for an AC_LIBOBJ
replacement of `strtod'. In this case,
because `strtod.c' is likely to need `pow', set the output
variable POW_LIB
to the extra library needed.
If strerror_r
is available, define HAVE_STRERROR_R
, and if
it is declared, define HAVE_DECL_STRERROR_R
. If it returns a
char *
message, define STRERROR_R_CHAR_P
; otherwise it
returns an int
error number. The Thread-Safe Functions option of
POSIX requires strerror_r
to return int
, but
many systems (including, for example, version 2.2.4 of the GNU C
Library) return a char *
value that is not necessarily equal to
the buffer argument.
Check for strftime
in the `intl' library, for SCO UNIX.
Then, if strftime
is available, define HAVE_STRFTIME
.
If the strnlen
function is not available, or is buggy (like the one
from AIX 4.3), require an AC_LIBOBJ
replacement for it.
If `utime(file, NULL)' sets file's timestamp to
the present, define HAVE_UTIME_NULL
.
If vprintf
is found, define HAVE_VPRINTF
. Otherwise, if
_doprnt
is found, define HAVE_DOPRNT
. (If vprintf
is available, you may assume that vfprintf
and vsprintf
are also available.)
If the fnmatch
function does not conform to POSIX (see
AC_FUNC_FNMATCH
), ask for its AC_LIBOBJ
replacement.
The files `fnmatch.c', `fnmatch_loop.c', and `fnmatch_.h'
in the AC_LIBOBJ
replacement directory are assumed to contain a
copy of the source code of GNU fnmatch
. If necessary,
this source code is compiled as an AC_LIBOBJ
replacement, and the
`fnmatch_.h' file is linked to `fnmatch.h' so that it can be
included in place of the system <fnmatch.h>
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros are used to find functions not covered by the "particular"
test macros. If the functions might be in libraries other than the
default C library, first call AC_CHECK_LIB
for those libraries.
If you need to check the behavior of a function as well as find out
whether it is present, you have to write your own test for
it (see section Writing Tests).
If C function function is available, run shell commands
action-if-found, otherwise action-if-not-found. If you just
want to define a symbol if the function is available, consider using
AC_CHECK_FUNCS
instead. This macro checks for functions with C
linkage even when AC_LANG(C++)
has been called, since C is more
standardized than C++. (see section Language Choice, for more information
about selecting the language for checks.)
For each function in the whitespace-separated argument list,
define HAVE_function
(in all capitals) if it is available.
If action-if-found is given, it is additional shell code to
execute when one of the functions is found. You can give it a value of
`break' to break out of the loop on the first match. If
action-if-not-found is given, it is executed when one of the
functions is not found.
Autoconf follows a philosophy that was formed over the years by those who have struggled for portability: isolate the portability issues in specific files, and then program as if you were in a POSIX environment. Some functions may be missing or unfixable, and your package must be ready to replace them.
Specify that `function.c' must be included in the executables to replace a missing or broken implementation of function.
Technically, it adds `function.$ac_objext' to the output
variable LIBOBJS
if it is not already in, and calls
AC_LIBSOURCE
for `function.c'. You should not
directly change LIBOBJS
, since this is not traceable.
Specify that file might be needed to compile the project. If you
need to know what files might be needed by a `configure.ac', you
should trace AC_LIBSOURCE
. file must be a literal.
This macro is called automatically from AC_LIBOBJ
, but you must
call it explicitly if you pass a shell variable to AC_LIBOBJ
. In
that case, since shell variables cannot be traced statically, you must
pass to AC_LIBSOURCE
any possible files that the shell variable
might cause AC_LIBOBJ
to need. For example, if you want to pass
a variable $foo_or_bar
to AC_LIBOBJ
that holds either
"foo"
or "bar"
, you should do:
AC_LIBSOURCE(foo.c) AC_LIBSOURCE(bar.c) AC_LIBOBJ($foo_or_bar) |
There is usually a way to avoid this, however, and you are encouraged to
simply call AC_LIBOBJ
with literal arguments.
Note that this macro replaces the obsolete AC_LIBOBJ_DECL
, with
slightly different semantics: the old macro took the function name,
e.g., foo
, as its argument rather than the file name.
Like AC_LIBSOURCE
, but accepts one or more files in a
comma-separated M4 list. Thus, the above example might be rewritten:
AC_LIBSOURCES([foo.c, bar.c]) AC_LIBOBJ($foo_or_bar) |
Specify that AC_LIBOBJ
replacement files are to be found in
directory, a relative path starting from the top level of the
source tree. The replacement directory defaults to `.', the top
level directory, and the most typical value is `lib', corresponding
to `AC_CONFIG_LIBOBJ_DIR(lib)'.
configure
might need to know the replacement directory for the
following reasons: (i) some checks use the replacement files, (ii) some
macros bypass broken system headers by installing links to the
replacement headers, etc.
It is common to merely check for the existence of a function, and ask
for its AC_LIBOBJ
replacement if missing. The following macro is
a convenient shorthand.
Like AC_CHECK_FUNCS
, but uses `AC_LIBOBJ(function)' as
action-if-not-found. You can declare your replacement function by
enclosing the prototype in `#if !HAVE_function'. If the
system has the function, it probably declares it in a header file you
should be including, so you shouldn't redeclare it lest your declaration
conflict.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for the presence of certain C header files. If there is no macro specifically defined to check for a header file you need, and you don't need to check for any special properties of it, then you can use one of the general header-file check macros.
5.6.1 Portability of Headers | Collected knowledge on common headers | |
5.6.2 Particular Header Checks | Special handling to find certain headers | |
5.6.3 Generic Header Checks | How to find other headers |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This section tries to collect knowledge about common headers, and the problems they cause. By definition, this list will always require additions. Please help us keeping it as complete as possible.
Paul Eggert notes that: ISO C 1999 says that `inttypes.h' includes `stdint.h', so there's no need to include `stdint.h' separately in a standard environment. Many implementations have `inttypes.h' but not `stdint.h' (e.g., Solaris 7), but I don't know of any implementation that has `stdint.h' but not `inttypes.h'. Nor do I know of any free software that includes `stdint.h'; `stdint.h' seems to be a creation of the committee.
It requires `linux/types.h' and `sys/socket.h'.
It requires `linux/types.h'.
On Darwin, this file requires that `sys/socket.h' be included beforehand. One should run:
AC_CHECK_HEADERS([sys/socket.h]) AC_CHECK_HEADERS([net/if.h], [], [], [#include <stdio.h> #if STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # if HAVE_STDLIB_H # include <stdlib.h> # endif #endif #if HAVE_SYS_SOCKET_H # include <sys/socket.h> #endif ]) |
On Darwin, this file requires that `stdio.h' and `sys/socket.h' be included beforehand. One should run:
AC_CHECK_HEADERS([sys/socket.h]) AC_CHECK_HEADERS([netinet/if_ether.h], [], [], [#include <stdio.h> #if STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # if HAVE_STDLIB_H # include <stdlib.h> # endif #endif #if HAVE_SYS_SOCKET_H # include <sys/socket.h> #endif ]) |
See above, item `inttypes.h' vs. `stdint.h'.
On many systems (e.g., Darwin), `stdio.h' is a prerequisite.
On FreeBSD 4.8 on ia32 and using gcc version 2.95.4, `sys/params.h' is a prerequisite.
On Darwin, `stdlib.h' is a prerequisite.
On HP Tru64 5.1, `sys/types.h' is a prerequisite.
Using XFree86, this header requires `X11/Xlib.h', which is probably so required that you might not even consider looking for it.
AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [], [], [[#include <X11/Xlib.h> ]]) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros check for particular system header files--whether they exist, and in some cases whether they declare certain symbols.
Check for the following header files. For the first one that is found and defines `DIR', define the listed C preprocessor macro:
`dirent.h' | |
`sys/ndir.h' | |
`sys/dir.h' | |
`ndir.h' | |
The directory-library declarations in your source code should look something like the following:
#if HAVE_DIRENT_H # include <dirent.h> # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if HAVE_SYS_NDIR_H # include <sys/ndir.h> # endif # if HAVE_SYS_DIR_H # include <sys/dir.h> # endif # if HAVE_NDIR_H # include <ndir.h> # endif #endif |
Using the above declarations, the program would declare variables to be
of type struct dirent
, not struct direct
, and would access
the length of a directory entry name by passing a pointer to a
struct dirent
to the NAMLEN
macro.
This macro also checks for the SCO Xenix `dir' and `x' libraries.
If `sys/types.h' does not define major
, minor
, and
makedev
, but `sys/mkdev.h' does, define
MAJOR_IN_MKDEV
; otherwise, if `sys/sysmacros.h' does, define
MAJOR_IN_SYSMACROS
.
If the macros S_ISDIR
, S_ISREG
, etc. defined in
`sys/stat.h' do not work properly (returning false positives),
define STAT_MACROS_BROKEN
. This is the case on Tektronix UTekV,
Amdahl UTS and Motorola System V/88.
If `stdbool.h' exists and is conformant to C99, define
HAVE_STDBOOL_H
to 1; if the type _Bool
is defined, define
HAVE__BOOL
to 1. To fulfill the C99 requirements, your
`system.h' should contain the following code:
#if HAVE_STDBOOL_H # include <stdbool.h> #else # if ! HAVE__BOOL # ifdef __cplusplus typedef bool _Bool; # else typedef unsigned char _Bool; # endif # endif # define bool _Bool # define false 0 # define true 1 # define __bool_true_false_are_defined 1 #endif
Define STDC_HEADERS
if the system has ANSI C header files.
Specifically, this macro checks for `stdlib.h', `stdarg.h',
`string.h', and `float.h'; if the system has those, it
probably has the rest of the ANSI C header files. This macro also
checks whether `string.h' declares memchr
(and thus
presumably the other mem
functions), whether `stdlib.h'
declare free
(and thus presumably malloc
and other related
functions), and whether the `ctype.h' macros work on characters
with the high bit set, as ANSI C requires.
Use STDC_HEADERS
instead of __STDC__
to determine whether
the system has ANSI-compliant header files (and probably C library
functions) because many systems that have GCC do not have ANSI C
header files.
On systems without ANSI C headers, there is so much variation that it is probably easier to declare the functions you use than to figure out exactly what the system header files declare. Some systems contain a mix of functions from ANSI and BSD; some are mostly ANSI but lack `memmove'; some define the BSD functions as macros in `string.h' or `strings.h'; some have only the BSD functions but `string.h'; some declare the memory functions in `memory.h', some in `string.h'; etc. It is probably sufficient to check for one string function and one memory function; if the library has the ANSI versions of those then it probably has most of the others. If you put the following in `configure.ac':
AC_HEADER_STDC AC_CHECK_FUNCS(strchr memcpy) |
then, in your code, you can use declarations like this:
#if STDC_HEADERS # include <string.h> #else # if !HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr (), *strrchr (); # if !HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif |
If you use a function like memchr
, memset
, strtok
,
or strspn
, which have no BSD equivalent, then macros won't
suffice; you must provide an implementation of each function. An easy
way to incorporate your implementations only when needed (since the ones
in system C libraries may be hand optimized) is to, taking memchr
for example, put it in `memchr.c' and use
`AC_REPLACE_FUNCS(memchr)'.
If `sys/wait.h' exists and is compatible with POSIX, define
HAVE_SYS_WAIT_H
. Incompatibility can occur if `sys/wait.h'
does not exist, or if it uses the old BSD union wait
instead
of int
to store a status value. If `sys/wait.h' is not
POSIX compatible, then instead of including it, define the
POSIX macros with their usual interpretations. Here is an
example:
#include <sys/types.h> #if HAVE_SYS_WAIT_H # include <sys/wait.h> #endif #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif |
_POSIX_VERSION
is defined when `unistd.h' is included on
POSIX systems. If there is no `unistd.h', it is definitely
not a POSIX system. However, some non-POSIX systems do
have `unistd.h'.
The way to check if the system supports POSIX is:
#if HAVE_UNISTD_H # include <sys/types.h> # include <unistd.h> #endif #ifdef _POSIX_VERSION /* Code for POSIX systems. */ #endif |
If a program may include both `time.h' and `sys/time.h',
define TIME_WITH_SYS_TIME
. On some older systems,
`sys/time.h' includes `time.h', but `time.h' is not
protected against multiple inclusion, so programs should not explicitly
include both files. This macro is useful in programs that use, for
example, struct timeval
as well as
struct tm
. It is best used in conjunction with
HAVE_SYS_TIME_H
, which can be checked for using
AC_CHECK_HEADERS(sys/time.h)
.
#if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> #else # if HAVE_SYS_TIME_H # include <sys/time.h> # else # include <time.h> # endif #endif |
If the use of TIOCGWINSZ
requires `<sys/ioctl.h>', then
define GWINSZ_IN_SYS_IOCTL
. Otherwise TIOCGWINSZ
can be
found in `<termios.h>'.
Use:
#if HAVE_TERMIOS_H # include <termios.h> #endif #if GWINSZ_IN_SYS_IOCTL # include <sys/ioctl.h> #endif |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros are used to find system header files not covered by the "particular" test macros. If you need to check the contents of a header as well as find out whether it is present, you have to write your own test for it (see section Writing Tests).
If the system header file header-file is compilable, execute shell
commands action-if-found, otherwise execute
action-if-not-found. If you just want to define a symbol if the
header file is available, consider using AC_CHECK_HEADERS
instead.
For compatibility issues with older versions of Autoconf, please read below.
For each given system header file header-file in the
whitespace-separated argument list that exists, define
HAVE_header-file
(in all capitals). If action-if-found
is given, it is additional shell code to execute when one of the header
files is found. You can give it a value of `break' to break out of
the loop on the first match. If action-if-not-found is given, it
is executed when one of the header files is not found.
For compatibility issues with older versions of Autoconf, please read below.
Previous versions of Autoconf merely checked whether the header was
accepted by the preprocessor. This was changed because the old test was
inappropriate for typical uses. Headers are typically used to compile,
not merely to preprocess, and the old behavior sometimes accepted
headers that clashed at compile-time. If you need to check whether a
header is preprocessable, you can use AC_PREPROC_IFELSE
(see section Running the Preprocessor).
This scheme, which improves the robustness of the test, also requires that you make sure that headers that must be included before the header-file be part of the includes, (see section Default Includes). If looking for `bar.h', which requires that `foo.h' be included before if it exists, we suggest the following scheme:
AC_CHECK_HEADERS([foo.h]) AC_CHECK_HEADERS([bar.h], [], [], [#if HAVE_FOO_H # include <foo.h> # endif ])
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for the declaration of variables and
functions. If there is no macro specifically defined to check for a
symbol you need, then you can use the general macros (see section Generic Declaration Checks) or, for more complex tests, you may use
AC_COMPILE_IFELSE
(see section Running the Compiler).
5.7.1 Particular Declaration Checks | Macros to check for certain declarations | |
5.7.2 Generic Declaration Checks | How to find other declarations |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
There are no specific macros for declarations.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros are used to find declarations not covered by the "particular" test macros.
If symbol (a function or a variable) is not declared in includes and a declaration is needed, run the shell commands action-if-not-found, otherwise action-if-found. If no includes are specified, the default includes are used (see section Default Includes).
This macro actually tests whether it is valid to use symbol as an r-value, not if it is really declared, because it is much safer to avoid introducing extra declarations when they are not needed.
For each of the symbols (comma-separated list), define
HAVE_DECL_symbol
(in all capitals) to `1' if
symbol is declared, otherwise to `0'. If
action-if-not-found is given, it is additional shell code to
execute when one of the function declarations is needed, otherwise
action-if-found is executed.
This macro uses an m4 list as first argument:
AC_CHECK_DECLS(strdup) AC_CHECK_DECLS([strlen]) AC_CHECK_DECLS([malloc, realloc, calloc, free]) |
Unlike the other `AC_CHECK_*S' macros, when a symbol is not
declared, HAVE_DECL_symbol
is defined to `0' instead
of leaving HAVE_DECL_symbol
undeclared. When you are
sure that the check was performed, use
HAVE_DECL_symbol
just like any other result of Autoconf:
#if !HAVE_DECL_SYMBOL extern char *symbol; #endif |
If the test may have not been performed, however, because it is safer not to declare a symbol than to use a declaration that conflicts with the system's one, you should use:
#if defined HAVE_DECL_MALLOC && !HAVE_DECL_MALLOC void *malloc (size_t *s); #endif |
You fall into the second category only in extreme situations: either your files may be used without being configured, or they are used during the configuration. In most cases the traditional approach is enough.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for the presence of certain members in C
structures. If there is no macro specifically defined to check for a
member you need, then you can use the general structure-member macros
(see section Generic Structure Checks) or, for more complex tests, you may use
AC_COMPILE_IFELSE
(see section Running the Compiler).
5.8.1 Particular Structure Checks | Macros to check for certain structure members | |
5.8.2 Generic Structure Checks | How to find other structure members |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for certain structures or structure members.
If struct stat
contains an st_blksize
member, define
HAVE_STRUCT_STAT_ST_BLKSIZE
. The former name,
HAVE_ST_BLKSIZE
is to be avoided, as its support will cease in
the future. This macro is obsoleted, and should be replaced by
AC_CHECK_MEMBERS([struct stat.st_blksize]) |
If struct stat
contains an st_blocks
member, define
HAVE_STRUCT_STAT_ST_BLOCKS
. Otherwise, require an
AC_LIBOBJ
replacement of `fileblocks'. The former name,
HAVE_ST_BLOCKS
is to be avoided, as its support will cease in the
future.
If struct stat
contains an st_rdev
member, define
HAVE_STRUCT_STAT_ST_RDEV
. The former name for this macro,
HAVE_ST_RDEV
, is to be avoided as it will cease to be supported
in the future. Actually, even the new macro is obsolete and should be
replaced by:
AC_CHECK_MEMBERS([struct stat.st_rdev]) |
If `time.h' does not define struct tm
, define
TM_IN_SYS_TIME
, which means that including `sys/time.h'
had better define struct tm
.
Figure out how to get the current timezone. If struct tm
has a
tm_zone
member, define HAVE_STRUCT_TM_TM_ZONE
(and the
obsoleted HAVE_TM_ZONE
). Otherwise, if the external array
tzname
is found, define HAVE_TZNAME
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros are used to find structure members not covered by the "particular" test macros.
Check whether member is a member of the aggregate aggregate. If no includes are specified, the default includes are used (see section Default Includes).
AC_CHECK_MEMBER(struct passwd.pw_gecos,, [AC_MSG_ERROR([We need `passwd.pw_gecos'!])], [#include <pwd.h>]) |
You can use this macro for sub-members:
AC_CHECK_MEMBER(struct top.middle.bot) |
Check for the existence of each `aggregate.member' of
members using the previous macro. When member belongs to
aggregate, define HAVE_aggregate_member
(in all
capitals, with spaces and dots replaced by underscores). If
action-if-found is given, it is executed for each of the found
members. If action-if-not-found is given, it is executed for each
of the members that could not be found.
This macro uses m4 lists:
AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize]) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for C types, either builtin or typedefs. If there is no macro specifically defined to check for a type you need, and you don't need to check for any special properties of it, then you can use a general type-check macro.
5.9.1 Particular Type Checks | Special handling to find certain types | |
5.9.2 Generic Type Checks | How to find other types |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros check for particular C types in `sys/types.h', `stdlib.h' and others, if they exist.
Define GETGROUPS_T
to be whichever of gid_t
or int
is the base type of the array argument to getgroups
.
Define HAVE_MBSTATE_T
if <wchar.h>
declares the
mbstate_t
type. Also, define mbstate_t
to be a type if
<wchar.h>
does not declare it.
Equivalent to `AC_CHECK_TYPE(mode_t, int)'.
Equivalent to `AC_CHECK_TYPE(off_t, long)'.
Equivalent to `AC_CHECK_TYPE(pid_t, int)'.
If `signal.h' declares signal
as returning a pointer to a
function returning void
, define RETSIGTYPE
to be
void
; otherwise, define it to be int
.
Define signal handlers as returning type RETSIGTYPE
:
RETSIGTYPE hup_handler () { … } |
Equivalent to `AC_CHECK_TYPE(size_t, unsigned)'.
If uid_t
is not defined, define uid_t
to be int
and
gid_t
to be int
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
These macros are used to check for types not covered by the "particular" test macros.
Check whether type is defined. It may be a compiler builtin type or defined by the includes (see section Default Includes).
For each type of the types that is defined, define
HAVE_type
(in all capitals). If no includes are
specified, the default includes are used (see section Default Includes). If
action-if-found is given, it is additional shell code to execute
when one of the types is found. If action-if-not-found is given,
it is executed when one of the types is not found.
This macro uses m4 lists:
AC_CHECK_TYPES(ptrdiff_t) AC_CHECK_TYPES([unsigned long long, uintmax_t]) |
Autoconf, up to 2.13, used to provide to another version of
AC_CHECK_TYPE
, broken by design. In order to keep backward
compatibility, a simple heuristics, quite safe but not totally, is
implemented. In case of doubt, read the documentation of the former
AC_CHECK_TYPE
, see Obsolete Macros.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
All the tests for compilers (AC_PROG_CC
, AC_PROG_CXX
,
AC_PROG_F77
) define the output variable EXEEXT
based on
the output of the compiler, typically to the empty string if Unix and
`.exe' if Win32 or OS/2.
They also define the output variable OBJEXT
based on the
output of the compiler, after `.c' files have been excluded, typically
to `o' if Unix, `obj' if Win32.
If the compiler being used does not produce executables, the tests fail. If the executables can't be run, and cross-compilation is not enabled, they fail too. See section Manual Configuration, for more on support for cross compiling.
5.10.1 Specific Compiler Characteristics | Some portability issues | |
5.10.2 Generic Compiler Characteristics | Language independent tests and features | |
5.10.3 C Compiler Characteristics | Checking its characteristics | |
5.10.4 C++ Compiler Characteristics | Likewise |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Some compilers exhibit different behaviors.
Autoconf relies on a trick to extract one bit of information from the C compiler: using negative array sizes. For instance the following excerpt of a C source demonstrates how to test whether `int's are 4 bytes long:
int main (void) { static int test_array [sizeof (int) == 4 ? 1 : -1]; test_array [0] = 0 return 0; } |
To our knowledge, there is a single compiler that does not support this trick: the HP C compilers (the real one, not only the "bundled") on HP-UX 11.00:
$ cc -c -Ae +O2 +Onolimit conftest.c cc: "conftest.c": error 1879: Variable-length arrays cannot \ have static storage. |
Autoconf works around this problem by casting sizeof (int)
to
long
before comparing it.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Define SIZEOF_type
(see section Standard Symbols) to be the
size in bytes of type. If `type' is unknown, it gets a size
of 0. If no includes are specified, the default includes are used
(see section Default Includes). If you provide include, be sure to
include `stdio.h' which is required for this macro to run.
This macro now works even when cross-compiling. The unused argument was used when cross-compiling.
For example, the call
AC_CHECK_SIZEOF(int *) |
defines SIZEOF_INT_P
to be 8 on DEC Alpha AXP systems.
Normally Autoconf ignores warnings generated by the compiler, linker, and
preprocessor. If this macro is used, warnings will be treated as fatal
errors instead for the current language. This macro is useful when the
results of configuration will be used where warnings are unacceptable; for
instance, if parts of a program are built with the GCC `-Werror'
option. If the whole program will be built using `-Werror' it is
often simpler to put `-Werror' in the compiler flags (CFLAGS
etc.).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros provide ways to find and exercise a C Compiler. There are a few constructs that ought to be avoided, but do not deserve being checked for, since they can easily be worked around.
They tickle a bug in the HP-UX C compiler (checked on HP-UX 10.20, 11.00, and 11i). Running the compiler on the following source,
#ifdef __STDC__ /\ * A comment with backslash-newlines in it. %{ %} *\ \ / char str[] = "\\ " A string with backslash-newlines in it %{ %} \\ ""; char apostrophe = '\\ \ '\ '; #endif |
yields
error-->cpp: "foo.c", line 13: error 4048: Non-terminating comment at end of file. error-->cpp: "foo.c", line 13: error 4033: Missing #endif at end of file. |
Removing the lines with solitary backslashes solves the problem.
Some compilers, such as the HP's, reports the name of the file it is compiling when they are several. For instance:
$ cc a.c b.c a.c: b.c: |
This can cause problems if you observe the output of the compiler to detect failures. Invoking `cc -c a.c -o a.o; cc -c b.c -o b.o; cc a.o b.o -o c' solves the issue.
#line
supportOn Solaris 8, c89
(Sun WorkShop 6 update 2 C 5.3 Patch
111679-08 2002/05/09)) rejects #line
directives whose line
numbers are greater than 32767. In addition, nothing in POSIX
makes this invalid. That is the reason why Autoconf stopped issuing
#line
directives.
Determine a C compiler to use. If CC
is not already set in the
environment, check for gcc
and cc
, then for other C
compilers. Set output variable CC
to the name of the compiler
found.
This macro may, however, be invoked with an optional first argument
which, if specified, must be a space separated list of C compilers to
search for. This just gives the user an opportunity to specify an
alternative search list for the C compiler. For example, if you didn't
like the default order, then you could invoke AC_PROG_CC
like
this:
AC_PROG_CC(cl egcs gcc cc) |
If the C compiler is not in ANSI C mode by default, try to add an
option to output variable CC
to make it so. This macro tries
various options that select ANSI C on some system or another. It
considers the compiler to be in ANSI C mode if it handles function
prototypes correctly.
After calling this macro you can check whether the C compiler has been
set to accept ANSI C; if not, the shell variable
ac_cv_prog_cc_stdc
is set to `no'. If you wrote your source
code in ANSI C, you can make an un-ANSIfied copy of it by
using the program ansi2knr
, which comes with Automake. See also
under AC_C_PROTOTYPES
below.
If using the GNU C compiler, set shell variable GCC
to
`yes'. If output variable CFLAGS
was not already set, set
it to `-g -O2' for the GNU C compiler (`-O2' on systems
where GCC does not accept `-g'), or `-g' for other compilers.
If the C compiler does not accept the `-c' and `-o' options
simultaneously, define NO_MINUS_C_MINUS_O
. This macro actually
tests both the compiler found by AC_PROG_CC
, and, if different,
the first cc
in the path. The test fails if one fails. This
macro was created for GNU Make to choose the default C compilation
rule.
Set output variable CPP
to a command that runs the
C preprocessor. If `$CC -E' doesn't work, `/lib/cpp' is used.
It is only portable to run CPP
on files with a `.c'
extension.
Some preprocessors don't indicate missing include files by the error
status. For such preprocessors an internal variable is set that causes
other macros to check the standard error from the preprocessor and
consider the test failed if any warnings have been reported.
For most preprocessors, though, warnings do not cause include-file
tests to fail unless AC_PROG_CPP_WERROR
is also specified.
This acts like AC_PROG_CPP
, except it treats warnings from the
preprocessor as errors even if the preprocessor exit status indicates
success. This is useful for avoiding headers that generate mandatory
warnings, such as deprecation notices.
The following macros check for C compiler or machine architecture
features. To check for characteristics not listed here, use
AC_COMPILE_IFELSE
(see section Running the Compiler) or
AC_RUN_IFELSE
(see section Checking Run Time Behavior).
Define `HAVE_C_BACKSLASH_A' to 1 if the C compiler understands `\a'.
If words are stored with the most significant byte first (like Motorola and SPARC CPUs), execute action-if-true. If words are stored with the least significant byte first (like Intel and VAX CPUs), execute action-if-false.
This macro runs a test-case if endianness cannot be determined from the system header files. When cross-compiling, the test-case is not run but grep'ed for some magic values. action-if-unknown is executed if the latter case fails to determine the byte sex of the host system.
The default for action-if-true is to define `WORDS_BIGENDIAN'. The default for action-if-false is to do nothing. And finally, the default for action-if-unknown is to abort configure and tell the installer which variable he should preset to bypass this test.
If the C compiler does not fully support the ANSI C qualifier
const
, define const
to be empty. Some C compilers that do
not define __STDC__
do support const
; some compilers that
define __STDC__
do not completely support const
. Programs
can simply use const
as if every C compiler supported it; for
those that don't, the `Makefile' or configuration header file will
define it as empty.
Occasionally installers use a C++ compiler to compile C code, typically
because they lack a C compiler. This causes problems with const
,
because C and C++ treat const
differently. For example:
const int foo; |
is valid in C but not in C++. These differences unfortunately cannot be
papered over by defining const
to be empty.
If autoconf
detects this situation, it leaves const
alone,
as this generally yields better results in practice. However, using a
C++ compiler to compile C code is not recommended or supported, and
installers who run into trouble in this area should get a C compiler
like GCC to compile their C code.
If the C compiler recognizes the restrict
keyword, don't do anything.
If it recognizes only a variant spelling (__restrict
,
__restrict__
, or _Restrict
), then define
restrict
to that.
Otherwise, define restrict
to be empty.
Thus, programs may simply use restrict
as if every C compiler
supported it; for those that do not, the `Makefile'
or configuration header defines it away.
Although support in C++ for the restrict
keyword is not
required, several C++ compilers do accept the keyword.
This macro works for them, too.
If the C compiler does not understand the keyword volatile
,
define volatile
to be empty. Programs can simply use
volatile
as if every C compiler supported it; for those that do
not, the `Makefile' or configuration header will define it as
empty.
If the correctness of your program depends on the semantics of
volatile
, simply defining it to be empty does, in a sense, break
your code. However, given that the compiler does not support
volatile
, you are at its mercy anyway. At least your
program will compile, when it wouldn't before.
In general, the volatile
keyword is a feature of ANSI C, so
you might expect that volatile
is available only when
__STDC__
is defined. However, Ultrix 4.3's native compiler does
support volatile, but does not define __STDC__
.
If the C compiler supports the keyword inline
, do nothing.
Otherwise define inline
to __inline__
or __inline
if it accepts one of those, otherwise define inline
to be empty.
If the C type char
is unsigned, define __CHAR_UNSIGNED__
,
unless the C compiler predefines it.
If the C compiler supports a working long double
type with more
range or precision than the double
type, define
HAVE_LONG_DOUBLE
.
If the C preprocessor supports the stringizing operator, define
HAVE_STRINGIZE
. The stringizing operator is `#' and is
found in macros such as this:
#define x(y) #y |
If function prototypes are understood by the compiler (as determined by
AC_PROG_CC
), define PROTOTYPES
and __PROTOTYPES
.
In the case the compiler does not handle
prototypes, you should use ansi2knr
, which comes with the
Automake distribution, to unprotoize function definitions. For
function prototypes, you should first define PARAMS
:
#ifndef PARAMS # if PROTOTYPES # define PARAMS(protos) protos # else /* no PROTOTYPES */ # define PARAMS(protos) () # endif /* no PROTOTYPES */ #endif |
then use it this way:
size_t my_strlen PARAMS ((const char *)); |
This macro also defines __PROTOTYPES
; this is for the benefit of
header files that cannot use macros that infringe on user name space.
Add `-traditional' to output variable CC
if using the
GNU C compiler and ioctl
does not work properly without
`-traditional'. That usually happens when the fixed header files
have not been installed on an old system. Since recent versions of the
GNU C compiler fix the header files automatically when installed,
this is becoming a less prevalent problem.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Determine a C++ compiler to use. Check if the environment variable
CXX
or CCC
(in that order) is set; if so, then set output
variable CXX
to its value.
Otherwise, if the macro is invoked without an argument, then search for
a C++ compiler under the likely names (first g++
and c++
then other names). If none of those checks succeed, then as a last
resort set CXX
to g++
.
This macro may, however, be invoked with an optional first argument
which, if specified, must be a space separated list of C++ compilers to
search for. This just gives the user an opportunity to specify an
alternative search list for the C++ compiler. For example, if you
didn't like the default order, then you could invoke AC_PROG_CXX
like this:
AC_PROG_CXX(cl KCC CC cxx cc++ xlC aCC c++ g++ egcs gcc) |
If using the GNU C++ compiler, set shell variable GXX
to
`yes'. If output variable CXXFLAGS
was not already set, set
it to `-g -O2' for the GNU C++ compiler (`-O2' on
systems where G++ does not accept `-g'), or `-g' for other
compilers.
Set output variable CXXCPP
to a command that runs the C++
preprocessor. If `$CXX -E' doesn't work, `/lib/cpp' is used.
It is only portable to run CXXCPP
on files with a `.c',
`.C', or `.cc' extension.
Some preprocessors don't indicate missing include files by the error status. For such preprocessors an internal variable is set that causes other macros to check the standard error from the preprocessor and consider the test failed if any warnings have been reported. However, it is not known whether such broken preprocessors exist for C++.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The Autoconf Fortran support is divided into two categories: legacy
Fortran 77 macros (F77
), and modern Fortran macros (FC
).
The former are intended for traditional Fortran 77 code, and have output
variables like F77
, FFLAGS
, and FLIBS
. The latter
are for newer programs that can (or must) compile under the newer
Fortran standards, and have output variables like FC
,
FCFLAGS
, and FCLIBS
.
All of the F77
macros have a FC
counterpart, and they are
documented together below. The opposite is not true, however, and in
particular the support for preprocessable Fortran is based on the
FC
interface alone.
The first block of macros (see section Fortran Compiler Characteristics) is concerned with
working out how to call the Fortran compiler, determine which flags are
required to match given file extensions, how to indicate free-form and
fixed-form code, and how to integrate Fortran and C modules together.
The macros in this block communicate by defining environment variables
such as FCFLAGS
, which are substituted into your Makefiles.
A second block of macros (see section Fortran features and extensions supported) discovers various
properties of the selected compiler, such as its support for intrinsics,
BOZ constants, and various useful and common extensions. The macros in
this latter block communicate via AC_DEFINE
, so that while they
might appear in compiler command lines, they will more often be defined
in a preprocessable header file such as config.h
. This is
useful, of course, only if your compiler suite can support
preprocessable Fortran, either within the compiler or as a separate
step. For more discussion about this, and a description of the relevant
macro, see Preprocessing Fortran.
A third block of macros (see section Preprocessing Fortran) is concerned
with using a cpp
-style preprocessor on Fortran code.
In the simplest case where you have a Fortran project using only Fortran
77 code, where the source files all have the file extension .f
,
and you do not require any preprocessing, the
`configure.ac' need include only AC_PROG_FC
, after which the
output variable FC
will be set to the name of the compiler found.
In the general case where you have a Fortran project which includes both Fortran 77 and Fortran 90 code, some of which is preprocessed, the `configure.ac' should include
AC_PROG_FC AC_PROG_FPP dnl Use one of the following for each required combination of dnl source extension and source format. AC_FC_FIXEDFORM(f) AC_FC_FREEFORM(f90) AC_FPP_FIXEDFORM(F) AC_FPP_FREEFORM(F90) |
See the documentation for the individual macros for usage details.
5.11.1 Fortran Compiler Characteristics | Characteristics of the Fortran compiler | |
5.11.2 Fortran features and extensions supported | Features and extension supported | |
5.11.3 Preprocessing Fortran | How to preprocess Fortran |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Determine a Fortran 77 compiler to use. If F77
is not already
set in the environment, then check for g77
and f77
, and
then some other names. Set the output variable F77
to the name
of the compiler found.
This macro may, however, be invoked with an optional first argument
which, if specified, must be a space separated list of Fortran 77
compilers to search for. This just gives the user an opportunity to
specify an alternative search list for the Fortran 77 compiler. For
example, if you didn't like the default order, then you could invoke
AC_PROG_F77
like this:
AC_PROG_F77(fl32 f77 fort77 xlf g77 f90 xlf90) |
If using g77
(the GNU Fortran 77 compiler), then
AC_PROG_F77
will set the shell variable G77
to `yes'.
If the output variable FFLAGS
was not already set in the
environment, then set it to `-g -02' for g77
(or `-O2'
where g77
does not accept `-g'). Otherwise, set
FFLAGS
to `-g' for all other Fortran 77 compilers.
Determine a Fortran compiler to use. If FC
is not already set in
the environment, then dialect
is a hint to indicate what Fortran
dialect to search for; the default is to search for the newest available
dialect. Set the output variable FC
to the name of the compiler
found.
By default, newer dialects are preferred over older dialects, but if
dialect
is specified then older dialects are preferred starting
with the specified dialect. dialect
can currently be one of
Fortran 77, Fortran 90, or Fortran 95. However, this is only a hint of
which compiler name to prefer (e.g. f90
or f95
),
and no attempt is made to guarantee that a particular language standard
is actually supported. Thus, it is preferable that you avoid the
dialect
option, and use AC_PROG_FC
only for code compatible with
the latest Fortran standard.
This macro may, alternatively, be invoked with an optional first argument
which, if specified, must be a space separated list of Fortran
compilers to search for, just as in AC_PROG_F77
.
If the output variable FCFLAGS
was not already set in the
environment, then set it to `-g -02' for GNU g77
(or
`-O2' where g77
does not accept `-g'). Otherwise,
set FCFLAGS
to `-g' for all other Fortran compilers.
Also, in case it's not obvious, this macro can be called only once: we presume that multiple Fortran variants can be handled by a compiler which can handle the most recent one. If this is not the case - either you need to give special flags to enable and disable the language features you use in different modules, or in the extreme case use different compilers for different files - you're going to have to do something clever.
Test if the Fortran compiler accepts the options `-c' and
`-o' simultaneously, and define F77_NO_MINUS_C_MINUS_O
or
FC_NO_MINUS_C_MINUS_O
, respectively, if it does not.
The following macros check for Fortran compiler characteristics.
To check for characteristics not listed here, use
AC_COMPILE_IFELSE
(see section Running the Compiler) or
AC_RUN_IFELSE
(see section Checking Run Time Behavior), making sure to first set the
current language to Fortran 77 or Fortran via AC_LANG(Fortran 77)
or AC_LANG(Fortran)
(see section Language Choice).
Determine the linker flags (e.g., `-L' and `-l') for the
Fortran intrinsic and run-time libraries that are required to
successfully link a Fortran program or shared library. The output
variable FLIBS
or FCLIBS
is set to these flags (which
should be include after LIBS
when linking).
This macro is intended to be used in those situations when it is necessary to mix, e.g., C++ and Fortran source code in a single program or shared library (see (automake)Mixing Fortran 77 With C and C++ section `Mixing Fortran 77 With C and C++' in GNU Automake).
For example, if object files from a C++ and Fortran compiler must be linked together, then the C++ compiler/linker must be used for linking (since special C++-ish things need to happen at link time like calling global constructors, instantiating templates, enabling exception support, etc.).
However, the Fortran intrinsic and run-time libraries must be linked in as well, but the C++ compiler/linker doesn't know by default how to add these Fortran 77 libraries. Hence, this macro was created to determine these Fortran libraries.
The macros AC_F77_DUMMY_MAIN
/AC_FC_DUMMY_MAIN
or
AC_F77_MAIN
/AC_FC_MAIN
will probably also be necessary to
link C/C++ with Fortran; see below.
With many compilers, the Fortran libraries detected by
AC_F77_LIBRARY_LDFLAGS
or AC_FC_LIBRARY_LDFLAGS
provide
their own main
entry function that initializes things like
Fortran I/O, and which then calls a user-provided entry function named
(say) MAIN__
to run the user's program. The
AC_F77_DUMMY_MAIN
/AC_FC_DUMMY_MAIN
or
AC_F77_MAIN
/AC_FC_MAIN
macro figures out how to deal with
this interaction.
When using Fortran for purely numerical functions (no I/O, etc.) often
one prefers to provide one's own main
and skip the Fortran
library initializations. In this case, however, one may still need to
provide a dummy MAIN__
routine in order to prevent linking errors
on some systems. AC_F77_DUMMY_MAIN
or AC_FC_DUMMY_MAIN
detects whether any such routine is required for linking, and
what its name is; the shell variable F77_DUMMY_MAIN
or
FC_DUMMY_MAIN
holds this name, unknown
when no solution
was found, and none
when no such dummy main is needed.
By default, action-if-found defines F77_DUMMY_MAIN
or
FC_DUMMY_MAIN
to the name of this routine (e.g., MAIN__
)
if it is required. [action-if-not-found] defaults to
exiting with an error.
In order to link with Fortran routines, the user's C/C++ program should then include the following code to define the dummy main if it is needed:
#ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif |
Note that this macro is called automatically from AC_F77_WRAPPERS
or AC_FC_WRAPPERS
; there is generally no need to call it
explicitly unless one wants to change the default actions.
In fact, although you can skip the Fortran library initialisations in
some cases (and doing so with g77
for example, you lose only
getarg
functionality), you cannot do this in general, and usually
cannot do this with Fortran 9x compilers, if you want the program not to
crash. This means that you either have to use AC_FC_MAIN
and have
the Fortran library's main function call your alternative entry
point, or else use your own main function and do the compiler-specific
runtime startup and shutdown within that function, by hand. Since the
latter strategy rather misses the point of autoconfing your code, this
will have to wait until autoconf adds support for discovering such
startup/shutdown functionality (are you volunteering?).
(Replace F77
with FC
for Fortran instead of Fortran 77.)
As discussed above, many Fortran libraries allow you to provide an entry
point called (say) MAIN__
instead of the usual main
, which
is then called by a main
function in the Fortran libraries that
initializes things like Fortran I/O. The AC_FC_MAIN
macro
detects whether it is possible to utilize such an alternate main
function, and defines FC_MAIN
to the name of the function. (If
no alternate main function name is found, FC_MAIN
is simply
defined to main
.)
Thus, when calling Fortran routines from C that perform things like I/O,
one should use this macro and name the "main" function
FC_MAIN
instead of main
.
If this macro discovers that the main function name is in fact simply
main
, then the macro additionally defines
FC_MAIN_IS_MAIN
that you can tell the difference between the situation where the
program's actual entry point is somewhere else, in a Fortran runtime's
main
function, and the situation where the current function is
the program's actual entry point, and you may have to do something more
complicated. As noted above, in the description of
AC_FC_DUMMY_MAIN
, there is no clear strategy for this latter
situation, but at least you can reliably detect that you are in trouble
in this case, which is progress of a sort.
Replace FC
with F77
for the Fortran 77 versions of these names.
Defines C macros F77_FUNC(name,NAME)
/FC_FUNC(name,NAME)
and F77_FUNC_(name,NAME)
/FC_FUNC_(name,NAME)
to properly
mangle the names of C/C++ identifiers, and identifiers with underscores,
respectively, so that they match the name-mangling scheme used by the
Fortran compiler.
Fortran is case-insensitive, and in order to achieve this the Fortran
compiler converts all identifiers into a canonical case and format. To
call a Fortran subroutine from C or to write a C function that is
callable from Fortran, the C program must explicitly use identifiers in
the format expected by the Fortran compiler. In order to do this, one
simply wraps all C identifiers in one of the macros provided by
AC_F77_WRAPPERS
or AC_FC_WRAPPERS
. For example, suppose
you have the following Fortran 77 subroutine:
subroutine foobar(x,y) double precision x, y y = 3.14159 * x return end |
You would then declare its prototype in C or C++ as:
#define FOOBAR_F77 F77_FUNC(foobar,FOOBAR) #ifdef __cplusplus extern "C" /* prevent C++ name mangling */ #endif void FOOBAR_F77(double *x, double *y); |
Note that we pass both the lowercase and uppercase versions of the
function name to F77_FUNC
so that it can select the right one.
Note also that all parameters to Fortran 77 routines are passed as
pointers (see (automake)Mixing Fortran 77 With C and C++ section `Mixing Fortran 77 With C and C++' in GNU Automake).
(Replace F77
with FC
for Fortran instead of Fortran 77.)
Although Autoconf tries to be intelligent about detecting the
name-mangling scheme of the Fortran compiler, there may be Fortran
compilers that it doesn't support yet. In this case, the above code
will generate a compile-time error, but some other behavior
(e.g., disabling Fortran-related features) can be induced by checking
whether the F77_FUNC
/FC_FUNC
macro is defined.
Now, to call that routine from a C program, we would do something like:
{ double x = 2.7183, y; FOOBAR_F77(&x, &y); } |
If the Fortran identifier contains an underscore (e.g., foo_bar
),
you should use F77_FUNC_
/FC_FUNC_
instead of
F77_FUNC
/FC_FUNC
(with the same arguments). This is
because some Fortran compilers mangle names differently if they contain
an underscore.
Given an identifier name, set the shell variable shellvar to
hold the mangled version name according to the rules of the
Fortran linker (see also AC_F77_WRAPPERS
or
AC_FC_WRAPPERS
). shellvar is optional; if it is not
supplied, the shell variable will be simply name. The purpose of
this macro is to give the caller a way to access the name-mangling
information other than through the C preprocessor as above, for example,
to call Fortran routines from some language other than C/C++.
The following macros handle the complications of dealing with the multiple Fortran variants which a compiler might support. There are multiple versions of the Fortran language standard. We are concerned here with Fortran 77, Fortran 90 and Fortran 95 (let's not think any more about Fortran 66, please, and postpone thought about Fortran 2003). Although in principle, as with all ISO standards, only the most recent version of a standard is The Standard, in practice multiple versions are used in any large project. Fortran compilers usually determine the language variant to use depending on the file extension, but some accept only a limited set of extensions and require compiler flags to switch between variants.
Fortran 90 and 95 introduced `free-form' source code, as an alternative
to the `fixed-form' of previous standards, and compilers usually require
a flag to switch this on. Some compilers (for example g77
)
permit free-form source code even in Fortran 77 code, though this is
blessed by no standard, is non-portable, and is probably a bad idea.
The AC_FC_(FREE|FIXED)FORM
macros have corresponding FPP
macros,
described in Preprocessing Fortran.
Yes, this is complicated, but it is the consequence of dealing with what are effectively several different sub-languages of Fortran.
Look for compiler flags to make the Fortran compiler (FC
) accept
fixed-format source code, in files with a source extension of
srcext (omitting any dot), and puts any necessary flags in
FCFLAGS_fixed_
srcext. Call [action-if-success]
(defaults to nothing) if it is successful, in the sense that it can
compile fixed-format code using the given extension, and
[action-if-failure] (defaults to failing with an error message) if
not.
Look for compiler flags to make the Fortran compiler (FC
) accept
free-format source code in files with a source extension of srcext (no
dot), and puts any necessary flags in FCFLAGS_free_srcext
.
The default actions are the same as for AC_FC_FIXEDFORM
.
A previous released version of this macro had the form
AC_FC_FREEFORM
([action-if-success],
[action-if-failure]), omitting the srcext argument; it
communicated its results by modifying FCFLAGS
. It also had an
interaction with the AC_FC_SRCEXT
macro. To support a limited
backward compatibility, if this macro is called in the second form with
no arguments, then it will default srcext to f90
and
append any necessary flags to FCFLAGS
rather than
FCFLAGS_free_f90
. This usage is deprecated. The related macros
AC_FC_FIXEDFORM
, AC_FPP_FREEFORM
and
AC_FPP_FIXEDFORM
do not have this feature.
This macro is most important if you are using the default `.f' extension, since many compilers interpret this extension as indicating fixed-format source unless an additional flag is supplied.
The AC_FC_SRCEXT
macro is now deprecated: use
AC_(FC|FPP)_(FIXED|FREE)FORM
instead.
By default, the FC
macros perform their tests using a `.f'
extension for source-code files. Some compilers, however, only enable
newer language features for appropriately named files, e.g. Fortran 90
features only for `.f90' files. On the other hand, some other
compilers expect all source files to end in `.f' and require
special flags to support other filename extensions. The
AC_FC_SRCEXT
macro deals with both of these issues.
The AC_FC_SRCEXT
tries to get the FC
compiler to accept files
ending with the extension .ext (i.e. ext does not
contain the dot). If any special compiler flags are needed for this, it
stores them in the output variable FCFLAGS_
ext. This
extension and these flags are then used for all subsequent FC
tests
(until AC_FC_SRCEXT
is called again).
For example, you would use AC_FC_SRCEXT(f90)
to employ the
`.f90' extension in future tests, and it would set a
FCFLAGS_f90
output variable with any extra flags that are needed
to compile such files.
The FCFLAGS_
ext can not be simply absorbed into
FCFLAGS
, for two reasons based on the limitations of some
compilers. First, only one FCFLAGS_
ext can be used at a
time, so files with different extensions must be compiled separately.
Second, FCFLAGS_
ext must appear immediately before
the source-code filename when compiling. So, continuing the example
above, you might compile a `foo.f90' file in your Makefile with the
command:
foo.o: foo.f90 $(FC) -c $(FCFLAGS) $(FCFLAGS_f90) foo.f90 |
If AC_FC_SRCEXT
succeeds in compiling files with the ext
extension, it calls [action-if-success] (defaults to nothing). If
it fails, and cannot find a way to make the FC
compiler accept such
files, it calls [action-if-failure] (defaults to exiting with an
error message).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The second block of macros is concerned with features and extensions which are or are not supported by a particular Fortran compiler.
Not all Fortran compilers are equal. Firstly, although the Fortran 77 standard is widely and fully supported, there are important compilers which do not (yet) support all features of the newer Fortran 90 and 95 standards. Secondly, and more importantly, there is a significant set of common extensions to Fortran, many of which originated with VAX Fortran, and many of which are useful enough to justify their use, even though they are non-standard. These semi-standard extensions tend to be broadly supported, but not quite broadly supported enough that you can reasonably use them in a portable program without checking that support first.
The following macros AC_DEFINE
their results, so that they are
generally most useful when used in conjunction with a config.h
file; they thus require preprocessing support, for which see
Preprocessing Fortran.
This is the Fortran analogue of AC_CHECK_HEADERS
, though it only
takes the first argument, giving the list of include files to check; we
are talking here about files included through the Fortran include
statement, not preprocessor files included through #include
.
For each include file, defines HAVE_include-file
(uppercased) if the include file is found. Respects the current value
of FCFLAGS
(as opposed to CFLAGS
).
This is like AC_CHECK_FUNCS
, but instead determine the intrinsics
available to the Fortran compiler. For each intrinsic in the
(whitespace-separated and case-insensitive) argument list, define
HAVE_INTRINSIC_intrinsic-function
(uppercased) if it is
available. For example, `AC_FC_CHECK_INTRINSICS(sin)' would define
HAVE_INTRINSIC_SIN
if the sin
intrinsic function were
available (there are probably rather few Fortrans which don't have this
function).
The macro works for both intrinsic functions and intrinsic subroutines.
Test whether the Fortran compiler ($FC
) has the common VAX %VAL
extension. If so, the preprocessor variable
HAVE_PERCENTVAL
is defined to 1.
Test whether the Fortran compiler ($FC
) has the common VAX %LOC
extension. If so, the preprocessor variable
HAVE_PERCENTLOC
is defined to 1.
Test whether the Fortran compiler ($FC
) supports BOZ constants in
various styles.
Fortran 95 BOZ constants are integer constants written in the format
B'xxx'
, O'xxx'
and Z'xxx'
. This should be true of
all Fortran 95, and later, compilers.
Some Fortran 95 compilers additionally support typeless BOZ
constants, written in the format X'xxx'
, which allow the
initialisation of any type of variable to a specific bit pattern.
Old-style typeless BOZ constants, as supported by VAX Fortran and
g77
, are written instead in the format 'xxx'X
.
Depending on the syntaxes supported, these macros define
HAVE_BOZ
, HAVE_TYPELESS_BOZ
or
HAVE_OLD_TYPELESS_BOZ
, respectively, to be 1.
Test whether the Fortran compiler ($FC
) supports the VOLATILE
statement. VOLATILE
is used to stop the optimisation of a variable, so
that it can be modified outside of the program itself. If supported the
preprocessor variable HAVE_VOLATILE
is defined to be 1.
Check whether the compiler regards the backslash character as an escape character. The Standard doesn't say anything about this, but many Unix Fortran compilers interpret `\n', for example, as a newline, and `\\' as a single backslash.
Test the behaviour of the currently selected compiler, and define
FC_LITERAL_BACKSLASH
to 1 if backslashes are treated literally -
that is if `\\' is interpreted as a pair of backslashes and
thus that `\n' is interpreted as two characters rather than one.
Check which flag is necessary to alter the compiler's search path for module files.
This obviously requires that the compiler has some notion of module files as separate from object files and some sensible method of altering its search path. This will therefore not work on early Cray F90 compilers, or on v5 (and 6?) of `ifc'.
The Fortran OPEN
statement is a rich source of portability problems,
since there are numerous common extensions, consisting of extra
specifiers, several of which are useful when they are available.
For each of the specifiers in the (whitespace-separated) argument list,
define HAVE_FC_OPEN_mungedspecifier
if the specifier may be
given as argument to the OPEN
statement. The
mungedspecifier is the specifier argument converted to
uppercase and with all characters outside [a-zA-Z0-9_]
deleted.
Note that this may include `specifiers' such as access='append'
and [access='sequential',recl=1]
(note the quoting, here, to
protect the comma) to check combinations of specifiers. In the latter
case, for example, if the given combination of specifiers were
permissable, the macro would define the variable
HAVE_FC_OPEN_ACCESSSEQUENTIALRECL1
. You may not include a space
in the `specifier', even quoted. Each argument must be a maximum of 65
characters in length (to abide by Fortran 77 line-length limits).
When opening a file for direct access, you must specify the record
length with the OPEN
specifier RECL
; however in the case
of unformatted direct access files, the units of this specifier
are unspecified (that is, they are compiler dependent and undocumented),
and may be bytes, words or some other unit. This macro determines the
units and defines FC_RECL_UNIT
to contain the number of bytes (1,
2, 4, 8, …) in the processor's unit of measurement.
Note that unformatted files are not themselves portable, and should only be used as either temporary files, or as precalculated or cached data files which will be read by a program or library compiled with the same Fortran processor. Making use of this information is probably a bad idea, but if for some reason you decide you just have to know, then this macro at least allows you to write your code in a portable way.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
It is both possible and useful to use Fortran which has cpp-style
directives within it. Some Fortran compilers, such as g77
, can
process these directives internally, and so need no separate
preprocessing stage; in other cases, the code must be compiled
indirectly, with a preprocessor producing pure Fortran code which is
only in a subsequent step passed to the compiler.
Because of the syntactical differences in the underlying languages,
it is not always possible to do this processing using the cpp
program, and you may need help from a separate Fortran-specific
preprocessor. A cpp
preprocessor cannot handle Fortran in
principle because it does not know about Fortran line-length limits, and
handles comments differently, but in practice most cpp
programs
will cope with Fortran well enough, if you use only #if
,
#define
and #include
, and are at least cautious about
#define
substitutions. The defaults in the AC_PROG_FPP
are suitably conservative, and at a pinch could probably be satisfied by
a fairly simple preprocessing script.
The AC_PROG_FPP
macro, combined with the corresponding support in
Automake (starting with version XXX), will work out how to compile
Fortran source containing such directives.
[feature-list] is a space-separated list of features that the Fortran preprocessor must have for the code to compile. See below for details. It is up to the package maintainer to properly set these requirements.
You should also call the macro `AC_PROG_FC' before you call this macro.
We presume that there is no preprocessing dependence on the language variant, so that a preprocessor will handle free-form F9x as happily as fixed-form F77.
Look for compiler flags to make the Fortran compiler (FC
) accept
and preprocess fixed-format source code, with a source extension of
srcext (no dot), and puts any necessary flags in
FPPFLAGS_fixed_
srcext.
The defaults are as with the function AC_FC_FREEFORM
.
Look for compiler flags to make the Fortran compiler (FC
) accept
and preprocess free-format source code, with a source extension of
srcext (no dot), and puts any necessary flags in
FPPFLAGS_free_
srcext.
The defaults are as with the function AC_FC_FREEFORM
.
These latter two macros are mostly applicable only when using direct
compilation. However in either case the macro also sets
FPP_PREPROCESS_EXT
and FPP_COMPILE_EXT
, based on
srcext. The parameter srcext can be either EXT
or EXT1:ext2
; in the first case, the preprocessor extension
is EXT
, and the compile extension ext
(ie, the
preprocessor extension, lowercased); in the second, the preprocessor
extension is EXT1
and the compile extension
ext2
. If you have to give these macros multiple times,
then it is the last pair of extensions which are substituted for
the variables by AC_PROG_FPP
.
There is no formal standard for Fortran preprocessor directives, and so
you introduce an element of non-portability into your code when you use
them. However they can (paradoxically) help make your code more
portable by allowing you to use useful and common extensions (such as
the READONLY
qualifier on the OPEN
statement) without
having the code break on those few compilers which support nothing
beyond the formal standard.
Different preprocessors support different subsets of the range of
possibilities. If your code requires only a very basic set of features
-- such as #if...#endif
and nothing more -- then you can make
use of a relatively primitive preprocessor, perhaps even one as simple
as a script. It is for this reason that this macro, unusually for
Autoconf macros, allows you to specify a set of needed features, and the macro
will find a preprocessor which not only exists and runs, but has at
least these features available.(2)
The AC_PROG_FPP
macro will fall back on cpp
if no more
specific preprocessor can be found. This will usually work, but
because Fortran and C have such different syntaxes, there will be a few
cases where the cpp
command becomes quite legitimately
confused. For example, cpp
preprocessors will not know that
they should be worried about lines that are longer than 72 characters
after substitution of #define
s. You can probably do most of what
you need with just #if...#endif
, support for which requires only
a very rudimentary preprocesser.
The features supported in the argument to AC_PROG_FPP
are as follows:
Correctly process #include
directives and the command-line option
`-I'.
Correctly process option `-D'.
Substitute macros in Fortran code (some preprocessors touch only lines starting with `#').
Wrap lines that become too long through macro substitution.
fpp
is probably the only preprocessor that does this. Without
this, you can run into trouble if your macro substitutions cause code
lines to move beyond Fortran 77's 72-character limit.
Require a preprocessor which can pass through C-style comments, /*
... */
, and add to FPPFLAGS
any flags required to make this
happen (this would be the `-C' option in cpp
).
Require a preprocessor which does suppress C-style comments.
Since this is usually the default with preprocessors (since they imitate
cpp
to a greater or lesser extent), there is no flag to switch
this behaviour on - including this feature simply means that you wish to
discard any preprocessor which does not have this property. You will
typically only have C-style comments if you have some complicated
preprocessor magic that needs to be explained; this feature is not an
excuse to start using C-style comments in the body of your Fortran.
Require a preprocessor which passes through C++-style comments, of the
form // ...
. Since this is the string-concatenation operator in
Fortran, you most emphatically do need this property.
Require a preprocessor which discards C++-style comments. You don't want this, and this option is here only for completeness and symmetry.
Features can be deselected, if the feature is not needed, by prepending `no'; for example `nodefine'.
The default for the feature list is `[include define nosubstitute
nowrap nocstyle noCSTYLE cxxstyle noCXXSTYLE]', and feature requirements
corresponding to the defaults may be omitted. The default behaviour
requests a preprocessor which preserves Fortran's //
string
concatenation operator and sets no requirements concerning C-style
comments. If you don't use C-style comments, you probably have no
reason to use, or even know about, any of these four features; if you do
decide to use them, then you should request the `CSTYLE' feature.
The default set of features requests a preprocessor which allows you to
use the `-I' and `-D' flags on the command line, and use the
preprocessor directives #include
, #define
and
#if(def)...#endif
within your Fortran.
Note that `wrap' implies `substitute', and `CSTYLE' and `cstyle' cannot be requested at the same time. The macro adjusts this automatically.
The macro works out if the Fortran compiler discovered by macro `AC_PROG_FC' has the requested set of features. If so, it arranges for the compilation to be done `directly'; if not, it arranges for `indirect' compilation, where the preprocessable Fortran code is converted to pure Fortran code and only subsequently passed to the Fortran compiler.
The AC_PROG_FPP
macro sets and substitutes the following
variables. The items in this list are noted as being valid for
`[direct]', `[indirect]' or `[both]' modes. In the first two cases, the
variable has a useful value only in the given mode, and an unspecified,
and therefore unpredictable, value in the other; in the last, it has a
value in both modes.
In `indirect' mode, this is set to the name of a suitable preprocessor. In `direct' mode, this may or may not be set - you should not rely on any particular value.
This contains the file extension which the Fortran compiler will
accept as containing source not to be preprocessed. It is most
typically f
(the default), but could be different if set by a
call to AC_FPP_(FIXED|FREE)FORM
.
The partner of @FPP_COMPILE_EXT@
, containing the file extension
which is taken to indicate Fortran source to be preprocessed.
The default is F
, but could be different if set by a
call to AC_FPP_(FIXED|FREE)FORM
.
This is used to include CPP/FPP related flags into the compiler call if we compile directly.
This is used to redirect fpp
output to the .f
file in those
cases where FPP
writes to stdout rather than to a file. It is
defined as either ""
or ">$@"
.
If the macro decides that we must use `direct' mode, then it sets
@FPPDIRECT_TRUE@
to be blank, and @FPPDIRECT_FALSE@
to be
#
, or vice versa if we are to use `indirect' mode. These provide
the mechanism for responding to the appropriate mode in a
`Makefile.in' (or any other context where the mode matters).
These may be used within a Makefile.in as follows:
@FPPDIRECT_TRUE@.@FPP_PREPROCESS_EXT@.o: @FPPDIRECT_TRUE@ $(PPFCCOMPILE) -c -o $@ $< @FPPDIRECT_FALSE@.@FPP_PREPROCESS_EXT@.@FPP_COMPILE_EXT: @FPPDIRECT_FALSE@ $(FPP) $(DEFS) $(DEFAULT_INCLUDES) \ @FPPDIRECT_FALSE@ $(INCLUDES) $(FPPFLAGS) $(AM_CPPFLAGS) \ @FPPDIRECT_FALSE@ $(CPPFLAGS) $< @FPP_OUTPUT@ |
If you use automake, then you may possibly recognise that as an
automake conditional (which is predeclared, so you do not need
to include AM_CONDITIONAL(FPPDIRECT, test)
in your configure.ac),
which might be used more straightforwardly in your `Makefile.am'
as follows:
if FPPDIRECT .@FPP_PREPROCESS_EXT@.o: $(PPFCCOMPILE) -c -o $@ $< else !FPPDIRECT .@FPP_PREPROCESS_EXT@.@FPP_COMPILE_EXT: $(FPP) $(DEFS) ... $< @FPP_OUTPUT@ endif !FPPDIRECT |
Note: There would seem to be a problem here with the (default) use of .F as
the extension for preprocessed files. On case-insensitive filesystems
such as HFS+, as used on MacOS X, `foo.F' and `foo.f' are the
same file. This means that indirect compilation would lose badly, since
converting `foo.F' to `foo.f' would clobber the original.
This is probably not a problem in practice, since the compilers (g77,
gfortran, nag, and xlf) actually likely to be used on OS X - which is a
recent platform, and thus with only recent Fortrans on it - can all do
direct compilation of preprocessable Fortran. Just in case, the
AC_PROG_FPP
checks whether we are in this fatal situation, and
collapses noisily if necessary.
Note: FPP_OUTPUT
is set to either ""
or ">$@"
. The
latter is OK in an implicit rule, but will potentially lose in an
explicit rule, since POSIX does not require that $@
is defined in
such a rule, and there are still a few makes which do not define it in
that context. As with the previous remark, however, this is probably
more a theoretical problem than a practical one.
The macro depends on both `FC' and `CPP', because we may
possibly need to fall back on cpp
for preprocessing.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for operating system services or capabilities.
Try to locate the X Window System include files and libraries. If the
user gave the command line options `--x-includes=dir' and
`--x-libraries=dir', use those directories. If either or
both were not given, get the missing values by running xmkmf
on a
trivial `Imakefile' and examining the `Makefile' that it
produces. If that fails (such as if xmkmf
is not present), look
for the files in several directories where they often reside. If either
method is successful, set the shell variables x_includes
and
x_libraries
to their locations, unless they are in directories
the compiler searches by default.
If both methods fail, or the user gave the command line option
`--without-x', set the shell variable no_x
to `yes';
otherwise set it to the empty string.
An enhanced version of AC_PATH_X
. It adds the C compiler flags
that X needs to output variable X_CFLAGS
, and the X linker flags
to X_LIBS
. Define X_DISPLAY_MISSING
if X is not
available.
This macro also checks for special libraries that some systems need in
order to compile X programs. It adds any that the system needs to
output variable X_EXTRA_LIBS
. And it checks for special X11R6
libraries that need to be linked with before `-lX11', and adds
any found to the output variable X_PRE_LIBS
.
Check whether the system supports starting scripts with a line of the
form `#! /bin/csh' to select the interpreter to use for the script.
After running this macro, shell code in `configure.ac' can check
the shell variable interpval
; it will be set to `yes'
if the system supports `#!', `no' if not.
Arrange for
large-file support. On some hosts, one must use special compiler
options to build programs that can access large files. Append any such
options to the output variable CC
. Define
_FILE_OFFSET_BITS
and _LARGE_FILES
if necessary.
Large-file support can be disabled by configuring with the `--disable-largefile' option.
If you use this macro, check that your program works even when
off_t
is longer than long
, since this is common when
large-file support is enabled. For example, it is not correct to print
an arbitrary off_t
value X
with printf ("%ld",
(long) X)
.
The LFS introduced the fseeko
and ftello
functions to
replace their C counterparts fseek
and ftell
that do not
use off_t
. Take care to use AC_FUNC_FSEEKO
to make their
prototypes available when using them and large-file support is
enabled.
If the system supports file names longer than 14 characters, define
HAVE_LONG_FILE_NAMES
.
Check to see if the POSIX termios headers and functions are available on the
system. If so, set the shell variable ac_cv_sys_posix_termios
to
`yes'. If not, set the variable to `no'.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following macros check for certain operating systems that need special treatment for some programs, due to exceptional oddities in their header files or libraries. These macros are warts; they will be replaced by a more systematic approach, based on the functions they make available or the environments they provide.
If on AIX, define _ALL_SOURCE
. Allows the use of some BSD
functions. Should be called before any macros that run the C compiler.
If using the GNU C library, define _GNU_SOURCE
.
Allows the use of some GNU functions. Should be called
before any macros that run the C compiler.
For INTERACTIVE UNIX (ISC), add `-lcposix' to output
variable LIBS
if necessary for POSIX facilities. Call this
after AC_PROG_CC
and before any other macros that use POSIX
interfaces. INTERACTIVE UNIX is no longer sold, and Sun says that
they will drop support for it on 2006-07-23, so this macro is becoming
obsolescent.
If on Minix, define _MINIX
and _POSIX_SOURCE
and define
_POSIX_1_SOURCE
to be 2. This allows the use of POSIX
facilities. Should be called before any macros that run the C compiler.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Norman Gray on September, 18 2005 using texi2html 1.70.