diff options
Diffstat (limited to 'recipes/gcc/gcc-4.3.3/debian/multiarch-include.dpatch')
-rw-r--r-- | recipes/gcc/gcc-4.3.3/debian/multiarch-include.dpatch | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/recipes/gcc/gcc-4.3.3/debian/multiarch-include.dpatch b/recipes/gcc/gcc-4.3.3/debian/multiarch-include.dpatch new file mode 100644 index 0000000000..2580444e7d --- /dev/null +++ b/recipes/gcc/gcc-4.3.3/debian/multiarch-include.dpatch @@ -0,0 +1,138 @@ +#! /bin/sh -e + +# DP: biarch-include.dpatch +# DP: +# DP: Adds biarch include directories +# DP: /usr/local/include/<arch>-linux-gnu +# DP: /usr/include/<arch>-linux-gnu +# DP: to the system include paths, depending on 32/64 bit mode. + +dir= +if [ $# -eq 3 -a "$2" = '-d' ]; then + pdir="-d $3" + dir="$3/" +elif [ $# -ne 1 ]; then + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +fi +case "$1" in + -patch) + patch $pdir -f --no-backup-if-mismatch -p0 < $0 + ;; + -unpatch) + patch $pdir -f --no-backup-if-mismatch -R -p0 < $0 + ;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +esac +exit 0 + +Index: gcc/cppdefault.c +=================================================================== +--- gcc/cppdefault.c (revision 112832) ++++ gcc/cppdefault.c (working copy) +@@ -60,6 +60,7 @@ + #endif + #ifdef LOCAL_INCLUDE_DIR + /* /usr/local/include comes before the fixincluded header files. */ ++ { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 }, + { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 }, + #endif + #ifdef PREFIX_INCLUDE_DIR +@@ -83,6 +84,7 @@ + #endif + #ifdef STANDARD_INCLUDE_DIR + /* /usr/include comes dead last. */ ++ { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 2 }, + { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 0 }, + #endif + { 0, 0, 0, 0, 0, 0 } +Index: gcc/c-incpath.c +=================================================================== +--- gcc/c-incpath.c (revision 112832) ++++ gcc/c-incpath.c (working copy) +@@ -30,6 +30,7 @@ + #include "intl.h" + #include "c-incpath.h" + #include "cppdefault.h" ++#include "errors.h" + + /* Windows does not natively support inodes, and neither does MSDOS. + Cygwin's emulation can generate non-unique inodes, so don't use it. +@@ -121,6 +121,31 @@ + } + } + ++struct multiarch_mapping ++{ ++ const char *const multilib; ++ const char *const multiarch; ++}; ++ ++const struct multiarch_mapping multiarch_mappings[] ++= { ++#include "multiarch.inc" ++ { 0, 0 } ++}; ++ ++static const char* ++multilib_to_multiarch (const char *imultilib) ++{ ++ const struct multiarch_mapping *p; ++ ++ for (p = multiarch_mappings; p->multiarch; p++) ++ { ++ if (!strcmp(p->multilib, imultilib ? imultilib : "")) ++ return p->multiarch; ++ } ++ internal_error("no multiarch mapping for multilib (%s)\n", imultilib); ++} ++ + /* Append the standard include chain defined in cppdefault.c. */ + static void + add_standard_paths (const char *sysroot, const char *iprefix, +@@ -128,6 +153,7 @@ + { + const struct default_include *p; + size_t len; ++ const char *multiarch; + + if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0) + { +@@ -146,8 +172,15 @@ + if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len)) + { + char *str = concat (iprefix, p->fname + len, NULL); +- if (p->multilib && imultilib) ++ if (p->multilib == 1 && imultilib) + str = concat (str, dir_separator_str, imultilib, NULL); ++ if (p->multilib == 2) ++ { ++ multiarch = multilib_to_multiarch (imultilib); ++ if (!multiarch) ++ continue; ++ str = concat (str, dir_separator_str, multiarch, NULL); ++ } + add_path (str, SYSTEM, p->cxx_aware, false); + } + } +@@ -166,9 +199,17 @@ + else + str = update_path (p->fname, p->component); + +- if (p->multilib && imultilib) ++ if (p->multilib == 1 && imultilib) + str = concat (str, dir_separator_str, imultilib, NULL); + ++ if (p->multilib == 2) ++ { ++ multiarch = multilib_to_multiarch (imultilib); ++ if (!multiarch) ++ continue; ++ str = concat (str, dir_separator_str, multiarch, NULL); ++ } ++ + add_path (str, SYSTEM, p->cxx_aware, false); + } + } |