diff --git a/src/configure.c b/src/configure.c index 4a49cf5..92f97d5 100644 --- a/src/configure.c +++ b/src/configure.c @@ -259,7 +259,6 @@ static int _configure_do(Configure * configure, configArray * ca) { int i; int cnt = array_count(ca); - Config * ci; String * di; int j; Config * cj; @@ -267,8 +266,8 @@ static int _configure_do(Configure * configure, configArray * ca) for(i = 0; i < cnt; i++) { - array_get_copy(ca, i, &ci); - di = config_get(ci, "", "directory"); + array_get_copy(ca, i, &configure->config); + di = config_get(configure->config, "", "directory"); for(j = i; j < cnt; j++) { array_get_copy(ca, j, &cj); @@ -276,7 +275,7 @@ static int _configure_do(Configure * configure, configArray * ca) if(string_find(dj, di) == NULL) break; } - if(makefile(configure, ci, di, ca, i, j) != 0) + if(makefile(configure, di, ca, i, j) != 0) break; } return i == cnt ? 0 : 1; diff --git a/src/configure.h b/src/configure.h index 68ea6ce..6198db5 100644 --- a/src/configure.h +++ b/src/configure.h @@ -84,6 +84,7 @@ typedef struct _Prefs typedef struct _Configure { Prefs * prefs; + Config * config; HostArch arch; HostOS os; HostKernel kernel; diff --git a/src/makefile.c b/src/makefile.c index ef0ae59..d9f96c0 100644 --- a/src/makefile.c +++ b/src/makefile.c @@ -13,10 +13,11 @@ ARRAY(Config *, config); /* functions */ -static int _makefile_write(Configure * configure, Config * config, FILE * fp, - configArray * ca, int from, int to); -int makefile(Configure * configure, Config * config, String * directory, - configArray * ca, int from, int to) +static int _makefile_write(Configure * configure, FILE * fp, configArray * ca, + int from, int to); +int makefile(Configure * configure, String * directory, configArray * ca, + int from, int to) + { String * makefile; FILE * fp = NULL; @@ -33,7 +34,7 @@ int makefile(Configure * configure, Config * config, String * directory, if(configure->prefs->flags & PREFS_v) printf("%s%s%s%s%s", "Creating ", MAKEFILE, " in ", directory, "\n"); - ret |= _makefile_write(configure, config, fp, ca, from, to); + ret |= _makefile_write(configure, fp, ca, from, to); if(fp != NULL) fclose(fp); } @@ -41,27 +42,28 @@ int makefile(Configure * configure, Config * config, String * directory, return ret; } -static int _write_variables(Configure * configure, Config * config, FILE * fp); -static int _write_targets(Prefs * prefs, Config * config, FILE * fp); -static int _write_objects(Prefs * prefs, Config * config, FILE * fp); -static int _write_clean(Prefs * prefs, Config * config, FILE * fp); -static int _write_distclean(Prefs * prefs, Config * config, FILE * fp); -static int _write_dist(Prefs * prefs, Config * config, FILE * fp, - configArray * ca, int from, int to); -static int _write_install(Prefs * prefs, Config * config, FILE * fp); -static int _write_uninstall(Prefs * prefs, Config * config, FILE * fp); -static int _makefile_write(Configure * configure, Config * config, FILE * fp, - configArray * ca, int from, int to) +static int _write_variables(Configure * configure, FILE * fp); +static int _write_targets(Configure * configure, FILE * fp); +static int _write_objects(Configure * configure, FILE * fp); +static int _write_clean(Configure * configure, FILE * fp); +static int _write_distclean(Configure * configure, FILE * fp); +static int _write_dist(Configure * configure, FILE * fp, configArray * ca, + int from, int to); +static int _write_install(Configure * configure, FILE * fp); +static int _write_uninstall(Configure * configure, FILE * fp); +static int _makefile_write(Configure * configure, FILE * fp, configArray * ca, + int from, int to) { - if(_write_variables(configure, config, fp) != 0 - || _write_targets(configure->prefs, config, fp) != 0 - || _write_objects(configure->prefs, config, fp) != 0 - || _write_clean(configure->prefs, config, fp) != 0 - || _write_distclean(configure->prefs, config, fp) != 0 - || _write_dist(configure->prefs, config, fp, ca, from, - to) != 0 - || _write_install(configure->prefs, config, fp) != 0 - || _write_uninstall(configure->prefs, config, fp) != 0) + Config * config = configure->config; + + if(_write_variables(configure, fp) != 0 + || _write_targets(configure, fp) != 0 + || _write_objects(configure, fp) != 0 + || _write_clean(configure, fp) != 0 + || _write_distclean(configure, fp) != 0 + || _write_dist(configure, fp, ca, from, to) != 0 + || _write_install(configure, fp) != 0 + || _write_uninstall(configure, fp) != 0) return 1; if(!(configure->prefs->flags & PREFS_n)) fprintf(fp, "%s%s%s%s%s", "\n.PHONY: all", @@ -75,67 +77,67 @@ static int _makefile_write(Configure * configure, Config * config, FILE * fp, return 0; } -static int _variables_package(Prefs * prefs, Config * config, FILE * fp, +static int _variables_package(Configure * configure, FILE * fp, String const * directory); -static int _variables_print(Prefs * prefs, Config * config, FILE * fp, - char const * input, char const * output); -static int _variables_targets(Prefs * prefs, Config * config, FILE * fp); -static int _variables_executables(Configure * configure, Config * config, - FILE * fp); -static int _write_variables(Configure * configure, Config * config, FILE * fp) +static int _variables_print(Configure * configure, FILE * fp, + char const * input, char const * output); +static int _variables_targets(Configure * configure, FILE * fp); +static int _variables_executables(Configure * configure, FILE * fp); +static int _write_variables(Configure * configure, FILE * fp) { - String const * directory = config_get(config, "", "directory"); + String const * directory = config_get(configure->config, "", + "directory"); int ret = 0; - ret |= _variables_package(configure->prefs, config, fp, directory); - ret |= _variables_print(configure->prefs, config, fp, "subdirs", - "SUBDIRS"); - ret |= _variables_targets(configure->prefs, config, fp); - ret |= _variables_executables(configure, config, fp); + ret |= _variables_package(configure, fp, directory); + ret |= _variables_print(configure, fp, "subdirs", "SUBDIRS"); + ret |= _variables_targets(configure, fp); + ret |= _variables_executables(configure, fp); if(!(configure->prefs->flags & PREFS_n)) fputc('\n', fp); return ret; } -static int _variables_package(Prefs * prefs, Config * config, FILE * fp, +static int _variables_package(Configure * configure, FILE * fp, String const * directory) { String * package; String * version; String * p; - if((package = config_get(config, "", "package")) == NULL) + if((package = config_get(configure->config, "", "package")) == NULL) return 0; - if(prefs->flags & PREFS_v) + if(configure->prefs->flags & PREFS_v) printf("%s%s", "Package: ", package); - if((version = config_get(config, "", "version")) == NULL) + if((version = config_get(configure->config, "", "version")) == NULL) { - if(prefs->flags & PREFS_v) + if(configure->prefs->flags & PREFS_v) fputc('\n', stdout); fprintf(stderr, "%s%s%s", "configure: ", directory, ": \"package\" needs \"version\"\n"); return 1; } - if(prefs->flags & PREFS_v) + if(configure->prefs->flags & PREFS_v) printf("%s%s%s", " ", version, "\n"); if(fp != NULL) fprintf(fp, "%s%s%s%s%s", "PACKAGE\t= ", package, "\nVERSION\t= ", version, "\n"); - if((p = config_get(config, "", "config")) != NULL) - return settings(prefs, config, directory, package, version); + if((p = config_get(configure->config, "", "config")) != NULL) + return settings(configure->prefs, configure->config, directory, + package, version); return 0; } -static int _variables_print(Prefs * prefs, Config * config, FILE * fp, +static int _variables_print(Configure * configure, FILE * fp, char const * input, char const * output) { String * prints; unsigned long i; char c; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; - if((prints = config_get(config, "", input)) == NULL) + if((prints = config_get(configure->config, "", input)) == NULL) return 0; fprintf(fp, "%s%s", output, "\t="); for(i = 0;; i++) @@ -155,16 +157,16 @@ static int _variables_print(Prefs * prefs, Config * config, FILE * fp, return 0; } -static int _variables_targets(Prefs * prefs, Config * config, FILE * fp) +static int _variables_targets(Configure * configure, FILE * fp) { String * prints; unsigned long i; char c; String * type; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; - if((prints = config_get(config, "", "targets")) == NULL) + if((prints = config_get(configure->config, "", "targets")) == NULL) return 0; fprintf(fp, "%s%s", "TARGETS", "\t="); for(i = 0;; i++) @@ -173,7 +175,8 @@ static int _variables_targets(Prefs * prefs, Config * config, FILE * fp) continue; c = prints[i]; prints[i] = '\0'; - if((type = config_get(config, prints, "type")) == NULL) + if((type = config_get(configure->config, prints, "type")) + == NULL) fprintf(fp, " %s", prints); else switch(enum_string(TT_LAST, sTargetType, type)) @@ -198,10 +201,9 @@ static int _variables_targets(Prefs * prefs, Config * config, FILE * fp) return 0; } -static int _executables_variables(Configure * configure, Config * config, - FILE * fp, String * target); -static int _variables_executables(Configure * configure, Config * config, - FILE * fp) +static int _executables_variables(Configure * configure, FILE * fp, + String * target); +static int _variables_executables(Configure * configure, FILE * fp) { String * targets; int i; @@ -209,7 +211,7 @@ static int _variables_executables(Configure * configure, Config * config, if(configure->prefs->flags & PREFS_n) return 0; - if((targets = config_get(config, "", "targets")) != NULL) + if((targets = config_get(configure->config, "", "targets")) != NULL) { for(i = 0;; i++) { @@ -217,7 +219,7 @@ static int _variables_executables(Configure * configure, Config * config, continue; c = targets[i]; targets[i] = '\0'; - _executables_variables(configure, config, fp, targets); + _executables_variables(configure, fp, targets); if(c == '\0') break; targets[i] = c; @@ -226,7 +228,7 @@ static int _variables_executables(Configure * configure, Config * config, } fprintf(fp, "%s", "RM\t= rm -f\n"); } - if(config_get(config, "", "package")) + if(config_get(configure->config, "", "package")) fprintf(fp, "%s", "LN\t= ln -sf\nTAR\t= tar -czvf\n"); if(targets != NULL) { @@ -236,34 +238,32 @@ static int _variables_executables(Configure * configure, Config * config, return 0; } -static void _variables_binary(Configure * configure, Config * config, FILE * fp, - char * done); -static void _variables_library(Configure * configure, Config * config, - FILE * fp, char * done); -static int _executables_variables(Configure * configure, Config * config, - FILE * fp, String * target) +static void _variables_binary(Configure * configure, FILE * fp, char * done); +static void _variables_library(Configure * configure, FILE * fp, char * done); +static int _executables_variables(Configure * configure, FILE * fp, + String * target) { static Config * flag = NULL; String * type; char done[TT_LAST]; /* FIXME even better if'd be variable by variable */ TargetType tt; - if(flag != config) + if(flag != configure->config) { - flag = config; + flag = configure->config; memset(done, 0, sizeof(done)); } - if((type = config_get(config, target, "type")) == NULL) + if((type = config_get(configure->config, target, "type")) == NULL) return 0; if(done[(tt = enum_string(TT_LAST, sTargetType, type))]) return 0; switch(tt) { case TT_BINARY: - _variables_binary(configure, config, fp, done); + _variables_binary(configure, fp, done); break; case TT_LIBRARY: - _variables_library(configure, config, fp, done); + _variables_library(configure, fp, done); break; case TT_OBJECT: case TT_UNKNOWN: @@ -273,13 +273,11 @@ static int _executables_variables(Configure * configure, Config * config, return 0; } -static void _targets_cflags(Configure * configure, Config * config, FILE * fp); -static void _targets_cxxflags(Configure * configure, Config * config, - FILE * fp); +static void _targets_cflags(Configure * configure, FILE * fp); +static void _targets_cxxflags(Configure * configure, FILE * fp); static void _binary_ldflags(Configure * configure, FILE * fp, String const * ldflags); -static void _variables_binary(Configure * configure, Config * config, FILE * fp, - char * done) +static void _variables_binary(Configure * configure, FILE * fp, char * done) { String const * p; @@ -301,34 +299,34 @@ static void _variables_binary(Configure * configure, Config * config, FILE * fp, configure->prefs->includedir); if(!done[TT_LIBRARY]) { - _targets_cflags(configure, config, fp); - _targets_cxxflags(configure, config, fp); + _targets_cflags(configure, fp); + _targets_cxxflags(configure, fp); } - if((p = config_get(config, "", "ldflags_force")) != NULL) + if((p = config_get(configure->config, "", "ldflags_force")) != NULL) { fprintf(fp, "%s", "LDFLAGSF= "); _binary_ldflags(configure, fp, p); } - if((p = config_get(config, "", "ldflags")) != NULL) + if((p = config_get(configure->config, "", "ldflags")) != NULL) { fprintf(fp, "%s", "LDFLAGS\t= "); _binary_ldflags(configure, fp, p); } } -static void _targets_cflags(Configure * configure, Config * config, FILE * fp) +static void _targets_cflags(Configure * configure, FILE * fp) { String const * p; String const * q; - if((p = config_get(config, "", "cflags_force")) != NULL) + if((p = config_get(configure->config, "", "cflags_force")) != NULL) { fprintf(fp, "%s%s", "CC\t= cc\nCFLAGSF\t= ", p); if(configure->os == HO_GNU_LINUX && string_find(p, "-ansi")) - fprintf(fp, "%s", " -D_GNU_SOURCE"); + fprintf(fp, "%s", " -D_GNU_SOURCE"); /* FIXME undup */ fputc('\n', fp); } - if((q = config_get(config, "", "cflags")) != NULL) + if((q = config_get(configure->config, "", "cflags")) != NULL) { if(p == NULL) fprintf(fp, "%s", "CC\t= cc\n"); @@ -339,19 +337,19 @@ static void _targets_cflags(Configure * configure, Config * config, FILE * fp) } } -static void _targets_cxxflags(Configure * configure, Config * config, FILE * fp) +static void _targets_cxxflags(Configure * configure, FILE * fp) { String const * p; String const * q; - if((p = config_get(config, "", "cxxflags_force")) != NULL) + if((p = config_get(configure->config, "", "cxxflags_force")) != NULL) { fprintf(fp, "%s%s", "CXX\t= c++\nCXXFLAGSF= ", p); if(configure->os == HO_GNU_LINUX && string_find(p, "-ansi")) fprintf(fp, "%s", " -D_GNU_SOURCE"); fputc('\n', fp); } - if((q = config_get(config, "", "cxxflags")) != NULL) + if((q = config_get(configure->config, "", "cxxflags")) != NULL) { if(p == NULL) fprintf(fp, "%s", "CXX\t= c++\n"); @@ -370,7 +368,7 @@ static void _binary_ldflags(Configure * configure, FILE * fp, char * libs_sunos[] = { "dl", NULL }; char buf[10]; char ** libs; - char * p; + String * p; String * q; int i; @@ -407,8 +405,7 @@ static void _binary_ldflags(Configure * configure, FILE * fp, free(p); } -static void _variables_library(Configure * configure, Config * config, - FILE * fp, char * done) +static void _variables_library(Configure * configure, FILE * fp, char * done) { if(!done[TT_LIBRARY]) { @@ -422,27 +419,26 @@ static void _variables_library(Configure * configure, Config * config, configure->prefs->libdir); if(!done[TT_BINARY]) { - _targets_cflags(configure, config, fp); - _targets_cxxflags(configure, config, fp); + _targets_cflags(configure, fp); + _targets_cxxflags(configure, fp); } fprintf(fp, "%s", "AR\t= ar -rc\n"); fprintf(fp, "%s", "RANLIB\t= ranlib\n"); fprintf(fp, "%s", "LD\t= ld -shared\n"); } -static int _targets_all(Prefs * prefs, Config * config, FILE * fp); -static int _targets_subdirs(Prefs * prefs, Config * config, FILE * fp); -static int _targets_target(Prefs * prefs, Config * config, FILE * fp, - String * target); -static int _write_targets(Prefs * prefs, Config * config, FILE * fp) +static int _targets_all(Configure * configure, FILE * fp); +static int _targets_subdirs(Configure * configure, FILE * fp); +static int _targets_target(Configure * configure, FILE * fp, String * target); +static int _write_targets(Configure * configure, FILE * fp) { - char * targets = config_get(config, "", "targets"); + char * targets = config_get(configure->config, "", "targets"); char c; int i; int ret = 0; - if(_targets_all(prefs, config, fp) != 0 - || _targets_subdirs(prefs, config, fp) != 0) + if(_targets_all(configure, fp) != 0 + || _targets_subdirs(configure, fp) != 0) return 1; if(targets == NULL) return 0; @@ -452,7 +448,7 @@ static int _write_targets(Prefs * prefs, Config * config, FILE * fp) continue; c = targets[i]; targets[i] = '\0'; - ret += _targets_target(prefs, config, fp, targets); + ret += _targets_target(configure, fp, targets); if(c == '\0') break; targets[i] = c; @@ -462,45 +458,41 @@ static int _write_targets(Prefs * prefs, Config * config, FILE * fp) return ret; } -static int _targets_all(Prefs * prefs, Config * config, FILE * fp) +static int _targets_all(Configure * configure, FILE * fp) { - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; fprintf(fp, "%s", "\nall:"); - if(config_get(config, "", "subdirs") != NULL) + if(config_get(configure->config, "", "subdirs") != NULL) fprintf(fp, "%s", " subdirs"); - if(config_get(config, "", "targets") != NULL) + if(config_get(configure->config, "", "targets") != NULL) fprintf(fp, "%s", " $(TARGETS)"); fprintf(fp, "%s", "\n"); return 0; } -static int _targets_subdirs(Prefs * prefs, Config * config, FILE * fp) +static int _targets_subdirs(Configure * configure, FILE * fp) { String * subdirs; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; - if((subdirs = config_get(config, "", "subdirs")) != NULL) + if((subdirs = config_get(configure->config, "", "subdirs")) != NULL) fprintf(fp, "%s", "\nsubdirs:\n\t@for i in $(SUBDIRS); do" " (cd $$i && $(MAKE)) || exit; done\n"); return 0; } -static int _target_objs(Prefs * prefs, Config * config, FILE * fp, - String * target); -static int _target_binary(Prefs * prefs, Config * config, FILE * fp, - String * target); -static int _target_library(Prefs * prefs, Config * config, FILE * fp, - String * target); -static int _targets_target(Prefs * prefs, Config * config, FILE * fp, - String * target) +static int _target_objs(Configure * configure, FILE * fp, String * target); +static int _target_binary(Configure * configure, FILE * fp, String * target); +static int _target_library(Configure * configure, FILE * fp, String * target); +static int _targets_target(Configure * configure, FILE * fp, String * target) { String * type; TargetType tt; String * p; - if((type = config_get(config, target, "type")) == NULL) + if((type = config_get(configure->config, target, "type")) == NULL) { fprintf(stderr, "%s%s%s", "configure: ", target, ": no type defined for target\n"); @@ -510,17 +502,18 @@ static int _targets_target(Prefs * prefs, Config * config, FILE * fp, switch(tt) { case TT_BINARY: - return _target_binary(prefs, config, fp, target); + return _target_binary(configure, fp, target); case TT_LIBRARY: - return _target_library(prefs, config, fp, target); + return _target_library(configure, fp, target); case TT_OBJECT: - if((p = config_get(config, target, "sources")) == NULL) + if((p = config_get(configure->config, target, + "sources")) == NULL) { fprintf(stderr, "%s%s%s", "configure: ", target, " no sources for target\n"); return 1; } - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; fprintf(fp, "%s%s%s%s", target, ": ", p, "\n"); /* FIXME */ @@ -534,21 +527,20 @@ static int _targets_target(Prefs * prefs, Config * config, FILE * fp, } static int _objs_source(Prefs * prefs, FILE * fp, String * source); -static int _target_objs(Prefs * prefs, Config * config, FILE * fp, - String * target) +static int _target_objs(Configure * configure, FILE * fp, String * target) { int ret = 0; String * sources; int i; char c; - if((sources = config_get(config, target, "sources")) == NULL) + if((sources = config_get(configure->config, target, "sources")) == NULL) { fprintf(stderr, "%s%s%s", "configure: ", target, ": no sources defined for target\n"); return 1; } - if(!(prefs->flags & PREFS_n)) + if(!(configure->prefs->flags & PREFS_n)) fprintf(fp, "%s%s%s", "\n", target, "_OBJS ="); for(i = 0; ret == 0; i++) { @@ -556,14 +548,14 @@ static int _target_objs(Prefs * prefs, Config * config, FILE * fp, continue; c = sources[i]; sources[i] = '\0'; - ret = _objs_source(prefs, fp, sources); + ret = _objs_source(configure->prefs, fp, sources); if(c == '\0') break; sources[i] = c; sources+=i+1; i = 0; } - if(!(prefs->flags & PREFS_n)) + if(!(configure->prefs->flags & PREFS_n)) fputc('\n', fp); return ret; } @@ -606,29 +598,28 @@ static int _objs_source(Prefs * prefs, FILE * fp, String * source) return ret; } -static void _target_flags(Config * config, FILE * fp, String * target); -static int _target_binary(Prefs * prefs, Config * config, FILE * fp, - String * target) +static void _target_flags(Configure * configure, FILE * fp, String * target); +static int _target_binary(Configure * configure, FILE * fp, String * target) { String * p; - if(_target_objs(prefs, config, fp, target) != 0) + if(_target_objs(configure, fp, target) != 0) return 1; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; - _target_flags(config, fp, target); + _target_flags(configure, fp, target); fprintf(fp, "%s%s%s%s", target, ": $(", target, "_OBJS)\n"); fprintf(fp, "%s", "\t$(CC) $(LDFLAGSF)"); - if((p = config_get(config, target, "ldflags")) != NULL) + if((p = config_get(configure->config, target, "ldflags")) != NULL) fprintf(fp, " %s", p); fprintf(fp, "%s%s%s%s%s", " $(LDFLAGS) -o ", target, " $(", target, "_OBJS)\n"); return 0; } -static void _flags_c(Config * config, FILE * fp, String * target); -static void _flags_cxx(Config * config, FILE * fp, String * target); -static void _target_flags(Config * config, FILE * fp, String * target) +static void _flags_c(Configure * configure, FILE * fp, String * target); +static void _flags_cxx(Configure * configure, FILE * fp, String * target); +static void _target_flags(Configure * configure, FILE * fp, String * target) { char done[OT_LAST+1]; String * sources; @@ -638,7 +629,7 @@ static void _target_flags(Config * config, FILE * fp, String * target) unsigned int i; memset(done, 0, sizeof(done)); - if((sources = config_get(config, target, "sources")) == NULL) + if((sources = config_get(configure->config, target, "sources")) == NULL) return; for(i = 0;; i++) { @@ -660,13 +651,13 @@ static void _target_flags(Config * config, FILE * fp, String * target) case OT_ASM_SOURCE: break; case OT_C_SOURCE: - _flags_c(config, fp, target); + _flags_c(configure, fp, target); break; case OT_CXX_SOURCE: case OT_CPP_SOURCE: done[OT_CXX_SOURCE] = 1; done[OT_CPP_SOURCE] = 1; - _flags_cxx(config, fp, target); + _flags_cxx(configure, fp, target); break; case OT_UNKNOWN: break; @@ -679,34 +670,35 @@ static void _target_flags(Config * config, FILE * fp, String * target) } } -static void _flags_c(Config * config, FILE * fp, String * target) +static void _flags_c(Configure * configure, FILE * fp, String * target) { - char * p; + String const * p; fprintf(fp, "%s%s", target, "_CFLAGS = $(CFLAGSF) $(CFLAGS)"); - if((p = config_get(config, target, "cflags")) != NULL) + if((p = config_get(configure->config, target, "cflags")) != NULL) fprintf(fp, " %s", p); + if(configure->os == HO_GNU_LINUX && string_find(p, "-ansi")) + fprintf(fp, "%s", " -D_GNU_SOURCE"); fputc('\n', fp); } -static void _flags_cxx(Config * config, FILE * fp, String * target) +static void _flags_cxx(Configure * configure, FILE * fp, String * target) { - char * p; + String const * p; fprintf(fp, "%s%s", target, "_CXXFLAGS = $(CXXFLAGSF) $(CXXFLAGS)"); - if((p = config_get(config, target, "cxxflags")) != NULL) + if((p = config_get(configure->config, target, "cxxflags")) != NULL) fprintf(fp, " %s", p); fputc('\n', fp); } -static int _target_library(Prefs * prefs, Config * config, FILE * fp, - String * target) +static int _target_library(Configure * configure, FILE * fp, String * target) { - if(_target_objs(prefs, config, fp, target) != 0) + if(_target_objs(configure, fp, target) != 0) return 1; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; - _target_flags(config, fp, target); + _target_flags(configure, fp, target); fprintf(fp, "%s%s%s%s", target, ".a: $(", target, "_OBJS)\n"); fprintf(fp, "%s%s%s%s%s", "\t$(AR) ", target, ".a $(", target, "_OBJS)\n"); @@ -717,11 +709,10 @@ static int _target_library(Prefs * prefs, Config * config, FILE * fp, return 0; } -static int _objects_target(Prefs * prefs, Config * config, FILE * fp, - String * target); -static int _write_objects(Prefs * prefs, Config * config, FILE * fp) +static int _objects_target(Configure * configure, FILE * fp, String * target); +static int _write_objects(Configure * configure, FILE * fp) { - char * targets = config_get(config, "", "targets"); + char * targets = config_get(configure->config, "", "targets"); char c; int i; int ret = 0; @@ -734,7 +725,7 @@ static int _write_objects(Prefs * prefs, Config * config, FILE * fp) continue; c = targets[i]; targets[i] = '\0'; - ret += _objects_target(prefs, config, fp, targets); + ret += _objects_target(configure, fp, targets); if(c == '\0') break; targets[i] = c; @@ -744,16 +735,15 @@ static int _write_objects(Prefs * prefs, Config * config, FILE * fp) return ret; } -static int _target_source(Prefs * prefs, Config * config, FILE * fp, - String * target, String * source); -static int _objects_target(Prefs * prefs, Config * config, FILE * fp, - String * target) +static int _target_source(Configure * configure, FILE * fp, String * target, + String * source); +static int _objects_target(Configure * configure, FILE * fp, String * target) { String * sources; int i; char c; - if((sources = config_get(config, target, "sources")) == NULL) + if((sources = config_get(configure->config, target, "sources")) == NULL) return 0; for(i = 0;; i++) { @@ -761,7 +751,7 @@ static int _objects_target(Prefs * prefs, Config * config, FILE * fp, continue; c = sources[i]; sources[i] = '\0'; - _target_source(prefs, config, fp, target, sources); + _target_source(configure, fp, target, sources); if(c == '\0') break; sources[i] = c; @@ -772,8 +762,8 @@ static int _objects_target(Prefs * prefs, Config * config, FILE * fp, } static void _source_c_depends(Config * config, FILE * fp, String * source); -static int _target_source(Prefs * prefs, Config * config, FILE * fp, - String * target, String * source) +static int _target_source(Configure * configure, FILE * fp, String * target, + String * source) { int ret = 0; String * extension; @@ -789,18 +779,23 @@ static int _target_source(Prefs * prefs, Config * config, FILE * fp, { case OT_ASM_SOURCE: case OT_C_SOURCE: - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) break; fprintf(fp, "%s%s%s%s%s%s", "\n", source, ".o: ", source, ".", sObjectType[ot]); source[len] = '.'; /* FIXME ugly */ - _source_c_depends(config, fp, source); - p = config_get(config, source, "cflags"); + _source_c_depends(configure->config, fp, source); + p = config_get(configure->config, source, "cflags"); source[len] = '\0'; fprintf(fp, "%s%s%s", "\n\t$(CC) $(", target, "_CFLAGS)"); if(p != NULL) + { fprintf(fp, " %s", p); + if(configure->os == HO_GNU_LINUX + && string_find(p, "-ansi")) + fprintf(fp, "%s", " -D_GNU_SOURCE"); + } fprintf(fp, "%s%s%s%s", " -c ", source, ".", sObjectType[ot]); if(string_find(source, "/")) @@ -809,13 +804,13 @@ static int _target_source(Prefs * prefs, Config * config, FILE * fp, break; case OT_CXX_SOURCE: case OT_CPP_SOURCE: - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) break; fprintf(fp, "%s%s%s%s%s%s", "\n", source, ".o: ", source, ".", sObjectType[ot]); source[len] = '.'; /* FIXME ugly */ - _source_c_depends(config, fp, source); - p = config_get(config, source, "cxxflags"); + _source_c_depends(configure->config, fp, source); + p = config_get(configure->config, source, "cxxflags"); source[len] = '\0'; fprintf(fp, "%s%s%s", "\n\t$(CXX) $(", target, "_CXXFLAGS)"); @@ -859,15 +854,15 @@ static void _source_c_depends(Config * config, FILE * fp, String * source) } static int _clean_targets(Config * config, FILE * fp); -static int _write_clean(Prefs * prefs, Config * config, FILE * fp) +static int _write_clean(Configure * configure, FILE * fp) { - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; fprintf(fp, "%s", "\nclean:\n"); - if(config_get(config, "", "subdirs") != NULL) + if(config_get(configure->config, "", "subdirs") != NULL) fprintf(fp, "%s", "\t@for i in $(SUBDIRS); do" " (cd $$i && $(MAKE) clean) || exit; done\n"); - return _clean_targets(config, fp); + return _clean_targets(configure->config, fp); } static int _clean_targets(Config * config, FILE * fp) @@ -896,40 +891,40 @@ static int _clean_targets(Config * config, FILE * fp) return 0; } -static int _write_distclean(Prefs * prefs, Config * config, FILE * fp) +static int _write_distclean(Configure * configure, FILE * fp) { String * subdirs; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; fprintf(fp, "%s", "\ndistclean:"); - if((subdirs = config_get(config, "", "subdirs")) == NULL) + if((subdirs = config_get(configure->config, "", "subdirs")) == NULL) fprintf(fp, "%s", " clean\n"); else { fprintf(fp, "%s", "\n\t@for i in $(SUBDIRS); do (cd $$i" " && $(MAKE) distclean) || exit; done\n"); - _clean_targets(config, fp); + _clean_targets(configure->config, fp); } - if(config_get(config, "", "targets") != NULL) + if(config_get(configure->config, "", "targets") != NULL) fprintf(fp, "%s", "\t$(RM) $(TARGETS)\n"); return 0; } static int _dist_subdir(Config * config, FILE * fp, Config * subdir); -static int _write_dist(Prefs * prefs, Config * config, FILE * fp, - configArray * ca, int from, int to) +static int _write_dist(Configure * configure, FILE * fp, configArray * ca, + int from, int to) { String const * package; String const * version; Config * p; int i; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; - if((package = config_get(config, "", "package")) == NULL - || (version = config_get(config, "", "version")) - == NULL) + if((package = config_get(configure->config, "", "package")) == NULL + || (version = config_get(configure->config, "", + "version")) == NULL) return 0; fprintf(fp, "%s", "\ndist:\n" "\t$(RM) -r $(PACKAGE)-$(VERSION)\n" @@ -938,12 +933,12 @@ static int _write_dist(Prefs * prefs, Config * config, FILE * fp, for(i = from+1; i < to; i++) { array_get_copy(ca, i, &p); - _dist_subdir(config, fp, p); + _dist_subdir(configure->config, fp, p); } if(from < to) { array_get_copy(ca, from, &p); - _dist_subdir(config, fp, p); + _dist_subdir(configure->config, fp, p); } else return 1; @@ -1016,7 +1011,7 @@ static int _dist_subdir_dist(FILE * fp, String * path, String * dist) } static int _install_target(Config * config, FILE * fp, String * target); -static int _write_install(Prefs * prefs, Config * config, FILE * fp) +static int _write_install(Configure * configure, FILE * fp) { int ret = 0; String * subdirs; @@ -1024,20 +1019,20 @@ static int _write_install(Prefs * prefs, Config * config, FILE * fp) int i; char c; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; fprintf(fp, "%s", "\ninstall: all\n"); - if((subdirs = config_get(config, "", "subdirs")) != NULL) + if((subdirs = config_get(configure->config, "", "subdirs")) != NULL) fprintf(fp, "%s", "\t@for i in $(SUBDIRS); do" " (cd $$i && $(MAKE) install) || exit; done\n"); - if((targets = config_get(config, "", "targets")) != NULL) + if((targets = config_get(configure->config, "", "targets")) != NULL) for(i = 0; ret == 0; i++) { if(targets[i] != ',' && targets[i] != '\0') continue; c = targets[i]; targets[i] = '\0'; - ret = _install_target(config, fp, targets); + ret = _install_target(configure->config, fp, targets); if(c == '\0') break; targets[i] = c; @@ -1091,7 +1086,7 @@ static int _install_target(Config * config, FILE * fp, String * target) } static int _uninstall_target(Config * config, FILE * fp, String * target); -static int _write_uninstall(Prefs * prefs, Config * config, FILE * fp) +static int _write_uninstall(Configure * configure, FILE * fp) { int ret = 0; String * subdirs; @@ -1099,20 +1094,20 @@ static int _write_uninstall(Prefs * prefs, Config * config, FILE * fp) int i; char c; - if(prefs->flags & PREFS_n) + if(configure->prefs->flags & PREFS_n) return 0; fprintf(fp, "%s", "\nuninstall:\n"); - if((subdirs = config_get(config, "", "subdirs")) != NULL) + if((subdirs = config_get(configure->config, "", "subdirs")) != NULL) fprintf(fp, "%s", "\t@for i in $(SUBDIRS); do (cd $$i &&" " $(MAKE) uninstall) || exit; done\n"); - if((targets = config_get(config, "", "targets")) != NULL) + if((targets = config_get(configure->config, "", "targets")) != NULL) for(i = 0; ret == 0; i++) { if(targets[i] != ',' && targets[i] != '\0') continue; c = targets[i]; targets[i] = '\0'; - ret = _uninstall_target(config, fp, targets); + ret = _uninstall_target(configure->config, fp, targets); if(c == '\0') break; targets[i] = c; diff --git a/src/makefile.h b/src/makefile.h index d371833..c48fcad 100644 --- a/src/makefile.h +++ b/src/makefile.h @@ -18,7 +18,8 @@ extern configArray * configarray_new(void); /* functions */ -int makefile(Configure * configure, Config * config, String * directory, - configArray * ca, int from, int to); +int makefile(Configure * configure, String * directory, configArray * ca, + int from, int to); + #endif /* !CONFIGURE_MAKEFILE_H */