aboutsummaryrefslogtreecommitdiff
path: root/gcc/cppinit.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@mvista.com>2003-02-13 17:23:56 +0000
committerDaniel Jacobowitz <drow@gcc.gnu.org>2003-02-13 17:23:56 +0000
commit047d636f544fad604aec883b45012d59369839fe (patch)
tree3d7379a3ec405d4e0f84ede65961991b09195727 /gcc/cppinit.c
parent902cf50c93298503d3966675cd01841b97c909e8 (diff)
Makefile.in (PREPROCESSOR_DEFINES): Add @TARGET_SYSTEM_ROOT_DEFINE@.
* Makefile.in (PREPROCESSOR_DEFINES): Add @TARGET_SYSTEM_ROOT_DEFINE@. * configure.in (PREFIX_INCLUDE_DIR): Don't define if $with_sysroot is specified or if building a cross compiler. (TARGET_SYSTEM_ROOT_DEFINE): Add TARGET_SYSTEM_ROOT_RELOCATABLE if the sysroot is under $exec_prefix. * configure: Regenerated. * cppdefault.h: Use native include paths if TARGET_SYSTEM_ROOT is defined. (struct default_include): Add add_sysroot field. (cpp_SYSROOT): Declare. * cppdefault.c (cpp_include_defaults): Fill in add_sysroot field. (cpp_SYSROOT): New variable. * cppinit.c (cpp_create_reader): Initialize CPP_OPTION (pfile, sysroot). (init_standard_includes): Handle add_sysroot. Do not add unrelocated copies of relocated directories. (COMMAND_LINE_OPTIONS): Add -isysroot. (cpp_handle_option): Handle -isysroot. * cpplib.h (struct cpp_options): Add sysroot member. * gcc.c (The Specs Language): Update description of %I. (target_system_root_changed): New variable. (process_command): Conditionalize make_relative_prefix call on !VMS and TARGET_SYSTEM_ROOT_RELOCATABLE. Set target_system_root_changed. (do_spec_1): Add -isysroot to %I. * doc/invoke.texi (Spec Files): Update description of %I. * doc/install.texi (--with-sysroot): Update comment about relocation. From-SVN: r62853
Diffstat (limited to 'gcc/cppinit.c')
-rw-r--r--gcc/cppinit.c67
1 files changed, 38 insertions, 29 deletions
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 591b4bfd76a..40b5059612e 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -529,6 +529,7 @@ cpp_create_reader (lang)
CPP_OPTION (pfile, warn_endif_labels) = 1;
CPP_OPTION (pfile, warn_deprecated) = 1;
CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
+ CPP_OPTION (pfile, sysroot) = cpp_SYSROOT;
CPP_OPTION (pfile, pending) =
(struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending));
@@ -757,46 +758,26 @@ init_standard_includes (pfile)
{
const struct default_include *p;
const char *specd_prefix = CPP_OPTION (pfile, include_prefix);
+ int default_len, specd_len;
+ char *default_prefix;
/* Search "translated" versions of GNU directories.
These have /usr/local/lib/gcc... replaced by specd_prefix. */
+ default_len = 0;
+ specd_len = 0;
+ default_prefix = NULL;
if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len)
{
/* Remove the `include' from /usr/local/lib/gcc.../include.
GCC_INCLUDE_DIR will always end in /include. */
- int default_len = cpp_GCC_INCLUDE_DIR_len;
- char *default_prefix = (char *) alloca (default_len + 1);
- int specd_len = strlen (specd_prefix);
+ default_len = cpp_GCC_INCLUDE_DIR_len;
+ default_prefix = (char *) alloca (default_len + 1);
+ specd_len = strlen (specd_prefix);
memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len);
default_prefix[default_len] = '\0';
-
- for (p = cpp_include_defaults; p->fname; p++)
- {
- /* Some standard dirs are only for C++. */
- if (!p->cplusplus
- || (CPP_OPTION (pfile, cplusplus)
- && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
- {
- /* Does this dir start with the prefix? */
- if (!strncmp (p->fname, default_prefix, default_len))
- {
- /* Yes; change prefix and add to search list. */
- int flen = strlen (p->fname);
- int this_len = specd_len + flen - default_len;
- char *str = (char *) xmalloc (this_len + 1);
- memcpy (str, specd_prefix, specd_len);
- memcpy (str + specd_len,
- p->fname + default_len,
- flen - default_len + 1);
-
- append_include_chain (pfile, str, SYSTEM, p->cxx_aware);
- }
- }
- }
}
- /* Search ordinary names for GNU include directories. */
for (p = cpp_include_defaults; p->fname; p++)
{
/* Some standard dirs are only for C++. */
@@ -804,7 +785,30 @@ init_standard_includes (pfile)
|| (CPP_OPTION (pfile, cplusplus)
&& !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
{
- char *str = update_path (p->fname, p->component);
+ char *str;
+
+ /* Should this dir start with the sysroot? */
+ if (p->add_sysroot && CPP_OPTION (pfile, sysroot))
+ str = concat (CPP_OPTION (pfile, sysroot), p->fname, NULL);
+
+ /* Does this dir start with the prefix? */
+ else if (default_len
+ && !strncmp (p->fname, default_prefix, default_len))
+ {
+ /* Yes; change prefix and add to search list. */
+ int flen = strlen (p->fname);
+ int this_len = specd_len + flen - default_len;
+
+ str = (char *) xmalloc (this_len + 1);
+ memcpy (str, specd_prefix, specd_len);
+ memcpy (str + specd_len,
+ p->fname + default_len,
+ flen - default_len + 1);
+ }
+
+ else
+ str = update_path (p->fname, p->component);
+
append_include_chain (pfile, str, SYSTEM, p->cxx_aware);
}
}
@@ -1161,6 +1165,7 @@ new_pending_directive (pend, text, handler)
DEF_OPT("imacros", no_fil, OPT_imacros) \
DEF_OPT("include", no_fil, OPT_include) \
DEF_OPT("iprefix", no_pth, OPT_iprefix) \
+ DEF_OPT("isysroot", no_dir, OPT_isysroot) \
DEF_OPT("isystem", no_dir, OPT_isystem) \
DEF_OPT("iwithprefix", no_dir, OPT_iwithprefix) \
DEF_OPT("iwithprefixbefore", no_dir, OPT_iwithprefixbefore)
@@ -1305,6 +1310,10 @@ cpp_handle_option (pfile, argc, argv)
CPP_OPTION (pfile, include_prefix_len) = strlen (arg);
break;
+ case OPT_isysroot:
+ CPP_OPTION (pfile, sysroot) = arg;
+ break;
+
case OPT_A:
if (arg[0] == '-')
{