[78390] trunk/base/src

jmr at macports.org jmr at macports.org
Thu May 5 23:42:31 PDT 2011


Revision: 78390
          http://trac.macports.org/changeset/78390
Author:   jmr at macports.org
Date:     2011-05-05 23:42:30 -0700 (Thu, 05 May 2011)
Log Message:
-----------
in portmpkg, get dependencies from portfiles not the index

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

Modified: trunk/base/src/macports1.0/macports.tcl
===================================================================
--- trunk/base/src/macports1.0/macports.tcl	2011-05-06 06:28:10 UTC (rev 78389)
+++ trunk/base/src/macports1.0/macports.tcl	2011-05-06 06:42:30 UTC (rev 78390)
@@ -997,6 +997,7 @@
     $workername alias mport_open mportopen
     $workername alias mport_close mportclose
     $workername alias mport_lookup mportlookup
+    $workername alias mport_info mportinfo
     $workername alias set_phase set_phase
 
     # instantiate the UI call-backs

Modified: trunk/base/src/package1.0/portmpkg.tcl
===================================================================
--- trunk/base/src/package1.0/portmpkg.tcl	2011-05-06 06:28:10 UTC (rev 78389)
+++ trunk/base/src/package1.0/portmpkg.tcl	2011-05-06 06:42:30 UTC (rev 78390)
@@ -50,66 +50,66 @@
     global subport version revision package.destpath package.flat UI_PREFIX
 
     # Make sure the destination path exists.
-    system "mkdir -p ${package.destpath}"
+    file mkdir ${package.destpath}
 
     return [package_mpkg $subport $version $revision]
 }
 
-proc portmpkg::make_dependency_list {portname} {
+proc portmpkg::make_dependency_list {portname destination} {
+    global variations prefix package.destpath package.flat
 	set result {}
 	if {[catch {set res [mport_lookup $portname]} error]} {
 		global errorInfo
 		ui_debug "$errorInfo"
-		ui_error "port lookup failed: $error"
-		return 1
+		return -code error "port lookup failed: $error"
 	}
-	foreach {name array} $res {
-		array set portinfo $array
+	array set portinfo [lindex $res 1]
 
-		if {[info exists portinfo(depends_run)] || [info exists portinfo(depends_lib)]} {
-			# get the union of depends_run and depends_lib
-			# xxx: only examines the portfile component of the depspec
-			set depends {}
-			if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
-			if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
+	if {[getuid] == 0 && [geteuid] != 0} {
+		setegid 0; seteuid 0
+		set deprivileged 1
+	}
 
-			foreach depspec $depends {
-				set dep [lindex [split $depspec :] end]
-				eval "lappend result [make_dependency_list $dep]"
-			}
-		}
-		lappend result $portinfo(name)/$portinfo(version)
-		unset portinfo
+	set mport [mport_open $portinfo(porturl) [list prefix $prefix package.destpath ${destination} package.flat ${package.flat} subport $portinfo(name)] [array get variations]]
+
+    if {[info exists deprivileged]} {
+	    global macportsuser
+		setegid [uname_to_gid "$macportsuser"]
+		seteuid [name_to_uid "$macportsuser"]
 	}
+
+    unset portinfo
+    array set portinfo [mport_info $mport]
+
+    # get the union of depends_run and depends_lib
+    set depends {}
+    if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
+    if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
+
+    foreach depspec $depends {
+        set dep [_get_dep_port $depspec]
+        if {$dep != ""} {
+            eval "lappend result [make_dependency_list $dep $destination]"
+        }
+    }
+
+    lappend result [list $portinfo(name) $portinfo(version) $mport]
 	ui_debug "dependencies for ${portname}: $result"
 	return $result
 }
 
-proc portmpkg::make_one_package {portname portversion destination} {
-	global prefix package.destpath package.flat macportsuser variations
-	if {[catch {set res [mport_lookup $portname]} result]} {
-		global errorInfo
-		ui_debug "$errorInfo"
-		ui_error "port lookup failed: $result"
-		return 1
-	}
+proc portmpkg::make_one_package {portname portversion mport} {
 	if {[getuid] == 0 && [geteuid] != 0} {
 		setegid 0; seteuid 0
 		set deprivileged 1
 	}
-	foreach {name array} $res {
-		array set portinfo $array
-		
-		if {[info exists portinfo(porturl)] && [info exists portinfo(version)] && $portinfo(version) == $portversion} {
-			# only the prefix gets passed to the worker.
-			ui_debug "building dependency package: $portname"
-			set worker [mport_open $portinfo(porturl) [list prefix $prefix package.destpath ${destination} package.flat ${package.flat} subport $portinfo(name)] [array get variations] yes]
-			mport_exec $worker pkg
-			mport_close $worker
-		}
-		unset portinfo
-	}
+
+    ui_debug "building dependency package: $portname"
+    mport_exec $mport pkg
+    mport_close $mport
+
 	if {[info exists deprivileged]} {
+	    global macportsuser
 		setegid [uname_to_gid "$macportsuser"]
 		seteuid [name_to_uid "$macportsuser"]
 	}
@@ -125,18 +125,19 @@
 
 	set dependencies {}
 	# get deplist
-	set deps [make_dependency_list $portname]
+	set deps [make_dependency_list $portname ${mpkgpath}/Contents/Packages]
 	set deps [lsort -unique $deps]
 	foreach dep $deps {
-		set name [lindex [split $dep /] 0]
-		set vers [lindex [split $dep /] 1]
+		set name [lindex $dep 0]
+		set vers [lindex $dep 1]
+		set mport [lindex $dep 2]
 		# don't re-package ourself
 		if {$name != $portname} {
-			make_one_package $name $vers $mpkgpath/Contents/Packages
+			make_one_package $name $vers $mport
 			lappend dependencies ${name}-${vers}.pkg
 		}
 	}
-	
+
 	# copy our own pkg into the mpkg
 	system "cp -PR ${pkgpath} ${mpkgpath}/Contents/Packages/"
 	lappend dependencies ${portname}-${portversion}.pkg
@@ -146,11 +147,11 @@
     portpkg::write_description_plist ${mpkgpath}/Contents/Resources/Description.plist $portname $portversion $description
     # long_description, description, or homepage may not exist
     foreach variable {long_description description homepage} {
-	if {![info exists $variable]} {
-	    set pkg_$variable ""
-	} else {
-	    set pkg_$variable [set $variable]
-	}
+        if {![info exists $variable]} {
+            set pkg_$variable ""
+        } else {
+            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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20110505/5897be2e/attachment-0001.html>


More information about the macports-changes mailing list