code: function applyFullPath( baseDir, suffix, config, skipRelative ) {
  	if (typeof(config) == "string") {
  		// Check for macros
  		if (config.indexOf('${') >= 0) {
  			config = config.replace(/\${(.+?)}/g, function(match, contents, offset, s)
  				{
  					var key = contents.toLowerCase();
  					if (key === "bundle") {
  						return baseDir
  					} else if (key === "suffix") {
  						return suffix;
  					} else {
  						console.warn("Unknown macro '"+key+"' encountered in: "+config);
  						return "";
  					}
  				});
  		// Check for full path
  		} else if (!skipRelative && config.substr(0,1) != "/") {
  			return path.join(baseDir, config) + suffix;
  		}
  		// Otherwise we are good
  		return config;
  	} else {
  		if (config.constructor == ({}).constructor) {
  			var ans = {};
  			for (var k in config) 
  				ans[k] = applyFullPath( baseDir, suffix, config[k], true );
  			return ans;
  		} else if (config.length !== undefined) {
  			var ans = [];
  			for (var i=0; i<config.length; i++)
  				ans.push(applyFullPath( baseDir, suffix, config[i], true ));
  			return ans;
  		} else {
  			return config;
  		}
  	}
  }
docs: Apply full path by replacing the ${BUNDLE} macro or
  by prepending the path to the path if config is only a string