Changeset 52318


Ignore:
Timestamp:
Jun 14, 2009, 3:38:59 AM (11 years ago)
Author:
toby@…
Message:

merge from trunk

Location:
branches/universal-sanity/base
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/universal-sanity/base

  • branches/universal-sanity/base/src/macports1.0/macports.tcl

    r52082 r52318  
    19591959# accDeps -> accumulator for recursive calls
    19601960# return 0 if everything was ok, an non zero integer otherwise.
    1961 proc mportdepends {mport {target ""} {recurseDeps 1} {skipSatisfied 1} {accDepsFlag 0}} {
     1961proc mportdepends {mport {target ""} {recurseDeps 1} {skipSatisfied 1}} {
    19621962
    19631963    array set portinfo [mportinfo $mport]
    19641964    set depends {}
    19651965    set deptypes {}
    1966     if {$accDepsFlag == 0} {
    1967         array set accDeps {}
    1968     } else {
    1969         upvar accDeps accDeps
    1970     }
    19711966
    19721967    # progress indicator
     
    20202015
    20212016    set subPorts {}
     2017    set options [ditem_key $mport options]
     2018    set variations [ditem_key $mport variations]
    20222019
    20232020    foreach depspec $depends {
    2024         # grab the portname portion of the depspec
    2025         set dep_portname [lindex [split $depspec :] end]
    2026 
    2027         # Find the porturl
    2028         if {[catch {set res [mportlookup $dep_portname]} error]} {
    2029             global errorInfo
    2030             ui_debug "$errorInfo"
    2031             ui_error "Internal error: port lookup failed: $error"
    2032             return 1
    2033         }
    2034 
    2035         array unset portinfo
    2036         array set portinfo [lindex $res 1]
    2037         if {[info exists portinfo(porturl)]} {
    2038             set porturl $portinfo(porturl)
    2039         } else {
    2040             if {$skipSatisfied && [registry::entry_exists_for_name $dep_portname]} {
    2041                 ui_warn "Dependency '$dep_portname' is installed but not present in the index"
    2042             } else {
    2043                 ui_error "Dependency '$dep_portname' not found."
    2044                 return 1
    2045             }
    2046         }
    2047 
    20482021        # Is that dependency satisfied or this port installed?
    20492022        # If we don't skip or if it is not, add it to the list.
    20502023        if {!$skipSatisfied || ![_mportispresent $mport $depspec]} {
    2051             set options [ditem_key $mport options]
    2052             set variations [ditem_key $mport variations]
    2053             # Figure out the subport.
    2054             set subport [mportopen $porturl $options $variations]
    2055            
     2024            # grab the portname portion of the depspec
     2025            set dep_portname [lindex [split $depspec :] end]
     2026
     2027            # Find the porturl
     2028            if {[catch {set res [mportlookup $dep_portname]} error]} {
     2029                global errorInfo
     2030                ui_debug "$errorInfo"
     2031                ui_error "Internal error: port lookup failed: $error"
     2032                return 1
     2033            }
     2034
     2035            array unset portinfo
     2036            array set portinfo [lindex $res 1]
     2037            if {![info exists portinfo(porturl)]} {
     2038                ui_error "Dependency '$dep_portname' not found."
     2039                return 1
     2040            }
     2041
     2042            # Figure out the subport. Check the open_mports list first, since
     2043            # we potentially leak mport references if we mportopen each time,
     2044            # because mportexec only closes each open mport once.
     2045            set subport [dlist_search $macports::open_mports porturl $portinfo(porturl)]
     2046            if {$subport == {}} {
     2047                # We haven't opened this one yet.
     2048                set subport [mportopen $portinfo(porturl) $options $variations]
     2049                if {$recurseDeps} {
     2050                    # Add to the list we need to recurse on.
     2051                    lappend subPorts $subport
     2052                }
     2053            }
     2054
    20562055            # Append the sub-port's provides to the port's requirements list.
    20572056            ditem_append_unique $mport requires "[ditem_key $subport provides]"
    2058 
    2059             if {$recurseDeps} {
    2060                 # Skip the port if it's already in the accumulated list.
    2061                 if {![info exists accDeps($dep_portname)]} {
    2062                     # Add it to the list
    2063                     set accDeps($dep_portname) 1
    2064 
    2065                     # We'll recursively iterate on it.
    2066                     lappend subPorts $subport
    2067                 }
    2068             }
    20692057        }
    20702058    }
     
    20742062        foreach subport $subPorts {
    20752063            # Sub ports should be installed (all dependencies must be satisfied).
    2076             set res [mportdepends $subport "" $recurseDeps $skipSatisfied 1]
     2064            set res [mportdepends $subport "" $recurseDeps $skipSatisfied]
    20772065            if {$res != 0} {
    20782066                return $res
  • branches/universal-sanity/base/src/pextlib1.0/tracelib.c

    r52032 r52318  
    8383       
    8484        name=strdup(Tcl_GetString(objv[2]));
     85        if (!name) {
     86            Tcl_SetResult(interp, "memory allocation failed", TCL_STATIC);
     87            return TCL_ERROR;
     88        }
    8589       
    8690        return TCL_OK;
     
    108112        len=strlen(Tcl_GetString(objv[2]))+2;
    109113        sandbox=(char*)malloc(len);
     114        if (!sandbox) {
     115            Tcl_SetResult(interp, "memory allocation failed", TCL_STATIC);
     116            return TCL_ERROR;
     117        }
    110118        memset(sandbox, 0, len);
    111         strcpy(sandbox, Tcl_GetString(objv[2]));
     119        strlcpy(sandbox, Tcl_GetString(objv[2]), len);
    112120        for(t=sandbox;(t=strchr(t+1, ':'));)
    113121        {
     
    211219                char * t, * _;
    212220               
    213                 filemap=(char*)malloc(1024);
     221                size_t remaining = 1024;
     222                filemap=(char*)malloc(remaining);
     223                if (!filemap) {
     224                    ui_warn("send_file_map: memory allocation failed");
     225                return;
     226                }
    214227                t=filemap;
    215228               
    216                 #define append_allow(path, resolution) do{strcpy(t, path); t+=strlen(t)+1; *t++=resolution; *t++=0;}while(0);
     229                #define append_allow(path, resolution) do { strlcpy(t, path, remaining); \
     230                                                            if (remaining < (strlen(t)+3)) \
     231                                                                remaining=0; \
     232                                                            else \
     233                                                                remaining-=strlen(t)+3; \
     234                                                            t+=strlen(t)+1; \
     235                                                            *t++=resolution; \
     236                                                            *t++=0; \
     237                                                          } while(0);
    217238                if(enable_fence)
    218239                {
     
    227248                        if(sdk&&*sdk)
    228249                        {
    229                                 char buf[260]="/Developer/SDKs/";
    230                                 strcat(buf, sdk);
     250                                char buf[260];
     251                                buf[0] = '\0';
     252                                strlcat(buf, Tcl_GetVar(interp, "macports::developer_dir", TCL_GLOBAL_ONLY), 260);
     253                                strlcat(buf, "/SDKs/", 260);
     254                                strlcat(buf, sdk, 260);
    231255                       
    232256                                append_allow("/usr/bin", 0);
     
    235259                                append_allow("/System/Library/Perl", 0);
    236260                                append_allow("/", 1);
    237                                 strcpy(t-1, buf);
     261                                strlcpy(t-1, buf, remaining);
    238262                                t+=strlen(t)+1;
    239263                        }else
     
    242266                                append_allow("/System/Library", 0);
    243267                                append_allow("/Library", 0);
    244                                 append_allow("/Developer", 0);
     268                                append_allow(Tcl_GetVar(interp, "macports::developer_dir", TCL_GLOBAL_ONLY), 0);
    245269                        }
    246270                }else
     
    268292        char * port=0;
    269293        size_t len=1;
    270         char resolution;
    271        
    272         /* If there aren't deps then allow anything. (Useful for extract) */
    273         if(!depends)
    274                 resolution='+';
    275         else
    276         {
    277                 resolution='!';
     294        char resolution='!';
    278295               
    279                 Tcl_SetVar(interp, "path", path, 0);
    280                 Tcl_Eval(interp, "registry::file_registered $path");
    281                 port=strdup(Tcl_GetStringResult(interp));
    282                 Tcl_UnsetVar(interp, "path", 0);
    283        
    284                 if(*port!='0'||port[1])
    285                 {
    286                         char * t;
    287                
    288                         t=depends;
    289                         for(;*t;t+=strlen(t)+1)
     296        Tcl_SetVar(interp, "path", path, 0);
     297        Tcl_Eval(interp, "registry::file_registered $path");
     298        port=strdup(Tcl_GetStringResult(interp));
     299        if (!port) {
     300                ui_warn("dep_check: memory allocation failed");
     301            return;
     302        }
     303        Tcl_UnsetVar(interp, "path", 0);
     304       
     305        if(*port!='0'||port[1])
     306        {
     307                char * t;
     308       
     309                t=depends;
     310                for(;*t;t+=strlen(t)+1)
     311                {
     312                        if(!strcmp(t, port))
    290313                        {
    291                                 if(!strcmp(t, port))
    292                                 {
    293                                         resolution='+';
    294                                         break;
    295                                 }
     314                                resolution='+';
     315                                break;
    296316                        }
    297                 }else if(*port=='0'&&!port[1])
    298                         strcpy(port, "*unknown*");
    299         }
    300        
    301         if(resolution!='+')
    302                 ui_info("trace: access denied to %s (%s)", path, port);
    303 
    304         if(port)
    305                 free(port);
     317                }
     318        }
     319       
     320        if(resolution!='+') {
     321            if(*port=='0'&&!port[1])
     322                    ui_info("trace: access denied to %s (*unknown*)", path);
     323                else
     324                    ui_info("trace: access denied to %s (%s)", path, port);
     325    }
     326
     327        free(port);
    306328       
    307329        if(send(sock, &len, sizeof(len), 0)==-1)
     
    375397       
    376398        sun.sun_family=AF_UNIX;
    377         strcpy(sun.sun_path, name);
     399        strlcpy(sun.sun_path, name, sizeof(sun.sun_path));
    378400        if(bind(sock, (struct sockaddr*)&sun, sizeof(sun))==-1)
    379401        {
     
    519541        l=strlen(d);
    520542        depends=malloc(l+2);
     543        if (!depends) {
     544            Tcl_SetResult(interp, "memory allocation failed", TCL_STATIC);
     545            return TCL_ERROR;
     546        }
    521547        depends[l+1]=0;
    522         strcpy(depends, d);
     548        strlcpy(depends, d, l+2);
    523549        for(t=depends;*t;++t)
    524550                if(*t==' ')
  • branches/universal-sanity/base/src/port/port.tcl

    r52032 r52318  
    18341834    }
    18351835    foreachport $portlist {
    1836         if { [catch {portimage::activate $portname [composite_version $portversion [array get variations]] [array get options]} result] } {
    1837             global errorInfo
    1838             ui_debug "$errorInfo"
    1839             break_softcontinue "port activate failed: $result" 1 status
     1836        if {![macports::global_option_isset ports_dryrun]} {
     1837            if { [catch {portimage::activate $portname [composite_version $portversion [array get variations]] [array get options]} result] } {
     1838                global errorInfo
     1839                ui_debug "$errorInfo"
     1840                break_softcontinue "port activate failed: $result" 1 status
     1841            }
     1842        } else {
     1843            ui_msg "Skipping activate $portname (dry run)"
    18401844        }
    18411845    }
     
    18511855    }
    18521856    foreachport $portlist {
    1853         if { [catch {portimage::deactivate $portname [composite_version $portversion [array get variations]] [array get options]} result] } {
    1854             global errorInfo
    1855             ui_debug "$errorInfo"
    1856             break_softcontinue "port deactivate failed: $result" 1 status
     1857        if {![macports::global_option_isset ports_dryrun]} {
     1858            if { [catch {portimage::deactivate $portname [composite_version $portversion [array get variations]] [array get options]} result] } {
     1859                global errorInfo
     1860                ui_debug "$errorInfo"
     1861                break_softcontinue "port deactivate failed: $result" 1 status
     1862            }
     1863        } else {
     1864            ui_msg "Skipping deactivate $portname (dry run)"
    18571865        }
    18581866    }
  • branches/universal-sanity/base/src/port1.0/portlivecheck.tcl

    r52032 r52318  
    127127        set livecheck.name $name
    128128    }
     129    # If livecheck.distname is still "default", set it to $name.
     130    if {${livecheck.distname} eq "default"} {
     131        set livecheck.distname $name
     132    }
    129133    if {[lsearch -exact [split $available_types "|"] ${livecheck.type}] != -1} {
    130134        # Load the defaults from _resources/port1.0/livecheck/${livecheck.type}.tcl.
  • branches/universal-sanity/base/src/port1.0/porttrace.tcl

    r50562 r52318  
    4545            ui_warn "trace requires Tcl Thread package ($error)"
    4646        } else {
    47             global env trace_fifo trace_sandboxbounds portpath
     47            global env trace_fifo trace_sandboxbounds portpath distpath
    4848            # Create a fifo.
    4949            # path in unix socket limited to 109 chars
     
    7979            # $CCACHE_DIR
    8080            # $HOMEDIR/.ccache
    81             set trace_sandboxbounds "/tmp:/private/tmp:/var/tmp:/private/var/tmp:/dev/:/etc/passwd:/etc/groups:/etc/localtime:/Library/Caches/com.apple.Xcode:$env(HOME)/.ccache:${workpath}:$portpath"
     81            set trace_sandboxbounds "/tmp:/private/tmp:/var/tmp:/private/var/tmp:/dev/:/etc/passwd:/etc/groups:/etc/localtime:/Library/Caches/com.apple.Xcode:$env(HOME)/.ccache:${workpath}:${portpath}:${distpath}"
    8282            if {[info exists env(TMPDIR)]} {
    8383                set trace_sandboxbounds "${trace_sandboxbounds}:$env(TMPDIR)"
     
    105105    if [info exists env(DARWINTRACE_SANDBOX_BOUNDS)] {
    106106        unset env(DARWINTRACE_SANDBOX_BOUNDS)
     107        unsetenv DARWINTRACE_SANDBOX_BOUNDS
    107108    }
    108109}
     
    148149    if {${os.platform} == "darwin"} {
    149150        global env trace_fifo
    150         unset env(DYLD_INSERT_LIBRARIES)
    151         unset env(DYLD_FORCE_FLAT_NAMESPACE)
    152         unset env(DARWINTRACE_LOG)
    153         if [info exists env(DARWINTRACE_SANDBOX_BOUNDS)] {
    154             unset env(DARWINTRACE_SANDBOX_BOUNDS)
     151        foreach var {DYLD_INSERT_LIBRARIES DYLD_FORCE_FLAT_NAMESPACE DARWINTRACE_LOG DARWINTRACE_SANDBOX_BOUNDS} {
     152            array unset env $var
     153            unsetenv $var
    155154        }
    156155
  • branches/universal-sanity/base/src/port1.0/portutil.tcl

    r52032 r52318  
    12691269                    if {$target != "activate"
    12701270                      && $target != "archive"
    1271                       && $target != "fetch"
    12721271                      && $target != "install"} {
    12731272                        porttrace::trace_enable_fence
  • branches/universal-sanity/base/src/registry1.0/portuninstall.tcl

    r49845 r52318  
    125125        set installtype [registry::property_retrieve $ref installtype]
    126126        if { $installtype == "image" && [registry::property_retrieve $ref active] == 1} {
    127                 #return -code error [msgcat::mc "Registry Error: ${portname} ${version}_${revision}${variants} is active."]
    128                 portimage::deactivate $portname ${version}_${revision}${variants} $optionslist
    129         }
    130 
     127                if {[info exists options(ports_dryrun)] && $options(ports_dryrun) == "yes"} {
     128                        ui_msg "For $portname @${version}_${revision}${variants}: skipping deactivate (dry run)"
     129                } else {
     130                        portimage::deactivate $portname ${version}_${revision}${variants} $optionslist
     131                }
     132        }
     133
     134        if {[info exists options(ports_dryrun)] && $options(ports_dryrun) == "yes"} {
     135                ui_msg "For $portname @${version}_${revision}${variants}: skipping uninstall (dry run)"
     136                return 0
     137        }
     138       
    131139        ui_msg "$UI_PREFIX [format [msgcat::mc "Uninstalling %s @%s_%s%s"] $portname $version $revision $variants]"
    132140
Note: See TracChangeset for help on using the changeset viewer.