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

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e8c4772d46ceb8e3f2eac8888097d074da6d6bc2">https://github.com/macports/macports-ports/commit/e8c4772d46ceb8e3f2eac8888097d074da6d6bc2</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit e8c4772d46ceb8e3f2eac8888097d074da6d6bc2
</span>Author: Marcus Calhoun-Lopez <mcalhoun@macports.org>
AuthorDate: Sat Oct 28 20:58:09 2017 -0700

<span style='display:block; white-space:pre;color:#404040;'>    languages PG: add more compiler enforcement options
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Add:
</span><span style='display:block; white-space:pre;color:#404040;'>        compiler.fortran_fallback
</span><span style='display:block; white-space:pre;color:#404040;'>        compiler.openmp_version
</span><span style='display:block; white-space:pre;color:#404040;'>        compiler.mpi
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    See https://trac.macports.org/ticket/55139
</span>---
 _resources/port1.0/group/languages-1.0.tcl | 506 ++++++++++++++++++++++++++---
 1 file changed, 460 insertions(+), 46 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/_resources/port1.0/group/languages-1.0.tcl b/_resources/port1.0/group/languages-1.0.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index fa70fd4..d04556f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/_resources/port1.0/group/languages-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/_resources/port1.0/group/languages-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,13 +30,26 @@
</span> #
 # Usage:
 #
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#   PortGroup                 languages 1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   compiler.c_standard       Standard for the C programming language
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                             Values: 1989 (Default), 1999, 2011
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   compiler.cxx_standard     Standard for the C++ programming language
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                             Values: 1998 (Default), 2011, 2014, 2017
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   compiler.require_fortran  Is a Fortran compiler required?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                             Values: no (Default), yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   PortGroup                  languages 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.c_standard        Standard for the C programming language
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                              Values: 1989 (Default), 1999, 2011
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.cxx_standard      Standard for the C++ programming language
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                              Values: 1998 (Default), 2011, 2014, 2017
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.require_fortran   Is a Fortran compiler required?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                              Values: no (Default), yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.fortran_fallback  If Fortran is required and is not provides by compiler,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                                  list of compilers to use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                              Devault value is the Fortran compilers in compiler.fallback
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.openmp_version   Version of OpenMP required (blank for none)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                             Values: blank (Default) 2.5, 3.0, 3.1, 4.0, 4.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#   compiler.mpi              MacPorts port that provides MPI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                             Values: blank (Default), mpich, openmpi
</span> #
 # This PortGroup sets the compiler, compiler dependencies,
 #    and the C++ standard library switches.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,27 +57,100 @@
</span> # Ideally the functionality of this PortGroup should be integrated into
 # MacPorts base as a new option.
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-options \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    compiler.c_standard       \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    compiler.cxx_standard     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    compiler.require_fortran
</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.require_fortran   \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.fortran_fallback  \
</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;'>+
</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.require_fortran   no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default compiler.fortran_fallback  {[portconfigure::get_fortran_fallback]}
</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:#ffe0e0;'>-compiler.c_standard       1989
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.cxx_standard     1998
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.require_fortran  no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# internal function to determine the latest GCC version to use for Fortran
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc portconfigure::get_gcc_fortran_version {} { return 7 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# replacement for portconfigure.tcl version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::configure_start {args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_notice "$UI_PREFIX [format [msgcat::mc "Configuring %s"] [option subport]]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set compiler [option configure.compiler]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set valid_compilers {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^apple-gcc-(4\.[02])$}             {MacPorts Apple GCC %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^cc$}                              {System cc}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^clang$}                           {Xcode Clang}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^gcc$}                             {System GCC}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^gcc-(3\.3|4\.[02])$}              {Xcode GCC %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^llvm-gcc-4\.2$}                   {Xcode LLVM-GCC 4.2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-clang$}                  {MacPorts Clang (port select)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-clang-(\d+\.\d+)$}       {MacPorts Clang %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-dragonegg-(\d+\.\d+)$}   {MacPorts DragonEgg %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-dragonegg-(\d+\.\d+)-gcc-(\d+\.\d+)$}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            {MacPorts DragonEgg %s with GCC %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-gcc$}                    {MacPorts GCC (port select)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-gcc-(\d+(?:\.\d+)?)$}    {MacPorts GCC %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-llvm-gcc-4\.2$}          {MacPorts LLVM-GCC 4.2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-g95$}                    {MacPorts G95}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-mpich-clang$}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            {MacPorts MPICH Wrapper for Xcode Clang}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-openmpi-clang$}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            {MacPorts Open MPI Wrapper for Xcode Clang}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-mpich-clang-(\d+\.\d+)$}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            {MacPorts MPICH Wrapper for Clang %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-openmpi-clang-(\d+\.\d+)$}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            {MacPorts Open MPI Wrapper for Clang %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-mpich-gcc-(\d+(?:\.\d+)?)$}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            {MacPorts MPICH Wrapper for GCC %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-openmpi-gcc-(\d+(?:\.\d+)?)$}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            {MacPorts Open MPI Wrapper for GCC %s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach {re fmt} $valid_compilers {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[set matches [regexp -inline $re $compiler]] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set compiler_name [format $fmt {*}[lrange $matches 1 end]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            break
</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 {![info exists compiler_name]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return -code error "Invalid value for configure.compiler: $compiler"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_debug "Preferred compilers: [option compiler.fallback]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_debug "Using compiler '$compiler_name'"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Additional ccache directory setup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global configure.ccache ccache_dir ccache_size macportsuser
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${configure.ccache}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Create ccache directory with correct permissions with root privileges
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        elevateToRoot "configure ccache"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[catch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                file mkdir ${ccache_dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                file attributes ${ccache_dir} -owner ${macportsuser} -permissions 0755
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_warn "ccache_dir ${ccache_dir} could not be created; disabling ccache: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set configure.ccache no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dropPrivileges
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Initialize ccache directory with the given maximum size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${configure.ccache}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[catch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                exec ccache -M ${ccache_size} >/dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_warn "ccache_dir ${ccache_dir} could not be initialized; disabling ccache: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set configure.ccache no
</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;'>+}
</span> 
 # replacement for portconfigure.tcl version
 proc portconfigure::get_compiler_fallback {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        xcodeversion           \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        default_compilers      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        compiler.c_standard    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        compiler.cxx_standard  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        os.major               \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global                       \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default_compilers        \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xcodeversion
</span> 
     # Check our override
     if {[info exists default_compilers]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -76,6 +162,20 @@ proc portconfigure::get_compiler_fallback {} {
</span>         return {cc}
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [portconfigure::get_valid_compilers]
</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 full_list is yes, then get all possible possible compiler that might work on this configuration
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# if full_list is no, reducde the compiler list to the "best" compilers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_valid_compilers {{full_list no}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global                       \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xcodeversion             \
</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;'>+        os.major                 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     # http://releases.llvm.org/3.1/docs/ClangReleaseNotes.html#cchanges
     # https://gcc.gnu.org/c99status.html
     # https://gcc.gnu.org/wiki/C11Status
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -105,13 +205,24 @@ proc portconfigure::get_compiler_fallback {} {
</span>         set default_xcode_ok [expr ${compiler.c_standard} <= 2011 && ${compiler.cxx_standard} <= 2014]
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # check for non-default cases
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${default_xcode_ok}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${cxx_stdlib} eq "libstdc++"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set default_xcode_ok [expr ${os.major} <  13]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set default_xcode_ok [expr ${os.major} >= 13]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${cxx_stdlib} eq "libstdc++" && ${os.major} >= 13} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # user has changed the default value of cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # for C++11 applications, MacPorts compilers are required
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set default_xcode_ok 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;'>+    if {${cxx_stdlib} eq "libc++" && ${os.major} < 11} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # user has changed the default value of cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # only Clang compilers use libc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set default_xcode_ok 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;'>+    # for 11 <= ${os.major} && ${os.major} < 13,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # user has changed the default value of cxx_stdlib, but Xcode clang can still use libc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Xcode compilers do not support OpenMP
</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;'>+        set default_xcode_ok 0
</span>     }
 
     # https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -134,7 +245,11 @@ proc portconfigure::get_compiler_fallback {} {
</span>         if {[vercmp ${xcodeversion} 5] >= 0} {
             set compilers {clang}
         } elseif {[vercmp ${xcodeversion} 4.2] >= 0} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set compilers {clang llvm-gcc-4.2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${cxx_stdlib} eq "libstdc++"} {
</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;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set compilers {clang}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span>         } elseif {[vercmp ${xcodeversion} 4.0] >= 0} {
             set compilers {llvm-gcc-4.2 clang gcc-4.2}
         } else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -161,6 +276,16 @@ proc portconfigure::get_compiler_fallback {} {
</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;'>+    #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # OpenMP Version | Clang Version | GCC Version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #      2.5       |      3.8      |     4.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #      3.0       |      3.8      |     4.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #      3.1       |      3.8      |     4.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #      4.0       |    Partial    |     4.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #      4.5       |    Partial    |     ???
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #
</span>     set gcc_compilers macports-gcc-7
     if {${compiler.cxx_standard} < 2017} {
         # allow latest GCC to be blacklisted by ports
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -173,7 +298,7 @@ proc portconfigure::get_compiler_fallback {} {
</span>     # according to http://packages.macports.org/clang-5.0/,
     #    clang builds back to Mac OS X 10.6
     set clang_compilers macports-clang-5.0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${compiler.cxx_standard} < 2017} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.cxx_standard} < 2017 && [vercmp ${compiler.openmp_version} 4] < 0} {
</span>         # allow latest Clang to be blacklisted by ports
         lappend clang_compilers macports-clang-4.0
         if {${os.major} < 17} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -182,11 +307,23 @@ proc portconfigure::get_compiler_fallback {} {
</span>         }
         if {${os.major} < 16} {
             # The Sierra SDK requires a toolchain that supports class properties
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend clang_compilers macports-clang-3.8 macports-clang-3.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend clang_compilers macports-clang-3.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[expr [vercmp ${compiler.openmp_version} 0] <= 0]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend clang_compilers macports-clang-3.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${cxx_stdlib} eq "libstdc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${cxx_stdlib} eq "libc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # only Clang compilers recognize libc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend compilers {*}${clang_compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Clang does not provide Fortran compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[option compiler.require_fortran]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend compilers {*}${gcc_compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span>         # when building for PowerPC architectures, prefer GCC to Clang
         if {[option configure.build_arch] eq "ppc" || [option configure.build_arch] eq "ppc64"} {
             lappend compilers {*}${gcc_compilers}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -195,30 +332,286 @@ proc portconfigure::get_compiler_fallback {} {
</span>             lappend compilers {*}${clang_compilers}
             lappend compilers {*}${gcc_compilers}
         }
<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 compiler.require_fortran]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend compilers macports-g95
</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;'>+    # generate list of MPI wrappers of current compilers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set mpi_compilers {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option compiler.mpi] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set mpis [option compiler.mpi]
</span>     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # only Clang compilers recognize libc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend compilers {*}${clang_compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set mpis {mpich openmpi}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach mpi ${mpis} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach c ${compilers} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set parts [split ${c} -]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[lindex ${parts} 0] eq "clang"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend mpi_compilers macports-${mpi}-[lindex ${parts} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {[lindex ${parts} 0] eq "macports"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    [lindex ${parts} 1] eq "clang"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    [vercmp [lindex ${parts} 2] 3.3] >= 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    lappend mpi_compilers [lindex ${parts} 0]-${mpi}-[lindex ${parts} 1]-[lindex ${parts} 2]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                } elseif {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          [lindex ${parts} 1] eq "gcc"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          [vercmp [lindex ${parts} 2] 4.3] >= 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    lappend mpi_compilers [lindex ${parts} 0]-${mpi}-[lindex ${parts} 1]-[lindex ${parts} 2]
</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;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # if required, replace compiler with equivalent MPI wrapper
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option compiler.mpi] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # only MPI compilers are valid
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set compilers ${mpi_compilers}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {${full_list}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # MPI compilers could work, so include it in the full list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend compilers {*}${mpi_compilers}
</span>     }
 
     return $compilers
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# extension of portconfigure.tcl version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rename portconfigure::configure_get_compiler portconfigure::configure_get_compiler_real
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc portconfigure::configure_get_compiler {type {compiler {}}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ret_real [portconfigure::configure_get_compiler_real ${type} ${compiler}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# replacement for portconfigure.tcl version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::compiler_port_name {compiler} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set valid_compiler_ports {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^apple-gcc-(\d+)\.(\d+)$}                          {apple-gcc%s%s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-clang-(\d+\.\d+)$}                       {clang-%s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-dragonegg-(\d+\.\d+)(-gcc-\d+\.\d+)?$}   {dragonegg-%s%s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-(llvm-)?gcc-(\d+)(?:\.(\d+))?$}          {%sgcc%s%s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-([^-]+)-clang$}                          {%s-clang}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-([^-]+)-clang-(\d+)\.(\d+)$}             {%s-clang%s%s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-([^-]+)-gcc-(\d+)(?:\.(\d+))?$}          {%s-gcc%s%s}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {^macports-g95$}                                    {g95}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach {re fmt} $valid_compiler_ports {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[set matches [regexp -inline $re $compiler]] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return [format $fmt {*}[lrange $matches 1 end]]
</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 {}
</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;'>+# helper function to get the default value of compiler.fortran_fallback
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::get_fortran_fallback {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ret {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach compiler [option compiler.fallback] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[configure_get_compiler_real fc $compiler] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend ret ${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;'>+    return $ret
</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;'>+# replacement for portconfigure.tcl version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::configure_get_default_compiler {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option compiler.whitelist] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set search_list [option compiler.whitelist]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set search_list [option compiler.fallback]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [portconfigure::configure_get_first_compiler cc ${search_list}]
</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;'>+# find the first working Fortran compiler in compiler.fortran_fallback
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::configure_get_first_fortran_compiler {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [portconfigure::configure_get_first_compiler fc [option compiler.fortran_fallback]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# find the first working compiler in the search_list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::configure_get_first_compiler {compilerName search_list} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach compiler $search_list {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set allowed yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach pattern [option compiler.blacklist] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[string match $pattern $compiler]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set allowed no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                break
</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 {[lsearch [portconfigure::get_valid_compilers yes] ${compiler}] < 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set allowed no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$allowed &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            [configure_get_compiler_real ${compilerName} $compiler] ne "" &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ([file executable [configure_get_compiler_real ${compilerName} $compiler]] ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             [compiler_is_port $compiler])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } then {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return $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;'>+    ui_warn "All compilers are either blacklisted or unavailable for ${compilerName}; defaulting to first fallback option"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [lindex [option compiler.fallback] 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;'>+# replacemenet for portconfigure.tcl version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::configure_get_compiler_real {type compiler} {
</span>     global prefix
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Tcl 8.4's switch doesn't support -matchvar.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[regexp {^apple-gcc(-4\.[02])$} $compiler -> suffix]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return ${prefix}/bin/gcc-apple${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$suffix eq "-4.2"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    return ${prefix}/bin/g++-apple${suffix}
</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;'>+            cpp     { return ${prefix}/bin/cpp-apple${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^clang$} $compiler]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return [find_developer_tool clang] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set clangpp [find_developer_tool clang++]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[file executable $clangpp]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    return $clangpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return [find_developer_tool llvm-g++-4.2]
</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;'>+    } elseif {[regexp {^gcc(-3\.3|-4\.[02])?$} $compiler -> suffix]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return [find_developer_tool "gcc${suffix}"] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return [find_developer_tool "g++${suffix}"] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cpp     { return [find_developer_tool "cpp${suffix}"] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^llvm-gcc-4\.2$} $compiler]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return [find_developer_tool llvm-gcc-4.2] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return [find_developer_tool llvm-g++-4.2] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cpp     { return [find_developer_tool llvm-cpp-4.2] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-clang(-\d+\.\d+)?$} $compiler -> suffix]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$suffix ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set suffix "-mp${suffix}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return ${prefix}/bin/clang${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return ${prefix}/bin/clang++${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cpp     { return ${prefix}/bin/clang-cpp${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-dragonegg(-\d+\.\d+)(?:-gcc(-\d+\.\d+))?$} $compiler \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                -> infix suffix]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$suffix ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set suffix "-mp${suffix}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return ${prefix}/bin/dragonegg${infix}-gcc${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return ${prefix}/bin/dragonegg${infix}-g++${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cpp     { return ${prefix}/bin/dragonegg${infix}-cpp${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            fc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f77     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f90     { return ${prefix}/bin/dragonegg${infix}-gfortran${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-gcc(-\d+(?:\.\d+)?)?$} $compiler -> suffix]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$suffix ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set suffix "-mp${suffix}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return ${prefix}/bin/gcc${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return ${prefix}/bin/g++${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cpp     { return ${prefix}/bin/cpp${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            fc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f77     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f90     { return ${prefix}/bin/gfortran${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-llvm-gcc-4\.2$} $compiler]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return ${prefix}/bin/llvm-gcc-4.2 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return ${prefix}/bin/llvm-g++-4.2 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cpp     { return ${prefix}/bin/llvm-cpp-4.2 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-g95$} $compiler]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            fc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f77     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f90     { return ${prefix}/bin/g95 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-([^-]+)-clang$} $compiler -> mpi]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return ${prefix}/bin/mpicc-${mpi}-clang }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return ${prefix}/bin/mpicxx-${mpi}-clang }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-([^-]+)-clang-(\d+\.\d+)$} $compiler -> mpi version]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set suffix [join [split ${version} .] ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return ${prefix}/bin/mpicc-${mpi}-clang${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return ${prefix}/bin/mpicxx-${mpi}-clang${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cpp     { return ${prefix}/bin/clang-cpp-mp-${version} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-([^-]+)-gcc-(\d+(?:\.\d+)?)$} $compiler -> mpi version]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set suffix [join [split ${version} .] ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objc    { return ${prefix}/bin/mpicc-${mpi}-gcc${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            objcxx  { return ${prefix}/bin/mpicxx-${mpi}-gcc${suffix} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cpp     { return ${prefix}/bin/cpp-mp-${version} }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            fc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f77     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f90     { return ${prefix}/bin/mpifort-${mpi}-gcc${suffix} }
</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;'>+    # Fallbacks
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch $type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        cc      -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        objc    { return [find_developer_tool cc] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        cxx     -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        objcxx  { return [find_developer_tool c++] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        cpp     { return [find_developer_tool cpp] }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</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:#ffe0e0;'>-    if {[option compiler.require_fortran]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# extension of portconfigure.tcl version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::configure_get_compiler {type {compiler {}}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global configure.compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$compiler eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set compiler ${configure.compiler}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ret [portconfigure::configure_get_compiler_real ${type} ${compiler}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${ret} eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set is_fortran no
</span>         foreach tool {f77 f90 fc} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {${type} eq ${tool} && ${ret_real} eq ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return ${prefix}/bin/gfortran-mp-[portconfigure::get_gcc_fortran_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${type} eq ${tool}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set is_fortran yes
</span>             }
         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${is_fortran} && [option compiler.require_fortran]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set compiler [portconfigure::configure_get_first_fortran_compiler]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ret [portconfigure::configure_get_compiler_real ${type} ${compiler}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return ${ret_real}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return ${ret}
</span> }
 
 # replacement for portconfigure.tcl version
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -239,7 +632,8 @@ proc portconfigure::add_automatic_compiler_dependencies {} {
</span> 
     if {[option compiler.require_fortran] && [portconfigure::configure_get_compiler_real fc ${compiler}] eq ""} {
         ui_debug "Adding Fortran compiler dependency"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        portconfigure::add_compiler_port_dependencies macports-gcc-[portconfigure::get_gcc_fortran_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set fortran_compiler [portconfigure::configure_get_first_fortran_compiler]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        portconfigure::add_compiler_port_dependencies ${fortran_compiler}
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -253,6 +647,16 @@ proc portconfigure::add_compiler_port_dependencies {compiler} {
</span>         ui_debug "Adding depends_lib port:$compiler_port"
         depends_lib-delete port:$compiler_port
         depends_lib-append port:$compiler_port
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[regexp {^macports-([^-]+)-(clang|gcc)(?:-(\d+(?:\.\d+)?))?$} $compiler -> mpi clang_or_gcc version]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # MPI compilers link against MPI libraries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "Adding depends_lib port:$compiler_port"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${mpi} eq "openmpi"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set pkgname ompi.pc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set pkgname ${mpi}.pc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-delete "path:lib/$compiler_port/pgkconfig/${pkgname}:${compiler_port}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-append "path:lib/$compiler_port/pkgconfig/${pkgname}:${compiler_port}"
</span>     } else {
         ui_debug "Adding depends_build port:$compiler_port"
         depends_build-delete port:$compiler_port
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -361,6 +765,16 @@ proc portconfigure::stdlib_trace {opt action args} {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# replacement for portconfigure.tcl version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portconfigure::arch_flag_supported {compiler} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # GCC prior to 4.7 does not accept -arch flag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[regexp {^macports(?:-[^-]+)?-gcc-4\.[0-6]} $compiler]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return 1
</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> # replacement for portutil.tcl version
 proc universal_setup {args} {
     if {[variant_exists universal]} {
</pre><pre style='margin:0'>

</pre>