[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