diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-20 21:00:03 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-20 21:00:03 +0000 |
commit | 727790207840e183ceb2477fc26bb1fcd37d5b9c (patch) | |
tree | f48eda30525ee2ab01e82568bb55e5e407a8a604 /gcc/c-incpath.c | |
parent | 2db62ac62772332fb91f424fb2286d77520d8d83 (diff) | |
download | gcc-727790207840e183ceb2477fc26bb1fcd37d5b9c.tar.gz |
PR libstdc++/25524
* cppdefault.h (struct default_include): Add multilib flag.
* cppdefault.c (cpp_include_defaults): Set it.
* c.opt (-imultilib): New option.
* c-opts.c (imultilib): New.
(c_common_handle_option): Handle -imultilib.
(c_common_post_options): Likewise.
* c-incpath.c (add_standard_paths, register_include_chains):
Likewise.
* c-incpath.h (register_include_chains): Add extra parameter.
* gcc.c (do_spec_1): Generate -imultilib option.
(The Specs Language): Update %I description.
(process_command): Update copyright notice.
* doc/cppopts.texi (-imultilib): Document.
* doc/invoke.texi (-imultilib): Include in option summary.
(%I): Update specs documentation.
libstdc++-v3:
* include/Makefile.am: Install host-specific headers in multilib
subdirectory.
* include/Makefile.in: Regenerate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110037 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-incpath.c')
-rw-r--r-- | gcc/c-incpath.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c index 38611068a79..fc1e3149bb2 100644 --- a/gcc/c-incpath.c +++ b/gcc/c-incpath.c @@ -1,6 +1,7 @@ /* Set up combined include path chain for the preprocessor. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. Broken out of cppinit.c and cppfiles.c and rewritten Mar 2003. @@ -45,8 +46,10 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ # define INO_T_COPY(DEST, SRC) (DEST) = (SRC) #endif +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 *, 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 struct cpp_dir *remove_duplicates (cpp_reader *, struct cpp_dir *, @@ -120,7 +123,8 @@ add_env_var_paths (const char *env_var, int chain) /* Append the standard include chain defined in cppdefault.c. */ static void -add_standard_paths (const char *sysroot, const char *iprefix, int cxx_stdinc) +add_standard_paths (const char *sysroot, const char *iprefix, + const char *imultilib, int cxx_stdinc) { const struct default_include *p; size_t len; @@ -142,6 +146,8 @@ add_standard_paths (const char *sysroot, const char *iprefix, int cxx_stdinc) if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len)) { char *str = concat (iprefix, p->fname + len, NULL); + if (p->multilib && imultilib) + str = concat (str, dir_separator_str, imultilib, NULL); add_path (str, SYSTEM, p->cxx_aware, false); } } @@ -160,6 +166,9 @@ add_standard_paths (const char *sysroot, const char *iprefix, int cxx_stdinc) else str = update_path (p->fname, p->component); + if (p->multilib && imultilib) + str = concat (str, dir_separator_str, imultilib, NULL); + add_path (str, SYSTEM, p->cxx_aware, false); } } @@ -357,8 +366,8 @@ add_path (char *path, int chain, int cxx_aware, bool user_supplied_p) removal, and registration with cpplib. */ void register_include_chains (cpp_reader *pfile, const char *sysroot, - const char *iprefix, int stdinc, int cxx_stdinc, - int verbose) + const char *iprefix, const char *imultilib, + int stdinc, int cxx_stdinc, int verbose) { static const char *const lang_env_vars[] = { "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH", @@ -380,7 +389,7 @@ register_include_chains (cpp_reader *pfile, const char *sysroot, /* Finally chain on the standard directories. */ if (stdinc) - add_standard_paths (sysroot, iprefix, cxx_stdinc); + add_standard_paths (sysroot, iprefix, imultilib, cxx_stdinc); target_c_incpath.extra_includes (sysroot, iprefix, stdinc); |