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