[103211] trunk/base/src/port1.0/portconfigure.tcl

jeremyhu at macports.org jeremyhu at macports.org
Mon Feb 18 16:27:03 PST 2013


Revision: 103211
          https://trac.macports.org/changeset/103211
Author:   jeremyhu at macports.org
Date:     2013-02-18 16:27:03 -0800 (Mon, 18 Feb 2013)
Log Message:
-----------
Make future versions of macports-{clang,dragonegg,gcc} 'just work'

Modified Paths:
--------------
    trunk/base/src/port1.0/portconfigure.tcl

Modified: trunk/base/src/port1.0/portconfigure.tcl
===================================================================
--- trunk/base/src/port1.0/portconfigure.tcl	2013-02-18 23:09:30 UTC (rev 103210)
+++ trunk/base/src/port1.0/portconfigure.tcl	2013-02-19 00:27:03 UTC (rev 103211)
@@ -210,25 +210,19 @@
         apple-gcc-4.0 { set name "MacPorts Apple gcc 4.0" }
         apple-gcc-4.2 { set name "MacPorts Apple gcc 4.2" }
         macports-gcc     { set name "MacPorts gcc (port select)" }
-        macports-gcc-4.2 { set name "MacPorts gcc 4.2" }
-        macports-gcc-4.3 { set name "MacPorts gcc 4.3" }
-        macports-gcc-4.4 { set name "MacPorts gcc 4.4" }
-        macports-gcc-4.5 { set name "MacPorts gcc 4.5" }
-        macports-gcc-4.6 { set name "MacPorts gcc 4.6" }
-        macports-gcc-4.7 { set name "MacPorts gcc 4.7" }
-        macports-gcc-4.8 { set name "MacPorts gcc 4.8" }
         macports-llvm-gcc-4.2 { set name "MacPorts llvm-gcc 4.2" }
         macports-clang { set name "MacPorts clang (port select)" }
-        macports-clang-2.9 { set name "MacPorts clang 2.9" }
-        macports-clang-3.0 { set name "MacPorts clang 3.0" }
-        macports-clang-3.1 { set name "MacPorts clang 3.1" }
-        macports-clang-3.2 { set name "MacPorts clang 3.2" }
-        macports-clang-3.3 { set name "MacPorts clang 3.3" }
-        macports-dragonegg-3.0 { set name "MacPorts dragonegg 3.0" }
-        macports-dragonegg-3.1 { set name "MacPorts dragonegg 3.1" }
-        macports-dragonegg-3.2 { set name "MacPorts dragonegg 3.2" }
-        macports-dragonegg-3.3 { set name "MacPorts dragonegg 3.3" }
-        default { return -code error "Invalid value for configure.compiler: ${configure.compiler}" }
+        default {
+            if {[regexp {macports-clang-(.*)\.(.*)} ${configure.compiler} -> major minor]} {
+                set name "MacPorts clang ${major}.${minor}"
+            } elseif {[regexp {macports-dragonegg-(.*)\.(.*)} ${configure.compiler} -> major minor]} {
+                set name "MacPorts dragonegg ${major}.${minor}"
+            } elseif {[regexp {macports-gcc-(.*)\.(.*)} ${configure.compiler} -> major minor]} {
+                set name "MacPorts gcc ${major}.${minor}"
+            } else {
+                return -code error "Invalid value for configure.compiler: ${configure.compiler}"
+            }
+        }
     }
     ui_debug "Using compiler '$name'"
 
@@ -364,34 +358,16 @@
 
 # internal proc to determine if the compiler supports -arch
 proc portconfigure::arch_flag_supported {compiler} {
-    switch -exact ${compiler} {
-        gcc-4.0 -
-        gcc-4.2 -
-        llvm-gcc-4.2 -
-        clang -
-        apple-gcc-4.0 -
-        apple-gcc-4.2 -
-        macports-llvm-gcc-4.2 -
-        macports-clang-2.9 -
-        macports-clang-3.0 -
-        macports-clang-3.1 -
-        macports-clang-3.2 -
-        macports-clang-3.3 -
-        macports-clang {
-            return yes
-        }
-        default {
-            return no
-        }
+    if {[string first "macports-gcc" $compiler] == 0 ||
+        [string first "macports-dragonegg-" $compiler] == 0} {
+        return no
+    } else {
+        return yes
     }
 }
 
-# check if a compiler comes from a port
-proc portconfigure::compiler_is_port {compiler} {
-    return [info exists portconfigure::compiler_name_map($compiler)]
-}
-
 # maps compiler names to the port that provides them
+# TODO: Remove this after 2.2 is released and ports aren't referring to it.
 array set portconfigure::compiler_name_map {
         apple-gcc-4.0           apple-gcc40
         apple-gcc-4.2           apple-gcc42
@@ -414,6 +390,30 @@
         macports-dragonegg-3.3  dragonegg-3.3
 }
 
+proc portconfigure::compiler_port_name {compiler} {
+    if {[regexp {apple-gcc-(.*)\.(.*)} ${compiler} -> major minor]} {
+        return "apple-gcc${major}${minor}"
+    } elseif {[regexp {macports-clang-(.*)\.(.*)} ${compiler} -> major minor]} {
+        return "clang-${major}.${minor}"
+    } elseif {[regexp {macports-dragonegg-(.*)\.(.*)} ${compiler} -> major minor]} {
+        return "dragonegg-${major}.${minor}"
+    } elseif {[regexp {macports-gcc-(.*)\.(.*)} ${compiler} -> major minor]} {
+        return "gcc${major}${minor}"
+    } elseif {[regexp {macports-llvm-gcc-(.*)\.(.*)} ${compiler} -> major minor]} {
+        return "llvm-gcc${major}${minor}"
+    }
+
+    return ""
+}
+
+proc portconfigure::compiler_is_port {compiler} {
+    if {[portconfigure::compiler_port_name ${compiler}] == ""} {
+        return no
+    } else {
+        return yes
+    }
+}
+
 # internal function to determine the default compiler
 proc portconfigure::configure_get_default_compiler {args} {
     global compiler.blacklist compiler.whitelist compiler.fallback
@@ -582,83 +582,6 @@
                 f90  { set ret ${prefix}/bin/gfortran }
             }
         }
-        macports-gcc-4.2 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/gcc-mp-4.2 }
-                objc { set ret ${prefix}/bin/gcc-mp-4.2 }
-                cxx  { set ret ${prefix}/bin/g++-mp-4.2 }
-                cpp  { set ret ${prefix}/bin/cpp-mp-4.2 }
-                fc   { set ret ${prefix}/bin/gfortran-mp-4.2 }
-                f77  { set ret ${prefix}/bin/gfortran-mp-4.2 }
-                f90  { set ret ${prefix}/bin/gfortran-mp-4.2 }
-            }
-        }
-        macports-gcc-4.3 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/gcc-mp-4.3 }
-                objc { set ret ${prefix}/bin/gcc-mp-4.3 }
-                cxx  { set ret ${prefix}/bin/g++-mp-4.3 }
-                cpp  { set ret ${prefix}/bin/cpp-mp-4.3 }
-                fc   { set ret ${prefix}/bin/gfortran-mp-4.3 }
-                f77  { set ret ${prefix}/bin/gfortran-mp-4.3 }
-                f90  { set ret ${prefix}/bin/gfortran-mp-4.3 }
-            }
-        }
-        macports-gcc-4.4 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/gcc-mp-4.4 }
-                objc { set ret ${prefix}/bin/gcc-mp-4.4 }
-                cxx  { set ret ${prefix}/bin/g++-mp-4.4 }
-                cpp  { set ret ${prefix}/bin/cpp-mp-4.4 }
-                fc   { set ret ${prefix}/bin/gfortran-mp-4.4 }
-                f77  { set ret ${prefix}/bin/gfortran-mp-4.4 }
-                f90  { set ret ${prefix}/bin/gfortran-mp-4.4 }
-            }
-        }
-        macports-gcc-4.5 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/gcc-mp-4.5 }
-                objc { set ret ${prefix}/bin/gcc-mp-4.5 }
-                cxx  { set ret ${prefix}/bin/g++-mp-4.5 }
-                cpp  { set ret ${prefix}/bin/cpp-mp-4.5 }
-                fc   { set ret ${prefix}/bin/gfortran-mp-4.5 }
-                f77  { set ret ${prefix}/bin/gfortran-mp-4.5 }
-                f90  { set ret ${prefix}/bin/gfortran-mp-4.5 }
-            }
-        }
-        macports-gcc-4.6 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/gcc-mp-4.6 }
-                objc { set ret ${prefix}/bin/gcc-mp-4.6 }
-                cxx  { set ret ${prefix}/bin/g++-mp-4.6 }
-                cpp  { set ret ${prefix}/bin/cpp-mp-4.6 }
-                fc   { set ret ${prefix}/bin/gfortran-mp-4.6 }
-                f77  { set ret ${prefix}/bin/gfortran-mp-4.6 }
-                f90  { set ret ${prefix}/bin/gfortran-mp-4.6 }
-            }
-        }
-        macports-gcc-4.7 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/gcc-mp-4.7 }
-                objc { set ret ${prefix}/bin/gcc-mp-4.7 }
-                cxx  { set ret ${prefix}/bin/g++-mp-4.7 }
-                cpp  { set ret ${prefix}/bin/cpp-mp-4.7 }
-                fc   { set ret ${prefix}/bin/gfortran-mp-4.7 }
-                f77  { set ret ${prefix}/bin/gfortran-mp-4.7 }
-                f90  { set ret ${prefix}/bin/gfortran-mp-4.7 }
-            }
-        }
-        macports-gcc-4.8 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/gcc-mp-4.8 }
-                objc { set ret ${prefix}/bin/gcc-mp-4.8 }
-                cxx  { set ret ${prefix}/bin/g++-mp-4.8 }
-                cpp  { set ret ${prefix}/bin/cpp-mp-4.8 }
-                fc   { set ret ${prefix}/bin/gfortran-mp-4.8 }
-                f77  { set ret ${prefix}/bin/gfortran-mp-4.8 }
-                f90  { set ret ${prefix}/bin/gfortran-mp-4.8 }
-            }
-        }
         macports-llvm-gcc-4.2 {
             switch -exact ${type} {
                 cc   { set ret ${prefix}/bin/llvm-gcc-4.2 }
@@ -674,85 +597,35 @@
                 cxx  { set ret ${prefix}/bin/clang++ }
             }
         }
-        macports-clang-2.9 {
+        default {
+            if {[regexp {macports-clang-(.*)\.(.*)} ${configure.compiler} -> major minor]} {
+                switch -exact ${type} {
+                    cc   { set ret ${prefix}/bin/clang-mp-${major}.${minor} }
+                    objc { set ret ${prefix}/bin/clang-mp-${major}.${minor} }
+                    cxx  { set ret ${prefix}/bin/clang++-mp-${major}.${minor} }
+                }
+            } elseif {[regexp {macports-dragonegg-(.*)\.(.*)} ${configure.compiler} -> major minor]} {
             switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/clang-mp-2.9 }
-                objc { set ret ${prefix}/bin/clang-mp-2.9 }
-                cxx  { set ret ${prefix}/bin/clang++-mp-2.9 }
+                    cc   { set ret ${prefix}/bin/dragonegg-${major}.${minor}-gcc }
+                    objc { set ret ${prefix}/bin/dragonegg-${major}.${minor}-gcc }
+                    cxx  { set ret ${prefix}/bin/dragonegg-${major}.${minor}-g++ }
+                    cpp  { set ret ${prefix}/bin/dragonegg-${major}.${minor}-cpp }
+                    fc   { set ret ${prefix}/bin/dragonegg-${major}.${minor}-gfortran }
+                    f77  { set ret ${prefix}/bin/dragonegg-${major}.${minor}-gfortran }
+                    f90  { set ret ${prefix}/bin/dragonegg-${major}.${minor}-gfortran }
+                }
+            } elseif {[regexp {macports-gcc-(.*)\.(.*)} ${configure.compiler} -> major minor]} {
+                switch -exact ${type} {
+                    cc   { set ret ${prefix}/bin/gcc-mp-${major}.${minor} }
+                    objc { set ret ${prefix}/bin/gcc-mp-${major}.${minor} }
+                    cxx  { set ret ${prefix}/bin/g++-mp-${major}.${minor} }
+                    cpp  { set ret ${prefix}/bin/cpp-mp-${major}.${minor} }
+                    fc   { set ret ${prefix}/bin/gfortran-mp-${major}.${minor} }
+                    f77  { set ret ${prefix}/bin/gfortran-mp-${major}.${minor} }
+                    f90  { set ret ${prefix}/bin/gfortran-mp-${major}.${minor} }
+                }
             }
         }
-        macports-clang-3.0 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/clang-mp-3.0 }
-                objc { set ret ${prefix}/bin/clang-mp-3.0 }
-                cxx  { set ret ${prefix}/bin/clang++-mp-3.0 }
-            }
-        }
-        macports-clang-3.1 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/clang-mp-3.1 }
-                objc { set ret ${prefix}/bin/clang-mp-3.1 }
-                cxx  { set ret ${prefix}/bin/clang++-mp-3.1 }
-            }
-        }
-        macports-clang-3.2 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/clang-mp-3.2 }
-                objc { set ret ${prefix}/bin/clang-mp-3.2 }
-                cxx  { set ret ${prefix}/bin/clang++-mp-3.2 }
-            }
-        }
-        macports-clang-3.3 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/clang-mp-3.3 }
-                objc { set ret ${prefix}/bin/clang-mp-3.3 }
-                cxx  { set ret ${prefix}/bin/clang++-mp-3.3 }
-            }
-        }
-        macports-dragonegg-3.0 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/dragonegg-3.0-gcc }
-                objc { set ret ${prefix}/bin/dragonegg-3.0-gcc }
-                cxx  { set ret ${prefix}/bin/dragonegg-3.0-g++ }
-                cpp  { set ret ${prefix}/bin/dragonegg-3.0-cpp }
-                fc   { set ret ${prefix}/bin/dragonegg-3.0-gfortran }
-                f77  { set ret ${prefix}/bin/dragonegg-3.0-gfortran }
-                f90  { set ret ${prefix}/bin/dragonegg-3.0-gfortran }
-            }
-        }
-        macports-dragonegg-3.1 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/dragonegg-3.1-gcc }
-                objc { set ret ${prefix}/bin/dragonegg-3.1-gcc }
-                cxx  { set ret ${prefix}/bin/dragonegg-3.1-g++ }
-                cpp  { set ret ${prefix}/bin/dragonegg-3.1-cpp }
-                fc   { set ret ${prefix}/bin/dragonegg-3.1-gfortran }
-                f77  { set ret ${prefix}/bin/dragonegg-3.1-gfortran }
-                f90  { set ret ${prefix}/bin/dragonegg-3.1-gfortran }
-            }
-        }
-        macports-dragonegg-3.2 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/dragonegg-3.2-gcc }
-                objc { set ret ${prefix}/bin/dragonegg-3.2-gcc }
-                cxx  { set ret ${prefix}/bin/dragonegg-3.2-g++ }
-                cpp  { set ret ${prefix}/bin/dragonegg-3.2-cpp }
-                fc   { set ret ${prefix}/bin/dragonegg-3.2-gfortran }
-                f77  { set ret ${prefix}/bin/dragonegg-3.2-gfortran }
-                f90  { set ret ${prefix}/bin/dragonegg-3.2-gfortran }
-            }
-        }
-        macports-dragonegg-3.3 {
-            switch -exact ${type} {
-                cc   { set ret ${prefix}/bin/dragonegg-3.3-gcc }
-                objc { set ret ${prefix}/bin/dragonegg-3.3-gcc }
-                cxx  { set ret ${prefix}/bin/dragonegg-3.3-g++ }
-                cpp  { set ret ${prefix}/bin/dragonegg-3.3-cpp }
-                fc   { set ret ${prefix}/bin/dragonegg-3.3-gfortran }
-                f77  { set ret ${prefix}/bin/dragonegg-3.3-gfortran }
-                f90  { set ret ${prefix}/bin/dragonegg-3.3-gfortran }
-            }
-        }
     }
     return $ret
 }
@@ -761,7 +634,7 @@
 # Some of the compilers we use are provided by MacPorts itself; ensure we
 # automatically add a dependency when needed
 proc portconfigure::add_automatic_compiler_dependencies {} {
-    global configure.compiler portconfigure::compiler_name_map
+    global configure.compiler
 
     # The default value requires substitution before use.
     set compiler [subst ${configure.compiler}]
@@ -771,7 +644,7 @@
 
     ui_debug "Chosen compiler ${compiler} is provided by a port, adding dependency"
 
-    set compiler_port $compiler_name_map($compiler)
+    set compiler_port [portconfigure::compiler_port_name ${compiler}]
     set deptype "build"
     if {[string first "macports-gcc-" $compiler] == 0} {
         set deptype "lib"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20130218/62316e99/attachment.html>


More information about the macports-changes mailing list