commit:     698c342cc40f74b2aae90c23094c959f69fd3292
Author:     Matthias Maier <tamiko <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 30 01:44:05 2016 +0000
Commit:     Matthias Maier <tamiko <AT> gentoo <DOT> org>
CommitDate: Tue Aug 30 01:44:05 2016 +0000
URL:        https://gitweb.gentoo.org/repo/dev/tamiko.git/commit/?id=698c342c

sys-devel/gcc: add a gcc 6.2.0 ebuild

Package-Manager: portage-2.2.28
RepoMan-Options: --force

 sys-devel/gcc/Manifest                           |   3 +
 sys-devel/gcc/files/awk/fixlafiles.awk           | 314 +++++++++++++++++++++
 sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la | 335 +++++++++++++++++++++++
 sys-devel/gcc/files/c89                          |  20 ++
 sys-devel/gcc/files/c99                          |  21 ++
 sys-devel/gcc/files/fix_libtool_files.sh         |  67 +++++
 sys-devel/gcc/files/gcc-configure-LANG.patch     |  64 +++++
 sys-devel/gcc/files/gcc-configure-texinfo.patch  |  16 ++
 sys-devel/gcc/files/gcc-spec-env-r1.patch        |  87 ++++++
 sys-devel/gcc/files/gcc-spec-env.patch           |  42 +++
 sys-devel/gcc/gcc-6.2.0.ebuild                   |  44 +++
 sys-devel/gcc/metadata.xml                       |  38 +++
 12 files changed, 1051 insertions(+)

diff --git a/sys-devel/gcc/Manifest b/sys-devel/gcc/Manifest
new file mode 100644
index 0000000..bd41b7c
--- /dev/null
+++ b/sys-devel/gcc/Manifest
@@ -0,0 +1,3 @@
+DIST ecj-4.5.jar 1470676 SHA256 
98fd128f1d374d9e42fd9d4836bdd249c6d511ebc6c0df17fbc1b9df96c3d781 SHA512 
d4e1bf7538ace56e3d69fa91da5bbd16c272923b4de0a9d8dee23ea2b75f9f38c603de72fc4061df49285c450b63f3df211cee5270e9fffc5447445d1a9c9e4e
 WHIRLPOOL 
db54206cfd5eba935e707b8d36ebac40f3c4ed3c1f06ede794288cbdd9c7da9d90c0898e8c98b383af276ea4c1b40c861ebd9e1fc1dce712946184321339d3ad
+DIST gcc-6.2.0-patches-1.0.tar.bz2 5712 SHA256 
7ada7f5ce163347cb8d6470a793133fcdfdc682b85c089a200d52769f224ab31 SHA512 
7d715e210a3dc122dfff82ff34a2d456b9f1c70e21e28b533287eef26b6b7b29453e390f85ae3d5cc3f5eee751c207fde08085cb2021366d2cb3a20e8b0fdd61
 WHIRLPOOL 
a8581cb522a4140883e36a2f5cd9395b9b6891d20795f42e1f829184330d996fa6bbc16eee3ac21a253dcf2f34d038b9c8ed211ec563394455dfa49c4b6a7bc1
+DIST gcc-6.2.0.tar.bz2 99778648 SHA256 
9944589fc722d3e66308c0ce5257788ebd7872982a718aa2516123940671b7c5 SHA512 
1e8b826a3d44b9d5899309894e20c03abeb352bf3d273b8ad63af814c0ee2911f1a83ce1cd4cdd2d1cb0b3e3c34e9b7ae1b2ab83dfc649ee817ab05247c76198
 WHIRLPOOL 
8a96e0424c7410d8826319758ed92f1674099cf17d0590bf71328ef2bb9913f9fa8452016c509c48c93f4bf8ed811a24fffa1b6e475b5c1633d167ad844f1dca

diff --git a/sys-devel/gcc/files/awk/fixlafiles.awk 
b/sys-devel/gcc/files/awk/fixlafiles.awk
new file mode 100644
index 0000000..ad2c2b1
--- /dev/null
+++ b/sys-devel/gcc/files/awk/fixlafiles.awk
@@ -0,0 +1,314 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+#
+# Helper functions
+#
+function printn(string) {
+       printf("%s", string)
+}
+function einfo(string) {
+       printf(" \033[32;01m*\033[0m %s\n", string)
+}
+function einfon(string) {
+       printf(" \033[32;01m*\033[0m %s", string)
+}
+function ewarn(string) {
+       printf(" \033[33;01m*\033[0m %s\n", string)
+}
+function ewarnn(string) {
+       printf(" \033[33;01m*\033[0m %s", string)
+}
+function eerror(string) {
+       printf(" \033[31;01m*\033[0m %s\n", string)
+}
+
+#
+# assert(condition, errmsg)
+#   assert that a condition is true.  Otherwise exit.
+#
+function assert(condition, string) {
+       if (! condition) {
+               printf("%s:%d: assertion failed: %s\n",
+                      FILENAME, FNR, string) > "/dev/stderr"
+               _assert_exit = 1
+               exit 1
+       }
+}
+
+#
+# system(command, return)
+#   wrapper that normalizes return codes ...
+#
+function dosystem(command, ret) {
+       ret = 0
+       ret = system(command)
+       if (ret == 0)
+               return 1
+       else
+               return 0
+}
+
+BEGIN {
+       #
+       # Get our variables from environment
+       #
+       OLDVER = ENVIRON["OLDVER"]
+       OLDCHOST = ENVIRON["OLDCHOST"]
+
+       if (OLDVER == "") {
+               eerror("Could not get OLDVER!");
+               exit 1
+       }
+
+       # Setup some sane defaults
+       LIBCOUNT = 2
+       HAVE_GCC34 = 0
+       DIRLIST[1] = "/lib"
+       DIRLIST[2] = "/usr/lib"
+
+       #
+       # Walk /etc/ld.so.conf to discover all our library paths
+       #
+       pipe = "cat /etc/ld.so.conf | sort 2>/dev/null"
+       while(((pipe) | getline ldsoconf_data) > 0) {
+               if (ldsoconf_data !~ /^[[:space:]]*#/) {
+                       if (ldsoconf_data == "") continue
+
+                       # Remove any trailing comments
+                       sub(/#.*$/, "", ldsoconf_data)
+                       # Remove any trailing spaces
+                       sub(/[[:space:]]+$/, "", ldsoconf_data)
+
+                       # If there's more than one path per line, split 
+                       # it up as if they were sep lines
+                       split(ldsoconf_data, nodes, /[:,[:space:]]/)
+
+                       # Now add the rest from ld.so.conf
+                       for (x in nodes) {
+                               # wtf does this line do ?
+                               sub(/=.*/, "", nodes[x])
+                               # Prune trailing /
+                               sub(/\/$/, "", nodes[x])
+
+                               if (nodes[x] == "") continue
+
+                               #
+                               # Drop the directory if its a child directory of
+                               # one that was already added ...
+                               # For example, if we have:
+                               #   /usr/lib /usr/libexec /usr/lib/mozilla 
/usr/lib/nss
+                               # We really just want to save /usr/lib 
/usr/libexec
+                               #
+                               CHILD = 0
+                               for (y in DIRLIST) {
+                                       if (nodes[x] ~ "^" DIRLIST[y] "(/|$)") {
+                                               CHILD = 1
+                                               break
+                                       }
+                               }
+                               if (CHILD) continue
+
+                               DIRLIST[++LIBCOUNT] = nodes[x]
+                       }
+               }
+       }
+       close(pipe)
+
+       #
+       # Get line from gcc's output containing CHOST
+       #
+       pipe = "gcc -print-file-name=libgcc.a 2>/dev/null"
+       if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) {
+               close(pipe)
+
+               # If we fail to get the CHOST, see if we can get the CHOST
+               # portage thinks we are using ...
+               pipe = "/usr/bin/portageq envvar 'CHOST'"
+               assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST")
+       } else {
+               # Check pre gcc-3.4.x versions
+               CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, 
TMP_CHOST)
+
+               if (CHOST == TMP_CHOST || CHOST == "") {
+                       # Check gcc-3.4.x or later
+                       CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 
1, TMP_CHOST);
+
+                       if (CHOST == TMP_CHOST || CHOST == "")
+                               CHOST = ""
+                       else
+                               HAVE_GCC34 = 1
+               }
+       }
+       close(pipe)
+
+       if (CHOST == "") {
+               eerror("Could not get gcc's CHOST!")
+               exit 1
+       }
+
+       if (OLDCHOST != "")
+               if (OLDCHOST == CHOST)
+                       OLDCHOST = ""
+
+       GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/"
+       GCCLIBPREFIX_NEW = "/usr/lib/gcc/"
+
+       if (HAVE_GCC34)
+               GCCLIBPREFIX = GCCLIBPREFIX_NEW
+       else
+               GCCLIBPREFIX = GCCLIBPREFIX_OLD
+
+       GCCLIB = GCCLIBPREFIX CHOST
+
+       if (OLDCHOST != "") {
+               OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST
+               OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST
+       }
+
+       # Get current gcc's version
+       pipe = "gcc -dumpversion"
+       assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)")
+       close(pipe)
+
+       if (NEWVER == "") {
+               eerror("Could not get gcc's version!")
+               exit 1
+       }
+
+       # Nothing to do ?
+       if ((OLDVER == NEWVER) && (OLDCHOST == ""))
+               exit 0
+
+       #
+       # Ok, now let's scan for the .la files and actually fix them up
+       #
+       for (x = 1; x <= LIBCOUNT; x++) {
+               # Do nothing if the target dir is gcc's internal library path
+               if (DIRLIST[x] ~ GCCLIBPREFIX_OLD ||
+                   DIRLIST[x] ~ GCCLIBPREFIX_NEW)
+                       continue
+
+               einfo("  [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...")
+
+               pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null"
+               while (((pipe) | getline la_files) > 0) {
+
+                       # Do nothing if the .la file is located in gcc's 
internal lib path
+                       if (la_files ~ GCCLIBPREFIX_OLD ||
+                           la_files ~ GCCLIBPREFIX_NEW)
+                               continue
+
+                       CHANGED = 0
+                       CHOST_CHANGED = 0
+
+                       # See if we need to fix the .la file
+                       while ((getline la_data < (la_files)) > 0) {
+                               if (OLDCHOST != "") {
+                                       if ((gsub(OLDGCCLIB1 "[/[:space:]]+",
+                                                 GCCLIB, la_data) > 0) ||
+                                           (gsub(OLDGCCLIB2 "[/[:space:]]+",
+                                                 GCCLIB, la_data) > 0)) {
+                                               CHANGED = 1
+                                               CHOST_CHANGED = 1
+                                       }
+                               }
+                               if (OLDVER != NEWVER) {
+                                       if ((gsub(GCCLIBPREFIX_OLD CHOST "/" 
OLDVER "[/[:space:]]*",
+                                                 GCCLIB "/" NEWVER, la_data) > 
0) ||
+                                           (gsub(GCCLIBPREFIX_NEW CHOST "/" 
OLDVER "[/[:space:]]*",
+                                                 GCCLIB "/" NEWVER, la_data) > 
0))
+                                               CHANGED = 1
+                               }
+                       }
+                       close(la_files)
+
+                       # Do the actual changes in a second loop, as we can then
+                       # verify that CHOST_CHANGED among things is correct ...
+                       if (CHANGED) {
+                               ewarnn("    FIXING: " la_files " ...")
+
+                               if (CHANGED)
+                                       printn("[")
+
+                               # Clear the temp file (removing rather than 
'>foo' is better
+                               # out of a security point of view?)
+                               dosystem("rm -f " la_files ".new")
+
+                               while ((getline la_data < (la_files)) > 0) {
+                                       if (OLDCHOST != "") {
+                                               tmpstr = gensub(OLDGCCLIB1 
"([/[:space:]]+)",
+                                                               GCCLIB "\\1", 
"g", la_data)
+                                               tmpstr = gensub(OLDGCCLIB2 
"([/[:space:]]+)",
+                                                               GCCLIB "\\1", 
"g", tmpstr)
+
+                                               if (la_data != tmpstr) {
+                                                       printn("c")
+                                                       la_data = tmpstr
+                                               }
+
+                                               if (CHOST_CHANGED > 0) {
+                                                       # We try to be careful 
about CHOST changes outside
+                                                       # the gcc library path 
(meaning we cannot match it
+                                                       # via /GCCLIBPREFIX 
CHOST/) ...
+
+                                                       # Catch:
+                                                       #
+                                                       #  dependency_libs=' 
-L/usr/CHOST/{bin,lib}'
+                                                       #
+                                                       gsub("-L/usr/" OLDCHOST 
"/",
+                                                            "-L/usr/" CHOST 
"/", la_data)
+                                                       # Catch:
+                                                       #
+                                                       #  dependency_libs=' 
-L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib'
+                                                       #
+                                                       la_data = gensub("(" 
GCCLIB "/[^[:space:]]+)/" OLDCHOST "/",
+                                                                        "\\1/" 
CHOST "/", "g", la_data)
+                                               }
+                                       }
+
+                                       if (OLDVER != NEWVER) {
+                                               # Catch:
+                                               #
+                                               #  dependency_libs=' 
-L/usr/lib/gcc/CHOST/VER'
+                                               #
+                                               tmpstr = 
gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)",
+                                                               GCCLIB "/" 
NEWVER "\\1", "g", la_data)
+                                               tmpstr = 
gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)",
+                                                               GCCLIB "/" 
NEWVER "\\1", "g", tmpstr)
+
+                                               if (la_data != tmpstr) {
+                                                       # Catch:
+                                                       #
+                                                       #  dependency_libs=' 
-L/usr/lib/gcc-lib/../../CHOST/lib'
+                                                       #
+                                                       # in cases where we 
have gcc34
+                                                       tmpstr = 
gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)",
+                                                                       
GCCLIBPREFIX "\\1", "g", tmpstr)
+                                                       tmpstr = 
gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)",
+                                                                       
GCCLIBPREFIX "\\1", "g", tmpstr)
+                                                       printn("v")
+                                                       la_data = tmpstr
+                                               }
+                                       }
+
+                                       print la_data >> (la_files ".new")
+                               }
+
+                               if (CHANGED)
+                                       print "]"
+
+                               close(la_files)
+                               close(la_files ".new")
+
+                               assert(dosystem("mv -f " la_files ".new " 
la_files),
+                                      "dosystem(\"mv -f " la_files ".new " 
la_files "\")")
+                       }
+               }
+
+               close(pipe)
+       }
+}
+
+# vim:ts=4

diff --git a/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la 
b/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la
new file mode 100644
index 0000000..2776c72
--- /dev/null
+++ b/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la
@@ -0,0 +1,335 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+#
+# Helper functions
+#
+function printn(string) {
+       printf("%s", string)
+}
+function einfo(string) {
+       printf(" \033[32;01m*\033[0m %s\n", string)
+}
+function einfon(string) {
+       printf(" \033[32;01m*\033[0m %s", string)
+}
+function ewarn(string) {
+       printf(" \033[33;01m*\033[0m %s\n", string)
+}
+function ewarnn(string) {
+       printf(" \033[33;01m*\033[0m %s", string)
+}
+function eerror(string) {
+       printf(" \033[31;01m*\033[0m %s\n", string)
+}
+
+#
+# assert(condition, errmsg)
+#   assert that a condition is true.  Otherwise exit.
+#
+function assert(condition, string) {
+       if (! condition) {
+               printf("%s:%d: assertion failed: %s\n",
+                      FILENAME, FNR, string) > "/dev/stderr"
+               _assert_exit = 1
+               exit 1
+       }
+}
+
+#
+# system(command, return)
+#   wrapper that normalizes return codes ...
+#
+function dosystem(command, ret) {
+       ret = 0
+       ret = system(command)
+       if (ret == 0)
+               return 1
+       else
+               return 0
+}
+
+#
+# parse_ld_conf(config_file)
+#
+function parse_ld_conf(conf,    pipe, ldsoconf_data, CHILD, y) {
+       pipe = "cd /etc; cat " conf " | sort 2>/dev/null"
+       while(((pipe) | getline ldsoconf_data) > 0) {
+               if (ldsoconf_data ~ /^[[:space:]]*#/)
+                       continue
+               if (ldsoconf_data == "")
+                       continue
+
+               # Handle the "include" keyword
+               if (ldsoconf_data ~ /^include /) {
+                       sub(/^include /, "", ldsoconf_data)
+                       parse_ld_conf(ldsoconf_data)
+                       continue
+               }
+
+               # Remove any trailing comments
+               sub(/#.*$/, "", ldsoconf_data)
+               # Remove any trailing spaces
+               sub(/[[:space:]]+$/, "", ldsoconf_data)
+               # Eat duplicate slashes
+               sub(/\/\//, "/", ldsoconf_data)
+               # Prune trailing /
+               sub(/\/$/, "", ldsoconf_data)
+
+               #
+               # Drop the directory if its a child directory of
+               # one that was already added ...
+               # For example, if we have:
+               #   /usr/lib /usr/libexec /usr/lib/mozilla /usr/lib/nss
+               # We really just want to save /usr/lib /usr/libexec
+               #
+               CHILD = 0
+               for (y in DIRLIST) {
+                       if (ldsoconf_data ~ "^" DIRLIST[y] "(/|$)") {
+                               CHILD = 1
+                               break
+                       }
+               }
+               if (CHILD) continue
+
+               DIRLIST[++LIBCOUNT] = ldsoconf_data
+       }
+       close(pipe)
+}
+
+BEGIN {
+       #
+       # Get our variables from environment
+       #
+       OLDVER = ENVIRON["OLDVER"]
+       OLDCHOST = ENVIRON["OLDCHOST"]
+
+       if (OLDVER == "") {
+               eerror("Could not get OLDVER!");
+               exit 1
+       }
+
+       # Setup some sane defaults
+       LIBCOUNT = 2
+       HAVE_GCC34 = 0
+       DIRLIST[1] = "/lib"
+       DIRLIST[2] = "/usr/lib"
+
+       #
+       # Walk /etc/ld.so.conf to discover all our library paths
+       #
+       parse_ld_conf("/etc/ld.so.conf")
+
+       #
+       # Get line from gcc's output containing CHOST
+       #
+       pipe = "gcc -print-file-name=libgcc.a 2>/dev/null"
+       if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) {
+               close(pipe)
+
+               # If we fail to get the CHOST, see if we can get the CHOST
+               # portage thinks we are using ...
+               pipe = "/usr/bin/portageq envvar 'CHOST'"
+               assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST")
+       } else {
+               # Check pre gcc-3.4.x versions
+               CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, 
TMP_CHOST)
+
+               if (CHOST == TMP_CHOST || CHOST == "") {
+                       # Check gcc-3.4.x or later
+                       CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 
1, TMP_CHOST);
+
+                       if (CHOST == TMP_CHOST || CHOST == "")
+                               CHOST = ""
+                       else
+                               HAVE_GCC34 = 1
+               }
+       }
+       close(pipe)
+
+       if (CHOST == "") {
+               eerror("Could not get gcc's CHOST!")
+               exit 1
+       }
+
+       if (OLDCHOST != "")
+               if (OLDCHOST == CHOST)
+                       OLDCHOST = ""
+
+       GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/"
+       GCCLIBPREFIX_NEW = "/usr/lib/gcc/"
+
+       if (HAVE_GCC34)
+               GCCLIBPREFIX = GCCLIBPREFIX_NEW
+       else
+               GCCLIBPREFIX = GCCLIBPREFIX_OLD
+
+       GCCLIB = GCCLIBPREFIX CHOST
+
+       if (OLDCHOST != "") {
+               OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST
+               OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST
+       }
+
+       # Get current gcc's version
+       pipe = "gcc -dumpversion"
+       assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)")
+       close(pipe)
+
+       if (NEWVER == "") {
+               eerror("Could not get gcc's version!")
+               exit 1
+       }
+
+       # Nothing to do ?
+       # NB: Do not check for (OLDVER == NEWVER) anymore, as we might need to
+       #     replace libstdc++.la ....
+       if ((OLDVER == "") && (OLDCHOST == ""))
+               exit 0
+
+       #
+       # Ok, now let's scan for the .la files and actually fix them up
+       #
+       for (x = 1; x <= LIBCOUNT; x++) {
+               # Do nothing if the target dir is gcc's internal library path
+               if (DIRLIST[x] ~ GCCLIBPREFIX_OLD ||
+                   DIRLIST[x] ~ GCCLIBPREFIX_NEW)
+                       continue
+
+               einfo("  [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...")
+
+               pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null"
+               while (((pipe) | getline la_files) > 0) {
+
+                       # Do nothing if the .la file is located in gcc's 
internal lib path
+                       if (la_files ~ GCCLIBPREFIX_OLD ||
+                           la_files ~ GCCLIBPREFIX_NEW)
+                               continue
+
+                       CHANGED = 0
+                       CHOST_CHANGED = 0
+
+                       # See if we need to fix the .la file
+                       while ((getline la_data < (la_files)) > 0) {
+                               if (OLDCHOST != "") {
+                                       if ((gsub(OLDGCCLIB1 "[/[:space:]]+",
+                                                 GCCLIB, la_data) > 0) ||
+                                           (gsub(OLDGCCLIB2 "[/[:space:]]+",
+                                                 GCCLIB, la_data) > 0)) {
+                                               CHANGED = 1
+                                               CHOST_CHANGED = 1
+                                       }
+                               }
+                               if (OLDVER != NEWVER) {
+                                       if ((gsub(GCCLIBPREFIX_OLD CHOST "/" 
OLDVER "[/[:space:]]*",
+                                                 GCCLIB "/" NEWVER, la_data) > 
0) ||
+                                           (gsub(GCCLIBPREFIX_NEW CHOST "/" 
OLDVER "[/[:space:]]*",
+                                                 GCCLIB "/" NEWVER, la_data) > 
0))
+                                               CHANGED = 1
+                               }
+                               # We now check if we have libstdc++.la, as we 
remove the
+                               # libtool linker scripts for gcc ...
+                               # We do this last, as we only match the new 
paths
+                               if (gsub(GCCLIB "/" NEWVER 
"/libstdc\\+\\+\\.la",
+                                        "-lstdc++", la_data) > 0)
+                                       CHANGED = 1
+                       }
+                       close(la_files)
+
+                       # Do the actual changes in a second loop, as we can then
+                       # verify that CHOST_CHANGED among things is correct ...
+                       if (CHANGED) {
+                               ewarnn("    FIXING: " la_files " ...[")
+
+                               # Clear the temp file (removing rather than 
'>foo' is better
+                               # out of a security point of view?)
+                               dosystem("rm -f " la_files ".new")
+
+                               while ((getline la_data < (la_files)) > 0) {
+                                       if (OLDCHOST != "") {
+                                               tmpstr = gensub(OLDGCCLIB1 
"([/[:space:]]+)",
+                                                               GCCLIB "\\1", 
"g", la_data)
+                                               tmpstr = gensub(OLDGCCLIB2 
"([/[:space:]]+)",
+                                                               GCCLIB "\\1", 
"g", tmpstr)
+
+                                               if (la_data != tmpstr) {
+                                                       printn("c")
+                                                       la_data = tmpstr
+                                               }
+
+                                               if (CHOST_CHANGED > 0) {
+                                                       # We try to be careful 
about CHOST changes outside
+                                                       # the gcc library path 
(meaning we cannot match it
+                                                       # via /GCCLIBPREFIX 
CHOST/) ...
+
+                                                       # Catch:
+                                                       #
+                                                       #  dependency_libs=' 
-L/usr/CHOST/{bin,lib}'
+                                                       #
+                                                       gsub("-L/usr/" OLDCHOST 
"/",
+                                                            "-L/usr/" CHOST 
"/", la_data)
+                                                       # Catch:
+                                                       #
+                                                       #  dependency_libs=' 
-L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib'
+                                                       #
+                                                       la_data = gensub("(" 
GCCLIB "/[^[:space:]]+)/" OLDCHOST "/",
+                                                                        "\\1/" 
CHOST "/", "g", la_data)
+                                               }
+                                       }
+
+                                       if (OLDVER != NEWVER) {
+                                               # Catch:
+                                               #
+                                               #  dependency_libs=' 
-L/usr/lib/gcc/CHOST/VER'
+                                               #
+                                               tmpstr = 
gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)",
+                                                               GCCLIB "/" 
NEWVER "\\1", "g", la_data)
+                                               tmpstr = 
gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)",
+                                                               GCCLIB "/" 
NEWVER "\\1", "g", tmpstr)
+
+                                               if (la_data != tmpstr) {
+                                                       # Catch:
+                                                       #
+                                                       #  dependency_libs=' 
-L/usr/lib/gcc-lib/../../CHOST/lib'
+                                                       #
+                                                       # in cases where we 
have gcc34
+                                                       tmpstr = 
gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)",
+                                                                       
GCCLIBPREFIX "\\1", "g", tmpstr)
+                                                       tmpstr = 
gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)",
+                                                                       
GCCLIBPREFIX "\\1", "g", tmpstr)
+                                                       printn("v")
+                                                       la_data = tmpstr
+                                               }
+                                       }
+
+                                       # We now check if we have libstdc++.la, 
as we remove the
+                                       # libtool linker scripts for gcc and 
any referencese in any
+                                       # libtool linker scripts.
+                                       # We do this last, as we only match the 
new paths
+                                       tmpstr = gensub(GCCLIB "/" NEWVER 
"/libstdc\\+\\+\\.la",
+                                                       "-lstdc++", "g", 
la_data);
+                                       if (la_data != tmpstr) {
+                                               printn("l")
+                                               la_data = tmpstr
+                                       }
+                                       
+                                       print la_data >> (la_files ".new")
+                               }
+
+                               if (CHANGED)
+                                       print "]"
+
+                               close(la_files)
+                               close(la_files ".new")
+
+                               assert(dosystem("mv -f " la_files ".new " 
la_files),
+                                      "dosystem(\"mv -f " la_files ".new " 
la_files "\")")
+                       }
+               }
+
+               close(pipe)
+       }
+}
+
+# vim:ts=4

diff --git a/sys-devel/gcc/files/c89 b/sys-devel/gcc/files/c89
new file mode 100644
index 0000000..cee0325
--- /dev/null
+++ b/sys-devel/gcc/files/c89
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+# Call the appropriate C compiler with options to accept ANSI/ISO C
+# The following options are the same (as of gcc-2.95):
+#      -ansi
+#      -std=c89
+#      -std=iso9899:1990
+
+for i; do
+    case "$i" in
+       -ansi|-std=c89|-std=iso9899:1990)
+           ;;
+       -std=*)
+           echo >&2 "`basename $0` called with non ANSI/ISO C90 option $i"
+           exit 1
+           ;;
+    esac
+done
+
+exec gcc -std=c89 -pedantic -U_FORTIFY_SOURCE "$@"

diff --git a/sys-devel/gcc/files/c99 b/sys-devel/gcc/files/c99
new file mode 100644
index 0000000..c954209
--- /dev/null
+++ b/sys-devel/gcc/files/c99
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+# Call the appropriate C compiler with options to accept ANSI/ISO C
+# The following options are the same (as of gcc-3.3):
+#      -std=c99
+#      -std=c9x
+#      -std=iso9899:1999
+#      -std=iso9899:199x
+
+for i; do
+    case "$i" in
+       -std=c9[9x]|-std=iso9899:199[9x])
+           ;;
+       -ansi|-std=*)
+           echo >&2 "`basename $0` called with non ANSI/ISO C99 option $i"
+           exit 1
+           ;;
+    esac
+done
+
+exec gcc -std=c99 -pedantic -U_FORTIFY_SOURCE ${1+"$@"}

diff --git a/sys-devel/gcc/files/fix_libtool_files.sh 
b/sys-devel/gcc/files/fix_libtool_files.sh
new file mode 100644
index 0000000..eb96df2
--- /dev/null
+++ b/sys-devel/gcc/files/fix_libtool_files.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+usage() {
+cat << "USAGE_END"
+Usage: fix_libtool_files.sh <old-gcc-version> [--oldarch <old-CHOST>]
+
+    Where <old-gcc-version> is the version number of the
+    previous gcc version.  For example, if you updated to
+    gcc-3.2.1, and you had gcc-3.2 installed, run:
+
+      # fix_libtool_files.sh 3.2
+
+    If you updated to gcc-3.2.3, and the old CHOST was i586-pc-linux-gnu
+    but you now have CHOST as i686-pc-linux-gnu, run:
+
+      # fix_libtool_files.sh 3.2 --oldarch i586-pc-linux-gnu
+
+    Note that if only the CHOST and not the version changed, you can run
+    it with the current version and the '--oldarch <old-CHOST>' arguments,
+    and it will do the expected:
+
+      # fix_libtool_files.sh `gcc -dumpversion` --oldarch i586-pc-linux-gnu
+
+USAGE_END
+       exit 1
+}
+
+case $2 in
+--oldarch) [ $# -ne 3 ] && usage ;;
+*)         [ $# -ne 1 ] && usage ;;
+esac
+
+ARGV1=$1
+ARGV2=$2
+ARGV3=$3
+
+. /etc/profile || exit 1
+
+if [ ${EUID:-0} -ne 0 ] ; then
+       echo "${0##*/}: Must be root."
+       exit 1
+fi
+
+# make sure the files come out sane
+umask 0022
+
+OLDCHOST=
+[ "${ARGV2}" = "--oldarch" ] && OLDCHOST=${ARGV3}
+
+AWKDIR="/usr/share/gcc-data"
+
+if [ ! -r "${AWKDIR}/fixlafiles.awk" ] ; then
+       echo "${0##*/}: ${AWKDIR}/fixlafiles.awk does not exist!"
+       exit 1
+fi
+
+OLDVER=${ARGV1}
+
+export OLDVER OLDCHOST
+
+echo "Scanning libtool files for hardcoded gcc library paths..."
+exec gawk -f "${AWKDIR}/fixlafiles.awk"
+
+# vim:ts=4

diff --git a/sys-devel/gcc/files/gcc-configure-LANG.patch 
b/sys-devel/gcc/files/gcc-configure-LANG.patch
new file mode 100644
index 0000000..d1b1b03
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-configure-LANG.patch
@@ -0,0 +1,64 @@
+The LANG vars aren't reset early enough so when sed tries to use [a-zA-Z] in 
+option parsing, it may break.
+
+http://bugs.gentoo.org/103483
+
+--- configure
++++ configure
+@@ -54,6 +54,19 @@
+ infodir='${prefix}/info'
+ mandir='${prefix}/man'
+ 
++# NLS nuisances.
++for as_var in \
++  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
++  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
++  LC_TELEPHONE LC_TIME
++do
++  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
++    eval $as_var=C; export $as_var
++  else
++    unset $as_var
++  fi
++done
++
+ # Initialize some other variables.
+ subdirs=
+ MFLAGS= MAKEFLAGS=
+@@ -452,16 +463,6 @@
+   esac
+ done
+ 
+-# NLS nuisances.
+-# Only set these to C if already set.  These must not be set unconditionally
+-# because not all systems understand e.g. LANG=C (notably SCO).
+-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+-# Non-C LC_CTYPE values break the ctype check.
+-if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+-if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+-
+ # confdefs.h avoids OS command line length limits that DEFS can exceed.
+ rm -rf conftest* confdefs.h
+ # AIX cpp loses on an empty file, so make sure it contains at least a newline.
+@@ -1850,6 +1850,19 @@
+ # Compiler output produced by configure, useful for debugging
+ # configure, is in ./config.log if it exists.
+ 
++# NLS nuisances.
++for as_var in \
++  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
++  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
++  LC_TELEPHONE LC_TIME
++do
++  if (set +x; test -z "`(eval \$as_var=C; export \$as_var) 2>&1`"); then
++    eval \$as_var=C; export \$as_var
++  else
++    unset \$as_var
++  fi
++done
++
+ ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+ for ac_option
+ do

diff --git a/sys-devel/gcc/files/gcc-configure-texinfo.patch 
b/sys-devel/gcc/files/gcc-configure-texinfo.patch
new file mode 100644
index 0000000..ddc098d
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-configure-texinfo.patch
@@ -0,0 +1,16 @@
+Chances are quite good that the installed makeinfo is sufficient.
+So ignore false positives where the makeinfo installed is so new
+that it violates the cheesy version grep.
+
+http://bugs.gentoo.org/198182
+
+--- configure
++++ configure
+@@ -3573,6 +3573,6 @@
+       :
+     else
+-      MAKEINFO="$MISSING makeinfo"
++      :
+     fi
+     ;;
+ 

diff --git a/sys-devel/gcc/files/gcc-spec-env-r1.patch 
b/sys-devel/gcc/files/gcc-spec-env-r1.patch
new file mode 100644
index 0000000..a589268
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-spec-env-r1.patch
@@ -0,0 +1,87 @@
+2013-08-22  Magnus Granberg <[email protected]>
+
+       * gcc/gcc.c (main): Add support for external spec file via the 
GCC_SPECS env var
+       and move the process of the user specifed specs.
+
+    This allows us to easily control pie/ssp defaults with gcc-config profiles.
+    Original patch by Rob Holland
+    Extended to support multiple entries separated by ':' by Kevin F. Quinn
+    Modified to use getenv instead of poisoned GET_ENVIRONMENT by Ryan Hill
+    Modified to process the GCC_SPECS env var befor DRIVER_SELF_SPECS by 
Magnus Granberg
+
+--- gcc-4.8-20130210/gcc/gcc.c 2013-02-05 16:55:31.000000000 +0100
++++ gcc-4.8-20130210-work/gcc/gcc.c    2013-07-26 02:32:14.625089864 +0200
+@@ -6427,6 +6428,48 @@ main (int argc, char **argv)
+     do_option_spec (option_default_specs[i].name,
+                   option_default_specs[i].spec);
+ 
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS) || defined 
(WIN32))
++  /* Add specs listed in GCC_SPECS.  Note; in the process of separating
++   * each spec listed, the string is overwritten at token boundaries
++   * (':') with '\0', an effect of strtok_r().
++   */
++  specs_file = getenv ("GCC_SPECS");
++  if (specs_file && (strlen(specs_file) > 0))
++    {
++      char *spec, *saveptr;
++      for (spec=strtok_r(specs_file,":",&saveptr);
++           spec!=NULL;
++           spec=strtok_r(NULL,":",&saveptr))
++        {
++          struct user_specs *user = (struct user_specs *)
++            xmalloc (sizeof (struct user_specs));
++          user->next = (struct user_specs *) 0;
++          user->filename = spec;
++          if (user_specs_tail)
++            user_specs_tail->next = user;
++          else
++            user_specs_head = user;
++          user_specs_tail = user;
++        }
++    }
++#endif
++  /* Process any user specified specs in the order given on the command
++   *     line.  */
++  for (uptr = user_specs_head; uptr; uptr = uptr->next)
++    {
++      char *filename = find_a_file (&startfile_prefixes, uptr->filename,
++        R_OK, true);
++      read_specs (filename ? filename : uptr->filename, false, true);
++    }
++  /* Process any user self specs.  */
++  {
++    struct spec_list *sl;
++    for (sl = specs; sl; sl = sl->next)
++      if (sl->name_len == sizeof "self_spec" - 1
++          && !strcmp (sl->name, "self_spec"))
++        do_self_spec (*sl->ptr_spec);
++  }
++
+   /* Process DRIVER_SELF_SPECS, adding any new options to the end
+      of the command line.  */
+ 
+@@ -6535,24 +6578,6 @@ main (int argc, char **argv)
+                             PREFIX_PRIORITY_LAST, 0, 1);
+     }
+ 
+-  /* Process any user specified specs in the order given on the command
+-     line.  */
+-  for (uptr = user_specs_head; uptr; uptr = uptr->next)
+-    {
+-      char *filename = find_a_file (&startfile_prefixes, uptr->filename,
+-                                  R_OK, true);
+-      read_specs (filename ? filename : uptr->filename, false, true);
+-    }
+-
+-  /* Process any user self specs.  */
+-  {
+-    struct spec_list *sl;
+-    for (sl = specs; sl; sl = sl->next)
+-      if (sl->name_len == sizeof "self_spec" - 1
+-        && !strcmp (sl->name, "self_spec"))
+-      do_self_spec (*sl->ptr_spec);
+-  }
+-
+   if (compare_debug)
+     {
+       enum save_temps save;

diff --git a/sys-devel/gcc/files/gcc-spec-env.patch 
b/sys-devel/gcc/files/gcc-spec-env.patch
new file mode 100644
index 0000000..57e7567
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-spec-env.patch
@@ -0,0 +1,42 @@
+    Add support for external spec file via the GCC_SPECS env var.  This
+    allows us to easily control pie/ssp defaults with gcc-config profiles.
+
+    Original patch by Rob Holland
+    Extended to support multiple entries separated by ':' by Kevin F. Quinn
+    Modified to use getenv instead of poisoned GET_ENVIRONMENT by Ryan Hill
+
+--- gcc-4/gcc/gcc.c
++++ gcc-4/gcc/gcc.c
+@@ -6482,6 +6482,32 @@
+ 
+   /* Process any user specified specs in the order given on the command
+      line.  */
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS) || defined 
(WIN32))
++  /* Add specs listed in GCC_SPECS.  Note; in the process of separating
++   * each spec listed, the string is overwritten at token boundaries
++   * (':') with '\0', an effect of strtok_r().
++   */
++  specs_file = getenv ("GCC_SPECS");
++  if (specs_file && (strlen(specs_file) > 0))
++    {
++      char *spec, *saveptr;
++      for (spec=strtok_r(specs_file,":",&saveptr);
++           spec!=NULL;
++           spec=strtok_r(NULL,":",&saveptr))
++        {
++          struct user_specs *user = (struct user_specs *)
++            xmalloc (sizeof (struct user_specs));
++
++          user->next = (struct user_specs *) 0;
++          user->filename = spec;
++          if (user_specs_tail)
++            user_specs_tail->next = user;
++          else
++            user_specs_head = user;
++          user_specs_tail = user;
++        }
++    }
++#endif
+   for (uptr = user_specs_head; uptr; uptr = uptr->next)
+     {
+       char *filename = find_a_file (&startfile_prefixes, uptr->filename,

diff --git a/sys-devel/gcc/gcc-6.2.0.ebuild b/sys-devel/gcc/gcc-6.2.0.ebuild
new file mode 100644
index 0000000..21c572a
--- /dev/null
+++ b/sys-devel/gcc/gcc-6.2.0.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI="4"
+
+PATCH_VER="1.0"
+# UCLIBC_VER="1.0"
+
+# Hardened gcc 4 stuff
+# PIE_VER="0.6.5"
+# SPECS_VER="0.2.0"
+# SPECS_GCC_VER="4.4.3"
+# arch/libc configurations known to be stable with {PIE,SSP}-by-default
+# PIE_GLIBC_STABLE="x86 amd64 mips ppc ppc64 arm ia64"
+# PIE_UCLIBC_STABLE="x86 arm amd64 mips ppc ppc64"
+# SSP_STABLE="amd64 x86 mips ppc ppc64 arm"
+# uclibc need tls and nptl support for SSP support
+# uclibc need to be >= 0.9.33
+# SSP_UCLIBC_STABLE="x86 amd64 mips ppc ppc64 arm"
+# end Hardened stuff
+
+inherit toolchain
+
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND=""
+DEPEND="${RDEPEND}
+       elibc_glibc? ( >=sys-libs/glibc-2.8 )
+       >=${CATEGORY}/binutils-2.20"
+
+if [[ ${CATEGORY} != cross-* ]] ; then
+       PDEPEND="${PDEPEND} elibc_glibc? ( >=sys-libs/glibc-2.8 )"
+fi
+
+src_prepare() {
+       if has_version '<sys-libs/glibc-2.12' ; then
+               ewarn "Your host glibc is too old; disabling automatic fortify."
+               ewarn "Please rebuild gcc after upgrading to >=glibc-2.12 
#362315"
+               EPATCH_EXCLUDE+=" 10_all_default-fortify-source.patch"
+       fi
+
+       toolchain_src_prepare
+}

diff --git a/sys-devel/gcc/metadata.xml b/sys-devel/gcc/metadata.xml
new file mode 100644
index 0000000..38f4396
--- /dev/null
+++ b/sys-devel/gcc/metadata.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+  <maintainer type="project">
+    <email>[email protected]</email>
+    <name>Gentoo Toolchain Project</name>
+  </maintainer>
+  <use>
+    <flag name="awt">Useful only when building GCJ, this enables Abstract 
Window Toolkit
+      (AWT) peer support on top of GTK+</flag>
+    <flag name="cilk">Support the Cilk Plus language (C/C++ based languages 
for parallel programming)</flag>
+    <flag name="d">Enable support for the D programming language</flag>
+    <flag name="fixed-point">Enable fixed-point arithmetic support for MIPS 
targets 
+      in gcc (Warning: significantly increases compile time!)</flag>
+    <flag name="go">Build the GCC Go language frontend.</flag>
+    <flag name="graphite">Add support for the framework for loop
+      optimizations based on a polyhedral intermediate representation</flag>
+    <flag name="jit">Enable libgccjit so other applications can embed gcc for 
Just-In-Time compilation.
+      This will slow down the compiler a bit as it forces all of the toolchain 
to be shared libs.</flag>
+    <flag name="libssp">Build SSP support into a dedicated library rather than 
use the
+      code in the C library (DO NOT ENABLE THIS IF YOU DON'T KNOW WHAT IT 
DOES)</flag>
+    <flag name="mpx">Enable support for Intel Memory Protection Extensions 
(MPX)</flag>
+    <flag name="mudflap">Add support for mudflap, a pointer use checking 
library</flag>
+    <flag name="nopie">Disable PIE support (NOT FOR GENERAL USE)</flag>
+    <flag name="nossp">Disable SSP support (NOT FOR GENERAL USE)</flag>
+    <flag name="objc">Build support for the Objective C code language</flag>
+    <flag name="objc++">Build support for the Objective C++ language</flag>
+    <flag name="objc-gc">Build support for the Objective C code language 
Garbage
+      Collector</flag>
+    <flag name="regression-test">Run the testsuite and install the results 
(requires FEATURES=test)</flag>
+    <flag name="sanitize">Build support for various sanitizer functions 
(ASAN/TSAN/etc...)</flag>
+    <flag name="vtv">Build support for virtual table verification (a C++ 
hardening feature)</flag>
+  </use>
+  <upstream>
+    <remote-id type="cpe">cpe:/a:gnu:gcc</remote-id>
+    <remote-id type="sourceforge">dgcc</remote-id>
+  </upstream>
+</pkgmetadata>

Reply via email to