aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-incpath.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2006-01-20 21:00:03 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2006-01-20 21:00:03 +0000
commit2b6dd222bbb82a052974fa931473702700ecfda9 (patch)
treef48eda30525ee2ab01e82568bb55e5e407a8a604 /gcc/c-incpath.c
parent6018b746be62c693c34c10e760172d34a1dfc4f9 (diff)
downloadgcc-2b6dd222bbb82a052974fa931473702700ecfda9.zip
gcc-2b6dd222bbb82a052974fa931473702700ecfda9.tar.gz
gcc-2b6dd222bbb82a052974fa931473702700ecfda9.tar.bz2
re PR libstdc++/25524 (libstdc++ headers should go in multilib directories)
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. From-SVN: r110037
Diffstat (limited to 'gcc/c-incpath.c')
-rw-r--r--gcc/c-incpath.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c
index 3861106..fc1e314 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);