[44888] users/toby/objcports
toby at macports.org
toby at macports.org
Sun Jan 4 06:16:23 PST 2009
Revision: 44888
http://trac.macports.org/changeset/44888
Author: toby at macports.org
Date: 2009-01-04 06:16:22 -0800 (Sun, 04 Jan 2009)
Log Message:
-----------
etc
Modified Paths:
--------------
users/toby/objcports/MPParser.h
users/toby/objcports/MPParser.m
users/toby/objcports/MPPort.h
users/toby/objcports/MPPort.m
Modified: users/toby/objcports/MPParser.h
===================================================================
--- users/toby/objcports/MPParser.h 2009-01-04 13:52:30 UTC (rev 44887)
+++ users/toby/objcports/MPParser.h 2009-01-04 14:16:22 UTC (rev 44888)
@@ -2,6 +2,7 @@
@interface MPParser : NSObject
{
+ MPPort *_port;
Tcl_Interp *_interp;
// set before parsing (list obtained elsewhere...)
Modified: users/toby/objcports/MPParser.m
===================================================================
--- users/toby/objcports/MPParser.m 2009-01-04 13:52:30 UTC (rev 44887)
+++ users/toby/objcports/MPParser.m 2009-01-04 14:16:22 UTC (rev 44888)
@@ -6,6 +6,8 @@
#include "MPArrayAdditions.h"
#include "MPStringAdditions.h"
+static int _target(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
+static int _option(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
static int _unknown(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
static char *_default(ClientData clientData, Tcl_Interp *interp, const char *name1, const char *name2, int flags);
static void info(Tcl_Interp *interp, const char *command); // debugging
@@ -15,24 +17,29 @@
- (id)initWithPort:(MPPort *)port
{
self = [super init];
+ _port = [port retain];
_interp = Tcl_CreateInterp();
_variants = [[NSMutableDictionary alloc] initWithCapacity:0];
_platforms = [[NSMutableArray alloc] initWithCapacity:0];
// XXX: should probably remove even more functionality
- //Tcl_MakeSafe(_interp);
+ Tcl_MakeSafe(_interp);
@try {
Tcl_Preserve(_interp);
- /* Handle defaults (ask parent port instance). */
- for (NSString *def in [port defaults]) {
+ /* Handle defaults. Ports shouldn't expect any other variables to be set,
+ * so we can just set them as we go. */
+ for (NSString *def in [_port defaults]) {
Tcl_TraceVar(_interp, [def UTF8String], TCL_TRACE_READS, _default, port);
}
+ /* Handle *all* commands via the "unknown" mechanism. */
Tcl_CreateObjCommand(_interp, "unknown", _unknown, self, NULL);
- if (Tcl_EvalFile(_interp, [[port portfile] UTF8String]) != TCL_OK) {
- NSLog(@"Tcl_EvalFile(%@): %s", [port portfile], Tcl_GetStringResult(_interp));
+
+ NSString *portfile = [_port portfile];
+ if (Tcl_EvalFile(_interp, [portfile UTF8String]) != TCL_OK) {
+ NSLog(@"Tcl_EvalFile(%@): %s", portfile, Tcl_GetStringResult(_interp));
}
Tcl_Release(_interp);
@@ -45,7 +52,7 @@
@finally {
info(_interp, "[info globals]");
info(_interp, "[info commands]");
- NSLog(@"%@", _variants);
+ //NSLog(@"%@", _variants);
}
return self;
@@ -56,6 +63,7 @@
[_variants release];
[_platforms release];
Tcl_DeleteInterp(_interp);
+ [_port release];
[super dealloc];
}
@@ -112,7 +120,6 @@
[_platforms addObject:platformFull];
// XXX: check match, right now pretend all platforms are true
if (YES) {
- NSLog(@"+%@", platformFull);
Tcl_Eval(_interp, [[args lastObject] UTF8String]);
}
} else if ([command isEqualToString:@"variant"]) {
@@ -139,11 +146,10 @@
// XXX: make sure it's set, like platforms just pretend
if (YES) {
- NSLog(@"+%@", name);
Tcl_Eval(_interp, [[args lastObject] UTF8String]);
}
- //} else if ([_targets containsObject:command]) {
- // XXX: right now we just treat target-related things like options
+ } else if ([_port isTarget:command]) {
+ // XXX: store for later use...
} else {
NSString *option;
enum { OPTION_SET, OPTION_APPEND, OPTION_DELETE } action;
@@ -158,56 +164,76 @@
action = OPTION_SET;
}
- //if ([_options containsObject:option]) {
- // XXX: also need to ignore if overriden on command line
- switch (action) {
- case OPTION_SET:
- Tcl_SetVar(_interp, [option UTF8String], [[args componentsJoinedByString:@" "] UTF8String], 0);
- break;
- case OPTION_APPEND: {
- Tcl_Obj *val = Tcl_GetVar2Ex(_interp, [option UTF8String], NULL, 0);
- int length;
- if (val == NULL) {
- val = Tcl_NewListObj(0, NULL);
- Tcl_SetVar2Ex(_interp, [option UTF8String], NULL, val, 0);
- }
- Tcl_ListObjLength(_interp, val, &length);
- for (NSString *arg in args) {
- Tcl_Obj *str = Tcl_NewStringObj([arg UTF8String], -1);
- Tcl_ListObjReplace(_interp, val, length++, 0, 1, &str);
- }
- break;
+ if (![[_port options] containsObject:option]) {
+ NSLog(@"? %@", option);
+ }
+
+ // XXX: also need to skip if overridden on command line
+ switch (action) {
+ case OPTION_SET:
+ Tcl_SetVar(_interp, [option UTF8String], [[args componentsJoinedByString:@" "] UTF8String], 0);
+ break;
+ case OPTION_APPEND: {
+ Tcl_Obj *val = Tcl_GetVar2Ex(_interp, [option UTF8String], NULL, 0);
+ int length;
+ if (val == NULL) {
+ val = Tcl_NewListObj(0, NULL);
+ Tcl_SetVar2Ex(_interp, [option UTF8String], NULL, val, 0);
}
- case OPTION_DELETE: {
- Tcl_Obj *val = Tcl_GetVar2Ex(_interp, [option UTF8String], NULL, 0);
- int objc;
- Tcl_Obj **objv;
- for (NSString *arg in args) {
- int i;
- Tcl_ListObjGetElements(_interp, val, &objc, &objv);
- for (i = 0; i < objc; i++) {
- if ([arg isEqualToString:[NSString stringWithTclObject:objv[i]]]) {
- Tcl_ListObjReplace(_interp, val, i, 1, 0, NULL);
- break; // just want to delete one occurrence
- }
+ Tcl_ListObjLength(_interp, val, &length);
+ for (NSString *arg in args) {
+ Tcl_Obj *str = Tcl_NewStringObj([arg UTF8String], -1);
+ Tcl_ListObjReplace(_interp, val, length++, 0, 1, &str);
+ }
+ break;
+ }
+ case OPTION_DELETE: {
+ Tcl_Obj *val = Tcl_GetVar2Ex(_interp, [option UTF8String], NULL, 0);
+ int objc;
+ Tcl_Obj **objv;
+ for (NSString *arg in args) {
+ int i;
+ Tcl_ListObjGetElements(_interp, val, &objc, &objv);
+ for (i = 0; i < objc; i++) {
+ if ([arg isEqualToString:[NSString stringWithTclObject:objv[i]]]) {
+ Tcl_ListObjReplace(_interp, val, i, 1, 0, NULL);
+ break; // just want to delete one occurrence
}
}
- // XXX: unset if empty
- break;
}
- default:
- abort();
- break;
- }
- //} else {
- // NSLog(@"unknown option %@", option);
- //}
+ // XXX: unset if empty
+ break;
+ }
+ default:
+ abort();
+ break;
+ }
}
}
@end
static int
+_target(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+{
+ NSArray *args = [[NSArray alloc] initWithTclObjects:objv count:objc];
+ NSLog(@"_target %@", args);
+ [args release];
+
+ return TCL_OK;
+}
+
+static int
+_option(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+{
+ NSArray *args = [[NSArray alloc] initWithTclObjects:objv count:objc];
+ NSLog(@"_option %@", args);
+ [args release];
+
+ return TCL_OK;
+}
+
+static int
_unknown(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
assert(objc >= 2);
Modified: users/toby/objcports/MPPort.h
===================================================================
--- users/toby/objcports/MPPort.h 2009-01-04 13:52:30 UTC (rev 44887)
+++ users/toby/objcports/MPPort.h 2009-01-04 14:16:22 UTC (rev 44888)
@@ -4,15 +4,26 @@
{
NSString *_portfile;
MPParser *_parser;
+
+ NSMutableArray *_targets;
+
+ NSMutableArray *_options;
+ NSMutableArray *_defaults;
}
- (id)initWithPortfile:(NSString *)port options:(NSDictionary *)options;
- (NSString *)portfile;
+- (NSArray *)targets;
+- (BOOL)isTarget:(NSString *)target;
+
- (NSArray *)defaults;
- (NSString *)default:(NSString *)def;
+- (NSArray *)options;
+
+// Access to underlying parser...
- (NSString *)option:(NSString *)option;
- (NSArray *)variants;
- (NSArray *)platforms;
Modified: users/toby/objcports/MPPort.m
===================================================================
--- users/toby/objcports/MPPort.m 2009-01-04 13:52:30 UTC (rev 44887)
+++ users/toby/objcports/MPPort.m 2009-01-04 14:16:22 UTC (rev 44888)
@@ -4,13 +4,49 @@
#include "MPPort.h"
#include "MPParser.h"
+ at interface MPPort (priv)
+- (void)addCommand:(NSString *)command;
+ at end
+
@implementation MPPort
- (id)initWithPortfile:(NSString *)portfile options:(NSDictionary *)options
{
self = [super init];
_portfile = [portfile retain];
+
+ _targets = [[NSMutableArray alloc] initWithCapacity:0];
+ [_targets addObject:@"configure"];
+ [_targets addObject:@"build"];
+ [_targets addObject:@"destroot"];
+
+ _options = [[NSMutableArray alloc] initWithCapacity:0];
+ [self addCommand:@"configure"];
+ [_options addObject:@"name"];
+ [_options addObject:@"version"];
+ [_options addObject:@"categories"];
+ [_options addObject:@"maintainers"];
+ [_options addObject:@"homepage"];
+ [_options addObject:@"platforms"];
+ [_options addObject:@"use_bzip2"];
+ [_options addObject:@"use_parallel_build"];
+ [_options addObject:@"description"];
+ [_options addObject:@"long_description"];
+ [_options addObject:@"master_sites"];
+ [_options addObject:@"checksums"];
+ [_options addObject:@"depends_build"];
+ [_options addObject:@"depends_lib"];
+
+ [_options addObject:@"test.run"];
+ [_options addObject:@"test.target"];
+
+ [_options addObject:@"livecheck.check"];
+
+ _defaults = [[NSMutableArray alloc] initWithCapacity:0];
+ [_defaults addObject:@"prefix"];
+
_parser = [[MPParser alloc] initWithPort:self];
+
return self;
}
@@ -18,6 +54,11 @@
{
[_parser release];
[_portfile release];
+
+ [_targets release];
+ [_options release];
+ [_defaults release];
+
[super dealloc];
}
@@ -26,23 +67,56 @@
return _portfile;
}
+- (NSArray *)targets
+{
+ return _targets;
+}
+
+- (BOOL)isTarget:(NSString *)target
+{
+ if ([target hasPrefix:@"pre-"]) {
+ target = [target substringWithRange:NSMakeRange(4, [target length] - 4)];
+ } else if ([target hasPrefix:@"post-"]) {
+ target = [target substringWithRange:NSMakeRange(5, [target length] - 5)];
+ }
+
+ return [_targets containsObject:target];
+}
+
- (NSArray *)defaults
{
- return [NSArray arrayWithObjects:@"prefix", @"worksrcpath", nil];
+ return _defaults;
}
- (NSString *)default:(NSString *)def
{
// XXX: selector (NSInvocation?) or constant NSString...
- NSLog(@"default: '%@'", def);
return def;
}
+- (NSArray *)options
+{
+ return _options;
+}
+
- (NSString *)option:(NSString *)option
{
return [_parser option:option];
}
+// essentially 'commands' from portutil.tcl
+- (void)addCommand:(NSString *)command
+{
+ [_options addObject:[NSString stringWithFormat:@"use_%@", command]];
+ [_options addObject:[NSString stringWithFormat:@"%@.dir", command]];
+ [_options addObject:[NSString stringWithFormat:@"%@.pre_args", command]];
+ [_options addObject:[NSString stringWithFormat:@"%@.args", command]];
+ [_options addObject:[NSString stringWithFormat:@"%@.post_args", command]];
+ [_options addObject:[NSString stringWithFormat:@"%@.env", command]];
+ [_options addObject:[NSString stringWithFormat:@"%@.type", command]];
+ [_options addObject:[NSString stringWithFormat:@"%@.cmd", command]];
+}
+
- (NSArray *)variants
{
return [_parser variants];
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090104/7a07aca9/attachment-0001.html>
More information about the macports-changes
mailing list