Ignore:
Timestamp:
Jan 27, 2014, 3:39:11 PM (7 years ago)
Author:
cal@…
Message:

portmgr/packaging: whitespace only, unify whitespace, reindent

Location:
trunk/base/portmgr/packaging
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/base/portmgr/packaging/dpkgall.tcl

    r116517 r116518  
    1313# are met:
    1414# 1. Redistributions of source code must retain the above copyright
    15 #    notice, this list of conditions and the following disclaimer.
     15#        notice, this list of conditions and the following disclaimer.
    1616# 2. Redistributions in binary form must reproduce the above copyright
    17 #    notice, this list of conditions and the following disclaimer in the
    18 #    documentation and/or other materials provided with the distribution.
     17#        notice, this list of conditions and the following disclaimer in the
     18#        documentation and/or other materials provided with the distribution.
    1919# 3. Neither the name of Apple Inc. nor the names of its contributors
    20 #    may be used to endorse or promote products derived from this software
    21 #    without specific prior written permission.
    22 # 
     20#        may be used to endorse or promote products derived from this software
     21#        without specific prior written permission.
     22#
    2323# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    2424# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     
    8989# MacPorts UI Event Callbacks
    9090proc ui_prefix {priority} {
    91     switch $priority {
    92         debug {
    93                 return "Debug: "
    94         }
    95         error {
    96                 return "Error: "
    97         }
    98         warn {
    99                 return "Warning: "
    100         }
    101         default {
    102                 return ""
    103         }
    104     }
     91        switch $priority {
     92                debug {
     93                        return "Debug: "
     94                }
     95                error {
     96                        return "Error: "
     97                }
     98                warn {
     99                        return "Warning: "
     100                }
     101                default {
     102                        return ""
     103                }
     104        }
    105105}
    106106
     
    303303        }
    304304
    305         # We must have dpkg by now 
     305        # We must have dpkg by now
    306306        if {[catch {set_architecture} result]} {
    307307                puts "$result."
     
    433433
    434434                if {![info exists portinfo(name)] ||
    435                         ![info exists portinfo(version)] || 
    436                         ![info exists portinfo(revision)] || 
     435                        ![info exists portinfo(version)] ||
     436                        ![info exists portinfo(revision)] ||
    437437                        ![info exists portinfo(categories)]} {
    438438                        ui_noisy_error "Internal error: $name missing some portinfo keys"
     
    441441                }
    442442
    443         # open correct subport
    444         set options(subport) $portinfo(name)
     443                # open correct subport
     444                set options(subport) $portinfo(name)
    445445
    446446                # Skip un-supported ports
     
    556556
    557557                ui_silent "Package build for $portinfo(name) succeeded"
    558                
     558
    559559                # Into the apt repository you go!
    560560                copy_pkg_to_apt $portinfo(name) $portinfo(version) $portinfo(revision) [lindex $portinfo(categories) 0]
     
    598598                }
    599599
    600                 if {[info exists newpkglist]} {         
     600                if {[info exists newpkglist]} {
    601601                        set pkglist [lsort -unique [concat $newpkglist $pkglist]]
    602602                }
     
    695695
    696696        foreach port [get_required_ports] {
    697             set options(subport) $port
     697                set options(subport) $port
    698698                if {[catch {do_portexec $port [array get options] [array get variants] activate} result]} {
    699699                        global errorInfo
     
    719719                ui_msg "Done."
    720720        }
    721                        
     721
    722722
    723723        if {[catch {set_architecture} result]} {
     
    859859proc get_dependencies_recurse {portname includeBuildDeps} {
    860860        set result {}
    861        
     861
    862862        set res [get_portinfo $portname]
    863863
     
    865865                array set portinfo $array
    866866                if {![info exists portinfo(name)] ||
    867                         ![info exists portinfo(version)] || 
    868                         ![info exists portinfo(revision)] || 
     867                        ![info exists portinfo(version)] ||
     868                        ![info exists portinfo(revision)] ||
    869869                        ![info exists portinfo(categories)]} {
    870870                        ui_error "Internal error: $name missing some portinfo keys"
     
    878878                if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
    879879                if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
    880                 if {$includeBuildDeps == "true" && [info exists portinfo(depends_build)]} { 
     880                if {$includeBuildDeps == "true" && [info exists portinfo(depends_build)]} {
    881881                        eval "lappend depends $portinfo(depends_build)"
    882882                }
    883                 if {$includeBuildDeps == "true" && [info exists portinfo(depends_fetch)]} { 
     883                if {$includeBuildDeps == "true" && [info exists portinfo(depends_fetch)]} {
    884884                        eval "lappend depends $portinfo(depends_fetch)"
    885885                }
    886                 if {$includeBuildDeps == "true" && [info exists portinfo(depends_extract)]} { 
     886                if {$includeBuildDeps == "true" && [info exists portinfo(depends_extract)]} {
    887887                        eval "lappend depends $portinfo(depends_extract)"
    888888                }
     
    914914                set verstring ${portversion}
    915915        }
    916        
     916
    917917        set receiptdir [file join $portprefix var db receipts ${portname} ${verstring}]
    918918        set pkgpath [get_pkgpath ${portname} ${portversion} ${portrevision}]
  • trunk/base/portmgr/packaging/mpkgall.tcl

    r116517 r116518  
    1111# are met:
    1212# 1. Redistributions of source code must retain the above copyright
    13 #    notice, this list of conditions and the following disclaimer.
     13#        notice, this list of conditions and the following disclaimer.
    1414# 2. Redistributions in binary form must reproduce the above copyright
    15 #    notice, this list of conditions and the following disclaimer in the
    16 #    documentation and/or other materials provided with the distribution.
     15#        notice, this list of conditions and the following disclaimer in the
     16#        documentation and/or other materials provided with the distribution.
    1717# 3. Neither the name of Apple Inc. nor the names of its contributors
    18 #    may be used to endorse or promote products derived from this software
    19 #    without specific prior written permission.
    20 # 
     18#        may be used to endorse or promote products derived from this software
     19#        without specific prior written permission.
     20#
    2121# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    2222# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     
    5454        # XXX: probably should exclude KDE here too
    5555        if {$portname == "XFree86"} { return {} }
    56        
     56
    5757        if {[catch {set res [mportsearch "^$portname\$"]} error]} {
    5858                puts stderr "Internal error: port search failed: $error"
     
    6464                if {![info exists portinfo(version)]} { return -1 }
    6565                if {![info exists portinfo(categories)]} { return -1 }
    66                
     66
    6767                set portname $portinfo(name)
    6868                set portversion $portinfo(version)
    6969                set category [lindex $portinfo(categories) 0]
    70                
     70
    7171                set depends {}
    7272                if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
     
    7676                        set dep [lindex [split $depspec :] end]
    7777                        set result [copy_package_if_available $dep $basepath $destpath]
    78                         if {$result == -1} { 
     78                        if {$result == -1} {
    7979                                return -1
    8080                        } else {
     
    8282                        }
    8383                }
    84                
     84
    8585                set pkgname "${portname}-${portversion}.pkg"
    8686                lappend dependencies $pkgname
     
    9696                }
    9797        }
    98        
     98
    9999        return $dependencies
    100100}
     
    121121
    122122proc write_welcome_html {filename portname portversion long_description description homepage} {
    123     set fd [open ${filename} w+]
    124     if {$long_description eq ""} {
    125         set long_description $description
    126     }
     123        set fd [open ${filename} w+]
     124        if {$long_description eq ""} {
     125                set long_description $description
     126        }
    127127
    128128puts $fd "
     
    138138<p>"
    139139
    140     if {$homepage ne ""} {
    141         puts $fd "<font face=\"Helvetica\">${homepage}</font><p>"
    142     }
    143 
    144     puts $fd "<font face=\"Helvetica\">This installer guides you through the steps necessary to install ${portname} ${portversion} for Mac OS X. To get started, click Continue.</font>
     140        if {$homepage ne ""} {
     141                puts $fd "<font face=\"Helvetica\">${homepage}</font><p>"
     142        }
     143
     144        puts $fd "<font face=\"Helvetica\">This installer guides you through the steps necessary to install ${portname} ${portversion} for Mac OS X. To get started, click Continue.</font>
    145145</body>
    146146</html>"
    147147
    148     close $fd
     148        close $fd
    149149}
    150150
     
    157157proc mpkg_write_info_plist {infofile portname portversion portrevision destination dependencies} {
    158158        set vers [split $portversion "."]
    159        
     159
    160160        if {[string index $destination end] ne "/"} {
    161161                append destination /
    162162        }
    163        
     163
    164164        set depxml ""
    165165        foreach dep $dependencies {
     
    207207
    208208proc fatal args {
    209     global argv0
    210     puts stderr "$argv0: $args"
    211     exit
     209        global argv0
     210        puts stderr "$argv0: $args"
     211        exit
    212212}
    213213
     
    218218
    219219if {[catch {mportinit ui_options options variations} result]} {
    220     puts "Failed to initialize ports system, $result"
    221     exit 1
     220        puts "Failed to initialize ports system, $result"
     221        exit 1
    222222}
    223223
     
    226226# If no arguments were given, default to all ports.
    227227if {[llength $argv] == 0} {
    228         lappend argv ".*"
     228        lappend argv ".*"
    229229}
    230230
    231231foreach pname $argv {
    232 
    233 if {[catch {set res [mportsearch "^${pname}\$"]} result]} {
    234         puts "port search failed: $result"
    235         exit 1
    236 }
    237 
    238 foreach {name array} $res {
    239         global prefix
    240         array unset portinfo
    241         array set portinfo $array
    242 
    243         if {![info exists portinfo(porturl)]} {
    244                 puts stderr "Internal error: no porturl for $name"
    245                 continue
    246         }
    247        
    248         set pkgbase "/darwinports/pkgs/"
    249         set mpkgbase "/darwinports/mpkgs/"
    250         set porturl $portinfo(porturl)
    251         set prefix "/opt/local"
    252 
    253         # Skip up-to-date packages
    254         if {[regsub {^file://} $portinfo(porturl) "" portpath]} {
    255                 if {[info exists portinfo(name)] &&
    256                         [info exists portinfo(version)] &&
    257                         [info exists portinfo(categories)]} {
    258                         set portname $portinfo(name)
    259                         set portversion $portinfo(version)
    260                         set category [lindex $portinfo(categories) 0]
    261                         set mpkgfile ${mpkgbase}/${category}/${portname}-${portversion}.mpkg/Contents/Info.plist
    262                         if {[file readable $mpkgfile] && ([file mtime ${mpkgfile}] > [file mtime ${portpath}/Portfile])} {
    263                                 puts stderr "Skipping ${portname}-${portversion}; meta-package is up to date."
    264                                 continue
    265                         }
    266                 }
    267         }
    268        
    269         # Skipt packages which previously failed
    270                
    271         # Building the mpkg:
    272         # - create an mpkg skeleton
    273         # - copy dependent pkgs into Contents/Resources directory
    274 
    275         set portname ""
    276         set portversion ""
    277         set description ""
    278         set long_description ""
    279         set homepage ""
    280         set category ""
    281 
    282         if {[info exists portinfo(name)]} {     set portname $portinfo(name) }
    283         if {[info exists portinfo(version)]} { set portversion $portinfo(version) }
    284         if {[info exists portinfo(description)]} { set description $portinfo(description) }
    285         if {[info exists portinfo(long_description)]} { set long_description $portinfo(long_description) }
    286         if {[info exists portinfo(homepage)]} { set homepage $portinfo(homepage) }
    287         if {[info exists portinfo(categories)]} { set category [lindex $portinfo(categories) 0] }
    288         if {[info exists portinfo(maintainers)]} { set maintainers $portinfo(maintainers) }
    289        
    290         puts "meta-packaging ${category}/${portname}-${portversion}"
    291 
    292         set mpkgpath "${mpkgbase}/${category}/${portname}-${portversion}.mpkg"
    293 
    294         if {[catch {system "mkdir -p -m 0755 ${mpkgpath}/Contents/Resources"} error]} {
    295                 puts stderr "Internal error: $error"
    296         }
    297        
    298         # list of .pkg names for dependencies,
    299         # built up by copy_package_if_available, and used in the Info.plist
    300         set dependencies {}
    301         set result [copy_package_if_available ${portname} $pkgbase "${mpkgpath}/Contents/Resources/"]
    302         if {$result == -1} {
    303                 puts stderr "aborting; one or more dependencies was missing."
    304                 if {[catch {system "rm -R ${mpkgpath}"} error]} {
     232        if {[catch {set res [mportsearch "^${pname}\$"]} result]} {
     233                puts "port search failed: $result"
     234                exit 1
     235        }
     236
     237        foreach {name array} $res {
     238                global prefix
     239                array unset portinfo
     240                array set portinfo $array
     241
     242                if {![info exists portinfo(porturl)]} {
     243                        puts stderr "Internal error: no porturl for $name"
     244                        continue
     245                }
     246
     247                set pkgbase "/darwinports/pkgs/"
     248                set mpkgbase "/darwinports/mpkgs/"
     249                set porturl $portinfo(porturl)
     250                set prefix "/opt/local"
     251
     252                # Skip up-to-date packages
     253                if {[regsub {^file://} $portinfo(porturl) "" portpath]} {
     254                        if {[info exists portinfo(name)] &&
     255                                [info exists portinfo(version)] &&
     256                                [info exists portinfo(categories)]} {
     257                                set portname $portinfo(name)
     258                                set portversion $portinfo(version)
     259                                set category [lindex $portinfo(categories) 0]
     260                                set mpkgfile ${mpkgbase}/${category}/${portname}-${portversion}.mpkg/Contents/Info.plist
     261                                if {[file readable $mpkgfile] && ([file mtime ${mpkgfile}] > [file mtime ${portpath}/Portfile])} {
     262                                        puts stderr "Skipping ${portname}-${portversion}; meta-package is up to date."
     263                                        continue
     264                                }
     265                        }
     266                }
     267
     268                # Skipt packages which previously failed
     269
     270                # Building the mpkg:
     271                # - create an mpkg skeleton
     272                # - copy dependent pkgs into Contents/Resources directory
     273
     274                set portname ""
     275                set portversion ""
     276                set description ""
     277                set long_description ""
     278                set homepage ""
     279                set category ""
     280
     281                if {[info exists portinfo(name)]} {     set portname $portinfo(name) }
     282                if {[info exists portinfo(version)]} { set portversion $portinfo(version) }
     283                if {[info exists portinfo(description)]} { set description $portinfo(description) }
     284                if {[info exists portinfo(long_description)]} { set long_description $portinfo(long_description) }
     285                if {[info exists portinfo(homepage)]} { set homepage $portinfo(homepage) }
     286                if {[info exists portinfo(categories)]} { set category [lindex $portinfo(categories) 0] }
     287                if {[info exists portinfo(maintainers)]} { set maintainers $portinfo(maintainers) }
     288
     289                puts "meta-packaging ${category}/${portname}-${portversion}"
     290
     291                set mpkgpath "${mpkgbase}/${category}/${portname}-${portversion}.mpkg"
     292
     293                if {[catch {system "mkdir -p -m 0755 ${mpkgpath}/Contents/Resources"} error]} {
    305294                        puts stderr "Internal error: $error"
    306295                }
    307                 continue
    308         } else {
    309                 set result [lsort -uniq $result]
    310                 eval "lappend dependencies $result"
    311         }
    312        
    313         #
    314         # Begin quote from portmpkg.tcl
    315         #
    316     write_PkgInfo ${mpkgpath}/Contents/PkgInfo
    317     mpkg_write_info_plist ${mpkgpath}/Contents/Info.plist $portname $portversion $prefix $dependencies
    318     write_description_plist ${mpkgpath}/Contents/Resources/Description.plist $portname $portversion $description
    319     # long_description, description, or homepage may not exist
    320     foreach variable {long_description description homepage} {
    321         if {![info exists $variable]} {
    322             set pkg_$variable ""
    323         } else {
    324             set pkg_$variable [set $variable]
    325         }
    326     }
    327     write_welcome_html ${mpkgpath}/Contents/Resources/Welcome.html $portname $portversion $pkg_long_description $pkg_description $pkg_homepage
    328     file copy -force -- /opt/local/share/darwinports/resources/port1.0/package/background.tiff \
     296
     297                # list of .pkg names for dependencies,
     298                # built up by copy_package_if_available, and used in the Info.plist
     299                set dependencies {}
     300                set result [copy_package_if_available ${portname} $pkgbase "${mpkgpath}/Contents/Resources/"]
     301                if {$result == -1} {
     302                        puts stderr "aborting; one or more dependencies was missing."
     303                        if {[catch {system "rm -R ${mpkgpath}"} error]} {
     304                                puts stderr "Internal error: $error"
     305                        }
     306                        continue
     307                } else {
     308                        set result [lsort -uniq $result]
     309                        eval "lappend dependencies $result"
     310                }
     311
     312                #
     313                # Begin quote from portmpkg.tcl
     314                #
     315                write_PkgInfo ${mpkgpath}/Contents/PkgInfo
     316                mpkg_write_info_plist ${mpkgpath}/Contents/Info.plist $portname $portversion $prefix $dependencies
     317                write_description_plist ${mpkgpath}/Contents/Resources/Description.plist $portname $portversion $description
     318                # long_description, description, or homepage may not exist
     319                foreach variable {long_description description homepage} {
     320                        if {![info exists $variable]} {
     321                                set pkg_$variable ""
     322                        } else {
     323                                set pkg_$variable [set $variable]
     324                        }
     325                }
     326                write_welcome_html ${mpkgpath}/Contents/Resources/Welcome.html $portname $portversion $pkg_long_description $pkg_description $pkg_homepage
     327                file copy -force -- /opt/local/share/darwinports/resources/port1.0/package/background.tiff \
    329328                        ${mpkgpath}/Contents/Resources/background.tiff
    330         #
    331         # End quote from portmpkg.tcl
    332         #
    333 }
    334 
     329                #
     330                # End quote from portmpkg.tcl
     331                #
     332        }
    335333}
    336334# end foreach pname
  • trunk/base/portmgr/packaging/packageall.tcl

    r116517 r116518  
    1212# are met:
    1313# 1. Redistributions of source code must retain the above copyright
    14 #    notice, this list of conditions and the following disclaimer.
     14#        notice, this list of conditions and the following disclaimer.
    1515# 2. Redistributions in binary form must reproduce the above copyright
    16 #    notice, this list of conditions and the following disclaimer in the
    17 #    documentation and/or other materials provided with the distribution.
     16#        notice, this list of conditions and the following disclaimer in the
     17#        documentation and/or other materials provided with the distribution.
    1818# 3. Neither the name of Apple Inc. nor the names of its contributors
    19 #    may be used to endorse or promote products derived from this software
    20 #    without specific prior written permission.
    21 # 
     19#        may be used to endorse or promote products derived from this software
     20#        without specific prior written permission.
     21#
    2222# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    2323# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     
    4545# ui_options accessor
    4646proc ui_isset {val} {
    47     global ui_options
    48     if {[info exists ui_options($val)]} {
    49         if {$ui_options($val) eq "yes"} {
    50             return 1
    51         }
    52     }
    53     return 0
    54 }
    55 
    56 # UI Callback 
     47        global ui_options
     48        if {[info exists ui_options($val)]} {
     49                if {$ui_options($val) eq "yes"} {
     50                        return 1
     51                }
     52        }
     53        return 0
     54}
     55
     56# UI Callback
    5757
    5858proc ui_prefix {priority} {
    59     switch $priority {
    60         debug {
    61                 return "DEBUG: "
    62         }
    63         error {
    64                 return "Error: "
    65         }
    66         warn {
    67                 return "Warning: "
    68         }
    69         default {
    70                 return ""
    71         }
    72     }
     59        switch $priority {
     60                debug {
     61                        return "DEBUG: "
     62                }
     63                error {
     64                        return "Error: "
     65                }
     66                warn {
     67                        return "Warning: "
     68                }
     69                default {
     70                        return ""
     71                }
     72        }
    7373}
    7474
    7575proc ui_channels {priority} {
    76     global logfd
    77     switch $priority {
    78         debug {
    79             if {[ui_isset ports_debug]} {
    80                 return {stdout}
    81             } else {
    82                 return {}
    83             }
    84         }
    85         info {
     76        global logfd
     77        switch $priority {
     78                debug {
     79                        if {[ui_isset ports_debug]} {
     80                                return {stdout}
     81                        } else {
     82                                return {}
     83                        }
     84                }
     85                info {
    8686                        # put verbose stuff only to the log file
    87             if {[ui_isset ports_verbose]} {
    88                 return {$logfd}
    89             } else {
    90                 return {}
     87                        if {[ui_isset ports_verbose]} {
     88                                return {$logfd}
     89                        } else {
     90                                return {}
    9191                        }
    9292                }
    93         msg {
    94             if {[ui_isset ports_quiet]} {
    95                 return {}
     93                msg {
     94                        if {[ui_isset ports_quiet]} {
     95                                return {}
    9696                        } else {
    9797                                return {stdout}
    9898                        }
    9999                }
    100         default {
    101                 return {stdout}
    102         }
    103     }
    104 }
    105        
     100                default {
     101                        return {stdout}
     102                }
     103        }
     104}
     105
    106106proc pkg_ui_log {message} {
    107     global logfd
    108     if {$logfd ne ""} {
    109         log_message $logfd $message
    110     }
     107        global logfd
     108        if {$logfd ne ""} {
     109                log_message $logfd $message
     110        }
    111111}
    112112
    113113proc log_message {channel message} {
    114     seek $channel 0 end
    115     puts $channel $message
    116     flush $channel
     114        seek $channel 0 end
     115        puts $channel $message
     116        flush $channel
    117117}
    118118
     
    120120proc get_dependencies {portname includeBuildDeps} {
    121121        set result {}
    122        
     122
    123123        if {[catch {set res [mportsearch "^$portname\$"]} error]} {
    124124                global errorInfo
     
    130130                array set portinfo $array
    131131                if {![info exists portinfo(name)] ||
    132                         ![info exists portinfo(version)] || 
     132                        ![info exists portinfo(version)] ||
    133133                        ![info exists portinfo(categories)]} {
    134134                        ui_error "Internal error: $name missing some portinfo keys"
    135135                        continue
    136136                }
    137                
     137
    138138                set portname $portinfo(name)
    139139                set portversion $portinfo(version)
     
    148148                if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
    149149                if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
    150                 if {$includeBuildDeps ne "" && [info exists portinfo(depends_build)]} { 
     150                if {$includeBuildDeps ne "" && [info exists portinfo(depends_build)]} {
    151151                        eval "lappend depends $portinfo(depends_build)"
    152152                }
    153                 if {$includeBuildDeps ne "" && [info exists portinfo(depends_fetch)]} { 
     153                if {$includeBuildDeps ne "" && [info exists portinfo(depends_fetch)]} {
    154154                        eval "lappend depends $portinfo(depends_fetch)"
    155155                }
    156                 if {$includeBuildDeps ne "" && [info exists portinfo(depends_extract)]} { 
     156                if {$includeBuildDeps ne "" && [info exists portinfo(depends_extract)]} {
    157157                        eval "lappend depends $portinfo(depends_extract)"
    158158                }
    159                
     159
    160160                foreach depspec $depends {
    161161                        set dep [lindex [split $depspec :] end]
     
    176176        set portversion [lindex $dep 1]
    177177        set category [lindex $dep 2]
    178        
     178
    179179        set pkgpath ${basepath}/${category}/${portname}-${portversion}.pkg
    180180        if {[file readable $pkgpath]} {
     
    195195}
    196196
    197 
    198197# Standard procedures
    199198
    200199proc fatal args {
    201     global argv0
    202     puts stderr "$argv0: $args"
    203     exit
     200        global argv0
     201        puts stderr "$argv0: $args"
     202        exit
    204203}
    205204
     
    210209
    211210if {[catch {mportinit ui_options options variations} result]} {
    212     puts "Failed to initialize ports system, $result"
    213     exit 1
     211        puts "Failed to initialize ports system, $result"
     212        exit 1
    214213}
    215214
     
    222221
    223222foreach pname $argv {
    224 
    225 if {[catch {set res [mportsearch "^${pname}\$"]} result]} {
    226         puts "port search failed: $result"
    227         exit 1
    228 }
    229 
    230 set logpath "/darwinports/logs"
    231 set logfd ""
    232 
    233 foreach {name array} $res {
    234         array unset portinfo
    235         array set portinfo $array
    236 
    237         # Start with verbose output off;
    238         # this will prevent the repopulation of /opt/local from getting logged.
    239         set ui_options(ports_verbose) no
    240 
    241         if {![info exists portinfo(porturl)]} {
    242                 puts stderr "Internal error: no porturl for $name"
    243                 continue
    244         }
    245        
    246         set pkgbase /darwinports/pkgs/
    247         set porturl $portinfo(porturl)
    248 
    249         # Skip up-to-date packages
    250         if {[regsub {^file://} $portinfo(porturl) "" portpath]} {
    251                 if {[info exists portinfo(name)] &&
    252                         [info exists portinfo(version)] &&
    253                         [info exists portinfo(categories)]} {
     223        if {[catch {set res [mportsearch "^${pname}\$"]} result]} {
     224                puts "port search failed: $result"
     225                exit 1
     226        }
     227
     228        set logpath "/darwinports/logs"
     229        set logfd ""
     230
     231        foreach {name array} $res {
     232                array unset portinfo
     233                array set portinfo $array
     234
     235                # Start with verbose output off;
     236                # this will prevent the repopulation of /opt/local from getting logged.
     237                set ui_options(ports_verbose) no
     238
     239                if {![info exists portinfo(porturl)]} {
     240                        puts stderr "Internal error: no porturl for $name"
     241                        continue
     242                }
     243
     244                set pkgbase /darwinports/pkgs/
     245                set porturl $portinfo(porturl)
     246
     247                # Skip up-to-date packages
     248                if {[regsub {^file://} $portinfo(porturl) "" portpath]} {
     249                        if {[info exists portinfo(name)] &&
     250                                [info exists portinfo(version)] &&
     251                                [info exists portinfo(categories)]} {
     252                                set portname $portinfo(name)
     253                                set portversion $portinfo(version)
     254                                set category [lindex $portinfo(categories) 0]
     255                                set pkgfile ${pkgbase}/${category}/${portname}-${portversion}.pkg/Contents/Archive.pax.gz
     256                                if {[file readable $pkgfile] && ([file mtime ${pkgfile}] > [file mtime ${portpath}/Portfile])} {
     257                                        puts stderr "Skipping ${portname}-${portversion}; package is up to date."
     258                                        continue
     259                                }
     260                        }
     261                }
     262
     263                # Skipt packages which previously failed
     264
     265                # Building the port:
     266                # - remove /opt/local so it won't pollute the port.
     267                # - re-install MacPorts.
     268                # - keep distfiles outside /opt/local so we don't have to keep fetching them.
     269                # - send out an email to the maintainer if any errors occurred.
     270
     271                ui_msg "removing /opt/local"
     272                #unset ui_options(ports_verbose)
     273                if {[catch {system "rm -Rf /opt/local"} error]} {
     274                        puts stderr "Internal error: $error"
     275                }
     276                if {[catch {system "rm -Rf /usr/X11R6"} error]} {
     277                        puts stderr "Internal error: $error"
     278                }
     279                if {[catch {system "rm -Rf /etc/X11"} error]} {
     280                        puts stderr "Internal error: $error"
     281                }
     282                if {[catch {system "rm -Rf /etc/fonts"} error]} {
     283                        puts stderr "Internal error: $error"
     284                }
     285                if {[catch {system "cd $env(HOME)/darwinports && make && make install"} error]} {
     286                        puts stderr "Internal error: $error"
     287                }
     288                if {[catch {system "rmdir /opt/local/var/db/dports/distfiles"} error]} {
     289                        puts stderr "Internal error: $error"
     290                }
     291                if {[catch {system "ln -s /darwinports/distfiles /opt/local/var/db/dports/distfiles"} error]} {
     292                        puts stderr "Internal error: $error"
     293                }
     294                #set ui_options(ports_verbose) yes
     295
     296                # If there was a log file left over from the previous pass,
     297                # then the port failed with an error.  Send the log in an
     298                # email to the maintainers.
     299                if {$logfd ne ""} {
     300                        close $logfd
     301                        set logfd ""
     302                }
     303                #if {[file readable $logfilename]} {
     304                #       if {[catch {system "<$logfilename /usr/sbin/sendmail -t"} error]} {
     305                #               puts stderr "Internal error: $error"
     306                #       }
     307                #}
     308
     309                # Open the log file for writing
     310                set logfd [open ${logpath}/${name}.log w]
     311
     312                set valid 1
     313
     314                set lint_errors {}
     315                set portname ""
     316                set portversion ""
     317                set description ""
     318                set category ""
     319
     320                if {![info exists portinfo(name)]} {
     321                        lappend lint_errors "missing name key"
     322                        set valid 0
     323                } else {
    254324                        set portname $portinfo(name)
     325                }
     326
     327                if {![info exists portinfo(description)]} {
     328                        lappend lint_errors "missing description key"
     329                        set valid 0
     330                } else {
     331                        set description $portinfo(description)
     332                }
     333
     334                if {![info exists portinfo(version)]} {
     335                        lappend lint_errors "missing version key"
     336                        set valid 0
     337                } else {
    255338                        set portversion $portinfo(version)
     339                }
     340
     341                if {![info exists portinfo(categories)]} {
     342                        lappend lint_errors "missing categories key"
     343                        set valid 0
     344                } else {
    256345                        set category [lindex $portinfo(categories) 0]
    257                         set pkgfile ${pkgbase}/${category}/${portname}-${portversion}.pkg/Contents/Archive.pax.gz
    258                         if {[file readable $pkgfile] && ([file mtime ${pkgfile}] > [file mtime ${portpath}/Portfile])} {
    259                                 puts stderr "Skipping ${portname}-${portversion}; package is up to date."
    260                                 continue
     346                }
     347
     348                if {![info exists portinfo(maintainers)]} {
     349                        append lint_errors "missing maintainers key"
     350                        set valid 0
     351                        set maintainers kevin@opendarwin.org
     352                } else {
     353                        set maintainers $portinfo(maintainers)
     354                }
     355
     356                pkg_ui_log "To: [join $maintainers {, }]"
     357                pkg_ui_log "From: donotreply@opendarwin.org"
     358                pkg_ui_log "Subject: MacPorts $portinfo(name)-$portinfo(version) build failure"
     359                pkg_ui_log ""
     360                pkg_ui_log "The following is a transcript produced by the MacPorts automated build               "
     361                pkg_ui_log "system.  You are receiving this email because you are listed as a maintainer        "
     362                pkg_ui_log "of this port, which has failed the automated packaging process.  Please update      "
     363                pkg_ui_log "the port as soon as possible."
     364                pkg_ui_log ""
     365                pkg_ui_log ""
     366                pkg_ui_log "Thank you,"
     367                pkg_ui_log "The MacPorts Team"
     368                pkg_ui_log ""
     369                pkg_ui_log "================================================================================"
     370                pkg_ui_log ""
     371
     372                if {!$valid} {
     373                        foreach error $lint_errors {
     374                                ui_error $error
    261375                        }
    262376                }
    263         }
    264        
    265         # Skipt packages which previously failed
    266                
    267         # Building the port:
    268         # - remove /opt/local so it won't pollute the port.
    269         # - re-install MacPorts.
    270         # - keep distfiles outside /opt/local so we don't have to keep fetching them.
    271         # - send out an email to the maintainer if any errors occurred.
    272 
    273         ui_msg "removing /opt/local"
    274         #unset ui_options(ports_verbose)
    275         if {[catch {system "rm -Rf /opt/local"} error]} {
    276                 puts stderr "Internal error: $error"
    277         }
    278         if {[catch {system "rm -Rf /usr/X11R6"} error]} {
    279                 puts stderr "Internal error: $error"
    280         }
    281         if {[catch {system "rm -Rf /etc/X11"} error]} {
    282                 puts stderr "Internal error: $error"
    283         }
    284         if {[catch {system "rm -Rf /etc/fonts"} error]} {
    285                 puts stderr "Internal error: $error"
    286         }
    287         if {[catch {system "cd $env(HOME)/darwinports && make && make install"} error]} {
    288                 puts stderr "Internal error: $error"
    289         }
    290         if {[catch {system "rmdir /opt/local/var/db/dports/distfiles"} error]} {
    291                 puts stderr "Internal error: $error"
    292         }
    293         if {[catch {system "ln -s /darwinports/distfiles /opt/local/var/db/dports/distfiles"} error]} {
    294                 puts stderr "Internal error: $error"
    295         }
    296         #set ui_options(ports_verbose) yes
    297 
    298         # If there was a log file left over from the previous pass,
    299         # then the port failed with an error.  Send the log in an
    300         # email to the maintainers.
    301         if {$logfd ne ""} {
     377
     378                ui_msg "packaging ${category}/${portname}-${portversion}"
     379
     380                # Install binary dependencies if we can, to speed things up.
     381                #set depends {}
     382                #if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
     383                #if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
     384                #if {[info exists portinfo(depends_build)]} { eval "lappend depends $portinfo(depends_build)" }
     385                #foreach depspec $depends {
     386                #       set dep [lindex [split $depspec :] end]
     387                        #install_binary_if_available $dep $pkgbase
     388                #}
     389                set dependencies [get_dependencies $portname 1]
     390                set dependencies [lsort -unique $dependencies]
     391                foreach dep $dependencies {
     392                        install_binary_if_available $dep $pkgbase
     393                }
     394
     395                set options(package.type) pkg
     396                set options(package.destpath) ${pkgbase}/${category}/
     397
     398                # Turn on verbose output for the build
     399                set ui_options(ports_verbose) yes
     400                set options(subport) $name
     401                if {[catch {set workername [mportopen $porturl [array get options] [array get variations] yes]} result] ||
     402                        $result == 1} {
     403                        global errorInfo
     404                        ui_debug "$errorInfo"
     405                        ui_error "Internal error: unable to open port: $result"
     406                        continue
     407                }
     408                if {[catch {set result [mportexec $workername pkg]} result] ||
     409                        $result == 1} {
     410                        global errorInfo
     411                        ui_debug "$errorInfo"
     412                        ui_error "port package failed: $result"
     413                        mportclose $workername
     414                        continue
     415                }
     416                set ui_options(ports_verbose) no
     417                # Turn verbose output off after the build
     418
     419                mportclose $workername
     420
     421                # We made it to the end.  We can delete the log file.
    302422                close $logfd
    303423                set logfd ""
    304         }
    305         #if {[file readable $logfilename]} {
    306         #       if {[catch {system "<$logfilename /usr/sbin/sendmail -t"} error]} {
    307         #               puts stderr "Internal error: $error"
    308         #       }
    309         #}
    310 
    311         # Open the log file for writing
    312         set logfd [open ${logpath}/${name}.log w]
    313 
    314         set valid 1
    315 
    316         set lint_errors {}
    317         set portname ""
    318         set portversion ""
    319         set description ""
    320         set category ""
    321 
    322         if {![info exists portinfo(name)]} {
    323                 lappend lint_errors "missing name key"
    324                 set valid 0
    325         } else {
    326                 set portname $portinfo(name)
    327         }
    328        
    329         if {![info exists portinfo(description)]} {
    330                 lappend lint_errors "missing description key"
    331                 set valid 0
    332         } else {
    333                 set description $portinfo(description)
    334         }
    335        
    336         if {![info exists portinfo(version)]} {
    337                 lappend lint_errors "missing version key"
    338                 set valid 0
    339         } else {
    340                 set portversion $portinfo(version)
    341         }
    342        
    343         if {![info exists portinfo(categories)]} {
    344                 lappend lint_errors "missing categories key"
    345                 set valid 0
    346         } else {
    347                 set category [lindex $portinfo(categories) 0]
    348         }
    349        
    350         if {![info exists portinfo(maintainers)]} {
    351                 append lint_errors "missing maintainers key"
    352                 set valid 0
    353                 set maintainers kevin@opendarwin.org
    354         } else {
    355                 set maintainers $portinfo(maintainers)
    356         }
    357        
    358         pkg_ui_log "To: [join $maintainers {, }]"
    359         pkg_ui_log "From: donotreply@opendarwin.org"
    360         pkg_ui_log "Subject: MacPorts $portinfo(name)-$portinfo(version) build failure"
    361         pkg_ui_log ""
    362         pkg_ui_log "The following is a transcript produced by the MacPorts automated build       "
    363         pkg_ui_log "system.  You are receiving this email because you are listed as a maintainer    "
    364         pkg_ui_log "of this port, which has failed the automated packaging process.  Please update  "
    365         pkg_ui_log "the port as soon as possible."
    366         pkg_ui_log ""
    367         pkg_ui_log ""
    368         pkg_ui_log "Thank you,"
    369         pkg_ui_log "The MacPorts Team"
    370         pkg_ui_log ""
    371         pkg_ui_log "================================================================================"
    372         pkg_ui_log ""
    373 
    374         if {!$valid} {
    375                 foreach error $lint_errors {
    376                         ui_error $error
    377                 }
    378         }
    379 
    380         ui_msg "packaging ${category}/${portname}-${portversion}"
    381 
    382         # Install binary dependencies if we can, to speed things up.
    383         #set depends {}
    384         #if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
    385         #if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
    386         #if {[info exists portinfo(depends_build)]} { eval "lappend depends $portinfo(depends_build)" }
    387         #foreach depspec $depends {
    388         #       set dep [lindex [split $depspec :] end]
    389                 #install_binary_if_available $dep $pkgbase
    390         #}
    391         set dependencies [get_dependencies $portname 1]
    392         set dependencies [lsort -unique $dependencies]
    393         foreach dep $dependencies {
    394                 install_binary_if_available $dep $pkgbase
    395         }
    396 
    397         set options(package.type) pkg
    398         set options(package.destpath) ${pkgbase}/${category}/
    399 
    400         # Turn on verbose output for the build
    401         set ui_options(ports_verbose) yes
    402         set options(subport) $name
    403         if {[catch {set workername [mportopen $porturl [array get options] [array get variations] yes]} result] ||
    404                 $result == 1} {
    405                 global errorInfo
    406                 ui_debug "$errorInfo"
    407             ui_error "Internal error: unable to open port: $result"
    408             continue
    409         }       
    410         if {[catch {set result [mportexec $workername pkg]} result] ||
    411                 $result == 1} {
    412                 global errorInfo
    413                 ui_debug "$errorInfo"
    414             ui_error "port package failed: $result"
    415                 mportclose $workername
    416             continue
    417         }
    418         set ui_options(ports_verbose) no
    419         # Turn verbose output off after the build
    420 
    421         mportclose $workername
    422 
    423         # We made it to the end.  We can delete the log file.
    424         close $logfd
    425         set logfd ""
    426         file delete ${logpath}/${name}.log
    427 }
    428 
     424                file delete ${logpath}/${name}.log
     425        }
    429426}
    430427# end foreach pname
  • trunk/base/portmgr/packaging/rpmall.tcl

    r116517 r116518  
    1313# are met:
    1414# 1. Redistributions of source code must retain the above copyright
    15 #    notice, this list of conditions and the following disclaimer.
     15#        notice, this list of conditions and the following disclaimer.
    1616# 2. Redistributions in binary form must reproduce the above copyright
    17 #    notice, this list of conditions and the following disclaimer in the
    18 #    documentation and/or other materials provided with the distribution.
     17#        notice, this list of conditions and the following disclaimer in the
     18#        documentation and/or other materials provided with the distribution.
    1919# 3. Neither the name of Apple Inc. nor the names of its contributors
    20 #    may be used to endorse or promote products derived from this software
    21 #    without specific prior written permission.
    22 # 
     20#        may be used to endorse or promote products derived from this software
     21#        without specific prior written permission.
     22#
    2323# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    2424# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     
    4646# ui_options accessor
    4747proc ui_isset {val} {
    48     global ui_options
    49     if {[info exists ui_options($val)]} {
    50         if {$ui_options($val) eq "yes"} {
    51             return 1
    52         }
    53     }
    54     return 0
     48        global ui_options
     49        if {[info exists ui_options($val)]} {
     50                if {$ui_options($val) eq "yes"} {
     51                        return 1
     52                }
     53        }
     54        return 0
    5555}
    5656
    5757set options(package.destpath) "/darwinports/rpms"
    5858
    59 # UI Callback 
     59# UI Callback
    6060
    6161proc ui_prefix {priority} {
    62     switch $priority {
    63         debug {
    64                 return "DEBUG: "
    65         }
    66         error {
    67                 return "Error: "
    68         }
    69         warn {
    70                 return "Warning: "
    71         }
    72         default {
    73                 return ""
    74         }
    75     }
     62        switch $priority {
     63                debug {
     64                        return "DEBUG: "
     65                }
     66                error {
     67                        return "Error: "
     68                }
     69                warn {
     70                        return "Warning: "
     71                }
     72                default {
     73                        return ""
     74                }
     75        }
    7676}
    7777
    7878proc ui_channels {priority} {
    79     global logfd
    80     switch $priority {
    81         debug {
    82             if {[ui_isset ports_debug]} {
    83                 return {stdout}
    84             } else {
    85                 return {}
    86             }
    87         }
    88         info {
     79        global logfd
     80        switch $priority {
     81                debug {
     82                        if {[ui_isset ports_debug]} {
     83                                return {stdout}
     84                        } else {
     85                                return {}
     86                        }
     87                }
     88                info {
    8989                        # put verbose stuff only to the log file
    90             if {[ui_isset ports_verbose]} {
    91                 return {$logfd}
    92             } else {
    93                 return {}
    94                         }
    95                 }
    96         msg {
    97             if {[ui_isset ports_quiet]} {
    98                 return {}
     90                        if {[ui_isset ports_verbose]} {
     91                                return {$logfd}
     92                        } else {
     93                                return {}
     94                        }
     95                }
     96                msg {
     97                        if {[ui_isset ports_quiet]} {
     98                                return {}
    9999                        } else {
    100100                                return {stdout}
    101101                        }
    102102                }
    103         default {
    104                 return {stdout}
    105         }
    106     }
    107 }
    108        
     103                default {
     104                        return {stdout}
     105                }
     106        }
     107}
     108
    109109proc pkg_ui_log {message} {
    110     global logfd
    111     if {$logfd ne ""} {
    112         log_message $logfd $message
    113     }
     110        global logfd
     111        if {$logfd ne ""} {
     112                log_message $logfd $message
     113        }
    114114}
    115115
    116116proc log_message {channel message} {
    117     seek $channel 0 end
    118     puts $channel $message
    119     flush $channel
     117        seek $channel 0 end
     118        puts $channel $message
     119        flush $channel
    120120}
    121121
     
    123123proc get_dependencies {portname includeBuildDeps} {
    124124        set result {}
    125        
     125
    126126        if {[catch {set search [mportsearch "^$portname\$"]} error]} {
    127127                global errorInfo
     
    133133                array set portinfo $array
    134134                if {![info exists portinfo(name)] ||
    135                         ![info exists portinfo(version)] || 
     135                        ![info exists portinfo(version)] ||
    136136                        ![info exists portinfo(categories)]} {
    137137                        ui_error "Internal error: $name missing some portinfo keys"
     
    141141                        set portinfo(revision) 0
    142142                }
    143                
     143
    144144                set portname $portinfo(name)
    145145                set portversion $portinfo(version)
     
    153153                if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
    154154                if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
    155                 if {$includeBuildDeps ne "" && [info exists portinfo(depends_build)]} { 
     155                if {$includeBuildDeps ne "" && [info exists portinfo(depends_build)]} {
    156156                        eval "lappend depends $portinfo(depends_build)"
    157157                }
    158                 if {$includeBuildDeps ne "" && [info exists portinfo(depends_fetch)]} { 
     158                if {$includeBuildDeps ne "" && [info exists portinfo(depends_fetch)]} {
    159159                        eval "lappend depends $portinfo(depends_fetch)"
    160160                }
    161                 if {$includeBuildDeps ne "" && [info exists portinfo(depends_extract)]} { 
     161                if {$includeBuildDeps ne "" && [info exists portinfo(depends_extract)]} {
    162162                        eval "lappend depends $portinfo(depends_extract)"
    163163                }
     
    203203
    204204proc fatal args {
    205     global argv0
    206     puts stderr "$argv0: $args"
    207     exit
     205        global argv0
     206        puts stderr "$argv0: $args"
     207        exit
    208208}
    209209
     
    218218
    219219if {[catch {mportinit ui_options options variations} result]} {
    220     puts "Failed to initialize ports system, $result"
    221     exit 1
     220        puts "Failed to initialize ports system, $result"
     221        exit 1
    222222}
    223223
     
    230230
    231231foreach pname $argv {
    232 
    233 if {[catch {set allpackages [mportsearch "^${pname}\$"]} result]} {
    234         puts "port search failed: $result"
    235         exit 1
    236 }
    237 
    238 set logpath "/darwinports/logs"
    239 set logfd ""
    240 
    241 foreach {name array} $allpackages {
    242         array unset portinfo
    243         array set portinfo $array
    244 
    245         #ui_msg "foo $portinfo(porturl)"
    246 
    247         # Start with verbose output off;
    248         # this will prevent the repopulation of /opt/local from getting logged.
    249         set ui_options(ports_verbose) no
    250 
    251         if {![info exists portinfo(porturl)]} {
    252                 puts stderr "Internal error: no porturl for $name"
    253                 continue
    254         }
    255         if {![info exists portinfo(revision)]} {
    256                 set portinfo(revision) 0
    257         }
    258 
    259         set porturl $portinfo(porturl)
    260 
    261         # this is used to short-circuit the RPM check and
    262         # move on to the next package
    263 
    264         global exit_loop
    265         set exit_loop false
    266 
    267         # Skip up-to-date packages
    268         if {[regsub {^file://} $portinfo(porturl) "" portpath]} {
    269                 if {[info exists portinfo(name)] &&
    270                         [info exists portinfo(version)] &&
    271                         [info exists portinfo(revision)]} {
    272                         set portname $portinfo(name)
    273                         set portversion $portinfo(version)
    274                         set revision $portinfo(revision)
    275 
    276                         foreach dir {"/opt/local/src/apple/RPMS" "/usr/src/apple/RPMS" "/darwinports/rpms/RPMS"} {
    277                                 foreach arch {"ppc" "i386" "fat"} {
    278                                         set rpmpath "${dir}/${arch}/${portname}-${portversion}-${revision}.${arch}.rpm"
    279                                         #ui_msg "trying ${rpmpath}"
    280                                         if {[file readable $rpmpath] && ([file mtime ${rpmpath}] >= [file mtime ${portpath}/Portfile])} {
    281                                                 puts stderr "->    skipping ${portname}-${portversion}; package is up to date."
    282                                                 set exit_loop true
     232        if {[catch {set allpackages [mportsearch "^${pname}\$"]} result]} {
     233                puts "port search failed: $result"
     234                exit 1
     235        }
     236
     237        set logpath "/darwinports/logs"
     238        set logfd ""
     239
     240        foreach {name array} $allpackages {
     241                array unset portinfo
     242                array set portinfo $array
     243
     244                #ui_msg "foo $portinfo(porturl)"
     245
     246                # Start with verbose output off;
     247                # this will prevent the repopulation of /opt/local from getting logged.
     248                set ui_options(ports_verbose) no
     249
     250                if {![info exists portinfo(porturl)]} {
     251                        puts stderr "Internal error: no porturl for $name"
     252                        continue
     253                }
     254                if {![info exists portinfo(revision)]} {
     255                        set portinfo(revision) 0
     256                }
     257
     258                set porturl $portinfo(porturl)
     259
     260                # this is used to short-circuit the RPM check and
     261                # move on to the next package
     262
     263                global exit_loop
     264                set exit_loop false
     265
     266                # Skip up-to-date packages
     267                if {[regsub {^file://} $portinfo(porturl) "" portpath]} {
     268                        if {[info exists portinfo(name)] &&
     269                                [info exists portinfo(version)] &&
     270                                [info exists portinfo(revision)]} {
     271                                set portname $portinfo(name)
     272                                set portversion $portinfo(version)
     273                                set revision $portinfo(revision)
     274
     275                                foreach dir {"/opt/local/src/apple/RPMS" "/usr/src/apple/RPMS" "/darwinports/rpms/RPMS"} {
     276                                        foreach arch {"ppc" "i386" "fat"} {
     277                                                set rpmpath "${dir}/${arch}/${portname}-${portversion}-${revision}.${arch}.rpm"
     278                                                #ui_msg "trying ${rpmpath}"
     279                                                if {[file readable $rpmpath] && ([file mtime ${rpmpath}] >= [file mtime ${portpath}/Portfile])} {
     280                                                        puts stderr "->    skipping ${portname}-${portversion}; package is up to date."
     281                                                        set exit_loop true
     282                                                        break
     283                                                }
     284                                        }
     285                                        if {${exit_loop}} {
    283286                                                break
    284287                                        }
    285288                                }
    286                                 if {${exit_loop}} {
    287                                         break
     289                        }
     290                }
     291                if {${exit_loop}} {
     292                        continue
     293                }
     294
     295                # Skip packages which previously failed
     296                set exit_loop false
     297
     298                # Skip up-to-date packages
     299                if {[regsub {^file://} $portinfo(porturl) "" portpath]} {
     300                        if {[info exists portinfo(name)] &&
     301                                [info exists portinfo(version)] &&
     302                                [info exists portinfo(revision)]} {
     303                                set portname $portinfo(name)
     304                                set portversion $portinfo(version)
     305                                set revision $portinfo(revision)
     306
     307                                set logfilepath "${logpath}/${portname}.log"
     308                                if {[file readable ${logfilepath}] && ([file mtime ${logfilepath}] > [file mtime ${portpath}/Portfile])} {
     309                                        puts stderr "->    skipping ${portname}-${portversion}; package failed, but has not changed."
     310                                        set exit_loop true
    288311                                }
    289312                        }
    290313                }
    291         }
    292         if {${exit_loop}} {
    293                 continue
    294         }
    295        
    296         # Skip packages which previously failed
    297         set exit_loop false
    298                
    299         # Skip up-to-date packages
    300         if {[regsub {^file://} $portinfo(porturl) "" portpath]} {
    301                 if {[info exists portinfo(name)] &&
    302                         [info exists portinfo(version)] &&
    303                         [info exists portinfo(revision)]} {
     314                if {${exit_loop}} {
     315                        continue
     316                }
     317
     318                # Building the port:
     319                # - remove /opt/local so it won't pollute the port.
     320                # - re-install MacPorts.
     321                # - keep distfiles outside /opt/local so we don't have to keep fetching them.
     322                # - send out an email to the maintainer if any errors occurred.
     323
     324                set remove_files ""
     325                foreach dir {"/opt/local/src/apple/RPMS" "/usr/src/apple/RPMS" "/darwinports/rpms/RPMS"} {
     326                        foreach arch {"ppc" "i386" "fat"} {
     327                                set remove_files "${remove_files} '${dir}/${arch}/'*.rpm"
     328                        }
     329                }
     330                system "rpm -q --queryformat='%{name} ' -p ${remove_files} | xargs rpm -e || true"
     331
     332                ui_msg "->        Removing /opt/local"
     333                #unset ui_options(ports_verbose)
     334                if {[catch {system "rm -Rf /opt/local"} error]} {
     335                        puts stderr "Internal error: $error"
     336                }
     337                # this is bad on pure darwin  :)
     338                #if {[catch {system "rm -Rf /usr/X11R6"} error]} {
     339                #       puts stderr "Internal error: $error"
     340                #}
     341                #if {[catch {system "rm -Rf /etc/X11"} error]} {
     342                #       puts stderr "Internal error: $error"
     343                #}
     344                #if {[catch {system "rm -Rf /etc/fonts"} error]} {
     345                #       puts stderr "Internal error: $error"
     346                #}
     347                ui_msg "->        Installing MacPorts"
     348                if {[catch {system "cd $env(HOME)/darwinports && make && make install"} error]} {
     349                        puts stderr "Internal error: $error"
     350                }
     351                if {[catch {system "rmdir /opt/local/var/db/dports/distfiles"} error]} {
     352                        puts stderr "Internal error: $error"
     353                }
     354                if {[catch {system "ln -s /darwinports/distfiles /opt/local/var/db/dports/distfiles"} error]} {
     355                        puts stderr "Internal error: $error"
     356                }
     357                #set ui_options(ports_verbose) yes
     358
     359                # If there was a log file left over from the previous pass,
     360                # then the port failed with an error.  Send the log in an
     361                # email to the maintainers.
     362                if {$logfd ne ""} {
     363                        close $logfd
     364                        set logfd ""
     365                }
     366                #if {[file readable $logfilename]} {
     367                #       if {[catch {system "<$logfilename /usr/sbin/sendmail -t"} error]} {
     368                #               puts stderr "Internal error: $error"
     369                #       }
     370                #}
     371
     372                # Open the log file for writing
     373                set logfd [open ${logpath}/${name}.log w]
     374
     375                set valid 1
     376
     377                set lint_errors {}
     378                set portname ""
     379                set portversion ""
     380                set description ""
     381                set category ""
     382
     383                if {![info exists portinfo(name)]} {
     384                        lappend lint_errors "missing name key"
     385                        set valid 0
     386                } else {
    304387                        set portname $portinfo(name)
     388                }
     389
     390                if {![info exists portinfo(description)]} {
     391                        lappend lint_errors "missing description key"
     392                        set valid 0
     393                } else {
     394                        set description $portinfo(description)
     395                }
     396
     397                if {![info exists portinfo(version)]} {
     398                        lappend lint_errors "missing version key"
     399                        set valid 0
     400                } else {
    305401                        set portversion $portinfo(version)
    306                         set revision $portinfo(revision)
    307 
    308                         set logfilepath "${logpath}/${portname}.log"
    309                         if {[file readable ${logfilepath}] && ([file mtime ${logfilepath}] > [file mtime ${portpath}/Portfile])} {
    310                                 puts stderr "->    skipping ${portname}-${portversion}; package failed, but has not changed."
    311                                 set exit_loop true
    312                         }
    313                 }
    314         }
    315         if {${exit_loop}} {
    316                 continue
    317         }
    318        
    319         # Building the port:
    320         # - remove /opt/local so it won't pollute the port.
    321         # - re-install MacPorts.
    322         # - keep distfiles outside /opt/local so we don't have to keep fetching them.
    323         # - send out an email to the maintainer if any errors occurred.
    324 
    325         set remove_files ""
    326         foreach dir {"/opt/local/src/apple/RPMS" "/usr/src/apple/RPMS" "/darwinports/rpms/RPMS"} {
    327                 foreach arch {"ppc" "i386" "fat"} {
    328                         set remove_files "${remove_files} '${dir}/${arch}/'*.rpm"
    329                 }
    330         }
    331         system "rpm -q --queryformat='%{name} ' -p ${remove_files} | xargs rpm -e || true"
    332 
    333         ui_msg "->    Removing /opt/local"
    334         #unset ui_options(ports_verbose)
    335         if {[catch {system "rm -Rf /opt/local"} error]} {
    336                 puts stderr "Internal error: $error"
    337         }
    338         # this is bad on pure darwin  :)
    339         #if {[catch {system "rm -Rf /usr/X11R6"} error]} {
    340         #       puts stderr "Internal error: $error"
    341         #}
    342         #if {[catch {system "rm -Rf /etc/X11"} error]} {
    343         #       puts stderr "Internal error: $error"
    344         #}
    345         #if {[catch {system "rm -Rf /etc/fonts"} error]} {
    346         #       puts stderr "Internal error: $error"
    347         #}
    348         ui_msg "->    Installing MacPorts"
    349         if {[catch {system "cd $env(HOME)/darwinports && make && make install"} error]} {
    350                 puts stderr "Internal error: $error"
    351         }
    352         if {[catch {system "rmdir /opt/local/var/db/dports/distfiles"} error]} {
    353                 puts stderr "Internal error: $error"
    354         }
    355         if {[catch {system "ln -s /darwinports/distfiles /opt/local/var/db/dports/distfiles"} error]} {
    356                 puts stderr "Internal error: $error"
    357         }
    358         #set ui_options(ports_verbose) yes
    359 
    360         # If there was a log file left over from the previous pass,
    361         # then the port failed with an error.  Send the log in an
    362         # email to the maintainers.
    363         if {$logfd ne ""} {
     402                }
     403
     404                if {![info exists portinfo(categories)]} {
     405                        lappend lint_errors "missing categories key"
     406                        set valid 0
     407                } else {
     408                        set category [lindex $portinfo(categories) 0]
     409                }
     410
     411                if {![info exists portinfo(maintainers)]} {
     412                        append lint_errors "missing maintainers key"
     413                        set valid 0
     414                        set maintainers kevin@opendarwin.org
     415                } else {
     416                        set maintainers $portinfo(maintainers)
     417                }
     418
     419                pkg_ui_log "To: [join $maintainers {, }]"
     420                pkg_ui_log "From: donotreply@opendarwin.org"
     421                pkg_ui_log "Subject: MacPorts $portinfo(name)-$portinfo(version) build failure"
     422                pkg_ui_log ""
     423                pkg_ui_log "The following is a transcript produced by the MacPorts automated build               "
     424                pkg_ui_log "system.  You are receiving this email because you are listed as a maintainer        "
     425                pkg_ui_log "of this port, which has failed the automated packaging process.  Please update      "
     426                pkg_ui_log "the port as soon as possible."
     427                pkg_ui_log ""
     428                pkg_ui_log ""
     429                pkg_ui_log "Thank you,"
     430                pkg_ui_log "The MacPorts Team"
     431                pkg_ui_log ""
     432                pkg_ui_log "================================================================================"
     433                pkg_ui_log ""
     434
     435                if {!$valid} {
     436                        foreach error $lint_errors {
     437                                ui_error $error
     438                        }
     439                }
     440
     441                ui_msg "-->   Packaging ${category}/${portname}-${portversion}"
     442
     443                foreach prebuild {"ccache" "rpm" "unzip"} {
     444                        if {![file exists /bin/${prebuild}] && ![file exists /usr/bin/${prebuild}]} {
     445                                ui_msg "--->  Pre-installing ${prebuild}"
     446                                if {[catch {set search [mportsearch "^${prebuild}\$"]} error]} {
     447                                        global errorInfo
     448                                        ui_debug "$errorInfo"
     449                                        ui_error "Internal error: port search ${prebuild} failed: $error"
     450                                }
     451                                array set prebuildinfo [lindex $search 1]
     452                                set ui_options(ports_verbose) yes
     453                                set options(subport) ${prebuild}
     454                                if {[catch {set workername [mportopen $prebuildinfo(porturl) [array get options] [array get variations] yes]} result] ||
     455                                        $result == 1} {
     456                                        global errorInfo
     457                                        ui_debug "$errorInfo"
     458                                        ui_error "Internal error: unable to install ${prebuild}... exiting"
     459                                        exit 1
     460                                }
     461                                if {[catch {set result [mportexec $workername activate]} result] ||
     462                                        $result == 1} {
     463                                        global errorInfo
     464                                        ui_debug "$errorInfo"
     465                                        ui_error "installation of ${prebuild} failed: $result"
     466                                        mportclose $workername
     467                                        exit 1
     468                                }
     469                        }
     470                }
     471
     472                # Turn on verbose output for the build
     473                set ui_options(ports_verbose) yes
     474                set options(subport) $name
     475                if {[catch {set workername [mportopen $porturl [array get options] [array get variations]]} result] ||
     476                        $result == 1} {
     477                        global errorInfo
     478                        ui_debug "$errorInfo"
     479                        ui_error "Internal error: unable to open port: $result"
     480                        continue
     481                }
     482                if {[catch {set result [mportexec $workername rpmpackage]} result] ||
     483                        $result == 1} {
     484                        global errorInfo
     485                        ui_debug "$errorInfo"
     486                        ui_error "port package failed: $result"
     487                        mportclose $workername
     488                        continue
     489                }
     490                set ui_options(ports_verbose) no
     491                # Turn verbose output off after the build
     492
     493                mportclose $workername
     494
     495                # We made it to the end.  We can delete the log file.
    364496                close $logfd
    365497                set logfd ""
    366         }
    367         #if {[file readable $logfilename]} {
    368         #       if {[catch {system "<$logfilename /usr/sbin/sendmail -t"} error]} {
    369         #               puts stderr "Internal error: $error"
    370         #       }
    371         #}
    372 
    373         # Open the log file for writing
    374         set logfd [open ${logpath}/${name}.log w]
    375 
    376         set valid 1
    377 
    378         set lint_errors {}
    379         set portname ""
    380         set portversion ""
    381         set description ""
    382         set category ""
    383 
    384         if {![info exists portinfo(name)]} {
    385                 lappend lint_errors "missing name key"
    386                 set valid 0
    387         } else {
    388                 set portname $portinfo(name)
    389         }
    390        
    391         if {![info exists portinfo(description)]} {
    392                 lappend lint_errors "missing description key"
    393                 set valid 0
    394         } else {
    395                 set description $portinfo(description)
    396         }
    397        
    398         if {![info exists portinfo(version)]} {
    399                 lappend lint_errors "missing version key"
    400                 set valid 0
    401         } else {
    402                 set portversion $portinfo(version)
    403         }
    404        
    405         if {![info exists portinfo(categories)]} {
    406                 lappend lint_errors "missing categories key"
    407                 set valid 0
    408         } else {
    409                 set category [lindex $portinfo(categories) 0]
    410         }
    411        
    412         if {![info exists portinfo(maintainers)]} {
    413                 append lint_errors "missing maintainers key"
    414                 set valid 0
    415                 set maintainers kevin@opendarwin.org
    416         } else {
    417                 set maintainers $portinfo(maintainers)
    418         }
    419        
    420         pkg_ui_log "To: [join $maintainers {, }]"
    421         pkg_ui_log "From: donotreply@opendarwin.org"
    422         pkg_ui_log "Subject: MacPorts $portinfo(name)-$portinfo(version) build failure"
    423         pkg_ui_log ""
    424         pkg_ui_log "The following is a transcript produced by the MacPorts automated build       "
    425         pkg_ui_log "system.  You are receiving this email because you are listed as a maintainer    "
    426         pkg_ui_log "of this port, which has failed the automated packaging process.  Please update  "
    427         pkg_ui_log "the port as soon as possible."
    428         pkg_ui_log ""
    429         pkg_ui_log ""
    430         pkg_ui_log "Thank you,"
    431         pkg_ui_log "The MacPorts Team"
    432         pkg_ui_log ""
    433         pkg_ui_log "================================================================================"
    434         pkg_ui_log ""
    435 
    436         if {!$valid} {
    437                 foreach error $lint_errors {
    438                         ui_error $error
    439                 }
    440         }
    441 
    442         ui_msg "-->   Packaging ${category}/${portname}-${portversion}"
    443 
    444         foreach prebuild {"ccache" "rpm" "unzip"} {
    445                 if {![file exists /bin/${prebuild}] && ![file exists /usr/bin/${prebuild}]} {
    446                         ui_msg "--->  Pre-installing ${prebuild}"
    447                         if {[catch {set search [mportsearch "^${prebuild}\$"]} error]} {
    448                                 global errorInfo
    449                                 ui_debug "$errorInfo"
    450                                 ui_error "Internal error: port search ${prebuild} failed: $error"
    451                         }
    452                         array set prebuildinfo [lindex $search 1]
    453                         set ui_options(ports_verbose) yes
    454                         set options(subport) ${prebuild}
    455                         if {[catch {set workername [mportopen $prebuildinfo(porturl) [array get options] [array get variations] yes]} result] ||
    456                                 $result == 1} {
    457                                 global errorInfo
    458                                 ui_debug "$errorInfo"
    459                                 ui_error "Internal error: unable to install ${prebuild}... exiting"
    460                                 exit 1
    461                         }
    462                         if {[catch {set result [mportexec $workername activate]} result] ||
    463                                 $result == 1} {
    464                                 global errorInfo
    465                                 ui_debug "$errorInfo"
    466                                 ui_error "installation of ${prebuild} failed: $result"
    467                                 mportclose $workername
    468                                 exit 1
    469                         }
    470                 }
    471         }
    472 
    473         # Turn on verbose output for the build
    474         set ui_options(ports_verbose) yes
    475         set options(subport) $name
    476         if {[catch {set workername [mportopen $porturl [array get options] [array get variations]]} result] ||
    477                 $result == 1} {
    478                 global errorInfo
    479                 ui_debug "$errorInfo"
    480             ui_error "Internal error: unable to open port: $result"
    481             continue
    482         }
    483         if {[catch {set result [mportexec $workername rpmpackage]} result] ||
    484                 $result == 1} {
    485                 global errorInfo
    486                 ui_debug "$errorInfo"
    487             ui_error "port package failed: $result"
    488                 mportclose $workername
    489             continue
    490         }
    491         set ui_options(ports_verbose) no
    492         # Turn verbose output off after the build
    493 
    494         mportclose $workername
    495 
    496         # We made it to the end.  We can delete the log file.
    497         close $logfd
    498         set logfd ""
    499         file delete ${logpath}/${name}.log
    500 }
     498                file delete ${logpath}/${name}.log
     499        }
    501500
    502501}
Note: See TracChangeset for help on using the changeset viewer.