[91437] trunk/base/src/package1.0

jmr at macports.org jmr at macports.org
Sun Apr 1 16:09:51 PDT 2012


Revision: 91437
          https://trac.macports.org/changeset/91437
Author:   jmr at macports.org
Date:     2012-04-01 16:09:48 -0700 (Sun, 01 Apr 2012)
Log Message:
-----------
support Distribution packages in portmpkg

Modified Paths:
--------------
    trunk/base/src/package1.0/portmpkg.tcl
    trunk/base/src/package1.0/portpkg.tcl

Modified: trunk/base/src/package1.0/portmpkg.tcl
===================================================================
--- trunk/base/src/package1.0/portmpkg.tcl	2012-04-01 22:02:11 UTC (rev 91436)
+++ trunk/base/src/package1.0/portmpkg.tcl	2012-04-01 23:09:48 UTC (rev 91437)
@@ -48,10 +48,12 @@
 set_ui_prefix
 
 proc portmpkg::mpkg_main {args} {
-    global subport version revision package.destpath package.flat UI_PREFIX
+    global subport version revision os.major package.destpath package.flat UI_PREFIX
 
-    # Make sure the destination path exists.
-    file mkdir ${package.destpath}
+    if {!${package.flat} || ${os.major} < 10} {
+        # Make sure the destination path exists.
+        file mkdir ${package.destpath}
+    }
 
     return [package_mpkg $subport $version $revision]
 }
@@ -116,16 +118,25 @@
 }
 
 proc portmpkg::package_mpkg {portname portversion portrevision} {
-    global portdbpath destpath workpath prefix porturl description package.destpath package.flat long_description homepage depends_run depends_lib
+    global portdbpath os.major destpath workpath prefix porturl description package.destpath package.flat long_description homepage depends_run depends_lib
 
-	set pkgpath ${package.destpath}/${portname}-${portversion}.pkg
 	set mpkgpath ${package.destpath}/${portname}-${portversion}.mpkg
-	system "mkdir -p -m 0755 ${mpkgpath}/Contents/Resources"
-	system "mkdir -p -m 0755 ${mpkgpath}/Contents/Packages"
 
+    if {${package.flat} && ${os.major} >= 10} {
+        set pkgpath ${package.destpath}/${portname}-${portversion}-component.pkg
+        set packages_path ${workpath}/mpkg_packages
+        set resources_path ${workpath}/mpkg_resources
+    } else {
+        set pkgpath ${package.destpath}/${portname}-${portversion}.pkg
+	    set packages_path ${mpkgpath}/Contents/Packages
+	    set resources_path ${mpkgpath}/Contents/Resources
+	}
+	system "mkdir -p -m 0755 ${packages_path}"
+	system "mkdir -p -m 0755 ${resources_path}"
+
 	set dependencies {}
 	# get deplist
-	set deps [make_dependency_list $portname ${mpkgpath}/Contents/Packages]
+	set deps [make_dependency_list $portname $packages_path]
 	set deps [lsort -unique $deps]
 	foreach dep $deps {
 		set name [lindex $dep 0]
@@ -134,17 +145,28 @@
 		# don't re-package ourself
 		if {$name != $portname} {
 			make_one_package $name $vers $mport
-			lappend dependencies ${name}-${vers}.pkg
+			if {${package.flat} && ${os.major} >= 10} {
+			    lappend dependencies org.macports.${name} ${name}-${vers}-component.pkg
+			} else {
+			    lappend dependencies ${name}-${vers}.pkg
+			}
 		}
 	}
+	if {${package.flat} && ${os.major} >= 10} {
+	    lappend dependencies org.macports.${portname} ${portname}-${portversion}-component.pkg
+	} else {
+	    lappend dependencies ${portname}-${portversion}.pkg
+	}
 
-	# copy our own pkg into the mpkg
-	system "cp -PR ${pkgpath} ${mpkgpath}/Contents/Packages/"
-	lappend dependencies ${portname}-${portversion}.pkg
-	
-    portpkg::write_PkgInfo ${mpkgpath}/Contents/PkgInfo
-    mpkg_write_info_plist ${mpkgpath}/Contents/Info.plist $portname $portversion $portrevision $prefix $dependencies
-    portpkg::write_description_plist ${mpkgpath}/Contents/Resources/Description.plist $portname $portversion $description
+    # copy our own pkg into the mpkg
+    system "cp -PR ${pkgpath} ${packages_path}"
+
+    if {!${package.flat} || ${os.major} < 10} {
+        portpkg::write_PkgInfo ${mpkgpath}/Contents/PkgInfo
+        mpkg_write_info_plist ${mpkgpath}/Contents/Info.plist $portname $portversion $portrevision $prefix $dependencies
+        portpkg::write_description_plist ${mpkgpath}/Contents/Resources/Description.plist $portname $portversion $description
+        set resources_path ${mpkgpath}/Contents/Resources
+    }
     # long_description, description, or homepage may not exist
     foreach variable {long_description description homepage} {
         if {![info exists $variable]} {
@@ -153,12 +175,53 @@
             set pkg_$variable [set $variable]
         }
     }
-    portpkg::write_welcome_html ${mpkgpath}/Contents/Resources/Welcome.html $portname $portversion $pkg_long_description $pkg_description $pkg_homepage
-    file copy -force -- [getportresourcepath $porturl "port1.0/package/background.tiff"] ${mpkgpath}/Contents/Resources/background.tiff
+    portpkg::write_welcome_html ${resources_path}/Welcome.html $portname $portversion $pkg_long_description $pkg_description $pkg_homepage
+    file copy -force -- [getportresourcepath $porturl "port1.0/package/background.tiff"] ${resources_path}/background.tiff
 
+    if {${package.flat} && ${os.major} >= 10} {
+        write_distribution ${workpath}/Distribution $portname $dependencies
+        set productbuild [findBinary productbuild]
+        set cmdline "$productbuild --resources ${resources_path} --identifier org.macports.mpkg.${portname} --distribution ${workpath}/Distribution --package-path ${packages_path} ${mpkgpath}"
+        ui_debug "Running command line: $cmdline"
+        system $cmdline
+    }
+
 	return 0
 }
 
+proc portmpkg::write_distribution {dfile portname dependencies} {
+    global macosx_deployment_target
+    set portname [xml_escape $portname]
+    set dfd [open $dfile w+]
+    puts $dfd "<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<installer-gui-script minSpecVersion=\"1\">
+    <title>${portname}</title>
+    <options customize=\"never\"/>
+    <allowed-os-versions><os-version min=\"${macosx_deployment_target}\"/></allowed-os-versions>
+    <background file=\"background.tiff\" mime-type=\"image/tiff\" alignment=\"bottomleft\" scaling=\"none\"/>
+    <welcome mime-type=\"text/html\" file=\"Welcome.html\"/>
+    <choices-outline>
+    <line choice=\"default\">
+        <line choice=\"org.macports.mpkg.${portname}\"/>
+    </line>
+    </choices-outline>
+    <choice id=\"default\"/>
+    <choice id=\"org.macports.mpkg.${portname}\" visible=\"false\">
+"
+    foreach {identifier package} $dependencies {
+        set id [xml_escape $identifier]
+        set pkg [xml_escape $package]
+        puts $dfd "        <pkg-ref id=\"${id}\"/>"
+        lappend pkgrefs "<pkg-ref id=\"${id}\">${pkg}</pkg-ref>"
+    }
+    puts $dfd "    </choice>"
+    foreach pkgref $pkgrefs {
+        puts $dfd "    $pkgref"
+    }
+    puts $dfd "</installer-gui-script>"
+    close $dfd
+}
+
 proc portmpkg::xml_escape {s} {
 	regsub -all {&} $s {\&} s
 	regsub -all {<} $s {\<} s

Modified: trunk/base/src/package1.0/portpkg.tcl
===================================================================
--- trunk/base/src/package1.0/portpkg.tcl	2012-04-01 22:02:11 UTC (rev 91436)
+++ trunk/base/src/package1.0/portpkg.tcl	2012-04-01 23:09:48 UTC (rev 91437)
@@ -153,13 +153,14 @@
             system $cmdline
 
             if {${package.flat} && ${os.major} >= 10} {
+                # the package we just built is just a component
+                set componentpath "[file rootname ${pkgpath}]-component.pkg"
+                file rename -force ${pkgpath} ${componentpath}
                 # Generate a distribution
-                set distpkgpath [file rootname ${pkgpath}]-dist.pkg
                 set productbuild [findBinary productbuild]
-                set cmdline "$productbuild --resources ${package.resources} --identifier org.macports.${portname} --distribution ${workpath}/Distribution --package-path ${workpath} ${distpkgpath}"
+                set cmdline "$productbuild --resources ${package.resources} --identifier org.macports.${portname} --distribution ${workpath}/Distribution --package-path ${package.destpath} ${pkgpath}"
                 ui_debug "Running command line: $cmdline"
                 system $cmdline
-                file rename -force ${distpkgpath} ${pkgpath}
             }
         } else {
             write_info_plist ${workpath}/Info.plist $portname $portversion $portrevision
@@ -379,7 +380,7 @@
     <choice id=\"org.macports.${portname}\" visible=\"false\">
         <pkg-ref id=\"org.macports.${portname}\"/>
     </choice>
-    <pkg-ref id=\"org.macports.${portname}\">${portname}-${portversion}.pkg</pkg-ref>
+    <pkg-ref id=\"org.macports.${portname}\">${portname}-${portversion}-component.pkg</pkg-ref>
 </installer-gui-script>
 "
     close $dfd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20120401/3cce4d69/attachment.html>


More information about the macports-changes mailing list