[54354] users/toby/objcports/MPConfig.m
toby at macports.org
toby at macports.org
Sat Jul 25 02:35:34 PDT 2009
Revision: 54354
http://trac.macports.org/changeset/54354
Author: toby at macports.org
Date: 2009-07-25 02:35:34 -0700 (Sat, 25 Jul 2009)
Log Message:
-----------
more config fun
Modified Paths:
--------------
users/toby/objcports/MPConfig.m
Modified: users/toby/objcports/MPConfig.m
===================================================================
--- users/toby/objcports/MPConfig.m 2009-07-25 09:16:01 UTC (rev 54353)
+++ users/toby/objcports/MPConfig.m 2009-07-25 09:35:34 UTC (rev 54354)
@@ -1,12 +1,13 @@
#include <Foundation/Foundation.h>
#include <tcl.h>
+#include <regex.h>
#include "MPConfig.h"
static MPConfig *sharedConfigInstance = nil;
@interface MPConfig (priv)
-- (NSString *)macportsConfPath;
+- (void)loadAutoconf;
@end
@implementation MPConfig
@@ -36,35 +37,78 @@
- (id)init
{
NSMutableArray *configFiles;
+ char *s;
+ int rc;
self = [super init];
- configFiles = [NSMutableArray arrayWithObject:[[self macportsConfPath] stringByAppendingPathComponent:@"macports.conf"]];
+ _config = [[NSMutableDictionary alloc] initWithCapacity:0];
+
+ [self loadAutoconf];
+
+ configFiles = [NSMutableArray arrayWithCapacity:0];
+ [configFiles addObject:[[_config objectForKey:@"macports_conf_path"] stringByAppendingPathComponent:@"macports.conf"]];
+ [configFiles addObject:[[_config objectForKey:@"macports_user_dir"] stringByAppendingPathComponent:@"macports.conf"]];
+ if ((s = getenv("PORTSRC"))) {
+ [configFiles addObject:[NSString stringWithUTF8String:s]];
+ }
+
+ regex_t re;
+ rc = regcomp(&re, "^([A-Za-z_]+)([\\\t ]+(.*))?$", REG_EXTENDED);
+ assert(rc == 0);
+ assert(re.re_nsub == 3);
for (NSString *f in configFiles) {
- NSLog(@"%@", f);
+ size_t len;
+ char *line;
+ FILE *fp = fopen([f UTF8String], "r");
+ if (fp == NULL) continue;
+ while ((line = fgetln(fp, &len))) {
+ regmatch_t match[4];
+ line[len - 1] = '\0';
+ rc = regexec(&re, line, 4, match, 0);
+ if (rc == 0) {
+ NSString *k, *v;
+ k = [[NSString alloc] initWithBytes:&line[match[1].rm_so] length:(match[1].rm_eo - match[1].rm_so) encoding:NSUTF8StringEncoding];
+ if (match[3].rm_so >= 0) {
+ v = [[NSString alloc] initWithBytes:&line[match[3].rm_so] length:(match[3].rm_eo - match[3].rm_so) encoding:NSUTF8StringEncoding];
+ } else {
+ v = @"";
+ }
+ [_config setObject:v forKey:k];
+ }
+ }
+ fclose(fp);
}
+ regfree(&re);
+ NSLog(@"%@", _config);
+
return self;
}
-- (NSString *)macportsConfPath
+- (void)dealloc
{
+ [_config release];
+ [super dealloc];
+}
+
+- (void)loadAutoconf
+{
Tcl_Interp *interp;
int rc;
- const char *path;
- NSString *result = nil;
+ NSString *tmp;
interp = Tcl_CreateInterp();
rc = Tcl_EvalFile(interp, "/Library/Tcl/macports1.0/macports_autoconf.tcl");
if (rc == 0) {
- path = Tcl_GetVar(interp, "macports::autoconf::macports_conf_path", 0);
- if (path) {
- result = [NSString stringWithUTF8String:path];
+ [_config setObject:[NSString stringWithUTF8String:Tcl_GetVar(interp, "macports::autoconf::macports_conf_path", 0)] forKey:@"macports_conf_path"];
+ tmp = [NSString stringWithUTF8String:Tcl_GetVar(interp, "macports::autoconf::macports_user_dir", 0)];
+ tmp = [tmp stringByExpandingTildeInPath];
+ if (tmp) {
+ [_config setObject:tmp forKey:@"macports_user_dir"];
}
}
Tcl_DeleteInterp(interp);
-
- return result;
}
@end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090725/f3c8c963/attachment.html>
More information about the macports-changes
mailing list