Implemented dependencies on source files

This commit is contained in:
Pierre Pronchery 2006-04-01 23:59:46 +00:00
parent 1ba0a48f14
commit 2c4aa44bd1

View File

@ -5,6 +5,7 @@
#include <System.h> #include <System.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include "configure.h" #include "configure.h"
ARRAY(Config *, config); ARRAY(Config *, config);
@ -75,11 +76,11 @@ static int _write_variables(Configure * configure, Config * config, FILE * fp)
String const * directory = config_get(config, "", "directory"); String const * directory = config_get(config, "", "directory");
int ret = 0; int ret = 0;
ret += _variables_package(&configure->prefs, config, fp, directory); ret |= _variables_package(&configure->prefs, config, fp, directory);
ret += _variables_print(&configure->prefs, config, fp, "subdirs", ret |= _variables_print(&configure->prefs, config, fp, "subdirs",
"SUBDIRS"); "SUBDIRS");
ret += _variables_targets(&configure->prefs, config, fp); ret |= _variables_targets(&configure->prefs, config, fp);
ret += _variables_executables(configure, config, fp); ret |= _variables_executables(configure, config, fp);
if(!(configure->prefs & PREFS_n)) if(!(configure->prefs & PREFS_n))
fputc('\n', fp); fputc('\n', fp);
return ret; return ret;
@ -225,7 +226,6 @@ static void _variables_binary(Configure * configure, Config * config, FILE * fp,
char * done); char * done);
static void _variables_library(Configure * configure, Config * config, static void _variables_library(Configure * configure, Config * config,
FILE * fp, char * done); FILE * fp, char * done);
static void _variables_object(void);
static int _executables_variables(Configure * configure, Config * config, static int _executables_variables(Configure * configure, Config * config,
FILE * fp, String * target) FILE * fp, String * target)
{ {
@ -252,8 +252,6 @@ static int _executables_variables(Configure * configure, Config * config,
_variables_library(configure, config, fp, done); _variables_library(configure, config, fp, done);
break; break;
case TT_OBJECT: case TT_OBJECT:
_variables_object();
break;
case TT_UNKNOWN: case TT_UNKNOWN:
break; break;
} }
@ -331,10 +329,6 @@ static void _variables_library(Configure * configure, Config * config,
fprintf(fp, "%s", "LD\t= ld -shared\n"); fprintf(fp, "%s", "LD\t= ld -shared\n");
} }
static void _variables_object(void)
{
}
static int _targets_all(Prefs * prefs, Config * config, FILE * fp); static int _targets_all(Prefs * prefs, Config * config, FILE * fp);
static int _targets_subdirs(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, static int _targets_target(Prefs * prefs, Config * config, FILE * fp,
@ -394,6 +388,8 @@ static int _targets_subdirs(Prefs * prefs, Config * config, FILE * fp)
static int _target_objs(Prefs * prefs, Config * config, FILE * fp, static int _target_objs(Prefs * prefs, Config * config, FILE * fp,
String * target); String * target);
static int _target_binary(Prefs * prefs, Config * config, FILE * fp,
String * target);
static int _target_library(Prefs * prefs, Config * config, FILE * fp, static int _target_library(Prefs * prefs, Config * config, FILE * fp,
String * target); String * target);
static int _targets_target(Prefs * prefs, Config * config, FILE * fp, static int _targets_target(Prefs * prefs, Config * config, FILE * fp,
@ -413,21 +409,7 @@ static int _targets_target(Prefs * prefs, Config * config, FILE * fp,
switch(tt) switch(tt)
{ {
case TT_BINARY: case TT_BINARY:
if(_target_objs(prefs, config, fp, target) != 0) return _target_binary(prefs, config, fp, target);
return 1;
if(*prefs & PREFS_n)
return 0;
fprintf(fp, "%s%s", target, "_CFLAGS = $(CFLAGSF)"
" $(CFLAGS)");
if((p = config_get(config, target, "cflags")) != NULL)
fprintf(fp, "%s%s", " ", p);
fputc('\n', fp);
fprintf(fp, "%s%s%s%s", target, ": $(", target,
"_OBJS)\n");
fprintf(fp, "%s%s%s%s%s", "\t$(CC) $(LDFLAGSF)"
" $(LDFLAGS) -o ", target, " $(",
target, "_OBJS)\n");
break;
case TT_LIBRARY: case TT_LIBRARY:
return _target_library(prefs, config, fp, target); return _target_library(prefs, config, fp, target);
case TT_OBJECT: case TT_OBJECT:
@ -517,6 +499,25 @@ static int _objs_source(Prefs * prefs, FILE * fp, String * source)
return ret; return ret;
} }
static int _target_binary(Prefs * prefs, Config * config, FILE * fp,
String * target)
{
String * p;
if(_target_objs(prefs, config, fp, target) != 0)
return 1;
if(*prefs & PREFS_n)
return 0;
fprintf(fp, "%s%s", target, "_CFLAGS = $(CFLAGSF) $(CFLAGS)");
if((p = config_get(config, target, "cflags")) != NULL)
fprintf(fp, "%s%s", " ", p);
fputc('\n', fp);
fprintf(fp, "%s%s%s%s", target, ": $(", target, "_OBJS)\n");
fprintf(fp, "%s%s%s%s%s", "\t$(CC) $(LDFLAGSF) $(LDFLAGS) -o ",
target, " $(", target, "_OBJS)\n");
return 0;
}
static int _target_library(Prefs * prefs, Config * config, FILE * fp, static int _target_library(Prefs * prefs, Config * config, FILE * fp,
String * target) String * target)
{ {
@ -567,8 +568,8 @@ static int _write_objects(Prefs * prefs, Config * config, FILE * fp)
return ret; return ret;
} }
static int _target_source(Prefs * prefs, FILE * fp, String * target, static int _target_source(Prefs * prefs, Config * config, FILE * fp,
String * source); String * target, String * source);
static int _objects_target(Prefs * prefs, Config * config, FILE * fp, static int _objects_target(Prefs * prefs, Config * config, FILE * fp,
String * target) String * target)
{ {
@ -584,7 +585,7 @@ static int _objects_target(Prefs * prefs, Config * config, FILE * fp,
continue; continue;
c = sources[i]; c = sources[i];
sources[i] = '\0'; sources[i] = '\0';
_target_source(prefs, fp, target, sources); _target_source(prefs, config, fp, target, sources);
if(c == '\0') if(c == '\0')
break; break;
sources[i] = c; sources[i] = c;
@ -594,8 +595,9 @@ static int _objects_target(Prefs * prefs, Config * config, FILE * fp,
return 0; return 0;
} }
static int _target_source(Prefs * prefs, FILE * fp, String * target, static void _source_c_depends(Config * config, FILE * fp, String * source);
String * source) static int _target_source(Prefs * prefs, Config * config, FILE * fp,
String * target, String * source)
{ {
int ret = 0; int ret = 0;
String * extension; String * extension;
@ -612,8 +614,12 @@ static int _target_source(Prefs * prefs, FILE * fp, String * target,
case OT_C_SOURCE: case OT_C_SOURCE:
if(*prefs & PREFS_n) if(*prefs & PREFS_n)
break; break;
fprintf(fp, "%s%s%s%s%s%s%s", "\n", source, ".o: ", fprintf(fp, "%s%s%s%s%s%s", "\n", source, ".o: ",
source, ".", sObjectType[ot], "\n"); source, ".", sObjectType[ot]);
source[len] = '.'; /* FIXME ugly */
_source_c_depends(config, fp, source);
source[len] = '\0';
fputc('\n', fp);
fprintf(fp, "%s%s%s%s%s%s", "\t$(CC) $(", target, fprintf(fp, "%s%s%s%s%s%s", "\t$(CC) $(", target,
"_CFLAGS) -c ", source, ".", "_CFLAGS) -c ", source, ".",
sObjectType[ot]); sObjectType[ot]);
@ -629,6 +635,29 @@ static int _target_source(Prefs * prefs, FILE * fp, String * target,
return ret; return ret;
} }
static void _source_c_depends(Config * config, FILE * fp, String * source)
{
String * depends;
int i;
char c;
if((depends = config_get(config, source, "depends")) == NULL)
return;
for(i = 0;; i++)
{
if(depends[i] != ',' && depends[i] != '\0')
continue;
c = depends[i];
depends[i] = '\0';
fprintf(fp, " %s", depends);
if(c == '\0')
break;
depends[i] = c;
depends+=i+1;
i = 0;
}
}
static int _clean_targets(Config * config, FILE * fp); static int _clean_targets(Config * config, FILE * fp);
static int _write_clean(Prefs * prefs, Config * config, FILE * fp) static int _write_clean(Prefs * prefs, Config * config, FILE * fp)
{ {