Changeset 54247


Ignore:
Timestamp:
Jul 23, 2009, 8:17:22 PM (9 years ago)
Author:
toby@…
Message:

improve callback implementation

Location:
users/toby/objcports
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • users/toby/objcports/MPPort.m

    r54217 r54247  
    144144                self = nil;
    145145        }
    146        
     146
     147        for (NSString *vv in _variableInfo) {
     148                NSLog(@"%@ -- %@ -- %@", vv, [_variables objectForKey:vv], [self variable:vv]);
     149        }
     150
    147151        return self;
    148152}
     
    214218}
    215219
    216 - (id)variableCallback:(NSString *)name
    217 {
    218         return @"callback result";
     220- (id)defaultCallback:(NSString *)name
     221{
     222        return @"";
     223}
     224
     225- (id)osInfo:(NSString *)name
     226{
     227        NSString *ret = nil;
     228        int rc;
     229        struct utsname u;
     230
     231        rc = uname(&u);
     232        assert(rc == 0);
     233
     234        if ([name isEqualToString:@"os.platform"]) {
     235                ret = [[NSString stringWithUTF8String:u.sysname] lowercaseString];
     236        } else if ([name isEqualToString:@"os.arch"]) {
     237                ret = [NSString stringWithUTF8String:u.machine];
     238        } else if ([name isEqualToString:@"os.endian"]) {
     239#ifdef __BIG_ENDIAN__
     240                ret = @"big";
     241#else
     242                ret = @"little";
     243#endif
     244        } else if ([name isEqualToString:@"os.major"]) {
     245                ret = [[[NSString stringWithUTF8String:u.release] componentsSeparatedByString:@"."] objectAtIndex:0];
     246        } else if ([name isEqualToString:@"os.version"]) {
     247                ret = [NSString stringWithUTF8String:u.release];
     248        } else {
     249                abort();
     250        }
     251
     252        return ret;
    219253}
    220254
     
    224258        id setValue;
    225259        id defValue;
     260        id callback;
    226261        NSString *ret = nil;
    227262
     
    237272                                ret = setValue;
    238273                        }
    239                 } else if ((defValue = [info objectForKey:kPortVariableDefault]) != nil) {
     274                } else if ((defValue = [info objectForKey:kPortVariableDefault])) {
    240275                        ret = defValue;
    241                 } else if ([[info objectForKey:kPortVariableCallback] boolValue] == YES) {
    242                         ret = [self variableCallback:name];
     276                } else if ((callback = [info objectForKey:kPortVariableCallback])) {
     277                        assert([callback isKindOfClass:[NSString class]]);
     278                        ret = [self performSelector:NSSelectorFromString(callback) withObject:name];
    243279                } else {
    244280                        ret = [NSString stringWithUTF8String:""];
  • users/toby/objcports/objcports.xcodeproj/project.pbxproj

    r54211 r54247  
    4545                DAD371700F0280EF0064AFF4 /* MPStringAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStringAdditions.m; sourceTree = "<group>"; };
    4646                DAD371940F0281940064AFF4 /* libtcl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtcl.dylib; path = /usr/lib/libtcl.dylib; sourceTree = "<absolute>"; };
     47                FD1CD53B1018F5AD0071534F /* variables.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = variables.plist; sourceTree = "<group>"; };
    4748/* End PBXFileReference section */
    4849
     
    8586                                DAD3716F0F0280EF0064AFF4 /* MPStringAdditions.h */,
    8687                                DAD371700F0280EF0064AFF4 /* MPStringAdditions.m */,
     88                                FD1CD53B1018F5AD0071534F /* variables.plist */,
    8789                        );
    8890                        name = Source;
  • users/toby/objcports/variables.plist

    r54222 r54247  
    187187                <true/>
    188188                <key>Callback</key>
    189                 <true/>
     189                <string>defaultCallback:</string>
    190190        </dict>
    191191        <key>dist_subdir</key>
     
    234234                <true/>
    235235                <key>Callback</key>
    236                 <true/>
     236                <string>defaultCallback:</string>
    237237        </dict>
    238238        <key>frameworks_dir</key>
     
    271271        <dict/>
    272272        <key>maintainers</key>
    273         <dict/>
     273        <dict>
     274                <key>Type</key>
     275                <string>Array</string>
     276        </dict>
    274277        <key>master_sites</key>
    275278        <dict>
     
    283286        <key>os.arch</key>
    284287        <dict>
     288                <key>Callback</key>
     289                <string>osInfo:</string>
    285290                <key>Constant</key>
    286291                <true/>
     
    288293        <key>os.endian</key>
    289294        <dict>
     295                <key>Callback</key>
     296                <string>osInfo:</string>
    290297                <key>Constant</key>
    291298                <true/>
     
    293300        <key>os.major</key>
    294301        <dict>
     302                <key>Callback</key>
     303                <string>osInfo:</string>
    295304                <key>Constant</key>
    296305                <true/>
     
    298307        <key>os.platform</key>
    299308        <dict>
     309                <key>Callback</key>
     310                <string>osInfo:</string>
    300311                <key>Constant</key>
    301312                <true/>
     
    303314        <key>os.version</key>
    304315        <dict>
     316                <key>Callback</key>
     317                <string>osInfo:</string>
    305318                <key>Constant</key>
    306319                <true/>
     
    417430                <true/>
    418431                <key>Callback</key>
    419                 <true/>
     432                <string>defaultCallback:</string>
    420433        </dict>
    421434        <key>worksrcdir</key>
Note: See TracChangeset for help on using the changeset viewer.