Tons
This commit is contained in:
parent
1be7068097
commit
cd3cc3a334
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user