[54217] users/toby/objcports

toby at macports.org toby at macports.org
Wed Jul 22 21:37:54 PDT 2009


Revision: 54217
          http://trac.macports.org/changeset/54217
Author:   toby at macports.org
Date:     2009-07-22 21:37:53 -0700 (Wed, 22 Jul 2009)
Log Message:
-----------
support for variable defaults and callbacks

Modified Paths:
--------------
    users/toby/objcports/MPPort.m
    users/toby/objcports/variables.plist

Modified: users/toby/objcports/MPPort.m
===================================================================
--- users/toby/objcports/MPPort.m	2009-07-23 04:28:22 UTC (rev 54216)
+++ users/toby/objcports/MPPort.m	2009-07-23 04:37:53 UTC (rev 54217)
@@ -4,9 +4,12 @@
 
 #include "MPPort.h"
 #include "MPArrayAdditions.h"
+#include "MPStringAdditions.h"
 
 static NSString *kPortVariableType = @"Type";
 static NSString *kPortVariableConstant = @"Constant";
+static NSString *kPortVariableDefault = @"Default";
+static NSString *kPortVariableCallback = @"Callback";
 
 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);
@@ -210,24 +213,37 @@
 	return [type isEqualToString:@"Array"];
 }
 
+- (id)variableCallback:(NSString *)name
+{
+	return @"callback result";
+}
+
 - (NSString *)variable:(NSString *)name
 {
-	NSString *ret = @"";
-	id val;
-	if ([_variableInfo objectForKey:name] != nil) {
-		val = [_variables objectForKey:name];
-		if ([self variableIsArray:name]) {
-			if (val) {
-				NSLog(@"%@ %@", name, val);
-				assert([val isKindOfClass:[NSArray class]]);
-				ret = [val componentsJoinedByString:@" "];
+	NSDictionary *info;
+	id setValue;
+	id defValue;
+	NSString *ret = nil;
+
+	info = [_variableInfo objectForKey:name];
+	if (info != nil) {
+		if ((setValue = [_variables objectForKey:name])) {
+			if ([self variableIsArray:name]) {
+				NSLog(@"%@ %@", name, setValue);
+				assert([setValue isKindOfClass:[NSArray class]]);
+				ret = [setValue componentsJoinedByString:@" "];
+			} else {
+				assert([setValue isKindOfClass:[NSString class]]);
+				ret = setValue;
 			}
+		} else if ((defValue = [info objectForKey:kPortVariableDefault]) != nil) {
+			ret = defValue;
+		} else if ([[info objectForKey:kPortVariableCallback] boolValue] == YES) {
+			ret = [self variableCallback:name];
 		} else {
-			if (val) {
-				assert([val isKindOfClass:[NSString class]]);
-				ret = val;
-			}
+			ret = [NSString stringWithUTF8String:""];
 		}
+		ret = [[[NSString alloc] initWithTclObject:Tcl_SubstObj(_interp, Tcl_NewStringObj([ret UTF8String], -1), TCL_SUBST_VARIABLES)] autorelease];
 	} else {
 		NSLog(@"WARNING: unknown variable %@", name);
 	}
@@ -451,7 +467,7 @@
 {
 	NSString *var = [(MPPort *)clientData variable:[NSString stringWithUTF8String:name1]];
 	assert(var != nil);
-	Tcl_SetVar2Ex(interp, name1, name2, Tcl_SubstObj(interp, Tcl_NewStringObj([var UTF8String], -1), TCL_SUBST_VARIABLES), 0);
+	Tcl_SetVar2(interp, name1, name2, [var UTF8String], 0);
 	return NULL;
 }
 

Modified: users/toby/objcports/variables.plist
===================================================================
--- users/toby/objcports/variables.plist	2009-07-23 04:28:22 UTC (rev 54216)
+++ users/toby/objcports/variables.plist	2009-07-23 04:37:53 UTC (rev 54217)
@@ -276,6 +276,8 @@
 	<dict/>
 	<key>prefix</key>
 	<dict>
+		<key>Default</key>
+		<string>/opt/local</string>
 		<key>Constant</key>
 		<true/>
 	</dict>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090722/c4f6c48a/attachment.html>


More information about the macports-changes mailing list