Annotation of embedaddon/libiconv/srcm4/include_next.m4, revision 1.1.1.1
1.1 misho 1: # include_next.m4 serial 14
2: dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
3: dnl This file is free software; the Free Software Foundation
4: dnl gives unlimited permission to copy and/or distribute it,
5: dnl with or without modifications, as long as this notice is preserved.
6:
7: dnl From Paul Eggert and Derek Price.
8:
9: dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
10: dnl
11: dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
12: dnl 'include' otherwise.
13: dnl
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.
17: dnl
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__'.
27:
28: AC_DEFUN([gl_INCLUDE_NEXT],
29: [
30: AC_LANG_PREPROC_REQUIRE()
31: AC_CACHE_CHECK([whether the preprocessor supports include_next],
32: [gl_cv_have_include_next],
33: [rm -rf conftestd1a conftestd1b conftestd2
34: mkdir conftestd1a conftestd1b conftestd2
35: dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
36: dnl AIX 6.1 support include_next when used as first preprocessor directive
37: dnl in a file, but not when preceded by another include directive. Check
38: dnl for this bug by including <stdio.h>.
39: dnl Additionally, with this same compiler, include_next is a no-op when
40: dnl used in a header file that was included by specifying its absolute
41: dnl file name. Despite these two bugs, include_next is used in the
42: dnl compiler's <math.h>. By virtue of the second bug, we need to use
43: dnl include_next as well in this case.
44: cat <<EOF > conftestd1a/conftest.h
45: #define DEFINED_IN_CONFTESTD1
46: #include_next <conftest.h>
47: #ifdef DEFINED_IN_CONFTESTD2
48: int foo;
49: #else
50: #error "include_next doesn't work"
51: #endif
52: EOF
53: cat <<EOF > conftestd1b/conftest.h
54: #define DEFINED_IN_CONFTESTD1
55: #include <stdio.h>
56: #include_next <conftest.h>
57: #ifdef DEFINED_IN_CONFTESTD2
58: int foo;
59: #else
60: #error "include_next doesn't work"
61: #endif
62: EOF
63: cat <<EOF > conftestd2/conftest.h
64: #ifndef DEFINED_IN_CONFTESTD1
65: #error "include_next test doesn't work"
66: #endif
67: #define DEFINED_IN_CONFTESTD2
68: EOF
69: gl_save_CPPFLAGS="$CPPFLAGS"
70: CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
71: AC_COMPILE_IFELSE([#include <conftest.h>],
72: [gl_cv_have_include_next=yes],
73: [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
74: AC_COMPILE_IFELSE([#include <conftest.h>],
75: [gl_cv_have_include_next=buggy],
76: [gl_cv_have_include_next=no])
77: ])
78: CPPFLAGS="$gl_save_CPPFLAGS"
79: rm -rf conftestd1a conftestd1b conftestd2
80: ])
81: PRAGMA_SYSTEM_HEADER=
82: if test $gl_cv_have_include_next = yes; then
83: INCLUDE_NEXT=include_next
84: INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
85: if test -n "$GCC"; then
86: PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
87: fi
88: else
89: if test $gl_cv_have_include_next = buggy; then
90: INCLUDE_NEXT=include
91: INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
92: else
93: INCLUDE_NEXT=include
94: INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
95: fi
96: fi
97: AC_SUBST([INCLUDE_NEXT])
98: AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
99: AC_SUBST([PRAGMA_SYSTEM_HEADER])
100: ])
101:
102: # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
103: # ------------------------------------------
104: # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
105: # '<foo.h>'; otherwise define it to be
106: # '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
107: # Also, if #include_next works as first preprocessing directive in a file,
108: # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
109: # be
110: # '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
111: # That way, a header file with the following line:
112: # #@INCLUDE_NEXT@ @NEXT_FOO_H@
113: # or
114: # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
115: # behaves (after sed substitution) as if it contained
116: # #include_next <foo.h>
117: # even if the compiler does not support include_next.
118: # The three "///" are to pacify Sun C 5.8, which otherwise would say
119: # "warning: #include of /usr/include/... may be non-portable".
120: # Use `""', not `<>', so that the /// cannot be confused with a C99 comment.
121: # Note: This macro assumes that the header file is not empty after
122: # preprocessing, i.e. it does not only define preprocessor macros but also
123: # provides some type/enum definitions or function/variable declarations.
124: AC_DEFUN([gl_CHECK_NEXT_HEADERS],
125: [
126: AC_REQUIRE([gl_INCLUDE_NEXT])
127: AC_REQUIRE([AC_CANONICAL_HOST])
128: AC_CHECK_HEADERS_ONCE([$1])
129:
130: m4_foreach_w([gl_HEADER_NAME], [$1],
131: [AS_VAR_PUSHDEF([gl_next_header],
132: [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
133: if test $gl_cv_have_include_next = yes; then
134: AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
135: else
136: AC_CACHE_CHECK(
137: [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
138: m4_defn([gl_next_header]),
139: [AS_VAR_PUSHDEF([gl_header_exists],
140: [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
141: if test AS_VAR_GET(gl_header_exists) = yes; then
142: AC_LANG_CONFTEST(
143: [AC_LANG_SOURCE(
144: [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
145: )])
146: dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
147: dnl that contain only a #include of other header files and no
148: dnl non-comment tokens of their own. This leads to a failure to
149: dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
150: dnl and others. The workaround is to force preservation of comments
151: dnl through option -C. This ensures all necessary #line directives
152: dnl are present. GCC supports option -C as well.
153: case "$host_os" in
154: aix*) gl_absname_cpp="$ac_cpp -C" ;;
155: *) gl_absname_cpp="$ac_cpp" ;;
156: esac
157: dnl eval is necessary to expand gl_absname_cpp.
158: dnl Ultrix and Pyramid sh refuse to redirect output of eval,
159: dnl so use subshell.
160: AS_VAR_SET([gl_next_header],
161: ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
162: sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{
163: s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1#
164: s#^/[^/]#//&#
165: p
166: q
167: }'`'"'])
168: else
169: AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
170: fi
171: AS_VAR_POPDEF([gl_header_exists])])
172: fi
173: AC_SUBST(
174: AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
175: [AS_VAR_GET([gl_next_header])])
176: if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
177: # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
178: gl_next_as_first_directive='<'gl_HEADER_NAME'>'
179: else
180: # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
181: gl_next_as_first_directive=AS_VAR_GET([gl_next_header])
182: fi
183: AC_SUBST(
184: AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
185: [$gl_next_as_first_directive])
186: AS_VAR_POPDEF([gl_next_header])])
187: ])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>