[64372] trunk/base/src

jmr at macports.org jmr at macports.org
Wed Mar 3 20:53:55 PST 2010


Revision: 64372
          http://trac.macports.org/changeset/64372
Author:   jmr at macports.org
Date:     2010-03-03 20:53:54 -0800 (Wed, 03 Mar 2010)
Log Message:
-----------
add supported_archs option, record archs in registry, simplify clean_archive, fall back to os.arch in archive names when build_arch is empty

Modified Paths:
--------------
    trunk/base/src/package1.0/portarchive.tcl
    trunk/base/src/package1.0/portunarchive.tcl
    trunk/base/src/port1.0/portclean.tcl
    trunk/base/src/port1.0/portinstall.tcl
    trunk/base/src/port1.0/portmain.tcl
    trunk/base/src/port1.0/portutil.tcl
    trunk/base/src/registry2.0/entryobj.c

Modified: trunk/base/src/package1.0/portarchive.tcl
===================================================================
--- trunk/base/src/package1.0/portarchive.tcl	2010-03-04 03:54:09 UTC (rev 64371)
+++ trunk/base/src/package1.0/portarchive.tcl	2010-03-04 04:53:54 UTC (rev 64372)
@@ -70,7 +70,7 @@
     global name version revision portvariants
     global archive.destpath archive.type archive.meta
     global archive.file archive.path archive.fulldestpath
-    global configure.build_arch configure.universal_archs
+    global os.arch configure.build_arch configure.universal_archs supported_archs
 
     # Check mode in case archive called directly by user
     if {[option portarchivemode] != "yes"} {
@@ -91,10 +91,14 @@
 
     # Define archive destination directory and target filename
     if {![string equal ${archive.destpath} ${workpath}] && ![string equal ${archive.destpath} ""]} {
-        if {[variant_exists universal] && [variant_isset universal]} {
+        if {$supported_archs == "noarch"} {
+            set archive.fulldestpath [file join ${archive.destpath} [option os.platform] noarch]
+        } elseif {[variant_exists universal] && [variant_isset universal]} {
             set archive.fulldestpath [file join ${archive.destpath} [option os.platform] "universal"]
+        } elseif {${configure.build_arch} != ""} {
+            set archive.fulldestpath [file join ${archive.destpath} [option os.platform] ${configure.build_arch}]
         } else {
-            set archive.fulldestpath [file join ${archive.destpath} [option os.platform] ${configure.build_arch}]
+            set archive.fulldestpath [file join ${archive.destpath} [option os.platform] ${os.arch}]
         }
     } else {
         set archive.fulldestpath ${archive.destpath}
@@ -115,10 +119,14 @@
         set any_missing no
         foreach archive.type [option portarchivetype] {
             if {[catch {archiveTypeIsSupported ${archive.type}} errmsg] == 0} {
-                if {[variant_exists universal] && [variant_isset universal]} {
+                if {$supported_archs == "noarch"} {
+                    set archstring noarch
+                } elseif {[variant_exists universal] && [variant_isset universal]} {
                     set archstring [join [lsort -ascii ${configure.universal_archs}] -]
+                } elseif {${configure.build_arch} != ""} {
+                    set archstring ${configure.build_arch}
                 } else {
-                    set archstring ${configure.build_arch}
+                    set archstring ${os.arch}
                 }
                 set archive.file "${name}-${version}_${revision}${portvariants}.${archstring}.${archive.type}"
                 set archive.path "[file join ${archive.fulldestpath} ${archive.file}]"
@@ -309,7 +317,7 @@
     global name epoch version revision portvariants
     global archive.fulldestpath archive.type archive.file archive.path
     global archive.meta archive.metaname archive.metapath
-    global os.platform configure.build_arch configure.universal_archs
+    global os.platform os.arch configure.build_arch configure.universal_archs supported_archs
 
     # Create archive destination path (if needed)
     if {![file isdirectory ${archive.fulldestpath}]} {
@@ -363,10 +371,14 @@
     puts $fd "@portepoch ${epoch}"
     puts $fd "@portversion ${version}"
     puts $fd "@portrevision ${revision}"
-    if {[variant_exists universal] && [variant_isset universal]} {
-        puts $fd "@archs ${configure.universal_archs}"
+    if {$supported_archs == "noarch"} {
+        puts $fd "@archs noarch"
+    } elseif {[variant_exists universal] && [variant_isset universal]} {
+        puts $fd "@archs [lsort -ascii ${configure.universal_archs}]"
+    } elseif {${configure.build_arch} != ""} {
+        puts $fd "@archs ${configure.build_arch}"
     } else {
-        puts $fd "@archs ${configure.build_arch}"
+        puts $fd "@archs ${os.arch}"
     }
     set vlist [lsort -ascii [array names variations]]
     foreach v $vlist {
@@ -414,10 +426,14 @@
         putel $sd minor 0
 
         putel $sd platform ${os.platform}
-        if {[variant_exists universal] && [variant_isset universal]} {
+        if {$supported_archs == "noarch"} {
+            putel $sd arch noarch
+        } elseif {[variant_exists universal] && [variant_isset universal]} {
             putlist $sd archs arch [lsort -ascii ${configure.universal_archs}]
+        } elseif {${configure.build_arch} != ""} {
+            putel $sd arch ${configure.build_arch}
         } else {
-            putel $sd arch ${configure.build_arch}
+            putel $sd arch ${os.arch}
         }
         set vlist [lsort -ascii [array names variations]]
         putlist $sd variants variant $vlist
@@ -477,10 +493,14 @@
         close $sd
     }
 
-    if {[variant_exists universal] && [variant_isset universal]} {
+    if {$supported_archs == "noarch"} {
+        set archstring noarch
+    } elseif {[variant_exists universal] && [variant_isset universal]} {
         set archstring [join [lsort -ascii ${configure.universal_archs}] -]
+    } elseif {${configure.build_arch} != ""} {
+        set archstring ${configure.build_arch}
     } else {
-        set archstring ${configure.build_arch}
+        set archstring ${os.arch}
     }
     # Now create the archive(s)
     # Loop through archive types

Modified: trunk/base/src/package1.0/portunarchive.tcl
===================================================================
--- trunk/base/src/package1.0/portunarchive.tcl	2010-03-04 03:54:09 UTC (rev 64371)
+++ trunk/base/src/package1.0/portunarchive.tcl	2010-03-04 04:53:54 UTC (rev 64372)
@@ -65,7 +65,7 @@
     global ports_force ports_source_only ports_binary_only
     global name version revision portvariants portpath
     global unarchive.srcpath unarchive.type unarchive.file unarchive.path unarchive.fullsrcpath
-    global configure.build_arch configure.universal_archs
+    global os.arch configure.build_arch configure.universal_archs supported_archs
 
     # Check mode in case archive called directly by user
     if {[option portarchivemode] != "yes"} {
@@ -86,10 +86,14 @@
 
     # Define archive directory, file, and path
     if {![string equal ${unarchive.srcpath} ${workpath}] && ![string equal ${unarchive.srcpath} ""]} {
-        if {[variant_exists universal] && [variant_isset universal]} {
+        if {$supported_archs == "noarch"} {
+            set unarchive.fullsrcpath [file join ${unarchive.srcpath} [option os.platform] noarch]
+        } elseif {[variant_exists universal] && [variant_isset universal]} {
             set unarchive.fullsrcpath [file join ${unarchive.srcpath} [option os.platform] "universal"]
+        } elseif {${configure.build_arch} != ""} {
+            set unarchive.fullsrcpath [file join ${unarchive.srcpath} [option os.platform] ${configure.build_arch}]
         } else {
-            set unarchive.fullsrcpath [file join ${unarchive.srcpath} [option os.platform] ${configure.build_arch}]
+            set unarchive.fullsrcpath [file join ${unarchive.srcpath} [option os.platform] ${os.arch}]
         }
     } else {
         set unarchive.fullsrcpath ${unarchive.srcpath}
@@ -113,10 +117,14 @@
         set unsupported 0
         foreach unarchive.type [option portarchivetype] {
             if {[catch {archiveTypeIsSupported ${unarchive.type}} errmsg] == 0} {
-                if {[variant_exists universal] && [variant_isset universal]} {
+                if {$supported_archs == "noarch"} {
+                    set archstring noarch
+                } elseif {[variant_exists universal] && [variant_isset universal]} {
                     set archstring [join [lsort -ascii ${configure.universal_archs}] -]
+                } elseif {${configure.build_arch} != ""} {
+                    set archstring ${configure.build_arch}
                 } else {
-                    set archstring ${configure.build_arch}
+                    set archstring ${os.arch}
                 }
                 set unarchive.file "${name}-${version}_${revision}${portvariants}.${archstring}.${unarchive.type}"
                 set unarchive.path "[file join ${unarchive.fullsrcpath} ${unarchive.file}]"

Modified: trunk/base/src/port1.0/portclean.tcl
===================================================================
--- trunk/base/src/port1.0/portclean.tcl	2010-03-04 03:54:09 UTC (rev 64371)
+++ trunk/base/src/port1.0/portclean.tcl	2010-03-04 04:53:54 UTC (rev 64372)
@@ -218,29 +218,17 @@
 
 proc portclean::clean_archive {args} {
     global workpath portarchivepath name version ports_version_glob
-    global configure.build_arch configure.universal_archs
 
-    # Define archive destination directory, target filename, regex for archive name,
-    # and universal arch string
+    # Define archive destination directory, target filename, regex for archive name
     if {$portarchivepath ne $workpath && $portarchivepath ne ""} {
-        if {[variant_exists universal] && [variant_isset universal]} {
-            set archstring [join [lsort -ascii ${configure.universal_archs}] -]
-            set archivepath [file join $portarchivepath [option os.platform] "universal"]
-            set regexstring "^$name-\[-_a-zA-Z0-9\.\]+_\[0-9\]*\[+-_a-zA-Z0-9\]*\[\.\]${archstring}\[\.\]\[a-z2\]+\$"
-        } else {
-            set archivepath [file join $portarchivepath [option os.platform] ${configure.build_arch}]
-            set regexstring "^$name-\[-_a-zA-Z0-9\.\]+_\[0-9\]*\[+-_a-zA-Z0-9\]*\[\.\]${configure.build_arch}\[\.\]\[a-z2\]+\$"
-        }
+        set archivepath [file join $portarchivepath [option os.platform]]
+        set regexstring "^$name-\[\\-_a-zA-Z0-9\\.\]+_\[0-9\]*\[+\\-_a-zA-Z0-9\]*\[\\.\].*[\\.\]\[a-z2\]+\$"
     }
 
     if {[info exists ports_version_glob]} {
         # Match all possible archive variants that match the version
         # glob specified by the user for this OS.
-        if {[variant_exists universal] && [variant_isset universal]} {
-            set fileglob "$name-[option ports_version_glob]*+universal.${archstring}.*"
-        } else {
-            set fileglob "$name-[option ports_version_glob]*.${configure.build_arch}.*"
-        }
+        set fileglob "$name-[option ports_version_glob]*.*.*"
     } else {
         # Match all possible archive variants for the current version on
         # this OS. If you want to delete previous versions, use the
@@ -249,16 +237,12 @@
         # We do this because if we don't, then ports that match the
         # first part of the name (e.g. trying to remove foo-* will
         # pick up anything foo-bar-* as well, which is undesirable).
-        if {[variant_exists universal] && [variant_isset universal]} {
-            set fileglob "$name-$version*+universal.${archstring}.*"
-        } else {
-            set fileglob "$name-$version*.${configure.build_arch}.*"
-        }
+        set fileglob "$name-$version*.*.*"
     }
 
     # Remove the archive files
     set count 0
-    if {![catch {set archivelist [glob [file join $archivepath $fileglob]]} result]} {
+    if {![catch {set archivelist [glob [file join $archivepath * $fileglob]]} result]} {
         foreach path $archivelist {
             set file [file tail $path]
             # Make sure file is truly a port archive file, and not

Modified: trunk/base/src/port1.0/portinstall.tcl
===================================================================
--- trunk/base/src/port1.0/portinstall.tcl	2010-03-04 03:54:09 UTC (rev 64371)
+++ trunk/base/src/port1.0/portinstall.tcl	2010-03-04 04:53:54 UTC (rev 64372)
@@ -143,7 +143,8 @@
     homepage depends_run installPlist package-install uninstall workdir \
     worksrcdir UI_PREFIX destroot revision maintainers ports_force \
     portvariants default_variants targets depends_lib PortInfo epoch license \
-    registry.installtype registry.path registry.format
+    registry.installtype registry.path registry.format \
+    os.arch configure.build_arch configure.universal_archs supported_archs
 
     if {[string equal ${registry.format} "receipt_sqlite"]} {
         # registry2.0
@@ -164,7 +165,16 @@
         registry::write {
 
             set regref [registry::entry create $name $version $revision $portvariants $epoch]
-            
+
+            if {$supported_archs == "noarch"} {
+                $regref archs noarch
+            } elseif {[variant_exists universal] && [variant_isset universal]} {
+                $regref archs [lsort -ascii ${configure.universal_archs}]
+            } elseif {${configure.build_arch} != ""} {
+                $regref archs ${configure.build_arch}
+            } else {
+                $regref archs ${os.arch}
+            }
             # Trick to have a portable GMT-POSIX epoch-based time.
             $regref date [expr [clock scan now -gmt true] - [clock scan "1970-1-1 00:00:00" -gmt true]]
             if {[info exists default_variants]} {

Modified: trunk/base/src/port1.0/portmain.tcl
===================================================================
--- trunk/base/src/port1.0/portmain.tcl	2010-03-04 03:54:09 UTC (rev 64371)
+++ trunk/base/src/port1.0/portmain.tcl	2010-03-04 04:53:54 UTC (rev 64372)
@@ -48,6 +48,7 @@
 options long_description description homepage license provides conflicts replaced_by
 options worksrcdir filesdir distname portdbpath libpath distpath sources_conf os.platform os.version os.major os.arch os.endian platforms default_variants install.user install.group macosx_deployment_target
 options universal_variant os.universal_supported
+options supported_archs
 options copy_log_files
 options compiler.cpath compiler.library_path
 
@@ -74,6 +75,8 @@
 default worksrcdir {$distname}
 default filespath {[file join $portpath $filesdir]}
 default worksrcpath {[file join $workpath $worksrcdir]}
+# empty list means all archs are supported
+default supported_archs {}
 
 # Configure settings
 default install.user {${portutil::autoconf::install_user}}

Modified: trunk/base/src/port1.0/portutil.tcl
===================================================================
--- trunk/base/src/port1.0/portutil.tcl	2010-03-04 03:54:09 UTC (rev 64371)
+++ trunk/base/src/port1.0/portutil.tcl	2010-03-04 04:53:54 UTC (rev 64372)
@@ -1869,6 +1869,8 @@
         ui_debug "not using configure, so not adding the default universal variant"
     } elseif {![exists os.universal_supported] || ![option os.universal_supported]} {
         ui_debug "OS doesn't support universal builds, so not adding the default universal variant"
+    } elseif {[llength [option supported_archs]] == 1} {
+        ui_debug "only one arch supported, so not adding the default universal variant"
     } else {
         ui_debug "adding the default universal variant"
         variant universal {}

Modified: trunk/base/src/registry2.0/entryobj.c
===================================================================
--- trunk/base/src/registry2.0/entryobj.c	2010-03-04 03:54:09 UTC (rev 64371)
+++ trunk/base/src/registry2.0/entryobj.c	2010-03-04 04:53:54 UTC (rev 64372)
@@ -52,6 +52,7 @@
     "date",
     "state",
     "installtype",
+    "archs",
     NULL
 };
 
@@ -372,6 +373,7 @@
     { "date", entry_obj_prop },
     { "state", entry_obj_prop },
     { "installtype", entry_obj_prop },
+    { "archs", entry_obj_prop },
     /* filemap */
     { "map", entry_obj_filemap },
     { "unmap", entry_obj_filemap },
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100303/bc842931/attachment-0001.html>


More information about the macports-changes mailing list