Some thoughts on how a configuration specification might look... NAME DEFAULT_VALUE/METHOD POSSIBLE_VALUES TYPE(boolean, value) REGION LA {NE, LA} value PAR_SEQ parallel {parallel, sequential} value USE_BEE false {true, false} bool These can generate macro definitions and the like. Note that a variable can be either translated by value or its value can result in a definition: For example, USE_BEE = true -> Results in #define BEE REGION = LA -> Results in #define LA (value results in definition) NUM_MACHINES = 5 -> Results in #define NUM_MACHINES 5 (by value) Currently, another Makefiles are used to generate another mechanism. A group of values might represent one particular class of configuration. For example in the current system: make cs -> Sets the variables ARCH=alpha_osf1, TARGET_SYS=cs, {MAIN,CHEM,TRANS} = ALPHA A variation on this uses a make rule as a sort of function call to set a group of vars at one time: make config ("Local" Variables) --> generates SYSTEM Depending on a how a system is implemented this may or may not be necessary. Anyway, in general we might define a group of variables. SYSTEM CONFIGURATION: ARCH, MAIN, CHEM, TRANS Then we can define default settings which we would attach to those groups (though variables probably shouldn't be restricted to those groups. Of course, we could impose some sort of structure on relationships between groups but this may be overkill). Or simple think of some general way to specify a way to group these defaults together. THIS IS PROBABLY ADEQUATE... Parallel System/CS: ARCH=alpha_osf1, MAIN=ALPHA, CHEM=ALPHA, TRANS=ALPHA, VIRTUAL_MACHINE=CMU_LAB_ALPHAS