7
7
dnl From Paul Eggert and Derek Price.
9
dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
11
dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
12
dnl 'include' otherwise.
14
dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
15
dnl supports it in the special case that it is the first include directive in
16
dnl the given file, or to 'include' otherwise.
18
dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
19
dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
20
dnl '#pragma GCC system_header' has the same effect as if the file was found
21
dnl through the include search path specified with '-isystem' options (as
22
dnl opposed to the search path specified with '-I' options). Namely, gcc
23
dnl does not warn about some things, and on some systems (Solaris and Interix)
24
dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
25
dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
26
dnl of plain '__STDC__'.
28
9
AC_DEFUN([gl_INCLUDE_NEXT],
30
11
AC_LANG_PREPROC_REQUIRE()
31
12
AC_CACHE_CHECK([whether the preprocessor supports include_next],
32
13
[gl_cv_have_include_next],
33
[rm -rf conftestd1a conftestd1b conftestd2
34
mkdir conftestd1a conftestd1b conftestd2
35
dnl The include of <stdio.h> is because IBM C 9.0 on AIX 6.1 supports
36
dnl include_next when used as first preprocessor directive in a file,
37
dnl but not when preceded by another include directive. Additionally,
38
dnl with this same compiler, include_next is a no-op when used in a
39
dnl header file that was included by specifying its absolute file name.
40
dnl Despite these two bugs, include_next is used in the compiler's
41
dnl <math.h>. By virtue of the second bug, we need to use include_next
42
dnl as well in this case.
43
cat <<EOF > conftestd1a/conftest.h
44
#define DEFINED_IN_CONFTESTD1
45
#include_next <conftest.h>
46
#ifdef DEFINED_IN_CONFTESTD2
49
#error "include_next doesn't work"
52
cat <<EOF > conftestd1b/conftest.h
53
#define DEFINED_IN_CONFTESTD1
14
[rm -rf conftestd1 conftestd2
15
mkdir conftestd1 conftestd2
16
cat <<EOF > conftestd1/conftest.h
17
#define DEFINED_IN_CONFTESTD1
55
18
#include_next <conftest.h>
56
19
#ifdef DEFINED_IN_CONFTESTD2
66
29
#define DEFINED_IN_CONFTESTD2
68
gl_save_CPPFLAGS="$CPPFLAGS"
69
CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
31
save_CPPFLAGS="$CPPFLAGS"
32
CPPFLAGS="$CPPFLAGS -Iconftestd1 -Iconftestd2"
70
33
AC_COMPILE_IFELSE([#include <conftest.h>],
71
34
[gl_cv_have_include_next=yes],
72
[CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
73
AC_COMPILE_IFELSE([#include <conftest.h>],
74
[gl_cv_have_include_next=buggy],
75
[gl_cv_have_include_next=no])
77
CPPFLAGS="$gl_save_CPPFLAGS"
78
rm -rf conftestd1a conftestd1b conftestd2
35
[gl_cv_have_include_next=no])
36
CPPFLAGS="$save_CPPFLAGS"
37
rm -rf conftestd1 conftestd2
81
39
if test $gl_cv_have_include_next = yes; then
41
dnl FIXME: Remove HAVE_INCLUDE_NEXT and update everything that uses it
42
dnl to use @INCLUDE_NEXT@ instead.
43
AC_DEFINE([HAVE_INCLUDE_NEXT], 1,
44
[Define if your compiler supports the #include_next directive.])
82
46
INCLUDE_NEXT=include_next
83
INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
84
if test -n "$GCC"; then
85
PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
88
if test $gl_cv_have_include_next = buggy; then
90
INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
93
INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
96
50
AC_SUBST([INCLUDE_NEXT])
97
AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
98
AC_SUBST([PRAGMA_SYSTEM_HEADER])
101
53
# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
137
88
[[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
139
dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
140
dnl that contain only a #include of other header files and no
141
dnl non-comment tokens of their own. This leads to a failure to
142
dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
143
dnl and others. The workaround is to force preservation of comments
144
dnl through option -C. This ensures all necessary #line directives
145
dnl are present. GCC supports option -C as well.
147
aix*) gl_absname_cpp="$ac_cpp -C" ;;
148
*) gl_absname_cpp="$ac_cpp" ;;
150
dnl eval is necessary to expand gl_absname_cpp.
90
dnl eval is necessary to expand ac_cpp.
151
91
dnl Ultrix and Pyramid sh refuse to redirect output of eval,
152
92
dnl so use subshell.
153
93
AS_VAR_SET([gl_next_header],
154
['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
94
['"'`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
155
95
sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{
156
96
s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1#