[48439] users/toby/objcports

toby at macports.org toby at macports.org
Sat Mar 21 23:09:49 PDT 2009


Revision: 48439
          http://trac.macports.org/changeset/48439
Author:   toby at macports.org
Date:     2009-03-21 23:09:47 -0700 (Sat, 21 Mar 2009)
Log Message:
-----------
stop using unknown to cheat

Modified Paths:
--------------
    users/toby/objcports/MPParser.m
    users/toby/objcports/MPPort.h
    users/toby/objcports/MPPort.m

Modified: users/toby/objcports/MPParser.m
===================================================================
--- users/toby/objcports/MPParser.m	2009-03-22 05:25:13 UTC (rev 48438)
+++ users/toby/objcports/MPParser.m	2009-03-22 06:09:47 UTC (rev 48439)
@@ -6,8 +6,9 @@
 #include "MPArrayAdditions.h"
 #include "MPStringAdditions.h"
 
+static void command_create(Tcl_Interp *interp, const char *cmdName, ClientData clientData);
+
 static char *variable_read(ClientData clientData, Tcl_Interp *interp, const char *name1, const char *name2, int flags);
-static int unknown_trampoline(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
 
 static int _nslog(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]);
 static void _info(Tcl_Interp *interp, const char *command); // debugging
@@ -28,15 +29,29 @@
 	@try {
 		Tcl_Preserve(_interp);
 
+		command_create(_interp, "PortSystem", self);
+		command_create(_interp, "PortGroup", self);
+		command_create(_interp, "platform", self);
+		command_create(_interp, "variant", self);
+
+		for (NSString *target in [_port targets]) {
+			command_create(_interp, [target UTF8String], self);
+			command_create(_interp, [[@"pre-" stringByAppendingString:target] UTF8String], self);
+			command_create(_interp, [[@"post-" stringByAppendingString:target] UTF8String], self);
+		}
+
+		for (NSString *opt in [_port options]) {
+			command_create(_interp, [opt UTF8String], self);
+			command_create(_interp, [[opt stringByAppendingString:@"-append"] UTF8String], self);
+			command_create(_interp, [[opt stringByAppendingString:@"-delete"] UTF8String], self);
+		}
+
 		for (NSString *var in [_port variables]) {
 			Tcl_TraceVar(_interp, [var UTF8String], TCL_TRACE_READS, variable_read, port);
 		}
 
-		Tcl_CreateObjCommand(_interp, "nslog", _nslog, NULL, NULL);
+		Tcl_CreateObjCommand(_interp, "nslog", _nslog, NULL, NULL); // XXX: debugging
 
-		/* Handle *all* commands via the "unknown" mechanism. */
-		Tcl_CreateObjCommand(_interp, "unknown", unknown_trampoline, self, NULL);
-
 		const char *portfile = [[_port portfile] UTF8String];
 		if (Tcl_EvalFile(_interp, portfile) != TCL_OK) {
 			NSLog(@"Tcl_EvalFile(%s): %s", portfile, Tcl_GetStringResult(_interp));
@@ -158,18 +173,26 @@
 @end
 
 static int
-unknown_trampoline(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+command_trampoline(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 {
-	assert(objc >= 2);
-	assert(!strcmp(Tcl_GetString(objv[0]), "::unknown"));
-
-	NSArray *args = [[NSArray alloc] initWithTclObjects:++objv count:--objc];
+	NSArray *args = [[NSArray alloc] initWithTclObjects:objv count:objc];
 	[(id)clientData performCommand:[args objectAtIndex:0] arguments:[args subarrayWithRange:NSMakeRange(1, [args count] - 1)]];
 	[args release];
 
 	return TCL_OK;
 }
 
+static void
+command_create(Tcl_Interp *interp, const char *cmdName, ClientData clientData)
+{
+	Tcl_CmdInfo info;
+	if (Tcl_GetCommandInfo(interp, cmdName, &info) != 0) {
+		NSLog(@"Command '%s' already exists, bailing.", cmdName);
+		abort();
+	}
+	Tcl_CreateObjCommand(interp, cmdName, command_trampoline, clientData, NULL);
+}
+
 static char *
 variable_read(ClientData clientData, Tcl_Interp *interp, const char *name1, const char *name2, int flags)
 {

Modified: users/toby/objcports/MPPort.h
===================================================================
--- users/toby/objcports/MPPort.h	2009-03-22 05:25:13 UTC (rev 48438)
+++ users/toby/objcports/MPPort.h	2009-03-22 06:09:47 UTC (rev 48439)
@@ -17,11 +17,13 @@
 
 - (NSString *)portfile;
 
+- (NSArray *)targets;
 - (BOOL)isTarget:(NSString *)target;
 
 - (NSArray *)variables;
 - (NSString *)variable:(NSString *)name;
 
+- (NSArray *)options;
 - (void)option:(NSString *)option set:(NSArray *)value;
 - (void)option:(NSString *)option append:(NSArray *)value;
 - (void)option:(NSString *)option delete:(NSArray *)value;

Modified: users/toby/objcports/MPPort.m
===================================================================
--- users/toby/objcports/MPPort.m	2009-03-22 05:25:13 UTC (rev 48438)
+++ users/toby/objcports/MPPort.m	2009-03-22 06:09:47 UTC (rev 48439)
@@ -159,6 +159,11 @@
 	return _portfile;
 }
 
+- (NSArray *)targets
+{
+	return _targets;
+}
+
 - (BOOL)isTarget:(NSString *)target
 {
 	if ([target hasPrefix:@"pre-"]) {
@@ -185,6 +190,11 @@
 	return ret;
 }
 
+- (NSArray *)options
+{
+	return [_options allKeys];
+}
+
 - (void)option:(NSString *)option set:(NSArray *)value
 {
 	if (![[_options allKeys] containsObject:option]) {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090321/63908da6/attachment.html>


More information about the macports-changes mailing list