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