1b1e83836Smrg /* CPP Library.
2b1e83836Smrg Copyright (C) 1986-2022 Free Software Foundation, Inc.
3b1e83836Smrg Contributed by Per Bothner, 1994-95.
4b1e83836Smrg Based on CCCP program by Paul Rubin, June 1986
5b1e83836Smrg Adapted to ANSI C, Richard Stallman, Jan 1987
6b1e83836Smrg
7b1e83836Smrg This program is free software; you can redistribute it and/or modify it
8b1e83836Smrg under the terms of the GNU General Public License as published by the
9b1e83836Smrg Free Software Foundation; either version 3, or (at your option) any
10b1e83836Smrg later version.
11b1e83836Smrg
12b1e83836Smrg This program is distributed in the hope that it will be useful,
13b1e83836Smrg but WITHOUT ANY WARRANTY; without even the implied warranty of
14b1e83836Smrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15b1e83836Smrg GNU General Public License for more details.
16b1e83836Smrg
17b1e83836Smrg You should have received a copy of the GNU General Public License
18b1e83836Smrg along with this program; see the file COPYING3. If not see
19b1e83836Smrg <http://www.gnu.org/licenses/>. */
20b1e83836Smrg
21b1e83836Smrg #include "config.h"
22b1e83836Smrg #include "system.h"
23b1e83836Smrg #include "coretypes.h"
24b1e83836Smrg #include "tm.h"
25b1e83836Smrg #include "cppdefault.h"
26b1e83836Smrg
27b1e83836Smrg #ifndef NATIVE_SYSTEM_HEADER_COMPONENT
28b1e83836Smrg #define NATIVE_SYSTEM_HEADER_COMPONENT 0
29b1e83836Smrg #endif
30b1e83836Smrg
31b1e83836Smrg #if defined (CROSS_DIRECTORY_STRUCTURE) && !defined (TARGET_SYSTEM_ROOT)
32b1e83836Smrg # undef LOCAL_INCLUDE_DIR
33b1e83836Smrg # undef NATIVE_SYSTEM_HEADER_DIR
34b1e83836Smrg #else
35b1e83836Smrg # undef CROSS_INCLUDE_DIR
36b1e83836Smrg #endif
37b1e83836Smrg
38b1e83836Smrg const struct default_include cpp_include_defaults[]
39b1e83836Smrg #ifdef INCLUDE_DEFAULTS
40b1e83836Smrg = INCLUDE_DEFAULTS;
41b1e83836Smrg #else
42b1e83836Smrg = {
43b1e83836Smrg #ifdef GPLUSPLUS_INCLUDE_DIR
44b1e83836Smrg /* Pick up GNU C++ generic include files. */
45b1e83836Smrg { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1,
46b1e83836Smrg GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
47b1e83836Smrg #endif
48b1e83836Smrg #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
49b1e83836Smrg /* Pick up GNU C++ target-dependent include files. */
50b1e83836Smrg { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1,
51b1e83836Smrg GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 },
52b1e83836Smrg #endif
53b1e83836Smrg #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
54b1e83836Smrg /* Pick up GNU C++ backward and deprecated include files. */
55b1e83836Smrg { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1,
56b1e83836Smrg GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
57b1e83836Smrg #endif
58b1e83836Smrg #ifdef GPLUSPLUS_LIBCXX_INCLUDE_DIR
59b1e83836Smrg /* Pick up libc++ include files, if we have -stdlib=libc++. */
60b1e83836Smrg { GPLUSPLUS_LIBCXX_INCLUDE_DIR, "G++", 2, 1,
61b1e83836Smrg GPLUSPLUS_LIBCXX_INCLUDE_DIR_ADD_SYSROOT, 0 },
62b1e83836Smrg #endif
63b1e83836Smrg #ifdef GCC_INCLUDE_DIR
64*2683f5b1Smrg #ifndef GCC_INCLUDE_DIR_ADD_SYSROOT
65*2683f5b1Smrg #define GCC_INCLUDE_DIR_ADD_SYSROOT 0
66*2683f5b1Smrg #endif
67b1e83836Smrg /* This is the dir for gcc's private headers. */
68*2683f5b1Smrg { GCC_INCLUDE_DIR, "GCC", 0, 0,
69*2683f5b1Smrg GCC_INCLUDE_DIR_ADD_SYSROOT, 0 },
70b1e83836Smrg #endif
71b1e83836Smrg #ifdef LOCAL_INCLUDE_DIR
72b1e83836Smrg /* /usr/local/include comes before the fixincluded header files. */
73b1e83836Smrg { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
74b1e83836Smrg { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
75b1e83836Smrg #endif
76b1e83836Smrg #ifdef PREFIX_INCLUDE_DIR
77b1e83836Smrg { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0 },
78b1e83836Smrg #endif
79b1e83836Smrg #ifdef FIXED_INCLUDE_DIR
80b1e83836Smrg /* This is the dir for fixincludes. */
81b1e83836Smrg { FIXED_INCLUDE_DIR, "GCC", 0, 0, 0,
82b1e83836Smrg /* A multilib suffix needs adding if different multilibs use
83b1e83836Smrg different headers. */
84b1e83836Smrg #ifdef SYSROOT_HEADERS_SUFFIX_SPEC
85b1e83836Smrg 1
86b1e83836Smrg #else
87b1e83836Smrg 0
88b1e83836Smrg #endif
89b1e83836Smrg },
90b1e83836Smrg #endif
91b1e83836Smrg #ifdef CROSS_INCLUDE_DIR
92b1e83836Smrg /* One place the target system's headers might be. */
93b1e83836Smrg { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
94b1e83836Smrg #endif
95b1e83836Smrg #ifdef TOOL_INCLUDE_DIR
96b1e83836Smrg /* Another place the target system's headers might be. */
97b1e83836Smrg { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0 },
98b1e83836Smrg #endif
99b1e83836Smrg #ifdef NATIVE_SYSTEM_HEADER_DIR
100b1e83836Smrg /* /usr/include comes dead last. */
101b1e83836Smrg { NATIVE_SYSTEM_HEADER_DIR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 2 },
102b1e83836Smrg { NATIVE_SYSTEM_HEADER_DIR, NATIVE_SYSTEM_HEADER_COMPONENT, 0, 0, 1, 0 },
103b1e83836Smrg #endif
104b1e83836Smrg { 0, 0, 0, 0, 0, 0 }
105b1e83836Smrg };
106b1e83836Smrg #endif /* no INCLUDE_DEFAULTS */
107b1e83836Smrg
108b1e83836Smrg #ifdef GCC_INCLUDE_DIR
109b1e83836Smrg const char cpp_GCC_INCLUDE_DIR[] = GCC_INCLUDE_DIR;
110b1e83836Smrg const size_t cpp_GCC_INCLUDE_DIR_len = sizeof GCC_INCLUDE_DIR - 8;
111b1e83836Smrg #else
112b1e83836Smrg const char cpp_GCC_INCLUDE_DIR[] = "";
113b1e83836Smrg const size_t cpp_GCC_INCLUDE_DIR_len = 0;
114b1e83836Smrg #endif
115b1e83836Smrg
116b1e83836Smrg /* The configured prefix. */
117b1e83836Smrg const char cpp_PREFIX[] = PREFIX;
118b1e83836Smrg const size_t cpp_PREFIX_len = sizeof PREFIX - 1;
119b1e83836Smrg const char cpp_EXEC_PREFIX[] = STANDARD_EXEC_PREFIX;
120b1e83836Smrg
121b1e83836Smrg /* This value is set by cpp_relocated at runtime */
122b1e83836Smrg const char *gcc_exec_prefix;
123b1e83836Smrg
124b1e83836Smrg /* Return true if the toolchain is relocated. */
125b1e83836Smrg bool
cpp_relocated(void)126b1e83836Smrg cpp_relocated (void)
127b1e83836Smrg {
128b1e83836Smrg static int relocated = -1;
129b1e83836Smrg
130b1e83836Smrg /* A relocated toolchain ignores standard include directories. */
131b1e83836Smrg if (relocated == -1)
132b1e83836Smrg {
133b1e83836Smrg /* Check if the toolchain was relocated? */
134b1e83836Smrg gcc_exec_prefix = getenv ("GCC_EXEC_PREFIX");
135b1e83836Smrg if (gcc_exec_prefix)
136b1e83836Smrg relocated = 1;
137b1e83836Smrg else
138b1e83836Smrg relocated = 0;
139b1e83836Smrg }
140b1e83836Smrg
141b1e83836Smrg return relocated;
142b1e83836Smrg }
143