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