[66771] trunk/base

jmr at macports.org jmr at macports.org
Thu Apr 22 12:20:25 PDT 2010


Revision: 66771
          http://trac.macports.org/changeset/66771
Author:   jmr at macports.org
Date:     2010-04-22 12:20:19 -0700 (Thu, 22 Apr 2010)
Log Message:
-----------
determine xcode version accurately, check when running appropriate targets, warn or error out when old (#12794); remove pbx references where possible; remove nonexistent destroot.type from portfile.7

Modified Paths:
--------------
    trunk/base/doc/portfile.7
    trunk/base/src/macports1.0/macports.tcl
    trunk/base/src/port1.0/portbuild.tcl
    trunk/base/src/port1.0/portutil.tcl

Modified: trunk/base/doc/portfile.7
===================================================================
--- trunk/base/doc/portfile.7	2010-04-22 18:54:47 UTC (rev 66770)
+++ trunk/base/doc/portfile.7	2010-04-22 19:20:19 UTC (rev 66771)
@@ -1188,15 +1188,18 @@
 .Em make
 .br
 .Sy Example:
-.Dl build.cmd pbxbuild
+.Dl build.cmd scons
 .It Ic build.type
-Defines which 'make' is required, either 'gnu' or 'bsd'.
+Defines which 'make' is required, either 'gnu' or 'bsd'. Can also choose
+'xcode' (or the deprecated synonym 'pbx'), however you should generally use
+the xcode PortGroup rather than setting this directly.
 Sets
 .Ic build.cmd
 to either
-.Pa gnumake
-or
+.Pa gnumake,
 .Pa bsdmake
+or
+.Pa xcodebuild
 accordingly.
 .br
 .Sy Type:
@@ -1235,25 +1238,7 @@
 .Em ${build.cmd}
 .br
 .Sy Example:
-.Dl destroot.cmd pbxbuild
-.It Ic destroot.type
-Defines which 'make' is required, either 'gnu' or 'bsd'.
-Sets
-.Ic destroot.cmd
-to either
-.Pa gnumake
-or
-.Pa bsdmake
-accordingly.
-.br
-.Sy Type:
-.Em optional
-.br
-.Sy Default:
-.Em ${build.type}
-.br
-.Sy Example:
-.Dl destroot.type gnu
+.Dl destroot.cmd scons
 .It Ic destroot.destdir
 Arguments passed to
 .Ic destroot.cmd

Modified: trunk/base/src/macports1.0/macports.tcl
===================================================================
--- trunk/base/src/macports1.0/macports.tcl	2010-04-22 18:54:47 UTC (rev 66770)
+++ trunk/base/src/macports1.0/macports.tcl	2010-04-22 19:20:19 UTC (rev 66771)
@@ -356,10 +356,27 @@
     if {[catch {set xcodebuild [binaryInPath "xcodebuild"]}] == 0} {
         if {![info exists xcodeversion]} {
             # Determine xcode version (<= 2.0 or 2.1)
-            if {[catch {set xcodebuildversion [exec xcodebuild -version]}] == 0} {
-                if {[regexp "DevToolsCore-(.*); DevToolsSupport-(.*)" $xcodebuildversion devtoolscore_v devtoolssupport_v] == 1} {
-                    if {$devtoolscore_v >= 620.0 && $devtoolssupport_v >= 610.0} {
-                        # for now, we don't need to distinguish 2.1 from 2.1 or higher.
+            if {[catch {set xcodebuildversion [exec $xcodebuild -version]}] == 0} {
+                if {[regexp {Xcode ([0-9.]+)} $xcodebuildversion - xcode_v] == 1} {
+                    set macports::xcodeversion $xcode_v
+                } elseif {[regexp "DevToolsCore-(.*);" $xcodebuildversion - devtoolscore_v] == 1} {
+                    if {$devtoolscore_v >= 921.0} {
+                        set macports::xcodeversion "3.0"
+                    } elseif {$devtoolscore_v >= 798.0} {
+                        set macports::xcodeversion "2.5"
+                    } elseif {$devtoolscore_v >= 762.0} {
+                        set macports::xcodeversion "2.4.1"
+                    } elseif {$devtoolscore_v >= 757.0} {
+                        set macports::xcodeversion "2.4"
+                    } elseif {$devtoolscore_v > 650.0} {
+                        # XXX find actual version corresponding to 2.3
+                        set macports::xcodeversion "2.3"
+                    } elseif {$devtoolscore_v >= 650.0} {
+                        set macports::xcodeversion "2.2.1"
+                    } elseif {$devtoolscore_v > 620.0} {
+                        # XXX find actual version corresponding to 2.2
+                        set macports::xcodeversion "2.2"
+                    } elseif {$devtoolscore_v >= 620.0} {
                         set macports::xcodeversion "2.1"
                     } else {
                         set macports::xcodeversion "2.0orlower"
@@ -367,21 +384,11 @@
                 } else {
                     set macports::xcodeversion "2.0orlower"
                 }
-            } else {
-                set macports::xcodeversion "2.0orlower"
             }
         }
-
         if {![info exists xcodebuildcmd]} {
-            set macports::xcodebuildcmd "xcodebuild"
+            set macports::xcodebuildcmd "$xcodebuild"
         }
-    } elseif {[catch {set pbxbuild [binaryInPath "pbxbuild"]}] == 0} {
-        if {![info exists xcodeversion]} {
-            set macports::xcodeversion "pb"
-        }
-        if {![info exists xcodebuildcmd]} {
-            set macports::xcodebuildcmd "pbxbuild"
-        }
     } else {
         if {![info exists xcodeversion]} {
             set macports::xcodeversion "none"
@@ -1532,6 +1539,11 @@
         || $target == "rpm" || $target == "dpkg"
         || $target == "srpm"|| $target == "portpkg" } {
 
+        # possibly warn or error out depending on how old xcode is
+        if {[$workername eval _check_xcode_version] != 0} {
+            return 1
+        }
+
         # upgrade dependencies that are already installed
         if {![macports::global_option_isset ports_nodeps]} {
             macports::_upgrade_mport_deps $mport $target

Modified: trunk/base/src/port1.0/portbuild.tcl
===================================================================
--- trunk/base/src/port1.0/portbuild.tcl	2010-04-22 18:54:47 UTC (rev 66770)
+++ trunk/base/src/port1.0/portbuild.tcl	2010-04-22 19:20:19 UTC (rev 66771)
@@ -82,17 +82,17 @@
                 return [findBinary gmake $portutil::autoconf::gnumake_path]
             }
         }
-        pbx {
+        pbx -
+        xcode {
             if {[option os.platform] != "darwin"} {
-                return -code error "[format [msgcat::mc "This port requires 'pbxbuild/xcodebuild', which is not available on %s."] [option os.platform]]"
+                return -code error "[format [msgcat::mc "This port requires 'xcodebuild', which is not available on %s."] [option os.platform]]"
             }
 
-            if {[catch {set xcodebuild [binaryInPath xcodebuild]}] == 0} {
-                return $xcodebuild
-            } elseif {[catch {set pbxbuild [binaryInPath pbxbuild]}] == 0} {
-                return $pbxbuild
+            global xcodebuildcmd
+            if {$xcodebuildcmd != "none"} {
+                return $xcodebuildcmd
             } else {
-                return -code error "Neither pbxbuild nor xcodebuild were found on this system!"
+                return -code error "xcodebuild was not found on this system!"
             }
         }
         default {

Modified: trunk/base/src/port1.0/portutil.tcl
===================================================================
--- trunk/base/src/port1.0/portutil.tcl	2010-04-22 18:54:47 UTC (rev 66770)
+++ trunk/base/src/port1.0/portutil.tcl	2010-04-22 19:20:19 UTC (rev 66771)
@@ -2568,3 +2568,37 @@
         return ${os.arch}
     }
 }
+
+# check if the installed xcode version is new enough
+proc _check_xcode_version {} {
+    global os.subplatform macosx_version xcodeversion
+
+    if {[info exists os.subplatform] && ${os.subplatform} == "macosx"} {
+        switch $macosx_version {
+            10.4 {
+                set min 2.0
+                set ok 2.4.1
+                set rec 2.5
+            }
+            10.5 {
+                set min 3.0
+                set ok 3.1
+                set rec 3.1.4
+            }
+            default {
+                set min 3.2
+                set ok 3.2
+                set rec 3.2.2
+            }
+        }
+        if {$xcodeversion == "none"} {
+            ui_warn "Xcode does not appear to be installed; most ports will likely fail to build."
+        } elseif {[rpm-vercomp $xcodeversion $min] < 0} {
+            ui_error "The installed version of Xcode (${xcodeversion}) is too old to use on the installed OS version. Version $rec or later is recommended on Mac OS X ${macosx_version}."
+            return 1
+        } elseif {[rpm-vercomp $xcodeversion $ok] < 0} {
+            ui_warn "The installed version of Xcode (${xcodeversion}) is known to cause problems. Version $rec or later is recommended on Mac OS X ${macosx_version}."
+        }
+    }
+    return 0
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100422/5efca2a1/attachment.html>


More information about the macports-changes mailing list