static int _configure_load(Prefs * prefs, String const * directory, configArray * ca) { int ret = 0; Config * config; String * path; String const * subdirs = NULL; if((path = string_new(directory)) == NULL) return configure_error(directory, 1); if(string_append(&path, "/") != 0 || string_append(&path, PROJECT_CONF) != 0 || (config = config_new()) == NULL) { string_delete(path); return configure_error(directory, 1); } config_set(config, "", "directory", directory); if(prefs->flags & PREFS_v) printf("%s%s%s", "Loading project file ", path, "\n"); if(config_load(config, path) != 0) ret = error_print(PROGNAME); else { array_append(ca, &config); subdirs = config_get(config, "", "subdirs"); } string_delete(path); if(subdirs == NULL) return ret; return _load_subdirs(prefs, directory, ca, subdirs); }
static int _settings_do(Prefs * prefs, Config * config, String const * directory, String const * package, String const * version, String const * extension) { int ret = 0; int i; String * filename; FILE * fp; for(i = 0; i <= ST_LAST; i++) if(strcmp(extension, sSettingsType[i]) == 0) break; if(i > ST_LAST) { fprintf(stderr, "%s%s%s", "configure: ", extension, ": Unknown settings type\n"); return 1; } if(prefs->flags & PREFS_n) return 0; if((filename = string_new(directory)) == NULL) return 1; if(string_append(&filename, "/config.") != 0 || string_append(&filename, extension) != 0) { string_delete(filename); return 1; } if((fp = fopen(filename, "w")) == NULL) configure_error(filename, 0); string_delete(filename); if(fp == NULL) return 1; if(prefs->flags & PREFS_v) printf("%s%s/%s%s\n", "Creating ", directory, "config.", extension); switch(i) { case ST_H: ret |= _do_h(prefs, config, fp, package, version); break; case ST_SH: ret |= _do_sh(prefs, config, fp, package, version); break; } fclose(fp); return ret; }
static void _configure_detect(Configure * configure) { char const * os; char const * version; #ifdef __WIN32__ configure->arch = HA_I386; configure->os = HO_WIN32; configure->kernel = HK_UNKNOWN; #else struct utsname un; if(uname(&un) < 0) { configure_error("system detection failed", 0); configure->arch = HA_UNKNOWN; configure->os = HO_UNKNOWN; configure->kernel = HK_UNKNOWN; return; } configure->arch = enum_map_find(HA_LAST, mHostArch, un.machine); configure->os = enum_string(HO_LAST, sHostOS, (configure->prefs->os != NULL) ? configure->prefs->os : un.sysname); configure->kernel = _detect_kernel(configure->os, un.release); #endif if(configure->prefs->flags & PREFS_v) { os = (mHostKernel[configure->kernel].os_display != NULL) ? mHostKernel[configure->kernel].os_display : sHostOS[configure->os]; version = (mHostKernel[configure->kernel].version_display != NULL) ? mHostKernel[configure->kernel].version_display : mHostKernel[configure->kernel].version; printf("Detected system %s version %s (%s)\n", os, version, sHostArch[configure->arch]); } }