Changeset 2040 for trunk/base


Ignore:
Timestamp:
Feb 18, 2003, 8:31:15 AM (21 years ago)
Author:
kevin
Message:

Create a top-level view of dependencies via the port index, then sort them,
suppressing duplicates.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/base/src/port1.0/portmpkg.tcl

    r1638 r2040  
    6060}
    6161
    62 proc package_mpkg {portname portversion} {
    63     global portdbpath destpath workpath contents prefix portresourcepath description package.destpath long_description homepage depends_run depends_lib
    64 
    65         # get the union of depends_run and depends_lib, ignore everything but the portfile.
    66         set depends {}
    67         if {[info exists depends_run]} {eval "lappend depends $depends_run"}
    68         if {[info exists depends_lib]} {eval "lappend depends $depends_lib"}
    69         set ports {}
    70         foreach depspec $depends {
    71                 set depname [lindex [split $depspec :] 2]
    72 
    73                 # nasty hack
    74                 if {$depname != "XFree86"} {
    75                         lappend ports $depname
    76                 }
    77         }
    78         set ports [lsort -unique $ports]
    79 
    80         set pkgpath ${package.destpath}/${portname}.pkg
    81         set mpkgpath ${package.destpath}/${portname}.mpkg
    82         system "mkdir -p -m 0755 ${mpkgpath}/Contents/Resources"
    83 
    84         if {[llength $ports] > 0} {
    85                 set dependencies {}
    86                
    87                 # Create mpkgs for each of our dependencies inside our resources directory.
    88                 foreach port $ports {
    89                         if {[catch {set res [dportsearch "^$port\$"]} result]} {
    90                                 ui_error "port search failed: $result"
    91                                 return 1
    92                         }
    93                         foreach {name array} $res {
    94                                 array set portinfo $array
    95                                
    96                                 if [info exists portinfo(porturl)] {
    97                                         # only the prefix gets passed to the worker.
    98                                         set worker [dportopen $portinfo(porturl) [list prefix $prefix package.destpath ${mpkgpath}/Contents/Resources]]
    99                                         if {[info exists portinfo(depends_run)] || [info exists portinfo(depends_lib)]} {
    100                                                 dportexec $worker mpkg
    101                                                 lappend dependencies ${portinfo(name)}.mpkg
    102                                                 # Remove intermediate .pkg, since the .pkg will have been copied into the .mpkg resources directory.
    103                                                 system "rm -R ${mpkgpath}/Contents/Resources/${portinfo(name)}.pkg"
    104                                         } else {
    105                                                 dportexec $worker package
    106                                                 lappend dependencies ${portinfo(name)}.pkg
    107                                         }
     62proc make_dependency_list {portname} {
     63        set result {}
     64        if {[catch {set res [dportsearch "^$portname\$"]} error]} {
     65                ui_error "port search failed: $error"
     66                return 1
     67        }
     68        foreach {name array} $res {
     69                array set portinfo $array
     70
     71                if {[info exists portinfo(depends_run)] || [info exists portinfo(depends_lib)]} {
     72                        # get the union of depends_run and depends_lib
     73                        # xxx: only examines the portfile component of the depspec
     74                        set depends {}
     75                        if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
     76                        if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
     77
     78                        foreach depspec $depends {
     79                                set dep [lindex [split $depspec :] 2]
     80       
     81                                # xxx: nasty hack
     82                                if {$dep != "XFree86"} {
     83                                        eval "lappend result [make_dependency_list $dep]"
    10884                                }
    109                                
    110                                 unset portinfo
    11185                        }
    11286                }
     87                lappend result $portinfo(name)/$portinfo(version)
     88                unset portinfo
     89        }
     90        ui_debug "dependencies for ${portname}: $result"
     91        return $result
     92}
     93
     94proc make_one_package {portname portversion mpkgpath} {
     95        global prefix package.destpath
     96        if {[catch {set res [dportsearch "^$portname\$"]} result]} {
     97                ui_error "port search failed: $result"
     98                return 1
     99        }
     100        foreach {name array} $res {
     101                array set portinfo $array
     102               
     103                if {[info exists portinfo(porturl)] && [info exists portinfo(version)] && $portinfo(version) == $portversion} {
     104                        # only the prefix gets passed to the worker.
     105                        ui_debug "building dependency package: $portname"
     106                        set worker [dportopen $portinfo(porturl) [list prefix $prefix package.destpath ${mpkgpath}/Contents/Resources package.type pkg]]
     107                        dportexec $worker package
     108                }
     109               
     110                unset portinfo
     111        }
     112}
     113
     114proc package_mpkg {portname portversion} {
     115    global portdbpath destpath workpath prefix portresourcepath description package.destpath long_description homepage depends_run depends_lib
     116
     117        set pkgpath ${package.destpath}/${portname}-${portversion}.pkg
     118        set mpkgpath ${package.destpath}/${portname}-${portversion}.mpkg
     119        system "mkdir -p -m 0755 ${mpkgpath}/Contents/Resources"
     120
     121        set dependencies {}
     122        # get deplist
     123        set deps [make_dependency_list $portname]
     124        set deps [lsort -unique $deps]
     125        foreach dep $deps {
     126                set name [lindex [split $dep /] 0]
     127                set vers [lindex [split $dep /] 1]
     128                # don't re-package ourself
     129                if {$name != $portname} {
     130                        make_one_package $name $vers $mpkgpath
     131                        lappend dependencies ${name}-${vers}.pkg
     132                }
    113133        }
    114134       
    115135        # copy our own pkg into the mpkg
    116136        system "cp -RPp ${pkgpath} ${mpkgpath}/Contents/Resources/"
    117         lappend dependencies ${portname}.pkg
     137        lappend dependencies ${portname}-${portversion}.pkg
    118138       
    119139    write_PkgInfo ${mpkgpath}/Contents/PkgInfo
     
    129149        }
    130150    }
    131     write_welcome_rtf ${mpkgpath}/Contents/Resources/Welcome.rtf $portname $portversion $pkg_long_description $pkg_description $pkg_homepage
     151    write_welcome_html ${mpkgpath}/Contents/Resources/Welcome.rtf $portname $portversion $pkg_long_description $pkg_description $pkg_homepage
    132152    file copy -force -- ${portresourcepath}/package/background.tiff ${mpkgpath}/Contents/Resources/background.tiff
    133153
Note: See TracChangeset for help on using the changeset viewer.