Added support for phony script targets
This commit is contained in:
parent
f97abe5eab
commit
5308765aa2
127
src/makefile.c
127
src/makefile.c
@ -46,6 +46,9 @@
|
|||||||
|
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
|
/* accessors */
|
||||||
|
static int _makefile_is_phony(Configure * configure, char const * target);
|
||||||
|
|
||||||
static int _makefile_link(FILE * fp, int symlink, char const * link,
|
static int _makefile_link(FILE * fp, int symlink, char const * link,
|
||||||
char const * path);
|
char const * path);
|
||||||
static int _makefile_output_variable(FILE * fp, char const * name,
|
static int _makefile_output_variable(FILE * fp, char const * name,
|
||||||
@ -98,6 +101,8 @@ static int _write_dist(Configure * configure, FILE * fp, configArray * ca,
|
|||||||
int from, int to);
|
int from, int to);
|
||||||
static int _write_distcheck(Configure * configure, FILE * fp);
|
static int _write_distcheck(Configure * configure, FILE * fp);
|
||||||
static int _write_install(Configure * configure, FILE * fp);
|
static int _write_install(Configure * configure, FILE * fp);
|
||||||
|
static int _write_phony(Configure * configure, FILE * fp,
|
||||||
|
char const ** targets);
|
||||||
static int _write_uninstall(Configure * configure, FILE * fp);
|
static int _write_uninstall(Configure * configure, FILE * fp);
|
||||||
static int _makefile_write(Configure * configure, FILE * fp, configArray * ca,
|
static int _makefile_write(Configure * configure, FILE * fp, configArray * ca,
|
||||||
int from, int to)
|
int from, int to)
|
||||||
@ -116,24 +121,20 @@ static int _makefile_write(Configure * configure, FILE * fp, configArray * ca,
|
|||||||
|| _write_install(configure, fp) != 0
|
|| _write_install(configure, fp) != 0
|
||||||
|| _write_uninstall(configure, fp) != 0)
|
|| _write_uninstall(configure, fp) != 0)
|
||||||
return 1;
|
return 1;
|
||||||
if(!(configure->prefs->flags & PREFS_n))
|
if(config_get(config, NULL, "subdirs") != NULL)
|
||||||
|
depends[i++] = "subdirs";
|
||||||
|
depends[i++] = "clean";
|
||||||
|
depends[i++] = "distclean";
|
||||||
|
if(config_get(config, NULL, "package") != NULL
|
||||||
|
&& config_get(config, NULL, "version") != NULL)
|
||||||
{
|
{
|
||||||
if(config_get(config, NULL, "subdirs") != NULL)
|
depends[i++] = "dist";
|
||||||
depends[i++] = "subdirs";
|
depends[i++] = "distcheck";
|
||||||
depends[i++] = "clean";
|
|
||||||
depends[i++] = "distclean";
|
|
||||||
if(config_get(config, NULL, "package") != NULL
|
|
||||||
&& config_get(config, NULL, "version") != NULL)
|
|
||||||
{
|
|
||||||
depends[i++] = "dist";
|
|
||||||
depends[i++] = "distcheck";
|
|
||||||
}
|
|
||||||
depends[i++] = "install";
|
|
||||||
depends[i++] = "uninstall";
|
|
||||||
depends[i++] = NULL;
|
|
||||||
_makefile_targetv(fp, ".PHONY", depends);
|
|
||||||
}
|
}
|
||||||
return 0;
|
depends[i++] = "install";
|
||||||
|
depends[i++] = "uninstall";
|
||||||
|
depends[i++] = NULL;
|
||||||
|
return _write_phony(configure, fp, depends);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _variables_package(Configure * configure, FILE * fp,
|
static int _variables_package(Configure * configure, FILE * fp,
|
||||||
@ -289,6 +290,7 @@ static int _variables_targets(Configure * configure, FILE * fp)
|
|||||||
size_t i;
|
size_t i;
|
||||||
char c;
|
char c;
|
||||||
String const * type;
|
String const * type;
|
||||||
|
int phony;
|
||||||
|
|
||||||
if(configure->prefs->flags & PREFS_n)
|
if(configure->prefs->flags & PREFS_n)
|
||||||
return 0;
|
return 0;
|
||||||
@ -316,11 +318,6 @@ static int _variables_targets(Configure * configure, FILE * fp)
|
|||||||
if(configure->os == HO_WIN32)
|
if(configure->os == HO_WIN32)
|
||||||
fputs("$(EXEEXT)", fp);
|
fputs("$(EXEEXT)", fp);
|
||||||
break;
|
break;
|
||||||
case TT_OBJECT:
|
|
||||||
case TT_SCRIPT:
|
|
||||||
case TT_UNKNOWN:
|
|
||||||
fprintf(fp, " $(OBJDIR)%s", prints);
|
|
||||||
break;
|
|
||||||
case TT_LIBRARY:
|
case TT_LIBRARY:
|
||||||
ret |= _variables_targets_library(
|
ret |= _variables_targets_library(
|
||||||
configure, fp, prints);
|
configure, fp, prints);
|
||||||
@ -329,8 +326,20 @@ static int _variables_targets(Configure * configure, FILE * fp)
|
|||||||
fprintf(fp, " $(OBJDIR)%s%s", prints,
|
fprintf(fp, " $(OBJDIR)%s%s", prints,
|
||||||
".la");
|
".la");
|
||||||
break;
|
break;
|
||||||
|
case TT_OBJECT:
|
||||||
|
case TT_UNKNOWN:
|
||||||
|
fprintf(fp, " $(OBJDIR)%s", prints);
|
||||||
|
break;
|
||||||
|
case TT_SCRIPT:
|
||||||
|
phony = _makefile_is_phony(configure,
|
||||||
|
prints);
|
||||||
|
fprintf(fp, " %s%s", phony
|
||||||
|
? "" : "$(OBJDIR)",
|
||||||
|
prints);
|
||||||
|
break;
|
||||||
case TT_PLUGIN:
|
case TT_PLUGIN:
|
||||||
fprintf(fp, " $(OBJDIR)%s%s", prints, soext);
|
fprintf(fp, " $(OBJDIR)%s%s", prints,
|
||||||
|
soext);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(c == '\0')
|
if(c == '\0')
|
||||||
@ -1412,6 +1421,7 @@ static int _target_script(Configure * configure, FILE * fp,
|
|||||||
{
|
{
|
||||||
String const * prefix;
|
String const * prefix;
|
||||||
String const * script;
|
String const * script;
|
||||||
|
int phony;
|
||||||
|
|
||||||
if((script = config_get(configure->config, target, "script")) == NULL)
|
if((script = config_get(configure->config, target, "script")) == NULL)
|
||||||
{
|
{
|
||||||
@ -1423,15 +1433,16 @@ static int _target_script(Configure * configure, FILE * fp,
|
|||||||
error_set_print(PROGNAME, 0, "%s: %s%s%s", target, "The \"",
|
error_set_print(PROGNAME, 0, "%s: %s%s%s", target, "The \"",
|
||||||
script,
|
script,
|
||||||
"\" script is executed while compiling");
|
"\" script is executed while compiling");
|
||||||
|
phony = _makefile_is_phony(configure, target);
|
||||||
if(configure->prefs->flags & PREFS_n)
|
if(configure->prefs->flags & PREFS_n)
|
||||||
return 0;
|
return 0;
|
||||||
fprintf(fp, "\n$(OBJDIR)%s:", target);
|
fprintf(fp, "\n%s%s:", phony ? "" : "$(OBJDIR)", target);
|
||||||
_script_depends(configure->config, fp, target);
|
_script_depends(configure->config, fp, target);
|
||||||
fputc('\n', fp);
|
fputc('\n', fp);
|
||||||
if((prefix = config_get(configure->config, target, "prefix")) == NULL)
|
if((prefix = config_get(configure->config, target, "prefix")) == NULL)
|
||||||
prefix = "$(PREFIX)";
|
prefix = "$(PREFIX)";
|
||||||
fprintf(fp, "\t%s -P \"%s\" -- \"$(OBJDIR)%s\"\n", script, prefix,
|
fprintf(fp, "\t%s -P \"%s\" -- \"%s%s\"\n", script, prefix,
|
||||||
target);
|
phony ? "" : "$(OBJDIR)", target);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2260,6 +2271,60 @@ static int _dist_install(Configure * configure, FILE * fp,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _write_phony_targets(Configure * configure, FILE * fp);
|
||||||
|
static int _write_phony(Configure * configure, FILE * fp, char const ** targets)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if(configure->prefs->flags & PREFS_n)
|
||||||
|
return 0;
|
||||||
|
fprintf(fp, "\n%s:", ".PHONY");
|
||||||
|
for(i = 0; targets[i] != NULL; i++)
|
||||||
|
fprintf(fp, " %s", targets[i]);
|
||||||
|
if(_write_phony_targets(configure, fp) != 0)
|
||||||
|
return 1;
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _write_phony_targets(Configure * configure, FILE * fp)
|
||||||
|
{
|
||||||
|
String const * p;
|
||||||
|
String * prints;
|
||||||
|
String * q;
|
||||||
|
size_t i;
|
||||||
|
char c;
|
||||||
|
String const * type;
|
||||||
|
|
||||||
|
if((p = config_get(configure->config, NULL, "targets")) == NULL)
|
||||||
|
return 0;
|
||||||
|
if((prints = string_new(p)) == NULL)
|
||||||
|
return 1;
|
||||||
|
q = prints;
|
||||||
|
for(i = 0;; i++)
|
||||||
|
{
|
||||||
|
if(prints[i] != ',' && prints[i] != '\0')
|
||||||
|
continue;
|
||||||
|
c = prints[i];
|
||||||
|
prints[i] = '\0';
|
||||||
|
if((type = config_get(configure->config, prints, "type"))
|
||||||
|
!= NULL)
|
||||||
|
switch(enum_string(TT_LAST, sTargetType, type))
|
||||||
|
{
|
||||||
|
case TT_SCRIPT:
|
||||||
|
if(_makefile_is_phony(configure,
|
||||||
|
prints))
|
||||||
|
fprintf(fp, " %s", prints);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(c == '\0')
|
||||||
|
break;
|
||||||
|
prints += i + 1;
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int _uninstall_target(Configure * configure, FILE * fp,
|
static int _uninstall_target(Configure * configure, FILE * fp,
|
||||||
String const * target);
|
String const * target);
|
||||||
static int _uninstall_include(Config * config, FILE * fp,
|
static int _uninstall_include(Config * config, FILE * fp,
|
||||||
@ -2471,6 +2536,18 @@ static int _uninstall_dist(Config * config, FILE * fp, String const * dist)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* makefile_is_phony */
|
||||||
|
static int _makefile_is_phony(Configure * configure, char const * target)
|
||||||
|
{
|
||||||
|
String const * p;
|
||||||
|
|
||||||
|
if((p = config_get(configure->config, target, "phony")) != NULL
|
||||||
|
&& strtol(p, NULL, 10) == 1)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* makefile_link */
|
/* makefile_link */
|
||||||
static int _makefile_link(FILE * fp, int symlink, char const * link,
|
static int _makefile_link(FILE * fp, int symlink, char const * link,
|
||||||
char const * path)
|
char const * path)
|
||||||
|
Loading…
Reference in New Issue
Block a user