This commit is contained in:
Pierre Pronchery 2004-08-19 16:48:54 +00:00
parent 1be7068097
commit cd3cc3a334

View File

@ -49,7 +49,7 @@ static int _configure_config(Config * config)
if((fp = fopen("Makefile", "w")) == NULL) if((fp = fopen("Makefile", "w")) == NULL)
{ {
fprintf(stderr, "%s", "configure: "); fprintf(stderr, "%s", "configure: ");
perror("Makefile.new"); perror("Makefile");
return 1; return 1;
} }
if(_config_makefile(fp, config) != 0) if(_config_makefile(fp, config) != 0)
@ -108,7 +108,7 @@ static int _subdir_configure(char const * subdir)
return 0; return 0;
} }
fprintf(stderr, "%s%s%s", "configure: ", subdir, fprintf(stderr, "%s%s%s", "configure: ", subdir,
"Invalid subdirectory\n"); ": Invalid subdirectory\n");
return 1; return 1;
} }
@ -151,6 +151,7 @@ static int _variables_subdirs(FILE * fp, Config * config)
return 0; return 0;
} }
static void _target_print(FILE * fp, Config * config, char * target);
static int _variables_target(FILE * fp, Config * config) static int _variables_target(FILE * fp, Config * config)
{ {
char * targets; char * targets;
@ -158,24 +159,33 @@ static int _variables_target(FILE * fp, Config * config)
if((targets = config_get(config, "", "targets")) == NULL if((targets = config_get(config, "", "targets")) == NULL
|| *targets == '\0') || *targets == '\0')
{
/* FIXME */
return 1; return 1;
}
fprintf(fp, "%s", "TARGETS\t="); fprintf(fp, "%s", "TARGETS\t=");
for(cur = targets; *targets != '\0'; targets++) for(cur = targets; *targets != '\0'; targets++)
{ {
if(*targets != ',') if(*targets != ',')
continue; continue;
*targets = '\0'; *targets = '\0';
fprintf(fp, " %s", cur); _target_print(fp, config, cur);
*targets = ','; *targets = ',';
cur = targets + 1; cur = targets + 1;
} }
fprintf(fp, " %s\n", cur); _target_print(fp, config, cur);
fputc('\n', fp);
return 0; return 0;
} }
static void _target_print(FILE * fp, Config * config, char * target)
{
char * p;
if((p = config_get(config, target, "type")) != NULL
&& strcmp(p, "library") == 0)
fprintf(fp, " %s.a %s.so", target, target);
else
fprintf(fp, " %s", target);
}
static int _variables_cflags(FILE * fp, Config * config) static int _variables_cflags(FILE * fp, Config * config)
{ {
char * cflags; char * cflags;
@ -231,7 +241,7 @@ static int _makefile_targets(FILE * fp, Config * config)
if(subdirs != NULL && *subdirs != '\0') if(subdirs != NULL && *subdirs != '\0')
fprintf(fp, "%s%s%s", "subdirs:\n", fprintf(fp, "%s%s%s", "subdirs:\n",
"\t@for i in $(SUBDIRS); do ", "\t@for i in $(SUBDIRS); do ",
"$(MAKE) -C $$i || exit $$?; done\n\n"); "(cd $$i && $(MAKE)) || exit; done\n\n");
if(targets == NULL) if(targets == NULL)
return 0; return 0;
return _targets_all(fp, config); return _targets_all(fp, config);
@ -245,7 +255,7 @@ static int _targets_all(FILE * fp, Config * config)
if((targets = config_get(config, "", "targets")) == NULL if((targets = config_get(config, "", "targets")) == NULL
|| *targets == '\0') || *targets == '\0')
return; return 0;
for(cur = targets; *targets != '\0'; targets++) for(cur = targets; *targets != '\0'; targets++)
{ {
if(*targets != ',') if(*targets != ',')
@ -274,7 +284,7 @@ static void _target_objs(FILE * fp, Config * config, char * target)
": Undefined target\n"); ": Undefined target\n");
return; return;
} }
fprintf(fp, "%s_OBJS=", target); fprintf(fp, "%s%s", target, "_OBJS=");
for(cur = sources; *sources != '\0'; sources++) for(cur = sources; *sources != '\0'; sources++)
{ {
if(*sources != ',') if(*sources != ',')
@ -287,7 +297,10 @@ static void _target_objs(FILE * fp, Config * config, char * target)
} }
fprintf(fp, "%s", " "); fprintf(fp, "%s", " ");
_obj_print(fp, cur); _obj_print(fp, cur);
fprintf(fp, "%s", "\n"); fprintf(fp, "\n%s%s", target, "_CFLAGS=$(CFLAGSF)");
cur = config_get(config, target, "cflags");
fprintf(fp, "%s%s%s", cur != NULL ? " " : "", cur != NULL ? cur : "",
" $(CFLAGS)\n");
_target_link(fp, config, target); _target_link(fp, config, target);
_objs_handlers(fp, config, target); _objs_handlers(fp, config, target);
} }
@ -302,16 +315,15 @@ static void _obj_print(FILE * fp, char * obj)
obj[len+1] = 'o'; obj[len+1] = 'o';
fprintf(fp, "%s", obj); fprintf(fp, "%s", obj);
obj[len+1] = 'c'; obj[len+1] = 'c';
return;
} }
if(strcmp(&obj[len+1], "e") == 0) else if(strcmp(&obj[len+1], "e") == 0)
{ {
obj[len+1] = 'o'; obj[len+1] = 'o';
fprintf(fp, "%s", obj); fprintf(fp, "%s", obj);
obj[len+1] = 'e'; obj[len+1] = 'e';
return;
} }
fprintf(stderr, "%s%s%s", "configure: ", obj, else
fprintf(stderr, "%s%s%s", "configure: ", obj,
": Unknown source type\n"); ": Unknown source type\n");
} }
@ -336,8 +348,7 @@ static void _target_link(FILE * fp, Config * config, char * target)
" $(", target, "_OBJS)\n\n"); " $(", target, "_OBJS)\n\n");
} }
else if(strcmp("library", type) == 0) else if(strcmp("library", type) == 0)
fprintf(fp, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", fprintf(fp, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
target, ": ", target, ".a ", target, ".so\n",
target, ".a: $(", target, "_OBJS)\n\t$(AR) ", target, ".a: $(", target, "_OBJS)\n\t$(AR) ",
target, ".a $(", target, "_OBJS)\n\t$(RANLIB) ", target, ".a $(", target, "_OBJS)\n\t$(RANLIB) ",
target, ".a\n\n", target, ".so: $(", target, target, ".a\n\n", target, ".so: $(", target,
@ -348,7 +359,7 @@ static void _target_link(FILE * fp, Config * config, char * target)
": Unknown type \"", type, "\"\n"); ": Unknown type \"", type, "\"\n");
} }
static void _handler_print(FILE * fp, char * source); static void _handler_print(FILE * fp, char * target, char * source);
static void _objs_handlers(FILE * fp, Config * config, char * target) static void _objs_handlers(FILE * fp, Config * config, char * target)
{ {
char * sources; char * sources;
@ -362,18 +373,28 @@ static void _objs_handlers(FILE * fp, Config * config, char * target)
if(*sources != ',') if(*sources != ',')
continue; continue;
*sources = '\0'; *sources = '\0';
_handler_print(fp, cur); _handler_print(fp, target, cur);
*sources = ','; *sources = ',';
cur = sources + 1; cur = sources + 1;
} }
_handler_print(fp, cur); _handler_print(fp, target, cur);
} }
static void _handler_print(FILE * fp, char * source) static void _handler_print(FILE * fp, char * target, char * source)
{ {
int len;
_obj_print(fp, source); _obj_print(fp, source);
fprintf(fp, "%s%s%s%s%s", ": ", source, fprintf(fp, "%s%s%s%s%s%s%s", ": ", source, "\n\t$(CC) $(", target,
"\n\t$(CC) $(CFLAGSF) $(CFLAGS) -c ", source, "\n\n"); "_CFLAGS)", " -c ", source);
if(strstr(source, "/") != NULL)
{
len = strlen(source);
source[len-1] = 'o';
fprintf(fp, "%s%s", " -o ", source);
source[len-1] = 'c';
}
fprintf(fp, "%s", "\n\n");
} }
static void _clean_targets_objs(FILE * fp, Config * config); static void _clean_targets_objs(FILE * fp, Config * config);
@ -384,7 +405,7 @@ static int _makefile_clean(FILE * fp, Config * config)
fprintf(fp, "%s", "clean:\n"); fprintf(fp, "%s", "clean:\n");
if((subdirs = config_get(config, "", "subdirs")) != NULL) if((subdirs = config_get(config, "", "subdirs")) != NULL)
fprintf(fp, "%s%s", "\t@for i in $(SUBDIRS); ", fprintf(fp, "%s%s", "\t@for i in $(SUBDIRS); ",
"do $(MAKE) -C $$i clean || exit $$?; done\n"); "do (cd $$i && $(MAKE) clean) || exit; done\n");
if(config_get(config, "", "targets") != NULL) if(config_get(config, "", "targets") != NULL)
{ {
fprintf(fp, "%s", "\t$(RM)"); fprintf(fp, "%s", "\t$(RM)");
@ -394,7 +415,7 @@ static int _makefile_clean(FILE * fp, Config * config)
fprintf(fp, "%s", "\ndistclean: clean\n"); fprintf(fp, "%s", "\ndistclean: clean\n");
if(subdirs != NULL) if(subdirs != NULL)
fprintf(fp, "%s%s", "\t@for i in $(SUBDIRS); ", fprintf(fp, "%s%s", "\t@for i in $(SUBDIRS); ",
"do $(MAKE) -C $$i distclean || exit $$?; done\n"); "do (cd $$i && $(MAKE) distclean) || exit; done\n");
if(config_get(config, "", "targets") != NULL) if(config_get(config, "", "targets") != NULL)
fprintf(fp, "%s", "\t$(RM) $(TARGETS)\n"); fprintf(fp, "%s", "\t$(RM) $(TARGETS)\n");
return 0; return 0;