<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>