Ignore:
Timestamp:
Sep 28, 2008, 10:58:42 PM (16 years ago)
Author:
armahg@…
Message:

Added methods to MPInterpreter to enable setting various port options e.g. debug, verbose etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • contrib/MacPorts_Framework/MPInterpreter.m

    r40216 r40301  
    170170}
    171171
     172//Internal method for initializing Tcl interpreter
     173//Should I be using a double pointer like is done for NSError ?
     174-(BOOL) initTclInterpreter:(Tcl_Interp * *)interp withPath:(NSString *)path {
     175        BOOL result = NO;
     176       
     177        *interp = Tcl_CreateInterp();
     178       
     179        if(*interp == NULL) {
     180                NSLog(@"Error in Tcl_CreateInterp, aborting.");
     181                return result;
     182        }
     183       
     184        if(Tcl_Init(*interp) == TCL_ERROR) {
     185                NSLog(@"Error in Tcl_Init: %s", Tcl_GetStringResult(*interp));
     186                Tcl_DeleteInterp(*interp);
     187                return result;
     188        }
     189       
     190       
     191        NSString * mport_fastload = [[@"source [file join \"" stringByAppendingString:path]
     192                                                                 stringByAppendingString:@"\" macports1.0 macports_fastload.tcl]"];
     193        if(Tcl_Eval(*interp, [mport_fastload UTF8String]) != TCL_OK) {
     194                NSLog(@"Error in Tcl_EvalFile macports_fastload.tcl: %s", Tcl_GetStringResult(*interp));
     195                Tcl_DeleteInterp(*interp);
     196                return result;
     197        }
     198       
     199       
     200        Tcl_CreateObjCommand(*interp, "notifications", Notifications_Command, NULL, NULL);
     201        if (Tcl_PkgProvide(*interp, "notifications", "1.0") != TCL_OK) {
     202                NSLog(@"Error in Tcl_PkgProvide: %s", Tcl_GetStringResult(*interp));
     203                Tcl_DeleteInterp(*interp);
     204                return result;
     205        }
     206       
     207        if( Tcl_EvalFile(*interp, [[[NSBundle bundleWithIdentifier:@"org.macports.frameworks.macports"]
     208                                                                         pathForResource:@"init"
     209                                                                         ofType:@"tcl"] UTF8String]) != TCL_OK) {
     210                NSLog(@"Error in Tcl_EvalFile init.tcl: %s", Tcl_GetStringResult(*interp));
     211                Tcl_DeleteInterp(*interp);
     212                return result;
     213        }
     214       
     215        result = YES;
     216        return result;
     217}
     218
     219//Internal method for setting port Tcl_interpreter options
     220-(BOOL) setOptions:(NSArray *)options forTclInterpreter:(Tcl_Interp * *)interp {
     221        BOOL result = NO;
     222       
     223        //I wish I could use fast enumeration
     224        if (options != nil) {
     225                if ([options count] > 0 ) {
     226                        NSEnumerator * optionsEnum = [options objectEnumerator];
     227                        id opt;
     228                       
     229                        while ((opt = [optionsEnum nextObject])) {
     230                                if (Tcl_Eval(*interp , [[NSString stringWithFormat:@"set ui_options(%@) \"yes\"", opt] UTF8String]) != TCL_OK)
     231                                        return result;
     232                        }
     233                        result = YES;
     234                        return result;
     235                }
     236        }
     237       
     238        return result;
     239}
    172240
    173241- (id) initWithPkgPath:(NSString *)path {
    174242        if (self = [super init]) {
    175                 _interpreter = Tcl_CreateInterp();
    176                 if(_interpreter == NULL) {
    177                         NSLog(@"Error in Tcl_CreateInterp, aborting.");
    178                 }
    179                 if(Tcl_Init(_interpreter) == TCL_ERROR) {
    180                         NSLog(@"Error in Tcl_Init: %s", Tcl_GetStringResult(_interpreter));
    181                         Tcl_DeleteInterp(_interpreter);
    182                 }
    183                
    184                
    185                 NSString * mport_fastload = [[@"source [file join \"" stringByAppendingString:path]
    186                                                                          stringByAppendingString:@"\" macports1.0 macports_fastload.tcl]"];
    187                 if(Tcl_Eval(_interpreter, [mport_fastload UTF8String]) != TCL_OK) {
    188                         NSLog(@"Error in Tcl_EvalFile macports_fastload.tcl: %s", Tcl_GetStringResult(_interpreter));
    189                         Tcl_DeleteInterp(_interpreter);
    190                 }
    191                
    192                
    193                 Tcl_CreateObjCommand(_interpreter, "notifications", Notifications_Command, NULL, NULL);
    194                 if (Tcl_PkgProvide(_interpreter, "notifications", "1.0") != TCL_OK) {
    195                         NSLog(@"Error in Tcl_PkgProvide: %s", Tcl_GetStringResult(_interpreter));
    196                         Tcl_DeleteInterp(_interpreter);
    197                 }
    198                
    199                 if( Tcl_EvalFile(_interpreter, [[[NSBundle bundleWithIdentifier:@"org.macports.frameworks.macports"]
    200                                                                                  pathForResource:@"init"
    201                                                                                  ofType:@"tcl"] UTF8String]) != TCL_OK) {
    202                         NSLog(@"Error in Tcl_EvalFile init.tcl: %s", Tcl_GetStringResult(_interpreter));
    203                         Tcl_DeleteInterp(_interpreter);
    204                 }
     243               
     244                [self initTclInterpreter:&_interpreter withPath:path];
    205245               
    206246                //Initialize helperToolInterpCommand
Note: See TracChangeset for help on using the changeset viewer.