<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[136963] trunk/dports/lang/apple-gcc42</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://trac.macports.org/changeset/136963">136963</a></dd>
<dt>Author</dt> <dd>larryv@macports.org</dd>
<dt>Date</dt> <dd>2015-05-31 23:27:59 -0700 (Sun, 31 May 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>apple-gcc42: Fix build on Yosemite (#45449)
It lives!
- Remove kernel version check to stop the driver from complaining about
Darwin 14 and later.
- Fix interpretation of OS X and iOS deployment targets by adapting my
upstream fix,† which I'm relicensing under GPLv2 for this purpose.
- Stub out unrecognized macros in `/usr/include/xpc/base.h`.
† https://gcc.gnu.org/viewcvs/gcc?limit_changes=0&view=rev&rev=223808</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkdportslangapplegcc42Portfile">trunk/dports/lang/apple-gcc42/Portfile</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkdportslangapplegcc42filesautogenpatch">trunk/dports/lang/apple-gcc42/files/autogen.patch</a></li>
<li><a href="#trunkdportslangapplegcc42filesfixincludespatch">trunk/dports/lang/apple-gcc42/files/fixincludes.patch</a></li>
<li><a href="#trunkdportslangapplegcc42filesremovekernelversioncheckpatch">trunk/dports/lang/apple-gcc42/files/remove-kernel-version-check.patch</a></li>
<li><a href="#trunkdportslangapplegcc42filesversionminpatch">trunk/dports/lang/apple-gcc42/files/version-min.patch</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkdportslangapplegcc42Portfile"></a>
<div class="modfile"><h4>Modified: trunk/dports/lang/apple-gcc42/Portfile (136962 => 136963)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/lang/apple-gcc42/Portfile        2015-06-01 05:14:02 UTC (rev 136962)
+++ trunk/dports/lang/apple-gcc42/Portfile        2015-06-01 06:27:59 UTC (rev 136963)
</span><span class="lines">@@ -6,7 +6,7 @@
</span><span class="cx"> name                        apple-gcc42
</span><span class="cx"> version                        5666.3
</span><span class="cx"> set gcc_version                4.2.1
</span><del>-revision                14
</del><ins>+revision                15
</ins><span class="cx"> categories                lang
</span><span class="cx"> platforms                darwin
</span><span class="cx"> license                        {GPL-2+ Permissive}
</span><span class="lines">@@ -72,17 +72,6 @@
</span><span class="cx">
</span><span class="cx"> depends_run port:gcc_select
</span><span class="cx">
</span><del>-platform darwin {
- if {${os.major} >= 14} {
- depends_lib
- depends_run
- pre-fetch {
- ui_error "$name is not supported on Yosemite or later."
- error "unsupported platform"
- }
- }
-}
-
</del><span class="cx"> use_configure no
</span><span class="cx"> variant universal {}
</span><span class="cx">
</span><span class="lines">@@ -105,16 +94,22 @@
</span><span class="cx"> # driverdriver-num_infiles.patch : Fix linking with no input files (ie all static archives passed with -l...)
</span><span class="cx"> # driverdriver-armcheck.patch : Build fix for the driverdriver when arm support is not available (eg: Tiger)
</span><span class="cx"> # tiger-Unwind_GetIPInfo.patch : https://trac.macports.org/ticket/36226
</span><del>-# yosemite-deployment-target.patch : https://trac.macports.org/ticket/43978
</del><ins>+# remove-kernel-version-check.patch : Don't complain about Yosemite and later (#45449)
+# version-min.patch : Interpret OS X and iOS versions correctly (#43978, #45449)
+# autogen.patch : Update to work with modern AutoGen (necessary to create fixincludes.patch)
+# fixincludes.patch : Stub out unrecognized macros in system headers (#45449)
</ins><span class="cx">
</span><span class="cx"> patchfiles-append \
</span><del>-        yosemite-deployment-target.patch \
</del><span class="cx">         werror-c-incpath.patch \
</span><span class="cx">         werror-local-alloc.patch \
</span><span class="cx">         incpath.patch \
</span><span class="cx">         driverdriver-num_infiles.patch \
</span><span class="cx">         driverdriver-armcheck.patch \
</span><del>-        tiger-Unwind_GetIPInfo.patch
</del><ins>+        tiger-Unwind_GetIPInfo.patch \
+        remove-kernel-version-check.patch \
+        version-min.patch \
+        autogen.patch \
+        fixincludes.patch
</ins><span class="cx">
</span><span class="cx"> # gcj fails to build:
</span><span class="cx"> # gcc/java/lang.c: In function 'java_init':
</span></span></pre></div>
<a id="trunkdportslangapplegcc42filesautogenpatchfromrev136962trunkdportslangllvmgcc42filesautogenpatch"></a>
<div class="copfile"><h4>Copied: trunk/dports/lang/apple-gcc42/files/autogen.patch (from rev 136962, trunk/dports/lang/llvm-gcc42/files/autogen.patch) (0 => 136963)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/lang/apple-gcc42/files/autogen.patch         (rev 0)
+++ trunk/dports/lang/apple-gcc42/files/autogen.patch        2015-06-01 06:27:59 UTC (rev 136963)
</span><span class="lines">@@ -0,0 +1,64 @@
</span><ins>+Index: fixincludes/genfixes
+===================================================================
+--- fixincludes/genfixes.orig
++++ fixincludes/genfixes
+@@ -63,7 +63,7 @@ fi
+ AG="autogen $AG"
+ set -e
+
+-if [ -z "`${AG} -v | fgrep 'Ver. 5.'`" ]
++if [ -z "`${AG} -v | fgrep ' 5.'`" ]
+ then
+ echo "AutoGen appears to be out of date or not correctly installed."
+ echo "Please download and install:"
+Index: fixincludes/inclhack.def
+===================================================================
+--- fixincludes/inclhack.def.orig
++++ fixincludes/inclhack.def
+@@ -1108,8 +1108,8 @@ fix = {
+ */
+ fix = {
+ hackname = bsd_stdio_attrs_conflict;
+- mach = *-*-*bsd*;
+- mach = *-*-*darwin*;
++ mach = "*-*-*bsd*";
++ mach = "*-*-*darwin*";
+ files = stdio.h;
+ select = "^#define[ \t]*vfscanf[ \t]*__svfscanf[ \t]*$";
+ c_fix = format;
+@@ -1364,7 +1364,7 @@ fix = {
+ */
+ fix = {
+ hackname = freebsd_gcc3_breakage;
+- mach = *-*-freebsd*;
++ mach = "*-*-freebsd*";
+ files = sys/cdefs.h;
+ select = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7$';
+ bypass = '__GNUC__[ \t]*([>=]=[ \t]*[3-9]|>[ \t]*2)';
+@@ -1381,7 +1381,7 @@ fix = {
+ */
+ fix = {
+ hackname = freebsd_gcc4_breakage;
+- mach = *-*-freebsd*;
++ mach = "*-*-freebsd*";
+ files = sys/cdefs.h;
+ select = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 \|\| __GNUC__ == 3$';
+ c_fix = format;
+@@ -1656,7 +1656,7 @@ fix = {
+ */
+ fix = {
+ hackname = hpux11_abs;
+- mach = ia64-hp-hpux11*;
++ mach = "ia64-hp-hpux11*";
+ files = stdlib.h;
+ select = "ifndef _MATH_INCLUDED";
+ c_fix = format;
+@@ -2590,7 +2590,7 @@ fix = {
+ */
+ fix = {
+ hackname = netbsd_extra_semicolon;
+- mach = *-*-netbsd*;
++ mach = "*-*-netbsd*";
+ files = sys/cdefs.h;
+ select = "#define[ \t]*__END_DECLS[ \t]*};";
+
</ins></span></pre></div>
<a id="trunkdportslangapplegcc42filesautogenpatch"></a>
<div class="propset"><h4>Property changes: trunk/dports/lang/apple-gcc42/files/autogen.patch</h4>
<pre class="diff"><span>
</span></pre></div>
<a id="svnmergeinfo"></a>
<div class="addfile"><h4>Added: svn:mergeinfo</h4></div>
<a id="trunkdportslangapplegcc42filesfixincludespatchfromrev136962trunkdportslangllvmgcc42filesfixincludespatch"></a>
<div class="copfile"><h4>Copied: trunk/dports/lang/apple-gcc42/files/fixincludes.patch (from rev 136962, trunk/dports/lang/llvm-gcc42/files/fixincludes.patch) (0 => 136963)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/lang/apple-gcc42/files/fixincludes.patch         (rev 0)
+++ trunk/dports/lang/apple-gcc42/files/fixincludes.patch        2015-06-01 06:27:59 UTC (rev 136963)
</span><span class="lines">@@ -0,0 +1,220 @@
</span><ins>+The important part of this patch is the change to inclhack.def. The new
+fixincl.x was manually generated using AutoGen.
+
+Index: fixincludes/inclhack.def
+===================================================================
+--- fixincludes/inclhack.def.orig
++++ fixincludes/inclhack.def
+@@ -1206,6 +1206,31 @@ fix = {
+ };
+
+
++/*
++ * GCC 4.2 doesn't recognize __has_extension and __has_feature.
++ */
++
++fix = {
++ hackname = darwin_has_extension;
++ mach = "*-*-darwin*";
++ files = xpc/base.h;
++ select = "__has_extension\\([A-Za-z_]*\\)";
++ c_fix = format;
++ c_fix_arg = "0";
++ test_text = "#if __has_extension(attribute_unavailable_with_message)";
++};
++
++fix = {
++ hackname = darwin_has_feature;
++ mach = "*-*-darwin*";
++ files = xpc/base.h;
++ select = "__has_feature\\([A-Za-z_]*\\)";
++ c_fix = format;
++ c_fix_arg = "0";
++ test_text = "#if __has_feature(objc_arc)";
++};
++
++
+ /* APPLE LOCAL begin for-fsf-4_4 5133297 */
+ /*
+ * On darwin8 and earlier, mach-o/swap.h isn't properly guarded
+Index: fixincludes/fixincl.x
+===================================================================
+--- fixincludes/fixincl.x.orig
++++ fixincludes/fixincl.x
+@@ -1,12 +1,12 @@
+ /* -*- buffer-read-only: t -*- vi: set ro:
+- *
++ *
+ * DO NOT EDIT THIS FILE (fixincl.x)
+- *
+- * It has been AutoGen-ed Friday July 20, 2007 at 02:14:34 PM PDT
++ *
++ * It has been AutoGen-ed
+ * From the definitions inclhack.def
+ * and the template file fixincl
+ */
+-/* DO NOT CVS-MERGE THIS FILE, EITHER Fri Jul 20 14:14:34 PDT 2007
++/* DO NOT CVS-MERGE THIS FILE, EITHER Mon Jun 1 01:47:00 EDT 2015
+ *
+ * You must regenerate it. Use the ./genfixes script.
+ *
+@@ -15,29 +15,25 @@
+ * certain ANSI-incompatible system header files which are fixed to work
+ * correctly with ANSI C and placed in a directory that GNU C will search.
+ *
+- * This file contains 209 fixup descriptions.
++ * This file contains 211 fixup descriptions.
+ *
+ * See README for more information.
+ *
+ * inclhack copyright (c) 1998, 1999, 2000, 2001
+ * The Free Software Foundation, Inc.
+ *
+- * inclhack is free software.
+- *
+- * You may redistribute it and/or modify it under the terms of the
+- * GNU General Public License, as published by the Free Software
+- * Foundation; either version 2, or (at your option) any later version.
+- *
+- * inclhack is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * inclhack is free software: you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation, either version 3 of the License, or
++ * (at your option) any later version.
++ *
++ * inclhack is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with inclhack. See the file "COPYING". If not,
+- * write to: The Free Software Foundation, Inc.,
+- * 59 Temple Place - Suite 330,
+- * Boston, MA 02111-1307, USA.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+@@ -1957,6 +1953,80 @@ static const char* apzDarwin_Gcc4_Breaka
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
++ * Description of Darwin_Has_Extension fix
++ */
++tSCC zDarwin_Has_ExtensionName[] =
++ "darwin_has_extension";
++
++/*
++ * File name selection pattern
++ */
++tSCC zDarwin_Has_ExtensionList[] =
++ "|xpc/base.h|";
++/*
++ * Machine/OS name selection pattern
++ */
++tSCC* apzDarwin_Has_ExtensionMachs[] = {
++ "*-*-darwin*",
++ (const char*)NULL };
++
++/*
++ * content selection pattern - do fix if pattern found
++ */
++tSCC zDarwin_Has_ExtensionSelect0[] =
++ "__has_extension\\([A-Za-z_]*\\)";
++
++#define DARWIN_HAS_EXTENSION_TEST_CT 1
++static tTestDesc aDarwin_Has_ExtensionTests[] = {
++ { TT_EGREP, zDarwin_Has_ExtensionSelect0, (regex_t*)NULL }, };
++
++/*
++ * Fix Command Arguments for Darwin_Has_Extension
++ */
++static const char* apzDarwin_Has_ExtensionPatch[] = {
++ "format",
++ "0",
++ (char*)NULL };
++
++/* * * * * * * * * * * * * * * * * * * * * * * * * *
++ *
++ * Description of Darwin_Has_Feature fix
++ */
++tSCC zDarwin_Has_FeatureName[] =
++ "darwin_has_feature";
++
++/*
++ * File name selection pattern
++ */
++tSCC zDarwin_Has_FeatureList[] =
++ "|xpc/base.h|";
++/*
++ * Machine/OS name selection pattern
++ */
++tSCC* apzDarwin_Has_FeatureMachs[] = {
++ "*-*-darwin*",
++ (const char*)NULL };
++
++/*
++ * content selection pattern - do fix if pattern found
++ */
++tSCC zDarwin_Has_FeatureSelect0[] =
++ "__has_feature\\([A-Za-z_]*\\)";
++
++#define DARWIN_HAS_FEATURE_TEST_CT 1
++static tTestDesc aDarwin_Has_FeatureTests[] = {
++ { TT_EGREP, zDarwin_Has_FeatureSelect0, (regex_t*)NULL }, };
++
++/*
++ * Fix Command Arguments for Darwin_Has_Feature
++ */
++static const char* apzDarwin_Has_FeaturePatch[] = {
++ "format",
++ "0",
++ (char*)NULL };
++
++/* * * * * * * * * * * * * * * * * * * * * * * * * *
++ *
+ * Description of Darwin_Macho_Swaph_Externc fix
+ */
+ tSCC zDarwin_Macho_Swaph_ExterncName[] =
+@@ -8511,9 +8581,9 @@ static const char* apzX11_SprintfPatch[]
+ *
+ * List of all fixes
+ */
+-#define REGEX_COUNT 251
++#define REGEX_COUNT 253
+ #define MACH_LIST_SIZE_LIMIT 261
+-#define FIX_COUNT 209
++#define FIX_COUNT 211
+
+ /*
+ * Enumerate the fixes
+@@ -8563,6 +8633,8 @@ typedef enum {
+ CTRL_QUOTES_USE_FIXIDX,
+ CXX_UNREADY_FIXIDX,
+ DARWIN_GCC4_BREAKAGE_FIXIDX,
++ DARWIN_HAS_EXTENSION_FIXIDX,
++ DARWIN_HAS_FEATURE_FIXIDX,
+ DARWIN_MACHO_SWAPH_EXTERNC_FIXIDX,
+ DARWIN_PRIVATE_EXTERN_FIXIDX,
+ DARWIN_STDINT_GUARDS_INTN_FIXIDX,
+@@ -8951,6 +9023,16 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
+ DARWIN_GCC4_BREAKAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aDarwin_Gcc4_BreakageTests, apzDarwin_Gcc4_BreakagePatch, 0 },
+
++ { zDarwin_Has_ExtensionName, zDarwin_Has_ExtensionList,
++ apzDarwin_Has_ExtensionMachs,
++ DARWIN_HAS_EXTENSION_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
++ aDarwin_Has_ExtensionTests, apzDarwin_Has_ExtensionPatch, 0 },
++
++ { zDarwin_Has_FeatureName, zDarwin_Has_FeatureList,
++ apzDarwin_Has_FeatureMachs,
++ DARWIN_HAS_FEATURE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
++ aDarwin_Has_FeatureTests, apzDarwin_Has_FeaturePatch, 0 },
++
+ { zDarwin_Macho_Swaph_ExterncName, zDarwin_Macho_Swaph_ExterncList,
+ apzDarwin_Macho_Swaph_ExterncMachs,
+ DARWIN_MACHO_SWAPH_EXTERNC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
</ins></span></pre></div>
<a id="trunkdportslangapplegcc42filesfixincludespatch"></a>
<div class="propset"><h4>Property changes: trunk/dports/lang/apple-gcc42/files/fixincludes.patch</h4>
<pre class="diff"><span>
</span></pre></div>
<a id="svnmergeinfo"></a>
<div class="addfile"><h4>Added: svn:mergeinfo</h4></div>
<a id="trunkdportslangapplegcc42filesremovekernelversioncheckpatchfromrev136962trunkdportslangllvmgcc42filesremovekernelversioncheckpatch"></a>
<div class="copfile"><h4>Copied: trunk/dports/lang/apple-gcc42/files/remove-kernel-version-check.patch (from rev 136962, trunk/dports/lang/llvm-gcc42/files/remove-kernel-version-check.patch) (0 => 136963)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/lang/apple-gcc42/files/remove-kernel-version-check.patch         (rev 0)
+++ trunk/dports/lang/apple-gcc42/files/remove-kernel-version-check.patch        2015-06-01 06:27:59 UTC (rev 136963)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+commit 9be4ec7ebf2d759114a98b0f532171f0e9e5768d
+Author: fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Sun Sep 14 08:05:43 2014 +0000
+
+         PR target/61407
+
+         * config/darwin-driver.c (darwin_find_version_from_kernel): Removed
+         kernel version check to avoid incrementing it after every major OS X
+         release.
+---
+Extracted from upstream r215251. No code added.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61407
+https://gcc.gnu.org/viewcvs/gcc?view=rev&rev=215251
+
+Index: gcc/config/darwin-driver.c
+===================================================================
+--- gcc/config/darwin-driver.c.orig
++++ gcc/config/darwin-driver.c
+@@ -174,8 +174,6 @@ darwin_default_min_version (int * argc_p
+ version_p = osversion + 1;
+ if (ISDIGIT (*version_p))
+ major_vers = major_vers * 10 + (*version_p++ - '0');
+- if (major_vers > 4 + 9)
+- goto parse_failed;
+ if (*version_p++ != '.')
+ goto parse_failed;
+ version_pend = strchr(version_p, '.');
</ins></span></pre></div>
<a id="trunkdportslangapplegcc42filesversionminpatchfromrev136962trunkdportslangllvmgcc42filesversionminpatch"></a>
<div class="copfile"><h4>Copied: trunk/dports/lang/apple-gcc42/files/version-min.patch (from rev 136962, trunk/dports/lang/llvm-gcc42/files/version-min.patch) (0 => 136963)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/lang/apple-gcc42/files/version-min.patch         (rev 0)
+++ trunk/dports/lang/apple-gcc42/files/version-min.patch        2015-06-01 06:27:59 UTC (rev 136963)
</span><span class="lines">@@ -0,0 +1,316 @@
</span><ins>+commit 9b0d3d17b04a59bb591c06273d2d5a975f8c5d58
+Author: Lawrence Velázquez <vq@larryv.me>
+Date: Fri Nov 14 17:52:32 2014 -0500
+
+ Handle OS X deployment targets correctly
+
+ As described in PR target/63810, this addresses several problems with
+ the validation and encoding of deployment target version strings for the
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro. There are
+ currently four testcases exercising inputs to -mmacosx-version-min
+ (gcc/testsuite/gcc.dg/darwin-minversion-*), but they provide minimal
+ coverage, and one is incorrect.
+
+ * The tiny number is now respected, if present. Thus "10.9.4"
+ correctly becomes "1094" instead of "1090", and "10.10.1" becomes
+ "101001" instead of "101000".
+ * Zero padding is now ignored. Thus "10.09" correctly becomes "1090"
+ instead of "100900", and "10.00010" becomes "101000" instead of being
+ treated as invalid.
+ * Deployment targets that are missing minor and tiny numbers are no
+ longer considered invalid. Thus "10" is treated as "10.0.0", which
+ becomes "1000" without causing an error.
+
+ With this change, trunk matches the behavior of Apple LLVM Compiler
+ 6.1.0 on 8,451 of 8,464 generated test inputs. (The discrepancies are
+ due to a bug in Clang.) I don't notice any testsuite regressions on
+ OS X 10.10 Yosemite x86-64.
+
+ 2015-05-15 Lawrence Velázquez <vq@larryv.me>
+
+         PR target/63810
+         * gcc/config/darwin-c.c (version_components): New global enum.
+         (parse_version, version_as_legacy_macro)
+         (version_as_modern_macro, macosx_version_as_macro): New functions.
+         (version_as_macro): Remove.
+         (darwin_cpp_builtins): Use new function.
+         * gcc/testsuite/gcc.dg/darwin-minversion-3.c: Update testcase.
+         * gcc/testsuite/gcc.dg/darwin-minversion-4.c: Ditto.
+         * gcc/testsuite/gcc.dg/darwin-minversion-5.c: New testcase.
+         * gcc/testsuite/gcc.dg/darwin-minversion-6.c: Ditto.
+         * gcc/testsuite/gcc.dg/darwin-minversion-7.c: Ditto.
+         * gcc/testsuite/gcc.dg/darwin-minversion-8.c: Ditto.
+         * gcc/testsuite/gcc.dg/darwin-minversion-9.c: Ditto.
+         * gcc/testsuite/gcc.dg/darwin-minversion-10.c: Ditto.
+         * gcc/testsuite/gcc.dg/darwin-minversion-11.c: Ditto.
+         * gcc/testsuite/gcc.dg/darwin-minversion-12.c: Ditto.
+---
+Adapted for GCC 4.2.1 (Apple 5666.3) from my upstream trunk fix.
+Extended to fix handling of iOS deployment targets.
+
+I hereby relicense my upstream contributions under GPLv2 when used by
+the MacPorts Project, as permitted by the terms of the FSF copyright
+assignment.
+
+The text above is from my email to the gcc-patches mailing list; some
+minor details may not apply to the patch below.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63810
+https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01888.html
+https://gcc.gnu.org/viewcvs/gcc?limit_changes=0&view=rev&rev=223808
+
+Index: gcc/config/darwin-c.c
+===================================================================
+--- gcc/config/darwin-c.c.orig
++++ gcc/config/darwin-c.c
+@@ -927,35 +927,158 @@ find_subframework_header (cpp_reader *pf
+ return 0;
+ }
+
+-/* Return the value of darwin_macosx_version_min suitable for the
+- __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro,
+- so '10.4.2' becomes 1042.
+- Print a warning if the version number is not known. */
++/* Given an OS X or iOS version VERSION_STR, return it as a statically-allocated
++ array of three integers. If VERSION_STR is invalid, return NULL.
++
++ VERSION_STR must consist of one, two, or three tokens, each separated by
++ a single period. Each token must contain only the characters '0' through
++ '9' and is converted to an equivalent non-negative decimal integer. Omitted
++ tokens become zeros. For example:
++
++ "10" becomes {10,0,0}
++ "10.10" becomes {10,10,0}
++ "10.10.1" becomes {10,10,1}
++ "10.000010.1" becomes {10,10,1}
++ "10.010.001" becomes {10,10,1}
++ "000010.10.00001" becomes {10,10,1}
++ ".9.1" is invalid
++ "10..9" is invalid
++ "10.10." is invalid */
++
++enum version_components { MAJOR, MINOR, TINY };
++
++static const unsigned long *
++parse_version (const char *version_str)
++{
++ size_t version_len;
++ char *end;
++ static unsigned long version_array[3];
++
++ version_len = strlen (version_str);
++ if (version_len < 1)
++ return NULL;
++
++ /* Version string must consist of digits and periods only. */
++ if (strspn (version_str, "0123456789.") != version_len)
++ return NULL;
++
++ if (!ISDIGIT (version_str[0]) || !ISDIGIT (version_str[version_len - 1]))
++ return NULL;
++
++ version_array[MAJOR] = strtoul (version_str, &end, 10);
++ version_str = end + ((*end == '.') ? 1 : 0);
++
++ /* Version string must not contain adjacent periods. */
++ if (*version_str == '.')
++ return NULL;
++
++ version_array[MINOR] = strtoul (version_str, &end, 10);
++ version_str = end + ((*end == '.') ? 1 : 0);
++
++ version_array[TINY] = strtoul (version_str, &end, 10);
++
++ /* Version string must contain no more than three tokens. */
++ if (*end != '\0')
++ return NULL;
++
++ return version_array;
++}
++
++/* Given VERSION -- a three-component OS X version represented as an array of
++ non-negative integers -- return a statically-allocated string suitable for
++ the legacy __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro. If VERSION
++ is invalid and cannot be coerced into a valid form, return NULL.
++
++ The legacy format is a four-character string -- two chars for the major
++ number and one each for the minor and tiny numbers. Minor and tiny numbers
++ from 10 through 99 are permitted but are clamped to 9 (for example, {10,9,10}
++ produces "1099"). If VERSION contains numbers greater than 99, it is
++ rejected. */
++
++static const char *
++version_as_legacy_macro (const unsigned long *version)
++{
++ unsigned long major, minor, tiny;
++ static char result[5];
++
++ major = version[MAJOR];
++ minor = version[MINOR];
++ tiny = version[TINY];
++
++ if (major > 99 || minor > 99 || tiny > 99)
++ return NULL;
++
++ minor = ((minor > 9) ? 9 : minor);
++ tiny = ((tiny > 9) ? 9 : tiny);
++
++ if (sprintf (result, "%lu%lu%lu", major, minor, tiny) != 4)
++ return NULL;
++
++ return result;
++}
++
++/* Given VERSION -- a three-component OS X or iOS version represented as an
++ array of non-negative integers -- return a statically-allocated string
++ suitable for the modern __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro
++ or the __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ macro. If VERSION is
++ invalid, return NULL.
++
++ The modern format is a five or six-character string -- one or two chars for
++ the major number and two each for the minor and tiny numbers, with
++ zero-padding if necessary (for example, {8,1,0} produces "80100", and
++ {10,10,1} produces "101001"). If VERSION contains numbers greater than 99,
++ it is rejected. */
++
++static const char *
++version_as_modern_macro (const unsigned long *version)
++{
++ unsigned long major, minor, tiny;
++ static char result[7];
++
++ major = version[MAJOR];
++ minor = version[MINOR];
++ tiny = version[TINY];
++
++ if (major > 99 || minor > 99 || tiny > 99)
++ return NULL;
++
++ if (sprintf (result, "%lu%02lu%02lu", major, minor, tiny)
++ != ((major > 9) ? 6 : 5))
++ return NULL;
++
++ return result;
++}
++
++/* Return the value of darwin_macosx_version_min, suitably formatted for the
++ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro. Values representing
++ OS X 10.9 and earlier are encoded using the legacy four-character format,
++ while 10.10 and later use a modern six-character format. (For example,
++ "10.9" produces "1090", and "10.10.1" produces "101001".) If
++ darwin_macosx_version_min is invalid and cannot be coerced into a valid
++ form, print a warning and return "1000". */
++
+ static const char *
+-/* APPLE LOCAL ARM 5683689 */
+ macosx_version_as_macro (void)
+ {
+- static char result[] = "1000";
++ const unsigned long *version_array;
++ const char *version_macro;
+
+- if (strncmp (darwin_macosx_version_min, "10.", 3) != 0)
++ version_array = parse_version (darwin_macosx_version_min);
++ if (!version_array)
+ goto fail;
+- if (! ISDIGIT (darwin_macosx_version_min[3]))
++
++ if (version_array[MAJOR] != 10)
+ goto fail;
+- result[2] = darwin_macosx_version_min[3];
+- if (darwin_macosx_version_min[4] != '\0')
+- {
+- if (darwin_macosx_version_min[4] != '.')
+-        goto fail;
+- if (! ISDIGIT (darwin_macosx_version_min[5]))
+-        goto fail;
+- if (darwin_macosx_version_min[6] != '\0')
+-        goto fail;
+- result[3] = darwin_macosx_version_min[5];
+- }
++
++ if (version_array[MINOR] < 10)
++ version_macro = version_as_legacy_macro (version_array);
+ else
+- result[3] = '0';
++ version_macro = version_as_modern_macro (version_array);
+
+- return result;
++ if (!version_macro)
++ goto fail;
++
++ return version_macro;
+
+ fail:
+ error ("Unknown value %qs of -mmacosx-version-min",
+@@ -974,62 +1097,21 @@ macosx_version_as_macro (void)
+ static const char *
+ iphoneos_version_as_macro (void)
+ {
+- static char result[sizeof ("99.99.99") + 1];
+- const char *src_ptr = darwin_iphoneos_version_min;
+- char *result_ptr = &result[0];
++ const unsigned long *version_array;
++ const char *version_macro;
+
+- if (! darwin_iphoneos_version_min)
++ version_array = parse_version (darwin_iphoneos_version_min);
++ if (!version_array)
+ goto fail;
+
+- if (! ISDIGIT (*src_ptr))
++ if (version_array[MAJOR] > 9)
+ goto fail;
+
+- /* Copy over the major version number. */
+- *result_ptr++ = *src_ptr++;
+-
+- if (ISDIGIT (*src_ptr))
+- *result_ptr++ = *src_ptr++;
+-
+- if (*src_ptr != '.')
++ version_macro = version_as_modern_macro (version_array);
++ if (!version_macro)
+ goto fail;
+
+- src_ptr++;
+-
+- /* Start parsing the minor version number. */
+- if (! ISDIGIT (*src_ptr))
+- goto fail;
+-
+- /* Zero-pad a single-digit value, or copy a two-digit value. */
+- *result_ptr++ = ISDIGIT (*(src_ptr + 1)) ? *src_ptr++ : '0';
+- *result_ptr++ = *src_ptr++;
+-
+- /* Parse the third version number (patch level?) */
+- if (*src_ptr == '\0')
+- {
+- /* Not present -- default to zeroes. */
+- *result_ptr++ = '0';
+- *result_ptr++ = '0';
+- }
+- else if (*src_ptr == '.')
+- {
+- src_ptr++;
+-
+- if (! ISDIGIT (*src_ptr))
+-        goto fail;
+-
+- /* Zero-pad a single-digit value, or copy a two-digit value. */
+- *result_ptr++ = ISDIGIT (*(src_ptr + 1)) ? *src_ptr++ : '0';
+- *result_ptr++ = *src_ptr++;
+- }
+- else
+- goto fail;
+-
+- /* Verify and copy the terminating NULL. */
+- if (*src_ptr != '\0')
+- goto fail;
+-
+- *result_ptr++ = '\0';
+- return result;
++ return version_macro;
+
+ fail:
+ error ("Unknown value %qs of -miphoneos-version-min",
</ins></span></pre>
</div>
</div>
</body>
</html>