<pre style='margin:0'>
Marcus Calhoun-Lopez (MarcusCalhoun-Lopez) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/9de2312df6c613827923efe0babf39c19122ccba">https://github.com/macports/macports-base/commit/9de2312df6c613827923efe0babf39c19122ccba</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 9de2312df6c613827923efe0babf39c19122ccba
</span>Author: Marcus Calhoun-Lopez <mcalhoun@macports.org>
AuthorDate: Sun Sep 16 05:14:41 2018 -0700

<span style='display:block; white-space:pre;color:#404040;'>    restrict compilers based on language requirements
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Restrict compilers based on:
</span><span style='display:block; white-space:pre;color:#404040;'>        C standard
</span><span style='display:block; white-space:pre;color:#404040;'>        C++ standard
</span><span style='display:block; white-space:pre;color:#404040;'>        OpenMP Version
</span><span style='display:block; white-space:pre;color:#404040;'>        MPI wrapper (mpich or openmp)
</span><span style='display:block; white-space:pre;color:#404040;'>        support for thread local storage
</span>---
 src/port1.0/portconfigure.tcl | 425 +++++++++++++++++++++++++++++++++++-------
 1 file changed, 353 insertions(+), 72 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portconfigure.tcl b/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 3226418..e7c735a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -268,6 +268,25 @@ default compiler.fallback       {[portconfigure::get_compiler_fallback]}
</span> default compiler.blacklist      {}
 default compiler.whitelist      {}
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Compiler Restrictions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.c_standard            Standard for the C programming language (1989, 1999, 2011, etc.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.cxx_standard          Standard for the C++ programming language (1998, 2011, 2014, 2017, etc.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.openmp_version        Version of OpenMP required (blank, 2.5, 3.0, 3.1, 4.0, 4.5, etc.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.mpi                   MacPorts port that provides MPI (blank, mpich, openmpi)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.thread_local_storage  Is thread local storage required, e.g. __thread, _Thread_local, std::thread_local (yes, no)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options                            \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.c_standard            \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.cxx_standard          \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.openmp_version        \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.mpi                   \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.thread_local_storage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default compiler.c_standard            1989
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default compiler.cxx_standard          1998
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default compiler.openmp_version        {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default compiler.mpi                   {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default compiler.thread_local_storage  no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> set_ui_prefix
 
 proc portconfigure::configure_start {args} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -546,11 +565,302 @@ proc portconfigure::configure_get_default_compiler {} {
</span>     return [lindex [option compiler.fallback] 0]
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# internal utility procedure to get a version larger than any compiler version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::max_compiler_version {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return 999999999999999999999.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://releases.llvm.org/3.1/docs/ClangReleaseNotes.html#cchanges
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://gcc.gnu.org/c99status.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://gcc.gnu.org/wiki/C11Status
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.macports.org/wiki/XcodeVersionInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|  C Standard  |   Clang   |  Xcode Clang  |   Xcode   |    GCC    |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|------------------------------------------------------------------|
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| 1989 (C89)   |     -     |        -      |     -     |     -     |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| 1999 (C99)   |     -     |    211.10.1   |    4.2    |    4.5    |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| 2011 (C11)   |    3.1    |    318.0.61   |    4.3    |    4.9    |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://clang.llvm.org/cxx_status.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://gcc.gnu.org/projects/cxx-status.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://en.cppreference.com/w/cpp/compiler_support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Xcode release notes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.macports.org/wiki/XcodeVersionInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| C++ Standard |   Clang   |  Xcode Clang  |   Xcode   |    GCC    |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|--------------------------------=---------------------------------|
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| 1998 (C++98) |     -     |       -       |     -     |     -     |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| 2011 (C++11) |    3.3    |   500.2.75    |    5.0    |   4.8.1   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| 2014 (C++14) |    3.4    |   600.0.54    |    6.1    |     5     |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| 2017 (C++17) |    5.0    |   902.0.39.1  |    9.3    |     7     |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#--------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://openmp.llvm.org
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://gcc.gnu.org/wiki/openmp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.macports.org/wiki/XcodeVersionInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#----------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#| OpenMP Version |  Clang  |  Xcode Clang  |  Xcode  |   GCC   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|---------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|      2.5       |   3.8   |    Future?    | Future? |   4.2   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|      3.0       |   3.8   |    Future?    | Future? |   4.4   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|      3.1       |   3.8   |    Future?    | Future? |   4.7   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|      4.0       | Partial |    Future?    | Future? |   4.9   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#|      4.5       | Partial |    Future?    | Future? |   ???   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#----------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility procedure: get minimum command line compilers version based on restrictions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_min_command_line {compiler} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global compiler.c_standard compiler.cxx_standard compiler.openmp_version compiler.thread_local_storage os.major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set min_values 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch ${compiler} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        clang {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${compiler.c_standard} >= 2011} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend min_values 318.0.61
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {${compiler.c_standard} >= 1999} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend min_values 211.10.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${compiler.cxx_standard} >= 2017} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend min_values 902.0.39.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {${compiler.cxx_standard} >= 2014} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend min_values 600.0.54
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {${compiler.cxx_standard} >= 2011} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend min_values 500.2.75
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[option configure.cxx_stdlib] eq "libc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set cxx [lindex [split [portconfigure::configure_get_compiler cxx ${compiler}] /] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {${cxx} ne "clang++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # 3.2 <= Xcode < 4.0 does not provide clang++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    lappend min_values [max_compiler_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        llvm-gcc-4.2 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        gcc-4.2 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        gcc-4.0 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        apple-gcc-4.2 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${compiler.c_standard} >= 1999} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend min_values [max_compiler_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${compiler.cxx_standard} >= 2011} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend min_values [max_compiler_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[option configure.cxx_stdlib] eq "libc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend min_values [max_compiler_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return -code error "don't recognize compiler \"${compiler}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.openmp_version} ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values [max_compiler_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.thread_local_storage}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # thread-local storage only works on Mac OS X Lion and above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # GCC & MacPorts Clang emulate thread-local storage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${os.major} < 11} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend min_values [max_compiler_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option configure.cxx_stdlib] eq "macports-libstdc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values [max_compiler_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [lindex [lsort -decreasing -command vercmp ${min_values}] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility procedure: get minimum Clang version based on restrictions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_min_clang {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global compiler.c_standard compiler.cxx_standard compiler.openmp_version compiler.thread_local_storage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set min_values 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.c_standard} >= 2011} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 3.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.cxx_standard} >= 2017} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 5.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {${compiler.cxx_standard} >= 2014} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 3.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {${compiler.cxx_standard} >= 2011} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 3.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp ${compiler.openmp_version} 4.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 6.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[vercmp ${compiler.openmp_version} 2.5] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 3.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.thread_local_storage}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # MacPorts patches certain versions of Clang to emulate thread-local storage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 5.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [lindex [lsort -decreasing -command vercmp ${min_values}] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility procedure: get minimum GCC version based on restrictions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_min_gcc {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global compiler.c_standard compiler.cxx_standard compiler.openmp_version compiler.thread_local_storage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set min_values 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.c_standard} >= 2011} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 4.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }  elseif {${compiler.c_standard} >= 1999} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 4.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.cxx_standard} >= 2017} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 7.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {${compiler.cxx_standard} >= 2014} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 5.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {${compiler.cxx_standard} >= 2011} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 4.8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp ${compiler.openmp_version} 4.5] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[vercmp ${compiler.openmp_version} 4.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 4.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[vercmp ${compiler.openmp_version} 3.1] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 4.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[vercmp ${compiler.openmp_version} 3.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 4.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[vercmp ${compiler.openmp_version} 2.5] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 4.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.thread_local_storage}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # GCC emulates thread-local storage, but it seems to be broken on older versions of GCC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values 4.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option configure.cxx_stdlib] ne "" && [option configure.cxx_stdlib] ne "macports-libstdc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend min_values [max_compiler_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [lindex [lsort -decreasing -command vercmp ${min_values}] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility procedure: get Apple compilers based on Xcode version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_apple_compilers_xcode_version {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global xcodeversion
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # https://developer.apple.com/library/content/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Xcode 3.2 relase notes (Link?)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # About Xcode 3.1 Tools (about_xcode_tools_3.1.pdf, Link?)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # About Xcode 3.2 (about_xcode_3.2.pdf, Link?)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Xcode 5 does not support use of the LLVM-GCC compiler and the GDB debugger.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # From Xcode 4.2, Clang is the default compiler for Mac OS X.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # llvm-gcc4.2 is now the default system compiler in Xcode 4.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # The LLVM compiler is the next-generation compiler, introduced in Xcode 3.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # GCC 4.0 has been removed from Xcode 4.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # attempt to include all available compilers except gcc-3*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # attempt to have the default compilers first
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp ${xcodeversion} 5] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set compilers {clang}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[vercmp ${xcodeversion} 4.3] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set compilers {clang llvm-gcc-4.2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[vercmp ${xcodeversion} 4.2] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # llvm-gcc is more reliable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # see https://github.com/macports/macports-base/commit/10d62cb51b1f0f9703a873173bac468eee69d01a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set compilers {llvm-gcc-4.2 clang}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[vercmp ${xcodeversion} 4.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set compilers {llvm-gcc-4.2 clang gcc-4.2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Legacy Cases
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[string match *10.4u* [option configure.sdkroot]]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # from Xcode 3.2 release notes:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            #    GCC 4.2 cannot be used with the Mac OS X 10.4u SDK.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            #    If you want to build targets using the 10.4u SDK on Xcode 3.2, you must set the Compiler Version to GCC 4.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set compilers {gcc-4.0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[vercmp ${xcodeversion} 3.2] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # from about_xcode_3.2.pdf:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                #    GCC 4.2 is the primary system compiler for the 10.6 SDK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # clang does *not* provide clang++, but configure.cxx will fall back to llvm-g++-4.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set compilers {gcc-4.2 llvm-gcc-4.2 clang gcc-4.0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {[vercmp ${xcodeversion} 3.1] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # from about_xcode_tools_3.1.pdf:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                #     GCC 4.2 & LLVM GCC 4.2 optional compilers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # assume they exist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set compilers {gcc-4.2 llvm-gcc-4.2 apple-gcc-4.2 gcc-4.0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {[vercmp ${xcodeversion} 3.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set compilers {apple-gcc-4.2 gcc-4.0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set compilers {apple-gcc-4.2 gcc-4.0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return $compilers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility procedure: get Clang compilers based on os.major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_clang_compilers {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global os.major porturl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set compilers ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set compiler_file [getportresourcepath $porturl "port1.0/compilers/clang_compilers.tcl"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[file exists ${compiler_file}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        source ${compiler_file}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "Clang compilers file not found"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return -code error "${compiler_file} does not exist"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return ${compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility procedure: get GCC compilers based on os.major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_gcc_compilers {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global os.major porturl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set compilers ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set compiler_file [getportresourcepath $porturl "port1.0/compilers/gcc_compilers.tcl"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[file exists ${compiler_file}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        source ${compiler_file}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "GCC compilers file not found"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return -code error "${compiler_file} does not exist"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return ${compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility procedure: get MPI wrapper for a given compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_mpi_wrapper {mpi compiler} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set parts [split ${compiler} -]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lindex ${parts} 0] ne "macports"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return macports-${mpi}-default
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set type [lindex ${parts} 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ver  [lindex ${parts} 2]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${type} eq "clang" && [vercmp ${ver} 3.3] < 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${type} eq "gcc" && [vercmp ${ver} 4.3] < 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${type} eq "g95"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return macports-${mpi}-${type}-${ver}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility procedure: get system compiler version by running it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc compiler.command_line_tools_version {compiler} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch ${compiler} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        clang {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set re {clang(?:_.*)?-([0-9.]+)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        llvm-gcc-4.2 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set re {LLVM build ([0-9.]+)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        gcc-4.2 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set re {build ([0-9.]+)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        gcc-4.0 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        apple-gcc-4.2 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set re {build ([0-9.]+)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return -code error "don't know how to determine build number of compiler \"${compiler}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set cc [portconfigure::configure_get_compiler cc ${compiler}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![file executable ${cc}]} return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {regexp ${re} [exec ${cc} -v 2>@1] -> compiler_version}]} return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists compiler_version]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return -code error "couldn't determine build number of compiler \"${compiler}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return ${compiler_version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> # internal function to choose compiler fallback list based on platform
 proc portconfigure::get_compiler_fallback {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global xcodeversion macosx_deployment_target default_compilers \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           configure.sdkroot configure.cxx_stdlib cxx_stdlib os.major \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           option_defaults
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global default_compilers xcodeversion
</span> 
     # Check our override
     if {[info exists default_compilers]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -562,82 +872,53 @@ proc portconfigure::get_compiler_fallback {} {
</span>         return {cc}
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Legacy cases
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[vercmp $xcodeversion 4.0] < 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set canonical_archs [get_canonical_archs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[vercmp $xcodeversion 3.2] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[string match *10.4u* ${configure.sdkroot}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return {gcc-4.0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # No return here. 3.2.x with newer SDKs than 10.4u is handled below.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } elseif {[vercmp $xcodeversion 3.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {"ppc" in $canonical_archs || "ppc64" in $canonical_archs} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return {gcc-4.2 apple-gcc-4.2 gcc-4.0 macports-gcc-6 macports-gcc-7}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return {gcc-4.2 apple-gcc-4.2 gcc-4.0 macports-clang-3.4 macports-clang-3.3}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # Xcode 2.x (Tiger)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {"ppc" in $canonical_archs || "ppc64" in $canonical_archs} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {"i386" in $canonical_archs} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # universal
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return {apple-gcc-4.2 gcc-4.0 macports-gcc-6 macports-gcc-7}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # ppc only
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return {apple-gcc-4.2 gcc-4.0 gcc-3.3 macports-gcc-6 macports-gcc-7}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                # i386 only
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return {apple-gcc-4.2 gcc-4.0 macports-clang-3.3}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set available_apple_compilers [portconfigure::get_apple_compilers_xcode_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set system_compilers ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach c ${available_apple_compilers} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set v    [compiler.command_line_tools_version $c]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set vmin [portconfigure::get_min_command_line $c]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[vercmp ${vmin} $v] <= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend system_compilers $c
</span>         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set compilers {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Set our preferred Xcode-provided compilers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[vercmp $xcodeversion 5.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend compilers clang
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[vercmp $xcodeversion 4.3] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend compilers clang llvm-gcc-4.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[vercmp $xcodeversion 4.0] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend compilers llvm-gcc-4.2 clang
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # 3.2.x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend compilers gcc-4.2 clang llvm-gcc-4.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set clang_compilers ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach c [portconfigure::get_clang_compilers] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set v    [lindex [split $c -] 2]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set vmin [join [lrange [split [portconfigure::get_min_clang] .] 0 1] .]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[vercmp ${vmin} $v] <= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend clang_compilers $c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Determine which versions of clang we prefer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # There is a recursion trap here: the default value of configure.cxx_stdlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # is determined by a proc that may end up calling us to find out which
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # compiler is being used. So, bypass that if the option hasn't already
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # been set to a particular value.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists option_defaults(configure.cxx_stdlib)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set our_stdlib ${configure.cxx_stdlib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set gcc_compilers ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach c [portconfigure::get_gcc_compilers] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set v    [lindex [split $c -] 2]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set vmin [join [lrange [split [portconfigure::get_min_gcc] .] 0 0] .]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[vercmp ${vmin} $v] <= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend gcc_compilers $c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set compilers ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend compilers {*}${system_compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # when building for PowerPC architectures, prefer GCC to Clang
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option configure.build_arch] eq "ppc" || [option configure.build_arch] eq "ppc64"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend compilers {*}${gcc_compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend compilers {*}${clang_compilers}
</span>     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set our_stdlib $cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend compilers {*}${clang_compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend compilers {*}${gcc_compilers}
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$our_stdlib eq "libc++"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # clang-3.5+ require libc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend compilers macports-clang-5.0 macports-clang-4.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${os.major} < 17} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # The High Sierra SDK requires a toolchain that can apply nullability to uuid_t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend compilers macports-clang-3.9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${os.major} < 16} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # The Sierra SDK requires a toolchain that supports class properties
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend compilers macports-clang-3.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # generate list of MPI wrappers of current compilers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option compiler.mpi] eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return $compilers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set mpi_compilers ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach mpi [option compiler.mpi] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach c ${compilers} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend mpi_compilers {*}[portconfigure::get_mpi_wrapper $mpi $c]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span>         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        return $mpi_compilers
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${os.major} < 16} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # We dropped support for these compilers on Sierra
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend compilers macports-clang-3.4 macports-llvm-gcc-4.2 apple-gcc-4.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $compilers
</span> }
 
 # Find a developer tool
</pre><pre style='margin:0'>

</pre>