xref: /netbsd-src/external/gpl3/gcc/dist/gcc/cppdefault.cc (revision 2683f5b185977c9184701f18c843971cd908b00e)
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