diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f88b0ed5dc2..047a1ffcfe9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2007-03-22 Joseph Myers + + * c-incpath.c (add_sysroot_to_chain): New. + (merge_include_chains): Add sysroot argument. Call + add_sysroot_to_chain if sysrooted. + (register_include_chains): Update call to merge_include_chains. + * doc/cppopts.texi: Document use of '=' in include directory + arguments. + 2007-03-22 Uros Bizjak * config/i386/i386.md (cmp): Rename from cmpsf and cmpdf. diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c index 3a9585bd26d..3e819cec838 100644 --- a/gcc/c-incpath.c +++ b/gcc/c-incpath.c @@ -51,7 +51,8 @@ static const char dir_separator_str[] = { DIR_SEPARATOR, 0 }; static void add_env_var_paths (const char *, int); static void add_standard_paths (const char *, const char *, const char *, int); static void free_path (struct cpp_dir *, int); -static void merge_include_chains (cpp_reader *, int); +static void merge_include_chains (const char *, cpp_reader *, int); +static void add_sysroot_to_chain (const char *, int); static struct cpp_dir *remove_duplicates (cpp_reader *, struct cpp_dir *, struct cpp_dir *, struct cpp_dir *, int); @@ -282,6 +283,19 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head, return head; } +/* Add SYSROOT to any user-supplied paths in CHAIN starting with + "=". */ + +static void +add_sysroot_to_chain (const char *sysroot, int chain) +{ + struct cpp_dir *p; + + for (p = heads[chain]; p != NULL; p = p->next) + if (p->name[0] == '=' && p->user_supplied_p) + p->name = concat (sysroot, p->name + 1, NULL); +} + /* Merge the four include chains together in the order quote, bracket, system, after. Remove duplicate dirs (as determined by INO_T_EQ()). @@ -293,8 +307,17 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head, written -iquote bar -Ifoo -Iquux. */ static void -merge_include_chains (cpp_reader *pfile, int verbose) +merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose) { + /* Add the sysroot to user-supplied paths starting with "=". */ + if (sysroot) + { + add_sysroot_to_chain (sysroot, QUOTE); + add_sysroot_to_chain (sysroot, BRACKET); + add_sysroot_to_chain (sysroot, SYSTEM); + add_sysroot_to_chain (sysroot, AFTER); + } + /* Join the SYSTEM and AFTER chains. Remove duplicates in the resulting SYSTEM chain. */ if (heads[SYSTEM]) @@ -419,7 +442,7 @@ register_include_chains (cpp_reader *pfile, const char *sysroot, target_c_incpath.extra_includes (sysroot, iprefix, stdinc); - merge_include_chains (pfile, verbose); + merge_include_chains (sysroot, pfile, verbose); cpp_set_include_chains (pfile, heads[QUOTE], heads[BRACKET], quote_ignores_source_dir); diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi index fbd6f80790a..17235bdae58 100644 --- a/gcc/doc/cppopts.texi +++ b/gcc/doc/cppopts.texi @@ -65,6 +65,8 @@ of system headers are not defeated (@pxref{System Headers}) @end ifset . +If @var{dir} begins with @code{=}, then the @code{=} will be replaced +by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}. @item -o @var{file} @opindex o @@ -464,6 +466,8 @@ specified by @option{-include}. Search @var{dir} for header files, but do it @emph{after} all directories specified with @option{-I} and the standard system directories have been exhausted. @var{dir} is treated as a system include directory. +If @var{dir} begins with @code{=}, then the @code{=} will be replaced +by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}. @item -iprefix @var{prefix} @opindex iprefix @@ -499,6 +503,8 @@ is applied to the standard system directories. @ifset cppmanual @xref{System Headers}. @end ifset +If @var{dir} begins with @code{=}, then the @code{=} will be replaced +by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}. @item -iquote @var{dir} @opindex iquote @@ -509,6 +515,8 @@ Search @var{dir} only for header files requested with @ifset cppmanual @xref{Search Path}. @end ifset +If @var{dir} begins with @code{=}, then the @code{=} will be replaced +by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}. @item -fdollars-in-identifiers @opindex fdollars-in-identifiers