xref: /dflybsd-src/contrib/gcc-8.0/gcc/cppdefault.c (revision 38fd149817dfbff97799f62fcb70be98c4e32523)
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