1 |
commit: 698c342cc40f74b2aae90c23094c959f69fd3292 |
2 |
Author: Matthias Maier <tamiko <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue Aug 30 01:44:05 2016 +0000 |
4 |
Commit: Matthias Maier <tamiko <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Aug 30 01:44:05 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/dev/tamiko.git/commit/?id=698c342c |
7 |
|
8 |
sys-devel/gcc: add a gcc 6.2.0 ebuild |
9 |
|
10 |
Package-Manager: portage-2.2.28 |
11 |
RepoMan-Options: --force |
12 |
|
13 |
sys-devel/gcc/Manifest | 3 + |
14 |
sys-devel/gcc/files/awk/fixlafiles.awk | 314 +++++++++++++++++++++ |
15 |
sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la | 335 +++++++++++++++++++++++ |
16 |
sys-devel/gcc/files/c89 | 20 ++ |
17 |
sys-devel/gcc/files/c99 | 21 ++ |
18 |
sys-devel/gcc/files/fix_libtool_files.sh | 67 +++++ |
19 |
sys-devel/gcc/files/gcc-configure-LANG.patch | 64 +++++ |
20 |
sys-devel/gcc/files/gcc-configure-texinfo.patch | 16 ++ |
21 |
sys-devel/gcc/files/gcc-spec-env-r1.patch | 87 ++++++ |
22 |
sys-devel/gcc/files/gcc-spec-env.patch | 42 +++ |
23 |
sys-devel/gcc/gcc-6.2.0.ebuild | 44 +++ |
24 |
sys-devel/gcc/metadata.xml | 38 +++ |
25 |
12 files changed, 1051 insertions(+) |
26 |
|
27 |
diff --git a/sys-devel/gcc/Manifest b/sys-devel/gcc/Manifest |
28 |
new file mode 100644 |
29 |
index 0000000..bd41b7c |
30 |
--- /dev/null |
31 |
+++ b/sys-devel/gcc/Manifest |
32 |
@@ -0,0 +1,3 @@ |
33 |
+DIST ecj-4.5.jar 1470676 SHA256 98fd128f1d374d9e42fd9d4836bdd249c6d511ebc6c0df17fbc1b9df96c3d781 SHA512 d4e1bf7538ace56e3d69fa91da5bbd16c272923b4de0a9d8dee23ea2b75f9f38c603de72fc4061df49285c450b63f3df211cee5270e9fffc5447445d1a9c9e4e WHIRLPOOL db54206cfd5eba935e707b8d36ebac40f3c4ed3c1f06ede794288cbdd9c7da9d90c0898e8c98b383af276ea4c1b40c861ebd9e1fc1dce712946184321339d3ad |
34 |
+DIST gcc-6.2.0-patches-1.0.tar.bz2 5712 SHA256 7ada7f5ce163347cb8d6470a793133fcdfdc682b85c089a200d52769f224ab31 SHA512 7d715e210a3dc122dfff82ff34a2d456b9f1c70e21e28b533287eef26b6b7b29453e390f85ae3d5cc3f5eee751c207fde08085cb2021366d2cb3a20e8b0fdd61 WHIRLPOOL a8581cb522a4140883e36a2f5cd9395b9b6891d20795f42e1f829184330d996fa6bbc16eee3ac21a253dcf2f34d038b9c8ed211ec563394455dfa49c4b6a7bc1 |
35 |
+DIST gcc-6.2.0.tar.bz2 99778648 SHA256 9944589fc722d3e66308c0ce5257788ebd7872982a718aa2516123940671b7c5 SHA512 1e8b826a3d44b9d5899309894e20c03abeb352bf3d273b8ad63af814c0ee2911f1a83ce1cd4cdd2d1cb0b3e3c34e9b7ae1b2ab83dfc649ee817ab05247c76198 WHIRLPOOL 8a96e0424c7410d8826319758ed92f1674099cf17d0590bf71328ef2bb9913f9fa8452016c509c48c93f4bf8ed811a24fffa1b6e475b5c1633d167ad844f1dca |
36 |
|
37 |
diff --git a/sys-devel/gcc/files/awk/fixlafiles.awk b/sys-devel/gcc/files/awk/fixlafiles.awk |
38 |
new file mode 100644 |
39 |
index 0000000..ad2c2b1 |
40 |
--- /dev/null |
41 |
+++ b/sys-devel/gcc/files/awk/fixlafiles.awk |
42 |
@@ -0,0 +1,314 @@ |
43 |
+# Copyright 1999-2005 Gentoo Foundation |
44 |
+# Distributed under the terms of the GNU General Public License v2 |
45 |
+# $Id$ |
46 |
+ |
47 |
+# |
48 |
+# Helper functions |
49 |
+# |
50 |
+function printn(string) { |
51 |
+ printf("%s", string) |
52 |
+} |
53 |
+function einfo(string) { |
54 |
+ printf(" \033[32;01m*\033[0m %s\n", string) |
55 |
+} |
56 |
+function einfon(string) { |
57 |
+ printf(" \033[32;01m*\033[0m %s", string) |
58 |
+} |
59 |
+function ewarn(string) { |
60 |
+ printf(" \033[33;01m*\033[0m %s\n", string) |
61 |
+} |
62 |
+function ewarnn(string) { |
63 |
+ printf(" \033[33;01m*\033[0m %s", string) |
64 |
+} |
65 |
+function eerror(string) { |
66 |
+ printf(" \033[31;01m*\033[0m %s\n", string) |
67 |
+} |
68 |
+ |
69 |
+# |
70 |
+# assert(condition, errmsg) |
71 |
+# assert that a condition is true. Otherwise exit. |
72 |
+# |
73 |
+function assert(condition, string) { |
74 |
+ if (! condition) { |
75 |
+ printf("%s:%d: assertion failed: %s\n", |
76 |
+ FILENAME, FNR, string) > "/dev/stderr" |
77 |
+ _assert_exit = 1 |
78 |
+ exit 1 |
79 |
+ } |
80 |
+} |
81 |
+ |
82 |
+# |
83 |
+# system(command, return) |
84 |
+# wrapper that normalizes return codes ... |
85 |
+# |
86 |
+function dosystem(command, ret) { |
87 |
+ ret = 0 |
88 |
+ ret = system(command) |
89 |
+ if (ret == 0) |
90 |
+ return 1 |
91 |
+ else |
92 |
+ return 0 |
93 |
+} |
94 |
+ |
95 |
+BEGIN { |
96 |
+ # |
97 |
+ # Get our variables from environment |
98 |
+ # |
99 |
+ OLDVER = ENVIRON["OLDVER"] |
100 |
+ OLDCHOST = ENVIRON["OLDCHOST"] |
101 |
+ |
102 |
+ if (OLDVER == "") { |
103 |
+ eerror("Could not get OLDVER!"); |
104 |
+ exit 1 |
105 |
+ } |
106 |
+ |
107 |
+ # Setup some sane defaults |
108 |
+ LIBCOUNT = 2 |
109 |
+ HAVE_GCC34 = 0 |
110 |
+ DIRLIST[1] = "/lib" |
111 |
+ DIRLIST[2] = "/usr/lib" |
112 |
+ |
113 |
+ # |
114 |
+ # Walk /etc/ld.so.conf to discover all our library paths |
115 |
+ # |
116 |
+ pipe = "cat /etc/ld.so.conf | sort 2>/dev/null" |
117 |
+ while(((pipe) | getline ldsoconf_data) > 0) { |
118 |
+ if (ldsoconf_data !~ /^[[:space:]]*#/) { |
119 |
+ if (ldsoconf_data == "") continue |
120 |
+ |
121 |
+ # Remove any trailing comments |
122 |
+ sub(/#.*$/, "", ldsoconf_data) |
123 |
+ # Remove any trailing spaces |
124 |
+ sub(/[[:space:]]+$/, "", ldsoconf_data) |
125 |
+ |
126 |
+ # If there's more than one path per line, split |
127 |
+ # it up as if they were sep lines |
128 |
+ split(ldsoconf_data, nodes, /[:,[:space:]]/) |
129 |
+ |
130 |
+ # Now add the rest from ld.so.conf |
131 |
+ for (x in nodes) { |
132 |
+ # wtf does this line do ? |
133 |
+ sub(/=.*/, "", nodes[x]) |
134 |
+ # Prune trailing / |
135 |
+ sub(/\/$/, "", nodes[x]) |
136 |
+ |
137 |
+ if (nodes[x] == "") continue |
138 |
+ |
139 |
+ # |
140 |
+ # Drop the directory if its a child directory of |
141 |
+ # one that was already added ... |
142 |
+ # For example, if we have: |
143 |
+ # /usr/lib /usr/libexec /usr/lib/mozilla /usr/lib/nss |
144 |
+ # We really just want to save /usr/lib /usr/libexec |
145 |
+ # |
146 |
+ CHILD = 0 |
147 |
+ for (y in DIRLIST) { |
148 |
+ if (nodes[x] ~ "^" DIRLIST[y] "(/|$)") { |
149 |
+ CHILD = 1 |
150 |
+ break |
151 |
+ } |
152 |
+ } |
153 |
+ if (CHILD) continue |
154 |
+ |
155 |
+ DIRLIST[++LIBCOUNT] = nodes[x] |
156 |
+ } |
157 |
+ } |
158 |
+ } |
159 |
+ close(pipe) |
160 |
+ |
161 |
+ # |
162 |
+ # Get line from gcc's output containing CHOST |
163 |
+ # |
164 |
+ pipe = "gcc -print-file-name=libgcc.a 2>/dev/null" |
165 |
+ if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) { |
166 |
+ close(pipe) |
167 |
+ |
168 |
+ # If we fail to get the CHOST, see if we can get the CHOST |
169 |
+ # portage thinks we are using ... |
170 |
+ pipe = "/usr/bin/portageq envvar 'CHOST'" |
171 |
+ assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST") |
172 |
+ } else { |
173 |
+ # Check pre gcc-3.4.x versions |
174 |
+ CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST) |
175 |
+ |
176 |
+ if (CHOST == TMP_CHOST || CHOST == "") { |
177 |
+ # Check gcc-3.4.x or later |
178 |
+ CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST); |
179 |
+ |
180 |
+ if (CHOST == TMP_CHOST || CHOST == "") |
181 |
+ CHOST = "" |
182 |
+ else |
183 |
+ HAVE_GCC34 = 1 |
184 |
+ } |
185 |
+ } |
186 |
+ close(pipe) |
187 |
+ |
188 |
+ if (CHOST == "") { |
189 |
+ eerror("Could not get gcc's CHOST!") |
190 |
+ exit 1 |
191 |
+ } |
192 |
+ |
193 |
+ if (OLDCHOST != "") |
194 |
+ if (OLDCHOST == CHOST) |
195 |
+ OLDCHOST = "" |
196 |
+ |
197 |
+ GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/" |
198 |
+ GCCLIBPREFIX_NEW = "/usr/lib/gcc/" |
199 |
+ |
200 |
+ if (HAVE_GCC34) |
201 |
+ GCCLIBPREFIX = GCCLIBPREFIX_NEW |
202 |
+ else |
203 |
+ GCCLIBPREFIX = GCCLIBPREFIX_OLD |
204 |
+ |
205 |
+ GCCLIB = GCCLIBPREFIX CHOST |
206 |
+ |
207 |
+ if (OLDCHOST != "") { |
208 |
+ OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST |
209 |
+ OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST |
210 |
+ } |
211 |
+ |
212 |
+ # Get current gcc's version |
213 |
+ pipe = "gcc -dumpversion" |
214 |
+ assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)") |
215 |
+ close(pipe) |
216 |
+ |
217 |
+ if (NEWVER == "") { |
218 |
+ eerror("Could not get gcc's version!") |
219 |
+ exit 1 |
220 |
+ } |
221 |
+ |
222 |
+ # Nothing to do ? |
223 |
+ if ((OLDVER == NEWVER) && (OLDCHOST == "")) |
224 |
+ exit 0 |
225 |
+ |
226 |
+ # |
227 |
+ # Ok, now let's scan for the .la files and actually fix them up |
228 |
+ # |
229 |
+ for (x = 1; x <= LIBCOUNT; x++) { |
230 |
+ # Do nothing if the target dir is gcc's internal library path |
231 |
+ if (DIRLIST[x] ~ GCCLIBPREFIX_OLD || |
232 |
+ DIRLIST[x] ~ GCCLIBPREFIX_NEW) |
233 |
+ continue |
234 |
+ |
235 |
+ einfo(" [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...") |
236 |
+ |
237 |
+ pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null" |
238 |
+ while (((pipe) | getline la_files) > 0) { |
239 |
+ |
240 |
+ # Do nothing if the .la file is located in gcc's internal lib path |
241 |
+ if (la_files ~ GCCLIBPREFIX_OLD || |
242 |
+ la_files ~ GCCLIBPREFIX_NEW) |
243 |
+ continue |
244 |
+ |
245 |
+ CHANGED = 0 |
246 |
+ CHOST_CHANGED = 0 |
247 |
+ |
248 |
+ # See if we need to fix the .la file |
249 |
+ while ((getline la_data < (la_files)) > 0) { |
250 |
+ if (OLDCHOST != "") { |
251 |
+ if ((gsub(OLDGCCLIB1 "[/[:space:]]+", |
252 |
+ GCCLIB, la_data) > 0) || |
253 |
+ (gsub(OLDGCCLIB2 "[/[:space:]]+", |
254 |
+ GCCLIB, la_data) > 0)) { |
255 |
+ CHANGED = 1 |
256 |
+ CHOST_CHANGED = 1 |
257 |
+ } |
258 |
+ } |
259 |
+ if (OLDVER != NEWVER) { |
260 |
+ if ((gsub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "[/[:space:]]*", |
261 |
+ GCCLIB "/" NEWVER, la_data) > 0) || |
262 |
+ (gsub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "[/[:space:]]*", |
263 |
+ GCCLIB "/" NEWVER, la_data) > 0)) |
264 |
+ CHANGED = 1 |
265 |
+ } |
266 |
+ } |
267 |
+ close(la_files) |
268 |
+ |
269 |
+ # Do the actual changes in a second loop, as we can then |
270 |
+ # verify that CHOST_CHANGED among things is correct ... |
271 |
+ if (CHANGED) { |
272 |
+ ewarnn(" FIXING: " la_files " ...") |
273 |
+ |
274 |
+ if (CHANGED) |
275 |
+ printn("[") |
276 |
+ |
277 |
+ # Clear the temp file (removing rather than '>foo' is better |
278 |
+ # out of a security point of view?) |
279 |
+ dosystem("rm -f " la_files ".new") |
280 |
+ |
281 |
+ while ((getline la_data < (la_files)) > 0) { |
282 |
+ if (OLDCHOST != "") { |
283 |
+ tmpstr = gensub(OLDGCCLIB1 "([/[:space:]]+)", |
284 |
+ GCCLIB "\\1", "g", la_data) |
285 |
+ tmpstr = gensub(OLDGCCLIB2 "([/[:space:]]+)", |
286 |
+ GCCLIB "\\1", "g", tmpstr) |
287 |
+ |
288 |
+ if (la_data != tmpstr) { |
289 |
+ printn("c") |
290 |
+ la_data = tmpstr |
291 |
+ } |
292 |
+ |
293 |
+ if (CHOST_CHANGED > 0) { |
294 |
+ # We try to be careful about CHOST changes outside |
295 |
+ # the gcc library path (meaning we cannot match it |
296 |
+ # via /GCCLIBPREFIX CHOST/) ... |
297 |
+ |
298 |
+ # Catch: |
299 |
+ # |
300 |
+ # dependency_libs=' -L/usr/CHOST/{bin,lib}' |
301 |
+ # |
302 |
+ gsub("-L/usr/" OLDCHOST "/", |
303 |
+ "-L/usr/" CHOST "/", la_data) |
304 |
+ # Catch: |
305 |
+ # |
306 |
+ # dependency_libs=' -L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib' |
307 |
+ # |
308 |
+ la_data = gensub("(" GCCLIB "/[^[:space:]]+)/" OLDCHOST "/", |
309 |
+ "\\1/" CHOST "/", "g", la_data) |
310 |
+ } |
311 |
+ } |
312 |
+ |
313 |
+ if (OLDVER != NEWVER) { |
314 |
+ # Catch: |
315 |
+ # |
316 |
+ # dependency_libs=' -L/usr/lib/gcc/CHOST/VER' |
317 |
+ # |
318 |
+ tmpstr = gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)", |
319 |
+ GCCLIB "/" NEWVER "\\1", "g", la_data) |
320 |
+ tmpstr = gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)", |
321 |
+ GCCLIB "/" NEWVER "\\1", "g", tmpstr) |
322 |
+ |
323 |
+ if (la_data != tmpstr) { |
324 |
+ # Catch: |
325 |
+ # |
326 |
+ # dependency_libs=' -L/usr/lib/gcc-lib/../../CHOST/lib' |
327 |
+ # |
328 |
+ # in cases where we have gcc34 |
329 |
+ tmpstr = gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)", |
330 |
+ GCCLIBPREFIX "\\1", "g", tmpstr) |
331 |
+ tmpstr = gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)", |
332 |
+ GCCLIBPREFIX "\\1", "g", tmpstr) |
333 |
+ printn("v") |
334 |
+ la_data = tmpstr |
335 |
+ } |
336 |
+ } |
337 |
+ |
338 |
+ print la_data >> (la_files ".new") |
339 |
+ } |
340 |
+ |
341 |
+ if (CHANGED) |
342 |
+ print "]" |
343 |
+ |
344 |
+ close(la_files) |
345 |
+ close(la_files ".new") |
346 |
+ |
347 |
+ assert(dosystem("mv -f " la_files ".new " la_files), |
348 |
+ "dosystem(\"mv -f " la_files ".new " la_files "\")") |
349 |
+ } |
350 |
+ } |
351 |
+ |
352 |
+ close(pipe) |
353 |
+ } |
354 |
+} |
355 |
+ |
356 |
+# vim:ts=4 |
357 |
|
358 |
diff --git a/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la b/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la |
359 |
new file mode 100644 |
360 |
index 0000000..2776c72 |
361 |
--- /dev/null |
362 |
+++ b/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la |
363 |
@@ -0,0 +1,335 @@ |
364 |
+# Copyright 1999-2005 Gentoo Foundation |
365 |
+# Distributed under the terms of the GNU General Public License v2 |
366 |
+# $Id$ |
367 |
+ |
368 |
+# |
369 |
+# Helper functions |
370 |
+# |
371 |
+function printn(string) { |
372 |
+ printf("%s", string) |
373 |
+} |
374 |
+function einfo(string) { |
375 |
+ printf(" \033[32;01m*\033[0m %s\n", string) |
376 |
+} |
377 |
+function einfon(string) { |
378 |
+ printf(" \033[32;01m*\033[0m %s", string) |
379 |
+} |
380 |
+function ewarn(string) { |
381 |
+ printf(" \033[33;01m*\033[0m %s\n", string) |
382 |
+} |
383 |
+function ewarnn(string) { |
384 |
+ printf(" \033[33;01m*\033[0m %s", string) |
385 |
+} |
386 |
+function eerror(string) { |
387 |
+ printf(" \033[31;01m*\033[0m %s\n", string) |
388 |
+} |
389 |
+ |
390 |
+# |
391 |
+# assert(condition, errmsg) |
392 |
+# assert that a condition is true. Otherwise exit. |
393 |
+# |
394 |
+function assert(condition, string) { |
395 |
+ if (! condition) { |
396 |
+ printf("%s:%d: assertion failed: %s\n", |
397 |
+ FILENAME, FNR, string) > "/dev/stderr" |
398 |
+ _assert_exit = 1 |
399 |
+ exit 1 |
400 |
+ } |
401 |
+} |
402 |
+ |
403 |
+# |
404 |
+# system(command, return) |
405 |
+# wrapper that normalizes return codes ... |
406 |
+# |
407 |
+function dosystem(command, ret) { |
408 |
+ ret = 0 |
409 |
+ ret = system(command) |
410 |
+ if (ret == 0) |
411 |
+ return 1 |
412 |
+ else |
413 |
+ return 0 |
414 |
+} |
415 |
+ |
416 |
+# |
417 |
+# parse_ld_conf(config_file) |
418 |
+# |
419 |
+function parse_ld_conf(conf, pipe, ldsoconf_data, CHILD, y) { |
420 |
+ pipe = "cd /etc; cat " conf " | sort 2>/dev/null" |
421 |
+ while(((pipe) | getline ldsoconf_data) > 0) { |
422 |
+ if (ldsoconf_data ~ /^[[:space:]]*#/) |
423 |
+ continue |
424 |
+ if (ldsoconf_data == "") |
425 |
+ continue |
426 |
+ |
427 |
+ # Handle the "include" keyword |
428 |
+ if (ldsoconf_data ~ /^include /) { |
429 |
+ sub(/^include /, "", ldsoconf_data) |
430 |
+ parse_ld_conf(ldsoconf_data) |
431 |
+ continue |
432 |
+ } |
433 |
+ |
434 |
+ # Remove any trailing comments |
435 |
+ sub(/#.*$/, "", ldsoconf_data) |
436 |
+ # Remove any trailing spaces |
437 |
+ sub(/[[:space:]]+$/, "", ldsoconf_data) |
438 |
+ # Eat duplicate slashes |
439 |
+ sub(/\/\//, "/", ldsoconf_data) |
440 |
+ # Prune trailing / |
441 |
+ sub(/\/$/, "", ldsoconf_data) |
442 |
+ |
443 |
+ # |
444 |
+ # Drop the directory if its a child directory of |
445 |
+ # one that was already added ... |
446 |
+ # For example, if we have: |
447 |
+ # /usr/lib /usr/libexec /usr/lib/mozilla /usr/lib/nss |
448 |
+ # We really just want to save /usr/lib /usr/libexec |
449 |
+ # |
450 |
+ CHILD = 0 |
451 |
+ for (y in DIRLIST) { |
452 |
+ if (ldsoconf_data ~ "^" DIRLIST[y] "(/|$)") { |
453 |
+ CHILD = 1 |
454 |
+ break |
455 |
+ } |
456 |
+ } |
457 |
+ if (CHILD) continue |
458 |
+ |
459 |
+ DIRLIST[++LIBCOUNT] = ldsoconf_data |
460 |
+ } |
461 |
+ close(pipe) |
462 |
+} |
463 |
+ |
464 |
+BEGIN { |
465 |
+ # |
466 |
+ # Get our variables from environment |
467 |
+ # |
468 |
+ OLDVER = ENVIRON["OLDVER"] |
469 |
+ OLDCHOST = ENVIRON["OLDCHOST"] |
470 |
+ |
471 |
+ if (OLDVER == "") { |
472 |
+ eerror("Could not get OLDVER!"); |
473 |
+ exit 1 |
474 |
+ } |
475 |
+ |
476 |
+ # Setup some sane defaults |
477 |
+ LIBCOUNT = 2 |
478 |
+ HAVE_GCC34 = 0 |
479 |
+ DIRLIST[1] = "/lib" |
480 |
+ DIRLIST[2] = "/usr/lib" |
481 |
+ |
482 |
+ # |
483 |
+ # Walk /etc/ld.so.conf to discover all our library paths |
484 |
+ # |
485 |
+ parse_ld_conf("/etc/ld.so.conf") |
486 |
+ |
487 |
+ # |
488 |
+ # Get line from gcc's output containing CHOST |
489 |
+ # |
490 |
+ pipe = "gcc -print-file-name=libgcc.a 2>/dev/null" |
491 |
+ if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) { |
492 |
+ close(pipe) |
493 |
+ |
494 |
+ # If we fail to get the CHOST, see if we can get the CHOST |
495 |
+ # portage thinks we are using ... |
496 |
+ pipe = "/usr/bin/portageq envvar 'CHOST'" |
497 |
+ assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST") |
498 |
+ } else { |
499 |
+ # Check pre gcc-3.4.x versions |
500 |
+ CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST) |
501 |
+ |
502 |
+ if (CHOST == TMP_CHOST || CHOST == "") { |
503 |
+ # Check gcc-3.4.x or later |
504 |
+ CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST); |
505 |
+ |
506 |
+ if (CHOST == TMP_CHOST || CHOST == "") |
507 |
+ CHOST = "" |
508 |
+ else |
509 |
+ HAVE_GCC34 = 1 |
510 |
+ } |
511 |
+ } |
512 |
+ close(pipe) |
513 |
+ |
514 |
+ if (CHOST == "") { |
515 |
+ eerror("Could not get gcc's CHOST!") |
516 |
+ exit 1 |
517 |
+ } |
518 |
+ |
519 |
+ if (OLDCHOST != "") |
520 |
+ if (OLDCHOST == CHOST) |
521 |
+ OLDCHOST = "" |
522 |
+ |
523 |
+ GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/" |
524 |
+ GCCLIBPREFIX_NEW = "/usr/lib/gcc/" |
525 |
+ |
526 |
+ if (HAVE_GCC34) |
527 |
+ GCCLIBPREFIX = GCCLIBPREFIX_NEW |
528 |
+ else |
529 |
+ GCCLIBPREFIX = GCCLIBPREFIX_OLD |
530 |
+ |
531 |
+ GCCLIB = GCCLIBPREFIX CHOST |
532 |
+ |
533 |
+ if (OLDCHOST != "") { |
534 |
+ OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST |
535 |
+ OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST |
536 |
+ } |
537 |
+ |
538 |
+ # Get current gcc's version |
539 |
+ pipe = "gcc -dumpversion" |
540 |
+ assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)") |
541 |
+ close(pipe) |
542 |
+ |
543 |
+ if (NEWVER == "") { |
544 |
+ eerror("Could not get gcc's version!") |
545 |
+ exit 1 |
546 |
+ } |
547 |
+ |
548 |
+ # Nothing to do ? |
549 |
+ # NB: Do not check for (OLDVER == NEWVER) anymore, as we might need to |
550 |
+ # replace libstdc++.la .... |
551 |
+ if ((OLDVER == "") && (OLDCHOST == "")) |
552 |
+ exit 0 |
553 |
+ |
554 |
+ # |
555 |
+ # Ok, now let's scan for the .la files and actually fix them up |
556 |
+ # |
557 |
+ for (x = 1; x <= LIBCOUNT; x++) { |
558 |
+ # Do nothing if the target dir is gcc's internal library path |
559 |
+ if (DIRLIST[x] ~ GCCLIBPREFIX_OLD || |
560 |
+ DIRLIST[x] ~ GCCLIBPREFIX_NEW) |
561 |
+ continue |
562 |
+ |
563 |
+ einfo(" [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...") |
564 |
+ |
565 |
+ pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null" |
566 |
+ while (((pipe) | getline la_files) > 0) { |
567 |
+ |
568 |
+ # Do nothing if the .la file is located in gcc's internal lib path |
569 |
+ if (la_files ~ GCCLIBPREFIX_OLD || |
570 |
+ la_files ~ GCCLIBPREFIX_NEW) |
571 |
+ continue |
572 |
+ |
573 |
+ CHANGED = 0 |
574 |
+ CHOST_CHANGED = 0 |
575 |
+ |
576 |
+ # See if we need to fix the .la file |
577 |
+ while ((getline la_data < (la_files)) > 0) { |
578 |
+ if (OLDCHOST != "") { |
579 |
+ if ((gsub(OLDGCCLIB1 "[/[:space:]]+", |
580 |
+ GCCLIB, la_data) > 0) || |
581 |
+ (gsub(OLDGCCLIB2 "[/[:space:]]+", |
582 |
+ GCCLIB, la_data) > 0)) { |
583 |
+ CHANGED = 1 |
584 |
+ CHOST_CHANGED = 1 |
585 |
+ } |
586 |
+ } |
587 |
+ if (OLDVER != NEWVER) { |
588 |
+ if ((gsub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "[/[:space:]]*", |
589 |
+ GCCLIB "/" NEWVER, la_data) > 0) || |
590 |
+ (gsub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "[/[:space:]]*", |
591 |
+ GCCLIB "/" NEWVER, la_data) > 0)) |
592 |
+ CHANGED = 1 |
593 |
+ } |
594 |
+ # We now check if we have libstdc++.la, as we remove the |
595 |
+ # libtool linker scripts for gcc ... |
596 |
+ # We do this last, as we only match the new paths |
597 |
+ if (gsub(GCCLIB "/" NEWVER "/libstdc\\+\\+\\.la", |
598 |
+ "-lstdc++", la_data) > 0) |
599 |
+ CHANGED = 1 |
600 |
+ } |
601 |
+ close(la_files) |
602 |
+ |
603 |
+ # Do the actual changes in a second loop, as we can then |
604 |
+ # verify that CHOST_CHANGED among things is correct ... |
605 |
+ if (CHANGED) { |
606 |
+ ewarnn(" FIXING: " la_files " ...[") |
607 |
+ |
608 |
+ # Clear the temp file (removing rather than '>foo' is better |
609 |
+ # out of a security point of view?) |
610 |
+ dosystem("rm -f " la_files ".new") |
611 |
+ |
612 |
+ while ((getline la_data < (la_files)) > 0) { |
613 |
+ if (OLDCHOST != "") { |
614 |
+ tmpstr = gensub(OLDGCCLIB1 "([/[:space:]]+)", |
615 |
+ GCCLIB "\\1", "g", la_data) |
616 |
+ tmpstr = gensub(OLDGCCLIB2 "([/[:space:]]+)", |
617 |
+ GCCLIB "\\1", "g", tmpstr) |
618 |
+ |
619 |
+ if (la_data != tmpstr) { |
620 |
+ printn("c") |
621 |
+ la_data = tmpstr |
622 |
+ } |
623 |
+ |
624 |
+ if (CHOST_CHANGED > 0) { |
625 |
+ # We try to be careful about CHOST changes outside |
626 |
+ # the gcc library path (meaning we cannot match it |
627 |
+ # via /GCCLIBPREFIX CHOST/) ... |
628 |
+ |
629 |
+ # Catch: |
630 |
+ # |
631 |
+ # dependency_libs=' -L/usr/CHOST/{bin,lib}' |
632 |
+ # |
633 |
+ gsub("-L/usr/" OLDCHOST "/", |
634 |
+ "-L/usr/" CHOST "/", la_data) |
635 |
+ # Catch: |
636 |
+ # |
637 |
+ # dependency_libs=' -L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib' |
638 |
+ # |
639 |
+ la_data = gensub("(" GCCLIB "/[^[:space:]]+)/" OLDCHOST "/", |
640 |
+ "\\1/" CHOST "/", "g", la_data) |
641 |
+ } |
642 |
+ } |
643 |
+ |
644 |
+ if (OLDVER != NEWVER) { |
645 |
+ # Catch: |
646 |
+ # |
647 |
+ # dependency_libs=' -L/usr/lib/gcc/CHOST/VER' |
648 |
+ # |
649 |
+ tmpstr = gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)", |
650 |
+ GCCLIB "/" NEWVER "\\1", "g", la_data) |
651 |
+ tmpstr = gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)", |
652 |
+ GCCLIB "/" NEWVER "\\1", "g", tmpstr) |
653 |
+ |
654 |
+ if (la_data != tmpstr) { |
655 |
+ # Catch: |
656 |
+ # |
657 |
+ # dependency_libs=' -L/usr/lib/gcc-lib/../../CHOST/lib' |
658 |
+ # |
659 |
+ # in cases where we have gcc34 |
660 |
+ tmpstr = gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)", |
661 |
+ GCCLIBPREFIX "\\1", "g", tmpstr) |
662 |
+ tmpstr = gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)", |
663 |
+ GCCLIBPREFIX "\\1", "g", tmpstr) |
664 |
+ printn("v") |
665 |
+ la_data = tmpstr |
666 |
+ } |
667 |
+ } |
668 |
+ |
669 |
+ # We now check if we have libstdc++.la, as we remove the |
670 |
+ # libtool linker scripts for gcc and any referencese in any |
671 |
+ # libtool linker scripts. |
672 |
+ # We do this last, as we only match the new paths |
673 |
+ tmpstr = gensub(GCCLIB "/" NEWVER "/libstdc\\+\\+\\.la", |
674 |
+ "-lstdc++", "g", la_data); |
675 |
+ if (la_data != tmpstr) { |
676 |
+ printn("l") |
677 |
+ la_data = tmpstr |
678 |
+ } |
679 |
+ |
680 |
+ print la_data >> (la_files ".new") |
681 |
+ } |
682 |
+ |
683 |
+ if (CHANGED) |
684 |
+ print "]" |
685 |
+ |
686 |
+ close(la_files) |
687 |
+ close(la_files ".new") |
688 |
+ |
689 |
+ assert(dosystem("mv -f " la_files ".new " la_files), |
690 |
+ "dosystem(\"mv -f " la_files ".new " la_files "\")") |
691 |
+ } |
692 |
+ } |
693 |
+ |
694 |
+ close(pipe) |
695 |
+ } |
696 |
+} |
697 |
+ |
698 |
+# vim:ts=4 |
699 |
|
700 |
diff --git a/sys-devel/gcc/files/c89 b/sys-devel/gcc/files/c89 |
701 |
new file mode 100644 |
702 |
index 0000000..cee0325 |
703 |
--- /dev/null |
704 |
+++ b/sys-devel/gcc/files/c89 |
705 |
@@ -0,0 +1,20 @@ |
706 |
+#! /bin/sh |
707 |
+ |
708 |
+# Call the appropriate C compiler with options to accept ANSI/ISO C |
709 |
+# The following options are the same (as of gcc-2.95): |
710 |
+# -ansi |
711 |
+# -std=c89 |
712 |
+# -std=iso9899:1990 |
713 |
+ |
714 |
+for i; do |
715 |
+ case "$i" in |
716 |
+ -ansi|-std=c89|-std=iso9899:1990) |
717 |
+ ;; |
718 |
+ -std=*) |
719 |
+ echo >&2 "`basename $0` called with non ANSI/ISO C90 option $i" |
720 |
+ exit 1 |
721 |
+ ;; |
722 |
+ esac |
723 |
+done |
724 |
+ |
725 |
+exec gcc -std=c89 -pedantic -U_FORTIFY_SOURCE "$@" |
726 |
|
727 |
diff --git a/sys-devel/gcc/files/c99 b/sys-devel/gcc/files/c99 |
728 |
new file mode 100644 |
729 |
index 0000000..c954209 |
730 |
--- /dev/null |
731 |
+++ b/sys-devel/gcc/files/c99 |
732 |
@@ -0,0 +1,21 @@ |
733 |
+#! /bin/sh |
734 |
+ |
735 |
+# Call the appropriate C compiler with options to accept ANSI/ISO C |
736 |
+# The following options are the same (as of gcc-3.3): |
737 |
+# -std=c99 |
738 |
+# -std=c9x |
739 |
+# -std=iso9899:1999 |
740 |
+# -std=iso9899:199x |
741 |
+ |
742 |
+for i; do |
743 |
+ case "$i" in |
744 |
+ -std=c9[9x]|-std=iso9899:199[9x]) |
745 |
+ ;; |
746 |
+ -ansi|-std=*) |
747 |
+ echo >&2 "`basename $0` called with non ANSI/ISO C99 option $i" |
748 |
+ exit 1 |
749 |
+ ;; |
750 |
+ esac |
751 |
+done |
752 |
+ |
753 |
+exec gcc -std=c99 -pedantic -U_FORTIFY_SOURCE ${1+"$@"} |
754 |
|
755 |
diff --git a/sys-devel/gcc/files/fix_libtool_files.sh b/sys-devel/gcc/files/fix_libtool_files.sh |
756 |
new file mode 100644 |
757 |
index 0000000..eb96df2 |
758 |
--- /dev/null |
759 |
+++ b/sys-devel/gcc/files/fix_libtool_files.sh |
760 |
@@ -0,0 +1,67 @@ |
761 |
+#!/bin/sh |
762 |
+# Copyright 1999-2014 Gentoo Foundation |
763 |
+# Distributed under the terms of the GNU General Public License v2 |
764 |
+# $Id$ |
765 |
+ |
766 |
+usage() { |
767 |
+cat << "USAGE_END" |
768 |
+Usage: fix_libtool_files.sh <old-gcc-version> [--oldarch <old-CHOST>] |
769 |
+ |
770 |
+ Where <old-gcc-version> is the version number of the |
771 |
+ previous gcc version. For example, if you updated to |
772 |
+ gcc-3.2.1, and you had gcc-3.2 installed, run: |
773 |
+ |
774 |
+ # fix_libtool_files.sh 3.2 |
775 |
+ |
776 |
+ If you updated to gcc-3.2.3, and the old CHOST was i586-pc-linux-gnu |
777 |
+ but you now have CHOST as i686-pc-linux-gnu, run: |
778 |
+ |
779 |
+ # fix_libtool_files.sh 3.2 --oldarch i586-pc-linux-gnu |
780 |
+ |
781 |
+ Note that if only the CHOST and not the version changed, you can run |
782 |
+ it with the current version and the '--oldarch <old-CHOST>' arguments, |
783 |
+ and it will do the expected: |
784 |
+ |
785 |
+ # fix_libtool_files.sh `gcc -dumpversion` --oldarch i586-pc-linux-gnu |
786 |
+ |
787 |
+USAGE_END |
788 |
+ exit 1 |
789 |
+} |
790 |
+ |
791 |
+case $2 in |
792 |
+--oldarch) [ $# -ne 3 ] && usage ;; |
793 |
+*) [ $# -ne 1 ] && usage ;; |
794 |
+esac |
795 |
+ |
796 |
+ARGV1=$1 |
797 |
+ARGV2=$2 |
798 |
+ARGV3=$3 |
799 |
+ |
800 |
+. /etc/profile || exit 1 |
801 |
+ |
802 |
+if [ ${EUID:-0} -ne 0 ] ; then |
803 |
+ echo "${0##*/}: Must be root." |
804 |
+ exit 1 |
805 |
+fi |
806 |
+ |
807 |
+# make sure the files come out sane |
808 |
+umask 0022 |
809 |
+ |
810 |
+OLDCHOST= |
811 |
+[ "${ARGV2}" = "--oldarch" ] && OLDCHOST=${ARGV3} |
812 |
+ |
813 |
+AWKDIR="/usr/share/gcc-data" |
814 |
+ |
815 |
+if [ ! -r "${AWKDIR}/fixlafiles.awk" ] ; then |
816 |
+ echo "${0##*/}: ${AWKDIR}/fixlafiles.awk does not exist!" |
817 |
+ exit 1 |
818 |
+fi |
819 |
+ |
820 |
+OLDVER=${ARGV1} |
821 |
+ |
822 |
+export OLDVER OLDCHOST |
823 |
+ |
824 |
+echo "Scanning libtool files for hardcoded gcc library paths..." |
825 |
+exec gawk -f "${AWKDIR}/fixlafiles.awk" |
826 |
+ |
827 |
+# vim:ts=4 |
828 |
|
829 |
diff --git a/sys-devel/gcc/files/gcc-configure-LANG.patch b/sys-devel/gcc/files/gcc-configure-LANG.patch |
830 |
new file mode 100644 |
831 |
index 0000000..d1b1b03 |
832 |
--- /dev/null |
833 |
+++ b/sys-devel/gcc/files/gcc-configure-LANG.patch |
834 |
@@ -0,0 +1,64 @@ |
835 |
+The LANG vars aren't reset early enough so when sed tries to use [a-zA-Z] in |
836 |
+option parsing, it may break. |
837 |
+ |
838 |
+http://bugs.gentoo.org/103483 |
839 |
+ |
840 |
+--- configure |
841 |
++++ configure |
842 |
+@@ -54,6 +54,19 @@ |
843 |
+ infodir='${prefix}/info' |
844 |
+ mandir='${prefix}/man' |
845 |
+ |
846 |
++# NLS nuisances. |
847 |
++for as_var in \ |
848 |
++ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ |
849 |
++ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ |
850 |
++ LC_TELEPHONE LC_TIME |
851 |
++do |
852 |
++ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then |
853 |
++ eval $as_var=C; export $as_var |
854 |
++ else |
855 |
++ unset $as_var |
856 |
++ fi |
857 |
++done |
858 |
++ |
859 |
+ # Initialize some other variables. |
860 |
+ subdirs= |
861 |
+ MFLAGS= MAKEFLAGS= |
862 |
+@@ -452,16 +463,6 @@ |
863 |
+ esac |
864 |
+ done |
865 |
+ |
866 |
+-# NLS nuisances. |
867 |
+-# Only set these to C if already set. These must not be set unconditionally |
868 |
+-# because not all systems understand e.g. LANG=C (notably SCO). |
869 |
+-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! |
870 |
+-# Non-C LC_CTYPE values break the ctype check. |
871 |
+-if test "${LANG+set}" = set; then LANG=C; export LANG; fi |
872 |
+-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi |
873 |
+-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi |
874 |
+-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi |
875 |
+- |
876 |
+ # confdefs.h avoids OS command line length limits that DEFS can exceed. |
877 |
+ rm -rf conftest* confdefs.h |
878 |
+ # AIX cpp loses on an empty file, so make sure it contains at least a newline. |
879 |
+@@ -1850,6 +1850,19 @@ |
880 |
+ # Compiler output produced by configure, useful for debugging |
881 |
+ # configure, is in ./config.log if it exists. |
882 |
+ |
883 |
++# NLS nuisances. |
884 |
++for as_var in \ |
885 |
++ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ |
886 |
++ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ |
887 |
++ LC_TELEPHONE LC_TIME |
888 |
++do |
889 |
++ if (set +x; test -z "`(eval \$as_var=C; export \$as_var) 2>&1`"); then |
890 |
++ eval \$as_var=C; export \$as_var |
891 |
++ else |
892 |
++ unset \$as_var |
893 |
++ fi |
894 |
++done |
895 |
++ |
896 |
+ ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" |
897 |
+ for ac_option |
898 |
+ do |
899 |
|
900 |
diff --git a/sys-devel/gcc/files/gcc-configure-texinfo.patch b/sys-devel/gcc/files/gcc-configure-texinfo.patch |
901 |
new file mode 100644 |
902 |
index 0000000..ddc098d |
903 |
--- /dev/null |
904 |
+++ b/sys-devel/gcc/files/gcc-configure-texinfo.patch |
905 |
@@ -0,0 +1,16 @@ |
906 |
+Chances are quite good that the installed makeinfo is sufficient. |
907 |
+So ignore false positives where the makeinfo installed is so new |
908 |
+that it violates the cheesy version grep. |
909 |
+ |
910 |
+http://bugs.gentoo.org/198182 |
911 |
+ |
912 |
+--- configure |
913 |
++++ configure |
914 |
+@@ -3573,6 +3573,6 @@ |
915 |
+ : |
916 |
+ else |
917 |
+- MAKEINFO="$MISSING makeinfo" |
918 |
++ : |
919 |
+ fi |
920 |
+ ;; |
921 |
+ |
922 |
|
923 |
diff --git a/sys-devel/gcc/files/gcc-spec-env-r1.patch b/sys-devel/gcc/files/gcc-spec-env-r1.patch |
924 |
new file mode 100644 |
925 |
index 0000000..a589268 |
926 |
--- /dev/null |
927 |
+++ b/sys-devel/gcc/files/gcc-spec-env-r1.patch |
928 |
@@ -0,0 +1,87 @@ |
929 |
+2013-08-22 Magnus Granberg <zorry@g.o> |
930 |
+ |
931 |
+ * gcc/gcc.c (main): Add support for external spec file via the GCC_SPECS env var |
932 |
+ and move the process of the user specifed specs. |
933 |
+ |
934 |
+ This allows us to easily control pie/ssp defaults with gcc-config profiles. |
935 |
+ Original patch by Rob Holland |
936 |
+ Extended to support multiple entries separated by ':' by Kevin F. Quinn |
937 |
+ Modified to use getenv instead of poisoned GET_ENVIRONMENT by Ryan Hill |
938 |
+ Modified to process the GCC_SPECS env var befor DRIVER_SELF_SPECS by Magnus Granberg |
939 |
+ |
940 |
+--- gcc-4.8-20130210/gcc/gcc.c 2013-02-05 16:55:31.000000000 +0100 |
941 |
++++ gcc-4.8-20130210-work/gcc/gcc.c 2013-07-26 02:32:14.625089864 +0200 |
942 |
+@@ -6427,6 +6428,48 @@ main (int argc, char **argv) |
943 |
+ do_option_spec (option_default_specs[i].name, |
944 |
+ option_default_specs[i].spec); |
945 |
+ |
946 |
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS) || defined (WIN32)) |
947 |
++ /* Add specs listed in GCC_SPECS. Note; in the process of separating |
948 |
++ * each spec listed, the string is overwritten at token boundaries |
949 |
++ * (':') with '\0', an effect of strtok_r(). |
950 |
++ */ |
951 |
++ specs_file = getenv ("GCC_SPECS"); |
952 |
++ if (specs_file && (strlen(specs_file) > 0)) |
953 |
++ { |
954 |
++ char *spec, *saveptr; |
955 |
++ for (spec=strtok_r(specs_file,":",&saveptr); |
956 |
++ spec!=NULL; |
957 |
++ spec=strtok_r(NULL,":",&saveptr)) |
958 |
++ { |
959 |
++ struct user_specs *user = (struct user_specs *) |
960 |
++ xmalloc (sizeof (struct user_specs)); |
961 |
++ user->next = (struct user_specs *) 0; |
962 |
++ user->filename = spec; |
963 |
++ if (user_specs_tail) |
964 |
++ user_specs_tail->next = user; |
965 |
++ else |
966 |
++ user_specs_head = user; |
967 |
++ user_specs_tail = user; |
968 |
++ } |
969 |
++ } |
970 |
++#endif |
971 |
++ /* Process any user specified specs in the order given on the command |
972 |
++ * line. */ |
973 |
++ for (uptr = user_specs_head; uptr; uptr = uptr->next) |
974 |
++ { |
975 |
++ char *filename = find_a_file (&startfile_prefixes, uptr->filename, |
976 |
++ R_OK, true); |
977 |
++ read_specs (filename ? filename : uptr->filename, false, true); |
978 |
++ } |
979 |
++ /* Process any user self specs. */ |
980 |
++ { |
981 |
++ struct spec_list *sl; |
982 |
++ for (sl = specs; sl; sl = sl->next) |
983 |
++ if (sl->name_len == sizeof "self_spec" - 1 |
984 |
++ && !strcmp (sl->name, "self_spec")) |
985 |
++ do_self_spec (*sl->ptr_spec); |
986 |
++ } |
987 |
++ |
988 |
+ /* Process DRIVER_SELF_SPECS, adding any new options to the end |
989 |
+ of the command line. */ |
990 |
+ |
991 |
+@@ -6535,24 +6578,6 @@ main (int argc, char **argv) |
992 |
+ PREFIX_PRIORITY_LAST, 0, 1); |
993 |
+ } |
994 |
+ |
995 |
+- /* Process any user specified specs in the order given on the command |
996 |
+- line. */ |
997 |
+- for (uptr = user_specs_head; uptr; uptr = uptr->next) |
998 |
+- { |
999 |
+- char *filename = find_a_file (&startfile_prefixes, uptr->filename, |
1000 |
+- R_OK, true); |
1001 |
+- read_specs (filename ? filename : uptr->filename, false, true); |
1002 |
+- } |
1003 |
+- |
1004 |
+- /* Process any user self specs. */ |
1005 |
+- { |
1006 |
+- struct spec_list *sl; |
1007 |
+- for (sl = specs; sl; sl = sl->next) |
1008 |
+- if (sl->name_len == sizeof "self_spec" - 1 |
1009 |
+- && !strcmp (sl->name, "self_spec")) |
1010 |
+- do_self_spec (*sl->ptr_spec); |
1011 |
+- } |
1012 |
+- |
1013 |
+ if (compare_debug) |
1014 |
+ { |
1015 |
+ enum save_temps save; |
1016 |
|
1017 |
diff --git a/sys-devel/gcc/files/gcc-spec-env.patch b/sys-devel/gcc/files/gcc-spec-env.patch |
1018 |
new file mode 100644 |
1019 |
index 0000000..57e7567 |
1020 |
--- /dev/null |
1021 |
+++ b/sys-devel/gcc/files/gcc-spec-env.patch |
1022 |
@@ -0,0 +1,42 @@ |
1023 |
+ Add support for external spec file via the GCC_SPECS env var. This |
1024 |
+ allows us to easily control pie/ssp defaults with gcc-config profiles. |
1025 |
+ |
1026 |
+ Original patch by Rob Holland |
1027 |
+ Extended to support multiple entries separated by ':' by Kevin F. Quinn |
1028 |
+ Modified to use getenv instead of poisoned GET_ENVIRONMENT by Ryan Hill |
1029 |
+ |
1030 |
+--- gcc-4/gcc/gcc.c |
1031 |
++++ gcc-4/gcc/gcc.c |
1032 |
+@@ -6482,6 +6482,32 @@ |
1033 |
+ |
1034 |
+ /* Process any user specified specs in the order given on the command |
1035 |
+ line. */ |
1036 |
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS) || defined (WIN32)) |
1037 |
++ /* Add specs listed in GCC_SPECS. Note; in the process of separating |
1038 |
++ * each spec listed, the string is overwritten at token boundaries |
1039 |
++ * (':') with '\0', an effect of strtok_r(). |
1040 |
++ */ |
1041 |
++ specs_file = getenv ("GCC_SPECS"); |
1042 |
++ if (specs_file && (strlen(specs_file) > 0)) |
1043 |
++ { |
1044 |
++ char *spec, *saveptr; |
1045 |
++ for (spec=strtok_r(specs_file,":",&saveptr); |
1046 |
++ spec!=NULL; |
1047 |
++ spec=strtok_r(NULL,":",&saveptr)) |
1048 |
++ { |
1049 |
++ struct user_specs *user = (struct user_specs *) |
1050 |
++ xmalloc (sizeof (struct user_specs)); |
1051 |
++ |
1052 |
++ user->next = (struct user_specs *) 0; |
1053 |
++ user->filename = spec; |
1054 |
++ if (user_specs_tail) |
1055 |
++ user_specs_tail->next = user; |
1056 |
++ else |
1057 |
++ user_specs_head = user; |
1058 |
++ user_specs_tail = user; |
1059 |
++ } |
1060 |
++ } |
1061 |
++#endif |
1062 |
+ for (uptr = user_specs_head; uptr; uptr = uptr->next) |
1063 |
+ { |
1064 |
+ char *filename = find_a_file (&startfile_prefixes, uptr->filename, |
1065 |
|
1066 |
diff --git a/sys-devel/gcc/gcc-6.2.0.ebuild b/sys-devel/gcc/gcc-6.2.0.ebuild |
1067 |
new file mode 100644 |
1068 |
index 0000000..21c572a |
1069 |
--- /dev/null |
1070 |
+++ b/sys-devel/gcc/gcc-6.2.0.ebuild |
1071 |
@@ -0,0 +1,44 @@ |
1072 |
+# Copyright 1999-2016 Gentoo Foundation |
1073 |
+# Distributed under the terms of the GNU General Public License v2 |
1074 |
+# $Id$ |
1075 |
+ |
1076 |
+EAPI="4" |
1077 |
+ |
1078 |
+PATCH_VER="1.0" |
1079 |
+# UCLIBC_VER="1.0" |
1080 |
+ |
1081 |
+# Hardened gcc 4 stuff |
1082 |
+# PIE_VER="0.6.5" |
1083 |
+# SPECS_VER="0.2.0" |
1084 |
+# SPECS_GCC_VER="4.4.3" |
1085 |
+# arch/libc configurations known to be stable with {PIE,SSP}-by-default |
1086 |
+# PIE_GLIBC_STABLE="x86 amd64 mips ppc ppc64 arm ia64" |
1087 |
+# PIE_UCLIBC_STABLE="x86 arm amd64 mips ppc ppc64" |
1088 |
+# SSP_STABLE="amd64 x86 mips ppc ppc64 arm" |
1089 |
+# uclibc need tls and nptl support for SSP support |
1090 |
+# uclibc need to be >= 0.9.33 |
1091 |
+# SSP_UCLIBC_STABLE="x86 amd64 mips ppc ppc64 arm" |
1092 |
+# end Hardened stuff |
1093 |
+ |
1094 |
+inherit toolchain |
1095 |
+ |
1096 |
+KEYWORDS="~amd64 ~x86" |
1097 |
+ |
1098 |
+RDEPEND="" |
1099 |
+DEPEND="${RDEPEND} |
1100 |
+ elibc_glibc? ( >=sys-libs/glibc-2.8 ) |
1101 |
+ >=${CATEGORY}/binutils-2.20" |
1102 |
+ |
1103 |
+if [[ ${CATEGORY} != cross-* ]] ; then |
1104 |
+ PDEPEND="${PDEPEND} elibc_glibc? ( >=sys-libs/glibc-2.8 )" |
1105 |
+fi |
1106 |
+ |
1107 |
+src_prepare() { |
1108 |
+ if has_version '<sys-libs/glibc-2.12' ; then |
1109 |
+ ewarn "Your host glibc is too old; disabling automatic fortify." |
1110 |
+ ewarn "Please rebuild gcc after upgrading to >=glibc-2.12 #362315" |
1111 |
+ EPATCH_EXCLUDE+=" 10_all_default-fortify-source.patch" |
1112 |
+ fi |
1113 |
+ |
1114 |
+ toolchain_src_prepare |
1115 |
+} |
1116 |
|
1117 |
diff --git a/sys-devel/gcc/metadata.xml b/sys-devel/gcc/metadata.xml |
1118 |
new file mode 100644 |
1119 |
index 0000000..38f4396 |
1120 |
--- /dev/null |
1121 |
+++ b/sys-devel/gcc/metadata.xml |
1122 |
@@ -0,0 +1,38 @@ |
1123 |
+<?xml version="1.0" encoding="UTF-8"?> |
1124 |
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> |
1125 |
+<pkgmetadata> |
1126 |
+ <maintainer type="project"> |
1127 |
+ <email>toolchain@g.o</email> |
1128 |
+ <name>Gentoo Toolchain Project</name> |
1129 |
+ </maintainer> |
1130 |
+ <use> |
1131 |
+ <flag name="awt">Useful only when building GCJ, this enables Abstract Window Toolkit |
1132 |
+ (AWT) peer support on top of GTK+</flag> |
1133 |
+ <flag name="cilk">Support the Cilk Plus language (C/C++ based languages for parallel programming)</flag> |
1134 |
+ <flag name="d">Enable support for the D programming language</flag> |
1135 |
+ <flag name="fixed-point">Enable fixed-point arithmetic support for MIPS targets |
1136 |
+ in gcc (Warning: significantly increases compile time!)</flag> |
1137 |
+ <flag name="go">Build the GCC Go language frontend.</flag> |
1138 |
+ <flag name="graphite">Add support for the framework for loop |
1139 |
+ optimizations based on a polyhedral intermediate representation</flag> |
1140 |
+ <flag name="jit">Enable libgccjit so other applications can embed gcc for Just-In-Time compilation. |
1141 |
+ This will slow down the compiler a bit as it forces all of the toolchain to be shared libs.</flag> |
1142 |
+ <flag name="libssp">Build SSP support into a dedicated library rather than use the |
1143 |
+ code in the C library (DO NOT ENABLE THIS IF YOU DON'T KNOW WHAT IT DOES)</flag> |
1144 |
+ <flag name="mpx">Enable support for Intel Memory Protection Extensions (MPX)</flag> |
1145 |
+ <flag name="mudflap">Add support for mudflap, a pointer use checking library</flag> |
1146 |
+ <flag name="nopie">Disable PIE support (NOT FOR GENERAL USE)</flag> |
1147 |
+ <flag name="nossp">Disable SSP support (NOT FOR GENERAL USE)</flag> |
1148 |
+ <flag name="objc">Build support for the Objective C code language</flag> |
1149 |
+ <flag name="objc++">Build support for the Objective C++ language</flag> |
1150 |
+ <flag name="objc-gc">Build support for the Objective C code language Garbage |
1151 |
+ Collector</flag> |
1152 |
+ <flag name="regression-test">Run the testsuite and install the results (requires FEATURES=test)</flag> |
1153 |
+ <flag name="sanitize">Build support for various sanitizer functions (ASAN/TSAN/etc...)</flag> |
1154 |
+ <flag name="vtv">Build support for virtual table verification (a C++ hardening feature)</flag> |
1155 |
+ </use> |
1156 |
+ <upstream> |
1157 |
+ <remote-id type="cpe">cpe:/a:gnu:gcc</remote-id> |
1158 |
+ <remote-id type="sourceforge">dgcc</remote-id> |
1159 |
+ </upstream> |
1160 |
+</pkgmetadata> |