[48437] users/toby/objcports
toby at macports.org
toby at macports.org
Sat Mar 21 19:22:24 PDT 2009
Revision: 48437
http://trac.macports.org/changeset/48437
Author: toby at macports.org
Date: 2009-03-21 19:22:19 -0700 (Sat, 21 Mar 2009)
Log Message:
-----------
rework option handling (mostly store in the MPPort instance, Tcl now knows only what's necessary)
Modified Paths:
--------------
users/toby/objcports/MPParser.m
users/toby/objcports/MPPort.h
users/toby/objcports/MPPort.m
users/toby/objcports/port.m
Modified: users/toby/objcports/MPParser.m
===================================================================
--- users/toby/objcports/MPParser.m 2009-03-22 00:27:31 UTC (rev 48436)
+++ users/toby/objcports/MPParser.m 2009-03-22 02:22:19 UTC (rev 48437)
@@ -8,7 +8,7 @@
static int _nslog(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 char *_variable(ClientData clientData, Tcl_Interp *interp, const char *name1, const char *name2, int flags);
static void info(Tcl_Interp *interp, const char *command); // debugging
@implementation MPParser
@@ -27,10 +27,8 @@
@try {
Tcl_Preserve(_interp);
- /* 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);
+ for (NSString *var in [_port variables]) {
+ Tcl_TraceVar(_interp, [var UTF8String], TCL_TRACE_READS, _variable, port);
}
Tcl_CreateObjCommand(_interp, "nslog", _nslog, NULL, NULL);
@@ -154,63 +152,13 @@
} else if ([_port isTarget:command]) {
// XXX: store for later use...
} else {
- NSString *option;
- enum { OPTION_SET, OPTION_APPEND, OPTION_DELETE } action;
if ([command hasSuffix:@"-append"]) {
- option = [command substringWithRange:NSMakeRange(0, [command length] - 7)];
- action = OPTION_APPEND;
+ [_port option:[command substringWithRange:NSMakeRange(0, [command length] - 7)] append:args];
} else if ([command hasSuffix:@"-delete"]) {
- option = [command substringWithRange:NSMakeRange(0, [command length] - 7)];
- action = OPTION_DELETE;
+ [_port option:[command substringWithRange:NSMakeRange(0, [command length] - 7)] delete:args];
} else {
- option = command;
- action = OPTION_SET;
+ [_port option:command set:args];
}
-
- 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);
- }
- 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;
- }
}
}
@@ -239,11 +187,9 @@
}
static char *
-_default(ClientData clientData, Tcl_Interp *interp, const char *name1, const char *name2, int flags)
+_variable(ClientData clientData, Tcl_Interp *interp, const char *name1, const char *name2, int flags)
{
- assert(flags == TCL_TRACE_READS);
- /* Default values may contain references to other Tcl variables (or tcl command calls?), so perform the substitution. */
- Tcl_SetVar2Ex(interp, name1, name2, Tcl_SubstObj(interp, Tcl_NewStringObj([[(id)clientData default:[NSString stringWithUTF8String:name1]] UTF8String], -1), TCL_SUBST_ALL), 0);
+ Tcl_SetVar2Ex(interp, name1, name2, Tcl_SubstObj(interp, Tcl_NewStringObj([[(id)clientData variable:[NSString stringWithUTF8String:name1]] UTF8String], -1), TCL_SUBST_ALL), 0);
return NULL;
}
Modified: users/toby/objcports/MPPort.h
===================================================================
--- users/toby/objcports/MPPort.h 2009-03-22 00:27:31 UTC (rev 48436)
+++ users/toby/objcports/MPPort.h 2009-03-22 02:22:19 UTC (rev 48437)
@@ -9,8 +9,10 @@
NSMutableArray *_targets;
- NSMutableArray *_options;
- NSMutableDictionary *_defaults;
+ NSMutableArray *_commands;
+
+ NSMutableDictionary *_options;
+ NSMutableDictionary *_constants;
}
- (id)initWithPortfile:(NSString *)port options:(NSDictionary *)options;
@@ -19,16 +21,16 @@
- (NSArray *)procs;
-- (NSArray *)targets;
- (BOOL)isTarget:(NSString *)target;
-- (NSArray *)defaults;
-- (NSString *)default:(NSString *)def;
+- (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;
// Access to underlying parser...
-- (NSString *)option:(NSString *)option;
- (NSArray *)variants;
- (NSArray *)platforms;
Modified: users/toby/objcports/MPPort.m
===================================================================
--- users/toby/objcports/MPPort.m 2009-03-22 00:27:31 UTC (rev 48436)
+++ users/toby/objcports/MPPort.m 2009-03-22 02:22:19 UTC (rev 48437)
@@ -4,10 +4,6 @@
#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
@@ -27,169 +23,125 @@
[_targets addObject:@"build"];
[_targets addObject:@"destroot"];
- [self addCommand:@"cvs"]; // portfetch.tcl
- [self addCommand:@"svn"]; // portfetch.tcl
- [self addCommand:@"extract"]; // portextract.tcl
- [self addCommand:@"patch"]; // portpatch.tcl
- [self addCommand:@"configure"]; // portconfigure.tcl
- [self addCommand:@"autoreconf"]; // portconfigure.tcl
- [self addCommand:@"automake"]; // portconfigure.tcl
- [self addCommand:@"autoconf"]; // portconfigure.tcl
- [self addCommand:@"xmkmf"]; // portconfigure.tcl
- [self addCommand:@"build"]; // portbuild.tcl
- [self addCommand:@"parallel_build"]; // portbuild.tcl
- [self addCommand:@"test"]; // porttest.tcl
- [self addCommand:@"destroot"]; // portdestroot.tcl
+ _commands = [[NSMutableArray alloc] initWithCapacity:0];
+ [_commands addObject:@"cvs"]; // portfetch.tcl
+ [_commands addObject:@"svn"]; // portfetch.tcl
+ [_commands addObject:@"extract"]; // portextract.tcl
+ [_commands addObject:@"patch"]; // portpatch.tcl
+ [_commands addObject:@"configure"]; // portconfigure.tcl
+ [_commands addObject:@"autoreconf"]; // portconfigure.tcl
+ [_commands addObject:@"automake"]; // portconfigure.tcl
+ [_commands addObject:@"autoconf"]; // portconfigure.tcl
+ [_commands addObject:@"xmkmf"]; // portconfigure.tcl
+ [_commands addObject:@"build"]; // portbuild.tcl
+ [_commands addObject:@"parallel_build"]; // portbuild.tcl
+ [_commands addObject:@"test"]; // porttest.tcl
+ [_commands addObject:@"destroot"]; // portdestroot.tcl
- _options = [[NSMutableArray alloc] initWithCapacity:0];
- [_options addObject:@"prefix"]; // portmain.tcl
- [_options addObject:@"name"]; // portmain.tcl
- [_options addObject:@"version"]; // portmain.tcl
- [_options addObject:@"revision"]; // portmain.tcl
- [_options addObject:@"epoch"]; // portmain.tcl
- [_options addObject:@"categories"]; // portmain.tcl
- [_options addObject:@"maintainers"]; // portmain.tcl
- [_options addObject:@"long_description"]; // portmain.tcl
- [_options addObject:@"description"]; // portmain.tcl
- [_options addObject:@"homepage"]; // portmain.tcl
- [_options addObject:@"worksrcdir"]; // portmain.tcl
- [_options addObject:@"filesdir"]; // portmain.tcl
- [_options addObject:@"distname"]; // portmain.tcl
- [_options addObject:@"portdbpath"]; // portmain.tcl
- [_options addObject:@"libpath"]; // portmain.tcl
- [_options addObject:@"distpath"]; // portmain.tcl
- [_options addObject:@"sources_conf"]; // portmain.tcl
- [_options addObject:@"os.platform"]; // portmain.tcl
- [_options addObject:@"os.version"]; // portmain.tcl
- [_options addObject:@"os.major"]; // portmain.tcl
- [_options addObject:@"os.arch"]; // portmain.tcl
- [_options addObject:@"os.endian"]; // portmain.tcl
- [_options addObject:@"platforms"]; // portmain.tcl
- [_options addObject:@"default_variants"]; // portmain.tcl
- [_options addObject:@"install.user"]; // portmain.tcl
- [_options addObject:@"install.group"]; // portmain.tcl
- [_options addObject:@"macosx_deployment_target"]; // portmain.tcl
- [_options addObject:@"universal_variant"]; // portmain.tcl
- [_options addObject:@"os.universal_supported"]; // portmain.tcl
-
- [_options addObject:@"master_sites"]; // portfetch.tcl
- [_options addObject:@"patch_sites"]; // portfetch.tcl
- [_options addObject:@"extract.suffix"]; // portfetch.tcl
- [_options addObject:@"distfiles"]; // portfetch.tcl
- [_options addObject:@"patchfiles"]; // portfetch.tcl
- [_options addObject:@"use_zip"]; // portfetch.tcl
- [_options addObject:@"use_bzip2"]; // portfetch.tcl
- [_options addObject:@"use_lzma"]; // portfetch.tcl
- [_options addObject:@"use_dmg"]; // portfetch.tcl
- [_options addObject:@"dist_subdir"]; // portfetch.tcl
- [_options addObject:@"fetch.type"]; // portfetch.tcl
- [_options addObject:@"fetch.user"]; // portfetch.tcl
- [_options addObject:@"fetch.password"]; // portfetch.tcl
- [_options addObject:@"fetch.use_epsv"]; // portfetch.tcl
- [_options addObject:@"fetch.ignore_sslcert"]; // portfetch.tcl
- [_options addObject:@"master_sites.mirror_subdir"]; // portfetch.tcl
- [_options addObject:@"patch_sites.mirror_subdir"]; // portfetch.tcl
- [_options addObject:@"portname"]; // portfetch.tcl
- [_options addObject:@"cvs.module"]; // portfetch.tcl
- [_options addObject:@"cvs.root"]; // portfetch.tcl
- [_options addObject:@"cvs.password"]; // portfetch.tcl
- [_options addObject:@"cvs.date"]; // portfetch.tcl
- [_options addObject:@"cvs.tag"]; // portfetch.tcl
- [_options addObject:@"cvs.method"]; // portfetch.tcl
- [_options addObject:@"svn.url"]; // portfetch.tcl
- [_options addObject:@"svn.tag"]; // portfetch.tcl
- [_options addObject:@"svn.method"]; // portfetch.tcl
- [_options addObject:@"git.url"]; // portfetch.tcl
- [_options addObject:@"git.branch"]; // portfetch.tcl
- [_options addObject:@"hg.url"]; // portfetch.tcl
- [_options addObject:@"hg.tag"]; // portfetch.tcl
- [_options addObject:@"build.target"]; // portbuild.tcl
- [_options addObject:@"build.nice"]; // portbuild.tcl
- [_options addObject:@"build.jobs"]; // portbuild.tcl
- [_options addObject:@"use_parallel_build"];
- [_options addObject:@"checksums"];
- [_options addObject:@"patchfiles"];
- [_options addObject:@"depends_run"];
- [_options addObject:@"depends_build"];
- [_options addObject:@"depends_lib"];
- [_options addObject:@"universal_variant"];
- [_options addObject:@"build.target"];
- [_options addObject:@"destroot.destdir"];
- [_options addObject:@"livecheck.check"];
- [_options addObject:@"livecheck.url"];
- [_options addObject:@"livecheck.regex"];
- [_options addObject:@"livecheck.distname"];
- [_options addObject:@"test.run"]; // porttest.tcl
- [_options addObject:@"test.target"]; // porttest.tcl
+ _options = [[NSMutableDictionary alloc] initWithCapacity:0];
- // *some* overlap with options
- _defaults = [[NSMutableDictionary alloc] initWithCapacity:0];
- [_defaults setObject:@"XXX" forKey:@"distpath"]; // portmain.tcl
- [_defaults setObject:@"XXX" forKey:@"workpath"]; // portmain.tcl
- [_defaults setObject:@"XXX" forKey:@"worksymlink"]; // portmain.tcl
- [_defaults setObject:@"/opt/local" forKey:@"prefix"]; // portmain.tcl
- [_defaults setObject:@"/usr/X11R6" forKey:@"x11prefix"]; // portmain.tcl
- [_defaults setObject:@"/Applications/MacPorts" forKey:@"applications_dir"]; // portmain.tcl
- [_defaults setObject:@"${prefix}/Library/Frameworks" forKey:@"frameworks_dir"]; // portmain.tcl
- [_defaults setObject:@"destroot" forKey:@"destdir"]; // portmain.tcl
- [_defaults setObject:@"${workpath}/${destdir}" forKey:@"destpath"]; // portmain.tcl
- [_defaults setObject:@"${destpath}" forKey:@"destroot"]; // portmain.tcl
- [_defaults setObject:@"files" forKey:@"filesdir"]; // portmain.tcl
- [_defaults setObject:@"0" forKey:@"revision"]; // portmain.tcl
- [_defaults setObject:@"0" forKey:@"epoch"]; // portmain.tcl
- [_defaults setObject:@"${portname}-${portversion}" forKey:@"distname"]; // portmain.tcl
- [_defaults setObject:@"${distname}" forKey:@"worksrcdir"]; // portmain.tcl
- [_defaults setObject:@"[file join ${portpath} ${filesdir}]" forKey:@"filespath"]; // portmain.tcl
- [_defaults setObject:@"[file join ${workpath} ${worksrcdir}]" forKey:@"worksrcpath"]; // portmain.tcl
+ // essentially 'commands' from portutil.tcl
+ for (NSString *command in _commands) {
+ [_options setObject:@"" forKey:[NSString stringWithFormat:@"use_%@", command]];
+ [_options setObject:@"" forKey:[NSString stringWithFormat:@"%@.dir", command]];
+ [_options setObject:@"" forKey:[NSString stringWithFormat:@"%@.pre_args", command]];
+ [_options setObject:@"" forKey:[NSString stringWithFormat:@"%@.args", command]];
+ [_options setObject:@"" forKey:[NSString stringWithFormat:@"%@.post_args", command]];
+ [_options setObject:@"" forKey:[NSString stringWithFormat:@"%@.env", command]];
+ [_options setObject:@"" forKey:[NSString stringWithFormat:@"%@.type", command]];
+ [_options setObject:@"" forKey:[NSString stringWithFormat:@"%@.cmd", command]];
+ }
- [_defaults setObject:@"XXX" forKey:@"os.arch"]; // portmain.tcl
+ [_options setObject:@"/opt/local" forKey:@"prefix"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"name"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"version"]; // portmain.tcl
+ [_options setObject:@"0" forKey:@"revision"]; // portmain.tcl
+ [_options setObject:@"0" forKey:@"epoch"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"categories"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"maintainers"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"long_description"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"description"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"homepage"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"worksrcdir"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"filesdir"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"distname"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"portdbpath"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"libpath"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"distpath"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"sources_conf"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"os.platform"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"os.version"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"os.major"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"os.arch"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"os.endian"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"platforms"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"default_variants"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"install.user"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"install.group"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"macosx_deployment_target"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"universal_variant"]; // portmain.tcl
+ [_options setObject:@"" forKey:@"os.universal_supported"]; // portmain.tcl
+
+ [_options setObject:@"" forKey:@"master_sites"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"patch_sites"]; // portfetch.tcl
+ [_options setObject:@".tar.gz" forKey:@"extract.suffix"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"distfiles"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"patchfiles"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"use_zip"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"use_bzip2"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"use_lzma"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"use_dmg"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"dist_subdir"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"fetch.type"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"fetch.user"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"fetch.password"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"fetch.use_epsv"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"fetch.ignore_sslcert"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"master_sites.mirror_subdir"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"patch_sites.mirror_subdir"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"portname"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"cvs.module"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"cvs.root"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"cvs.password"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"cvs.date"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"cvs.tag"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"cvs.method"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"svn.url"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"svn.tag"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"svn.method"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"git.url"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"git.branch"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"hg.url"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"hg.tag"]; // portfetch.tcl
+ [_options setObject:@"" forKey:@"build.target"]; // portbuild.tcl
+ [_options setObject:@"" forKey:@"build.nice"]; // portbuild.tcl
+ [_options setObject:@"" forKey:@"build.jobs"]; // portbuild.tcl
+ [_options setObject:@"" forKey:@"use_parallel_build"];
+ [_options setObject:@"" forKey:@"checksums"];
+ [_options setObject:@"" forKey:@"patchfiles"];
+ [_options setObject:@"" forKey:@"depends_run"];
+ [_options setObject:@"" forKey:@"depends_build"];
+ [_options setObject:@"" forKey:@"depends_lib"];
+ [_options setObject:@"" forKey:@"universal_variant"];
+ [_options setObject:@"" forKey:@"build.target"];
+ [_options setObject:@"" forKey:@"destroot.destdir"];
+ [_options setObject:@"" forKey:@"livecheck.check"];
+ [_options setObject:@"" forKey:@"livecheck.url"];
+ [_options setObject:@"" forKey:@"livecheck.regex"];
+ [_options setObject:@"" forKey:@"livecheck.distname"];
+ [_options setObject:@"" forKey:@"test.run"]; // porttest.tcl
+ [_options setObject:@"test" forKey:@"test.target"]; // porttest.tcl
- [_defaults setObject:@"" forKey:@"configure.cflags"];
- [_defaults setObject:@"" forKey:@"configure.ldflags"];
+ _constants = [[NSMutableDictionary alloc] initWithCapacity:0];
+ [_constants setObject:@"XXX" forKey:@"worksrcpath"]; // portmain.tcl
- [_defaults setObject:@".tar.gz" forKey:@"extract.suffix"]; // portfetch.tcl
- [_defaults setObject:@"standard" forKey:@"fetch.type"]; // portfetch.tcl
- [_defaults setObject:@"XXX" forKey:@"svn.cmd"]; // portfetch.tcl
- [_defaults setObject:@"${workpath}" forKey:@"svn.dir"]; // portfetch.tcl
- [_defaults setObject:@"export" forKey:@"svn.method"]; // portfetch.tcl
- [_defaults setObject:@"" forKey:@"svn.tag"]; // portfetch.tcl
- [_defaults setObject:@"" forKey:@"svn.env"]; // portfetch.tcl
- [_defaults setObject:@"--non-interactive" forKey:@"svn.pre_args"]; // portfetch.tcl
- [_defaults setObject:@"" forKey:@"svn.args"]; // portfetch.tcl
- [_defaults setObject:@"${svn.url}" forKey:@"svn.post_args"]; // portfetch.tcl
- [_defaults setObject:@"${workpath}" forKey:@"git.dir"]; // portfetch.tcl
- [_defaults setObject:@"" forKey:@"git.branch"]; // portfetch.tcl
- [_defaults setObject:@"${workpath}" forKey:@"hg.dir"]; // portfetch.tcl
- [_defaults setObject:@"tip" forKey:@"hg.tag"]; // portfetch.tcl
- [_defaults setObject:@"[suffix ${distname}" forKey:@"distfiles"]; // portfetch.tcl
- [_defaults setObject:@"${portname}" forKey:@"dist_subdir"]; // portfetch.tcl
- [_defaults setObject:@"" forKey:@"fetch.user"]; // portfetch.tcl
- [_defaults setObject:@"" forKey:@"fetch.password"]; // portfetch.tcl
- [_defaults setObject:@"yes" forKey:@"fetch.use_epsv"]; // portfetch.tcl
- [_defaults setObject:@"no" forKey:@"fetch.ignore_sslcert"]; // portfetch.tcl
- [_defaults setObject:@"no" forKey:@"fetch.remote_time"]; // portfetch.tcl
- [_defaults setObject:@"macports" forKey:@"fallback_mirror_site"]; // portfetch.tcl
- [_defaults setObject:@"macports_distfiles" forKey:@"global_mirror_site"]; // portfetch.tcl
- [_defaults setObject:@"mirror_sites.tcl" forKey:@"mirror_sites.listfile"]; // portfetch.tcl
- [_defaults setObject:@"port1.0/fetch" forKey:@"mirror_sites.listpath"]; // portfetch.tcl
-
- [_defaults setObject:@"${workpath}/${worksrcdir}" forKey:@"build.dir"]; // portbuild.tcl
- [_defaults setObject:@"XXX" forKey:@"build.cmd"]; // portbuild.tcl
- [_defaults setObject:@"XXX" forKey:@"build.nice"]; // portbuild.tcl
- [_defaults setObject:@"XXX" forKey:@"build.jobs"]; // portbuild.tcl
- [_defaults setObject:@"${build.target}" forKey:@"build.pre_args"]; // portbuild.tcl
- [_defaults setObject:@"all" forKey:@"build.target"]; // portbuild.tcl
-
- [_defaults setObject:@"${build.dir}" forKey:@"test.dir"]; // porttest.tcl
- [_defaults setObject:@"${build.cmd}" forKey:@"test.cmd"]; // porttest.tcl
- [_defaults setObject:@"${test.target}" forKey:@"test.pre_args"]; // porttest.tcl
- [_defaults setObject:@"test" forKey:@"test.target"]; // porttest.tcl
-
// XXX: option_proc setup?
// options_export?
_parser = [[MPParser alloc] initWithPort:self];
+ //NSLog(@"%@", _options);
+
return self;
}
@@ -200,8 +152,9 @@
[_procs release];
[_targets release];
+ [_commands release];
[_options release];
- [_defaults release];
+ [_constants release];
[super dealloc];
}
@@ -216,11 +169,6 @@
return _procs;
}
-- (NSArray *)targets
-{
- return _targets;
-}
-
- (BOOL)isTarget:(NSString *)target
{
if ([target hasPrefix:@"pre-"]) {
@@ -232,38 +180,51 @@
return [_targets containsObject:target];
}
-- (NSArray *)defaults
+- (NSArray *)variables
{
- return [_defaults allKeys];
+ return [[_options allKeys] arrayByAddingObjectsFromArray:[_constants allKeys]];
}
-- (NSString *)default:(NSString *)def
+- (NSString *)variable:(NSString *)name
{
- // XXX: selector (NSInvocation?) or constant NSString...
- return [_defaults objectForKey:def];
+ NSString *ret;
+ ret = [_options objectForKey:name];
+ if (ret == nil) {
+ ret = [_constants objectForKey:name];
+ }
+ return ret;
}
-- (NSArray *)options
+- (void)option:(NSString *)option set:(NSArray *)value
{
- return _options;
+ if (![[_options allKeys] containsObject:option]) {
+ NSLog(@"? %@", option);
+ return;
+ }
+ [_options setObject:[value componentsJoinedByString:@" "] forKey:option];
}
-- (NSString *)option:(NSString *)option
+- (void)option:(NSString *)option append:(NSArray *)value
{
- return [_parser option:option];
+ if (![[_options allKeys] containsObject:option]) {
+ NSLog(@"? %@", option);
+ return;
+ }
+ [_options setObject:[NSString stringWithFormat:@"%@ %@", [_options objectForKey:option], [value componentsJoinedByString:@" "]] forKey:option];
}
-// essentially 'commands' from portutil.tcl
-- (void)addCommand:(NSString *)command
+- (void)option:(NSString *)option delete:(NSArray *)value
{
- [_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]];
+ if (![[_options allKeys] containsObject:option]) {
+ NSLog(@"? %@", option);
+ return;
+ }
+ NSMutableArray *tmp = [[[_options objectForKey:option] componentsSeparatedByString:@" "] mutableCopy];
+ for (NSString *v in value) {
+ [tmp removeObject:v];
+ }
+ [_options setObject:[tmp componentsJoinedByString:@" "] forKey:option];
+ [tmp release];
}
- (NSArray *)variants
Modified: users/toby/objcports/port.m
===================================================================
--- users/toby/objcports/port.m 2009-03-22 00:27:31 UTC (rev 48436)
+++ users/toby/objcports/port.m 2009-03-22 02:22:19 UTC (rev 48437)
@@ -12,16 +12,16 @@
exit(1);
MPPort *port = [[MPPort alloc] initWithPortfile:[NSString stringWithUTF8String:argv[1]] options:nil];
- NSLog(@"%@ @%@ (%@)", [port option:@"name"], [port option:@"version"], [port option:@"categories"]);
+ NSLog(@"%@ @%@ (%@)", [port variable:@"name"], [port variable:@"version"], [port variable:@"categories"]);
NSLog(@"Variants: %@", [[port variants] componentsJoinedByString:@", "]);
NSLog(@"PlatformVariants: %@", [[port platforms] componentsJoinedByString:@", "]);
- NSLog(@"Brief Description: %@", [port option:@"description"]);
- NSLog(@"Description: %@", [port option:@"long_description"]);
- NSLog(@"Homepage: %@", [port option:@"homepage"]);
- NSLog(@"Build Dependencies: %@", [port option:@"depends_build"]);
- NSLog(@"Library Dependencies: %@", [port option:@"depends_lib"]);
- NSLog(@"Platforms: %@", [port option:@"platforms"]);
- NSLog(@"Maintainers: %@", [port option:@"maintainers"]);
+ NSLog(@"Brief Description: %@", [port variable:@"description"]);
+ NSLog(@"Description: %@", [port variable:@"long_description"]);
+ NSLog(@"Homepage: %@", [port variable:@"homepage"]);
+ NSLog(@"Build Dependencies: %@", [port variable:@"depends_build"]);
+ NSLog(@"Library Dependencies: %@", [port variable:@"depends_lib"]);
+ NSLog(@"Platforms: %@", [port variable:@"platforms"]);
+ NSLog(@"Maintainers: %@", [port variable:@"maintainers"]);
[port release];
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090321/1ecf7658/attachment-0001.html>
More information about the macports-changes
mailing list