# DP: Use /usr/include//c++/4.x as the include directory # DP: for host dependent c++ header files. Index: b/src/libstdc++-v3/include/Makefile.am =================================================================== --- a/src/libstdc++-v3/include/Makefile.am +++ b/src/libstdc++-v3/include/Makefile.am @@ -911,7 +911,7 @@ endif host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR) host_builddir = ./${host_alias}/bits -host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits +host_installdir = $(if $(shell $(CC) -print-multiarch),/usr/include/$(shell $(filter-out -m%,$(CC)) -print-multiarch)/c++/$(notdir ${gxx_include_dir})$(MULTISUBDIR)/bits,${gxx_include_dir}/${default_host_alias}$(MULTISUBDIR)/bits) host_headers = \ ${host_srcdir}/ctype_base.h \ ${host_srcdir}/ctype_inline.h \ Index: b/src/libstdc++-v3/include/Makefile.in =================================================================== --- a/src/libstdc++-v3/include/Makefile.in +++ b/src/libstdc++-v3/include/Makefile.in @@ -1193,7 +1193,7 @@ profile_impl_headers = \ @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@c_compatibility_headers_extra = ${c_compatibility_headers} host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR) host_builddir = ./${host_alias}/bits -host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits +host_installdir = $(if $(shell $(CC) -print-multiarch),/usr/include/$(shell $(filter-out -m%,$(CC)) -print-multiarch)/c++/$(notdir ${gxx_include_dir})$(MULTISUBDIR)/bits,${gxx_include_dir}/${default_host_alias}$(MULTISUBDIR)/bits) host_headers = \ ${host_srcdir}/ctype_base.h \ ${host_srcdir}/ctype_inline.h \ Index: b/src/gcc/Makefile.in =================================================================== --- a/src/gcc/Makefile.in +++ b/src/gcc/Makefile.in @@ -1139,6 +1139,7 @@ FLAGS_TO_PASS = \ "prefix=$(prefix)" \ "local_prefix=$(local_prefix)" \ "gxx_include_dir=$(gcc_gxx_include_dir)" \ + "gxx_tool_include_dir=$(gcc_gxx_tool_include_dir)" \ "build_tooldir=$(build_tooldir)" \ "gcc_tooldir=$(gcc_tooldir)" \ "bindir=$(bindir)" \ @@ -1636,6 +1637,14 @@ ifneq ($(xmake_file),) include $(xmake_file) endif +# Directory in which the compiler finds target-dependent g++ includes. +ifneq ($(call if_multiarch,non-empty),) + gcc_gxx_tool_include_dir = $(libsubdir)/$(libsubdir_to_prefix)include/$(MULTIARCH_DIRNAME)/c++/$(BASEVER_c) +else + gcc_gxx_tool_include_dir = $(gcc_gxx_include_dir)/$(target_noncanonical) +endif + + # all-tree.def includes all the tree.def files. all-tree.def: s-alltree; @true s-alltree: Makefile @@ -2673,7 +2682,7 @@ PREPROCESSOR_DEFINES = \ -DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \ -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \ -DGPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_include_dir_add_sysroot) \ - -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \ + -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_tool_include_dir)\" \ -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \ -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \ -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \ Index: b/src/gcc/cppdefault.c =================================================================== --- a/src/gcc/cppdefault.c +++ b/src/gcc/cppdefault.c @@ -49,6 +49,8 @@ const struct default_include cpp_include /* Pick up GNU C++ target-dependent include files. */ { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 }, + { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, + GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 2 }, #endif #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR /* Pick up GNU C++ backward and deprecated include files. */ Index: b/src/gcc/incpath.c =================================================================== --- a/src/gcc/incpath.c +++ b/src/gcc/incpath.c @@ -158,6 +158,18 @@ add_standard_paths (const char *sysroot, } str = reconcat (str, str, dir_separator_str, imultiarch, NULL); + if (p->cplusplus && strstr (str, "/c++/")) + { + char *suffix = strstr (str, "/c++/"); + *suffix++ = '\0'; + suffix = xstrdup (suffix); + str = reconcat (str, str, dir_separator_str, + imultiarch, + dir_separator_str, suffix, NULL); + } + else + str = reconcat (str, str, dir_separator_str, + imultiarch, NULL); } add_path (str, SYSTEM, p->cxx_aware, false); } @@ -222,7 +234,16 @@ add_standard_paths (const char *sysroot, free (str); continue; } - str = reconcat (str, str, dir_separator_str, imultiarch, NULL); + if (p->cplusplus && strstr (str, "/c++/")) + { + char *suffix = strstr (str, "/c++/"); + *suffix++ = '\0'; + suffix = xstrdup (suffix); + str = reconcat (str, str, dir_separator_str, imultiarch, + dir_separator_str, suffix, NULL); + } + else + str = reconcat (str, str, dir_separator_str, imultiarch, NULL); } add_path (str, SYSTEM, p->cxx_aware, false);