Now supports the installation of arbitrary files
This commit is contained in:
parent
b014fe0896
commit
53e71907c7
125
src/makefile.c
125
src/makefile.c
@ -96,6 +96,7 @@ static int _variables_package(Configure * configure, FILE * fp,
|
|||||||
String const * directory);
|
String const * directory);
|
||||||
static int _variables_print(Configure * configure, FILE * fp,
|
static int _variables_print(Configure * configure, FILE * fp,
|
||||||
char const * input, char const * output);
|
char const * input, char const * output);
|
||||||
|
static int _variables_dist(Configure * configure, FILE * fp);
|
||||||
static int _variables_targets(Configure * configure, FILE * fp);
|
static int _variables_targets(Configure * configure, FILE * fp);
|
||||||
static int _variables_executables(Configure * configure, FILE * fp);
|
static int _variables_executables(Configure * configure, FILE * fp);
|
||||||
static int _variables_includes(Configure * configure, FILE * fp);
|
static int _variables_includes(Configure * configure, FILE * fp);
|
||||||
@ -107,6 +108,7 @@ static int _write_variables(Configure * configure, FILE * fp)
|
|||||||
directory = config_get(configure->config, "", "directory");
|
directory = config_get(configure->config, "", "directory");
|
||||||
ret |= _variables_package(configure, fp, directory);
|
ret |= _variables_package(configure, fp, directory);
|
||||||
ret |= _variables_print(configure, fp, "subdirs", "SUBDIRS");
|
ret |= _variables_print(configure, fp, "subdirs", "SUBDIRS");
|
||||||
|
ret |= _variables_dist(configure, fp);
|
||||||
ret |= _variables_targets(configure, fp);
|
ret |= _variables_targets(configure, fp);
|
||||||
ret |= _variables_executables(configure, fp);
|
ret |= _variables_executables(configure, fp);
|
||||||
ret |= _variables_includes(configure, fp);
|
ret |= _variables_includes(configure, fp);
|
||||||
@ -179,6 +181,46 @@ static int _variables_print(Configure * configure, FILE * fp,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _variables_dist(Configure * configure, FILE * fp)
|
||||||
|
{
|
||||||
|
String const * p;
|
||||||
|
String * dist;
|
||||||
|
size_t i;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
if(configure->prefs->flags & PREFS_n)
|
||||||
|
return 0;
|
||||||
|
if((p = config_get(configure->config, "", "dist")) == NULL)
|
||||||
|
return 0;
|
||||||
|
if((dist = string_new(p)) == NULL)
|
||||||
|
return 1;
|
||||||
|
for(i = 0;; i++)
|
||||||
|
{
|
||||||
|
if(dist[i] != ',' && dist[i] != '\0')
|
||||||
|
continue;
|
||||||
|
c = dist[i];
|
||||||
|
dist[i] = '\0';
|
||||||
|
if(config_get(configure->config, dist, "install") != NULL)
|
||||||
|
{
|
||||||
|
/* FIXME may also be output when parsing targets */
|
||||||
|
fprintf(fp, "%s%s\n%s%s\n%s%s%s", "PREFIX\t= ",
|
||||||
|
configure->prefs->prefix,
|
||||||
|
"DESTDIR\t= ",
|
||||||
|
configure->prefs->destdir,
|
||||||
|
"MKDIR\t= mkdir -p\n",
|
||||||
|
"INSTALL\t= install\n",
|
||||||
|
"RM\t= rm -f\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(c == '\0')
|
||||||
|
break;
|
||||||
|
dist += i + 1;
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
string_delete(dist);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int _variables_targets(Configure * configure, FILE * fp)
|
static int _variables_targets(Configure * configure, FILE * fp)
|
||||||
{
|
{
|
||||||
String const * p;
|
String const * p;
|
||||||
@ -452,7 +494,7 @@ static void _binary_ldflags(Configure * configure, FILE * fp,
|
|||||||
char ** libs;
|
char ** libs;
|
||||||
String * p;
|
String * p;
|
||||||
String * q;
|
String * q;
|
||||||
int i;
|
size_t i;
|
||||||
|
|
||||||
if((p = string_new(ldflags)) == NULL)
|
if((p = string_new(ldflags)) == NULL)
|
||||||
{
|
{
|
||||||
@ -555,8 +597,8 @@ static int _write_targets(Configure * configure, FILE * fp)
|
|||||||
String const * p;
|
String const * p;
|
||||||
String * targets;
|
String * targets;
|
||||||
String * q;
|
String * q;
|
||||||
|
size_t i;
|
||||||
char c;
|
char c;
|
||||||
int i;
|
|
||||||
|
|
||||||
if(_targets_all(configure, fp) != 0
|
if(_targets_all(configure, fp) != 0
|
||||||
|| _targets_subdirs(configure, fp) != 0)
|
|| _targets_subdirs(configure, fp) != 0)
|
||||||
@ -572,7 +614,7 @@ static int _write_targets(Configure * configure, FILE * fp)
|
|||||||
continue;
|
continue;
|
||||||
c = targets[i];
|
c = targets[i];
|
||||||
targets[i] = '\0';
|
targets[i] = '\0';
|
||||||
ret += _targets_target(configure, fp, targets);
|
ret |= _targets_target(configure, fp, targets);
|
||||||
if(c == '\0')
|
if(c == '\0')
|
||||||
break;
|
break;
|
||||||
targets += i + 1;
|
targets += i + 1;
|
||||||
@ -658,7 +700,7 @@ static int _target_objs(Configure * configure, FILE * fp,
|
|||||||
TargetType tt = TT_UNKNOWN;
|
TargetType tt = TT_UNKNOWN;
|
||||||
String * sources;
|
String * sources;
|
||||||
String * q;
|
String * q;
|
||||||
int i;
|
size_t i;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
if((p = config_get(configure->config, target, "type")) != NULL)
|
if((p = config_get(configure->config, target, "type")) != NULL)
|
||||||
@ -1360,7 +1402,7 @@ static int _dist_subdir_dist(FILE * fp, String const * path,
|
|||||||
|
|
||||||
static int _install_targets(Configure * configure, FILE * fp);
|
static int _install_targets(Configure * configure, FILE * fp);
|
||||||
static int _install_includes(Configure * configure, FILE * fp);
|
static int _install_includes(Configure * configure, FILE * fp);
|
||||||
static int _install_include(Config * config, FILE * fp, String const * include);
|
static int _install_dist(Configure * configure, FILE * fp);
|
||||||
static int _write_install(Configure * configure, FILE * fp)
|
static int _write_install(Configure * configure, FILE * fp)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -1373,6 +1415,7 @@ static int _write_install(Configure * configure, FILE * fp)
|
|||||||
" || exit; done\n", fp);
|
" || exit; done\n", fp);
|
||||||
ret |= _install_targets(configure, fp);
|
ret |= _install_targets(configure, fp);
|
||||||
ret |= _install_includes(configure, fp);
|
ret |= _install_includes(configure, fp);
|
||||||
|
ret |= _install_dist(configure, fp);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1514,8 +1557,8 @@ static int _install_includes(Configure * configure, FILE * fp)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
String const * p;
|
String const * p;
|
||||||
String * q;
|
|
||||||
String * includes;
|
String * includes;
|
||||||
|
String * q;
|
||||||
size_t i;
|
size_t i;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
@ -1553,9 +1596,45 @@ static int _install_include(Config * config, FILE * fp, String const * include)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _install_dist(Configure * configure, FILE * fp)
|
||||||
|
{
|
||||||
|
String const * p;
|
||||||
|
String * dist;
|
||||||
|
String * q;
|
||||||
|
size_t i;
|
||||||
|
char c;
|
||||||
|
String const * d;
|
||||||
|
|
||||||
|
if((p = config_get(configure->config, "", "dist")) == NULL)
|
||||||
|
return 0;
|
||||||
|
if((dist = string_new(p)) == NULL)
|
||||||
|
return 1;
|
||||||
|
q = dist;
|
||||||
|
for(i = 0;; i++)
|
||||||
|
{
|
||||||
|
if(dist[i] != ',' && dist[i] != '\0')
|
||||||
|
continue;
|
||||||
|
c = dist[i];
|
||||||
|
dist[i] = '\0';
|
||||||
|
if((d = config_get(configure->config, dist, "install")) != NULL)
|
||||||
|
{
|
||||||
|
fprintf(fp, "%s%s\n", "\t$(MKDIR) $(DESTDIR)", d);
|
||||||
|
fprintf(fp, "%s%s%s%s/%s\n", "\t$(INSTALL) -m 0644 ",
|
||||||
|
dist, " $(DESTDIR)", d, dist);
|
||||||
|
}
|
||||||
|
if(c == '\0')
|
||||||
|
break;
|
||||||
|
dist += i + 1;
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
string_delete(q);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int _uninstall_target(Config * config, FILE * fp, String const * target);
|
static int _uninstall_target(Config * config, FILE * fp, String const * target);
|
||||||
static int _uninstall_include(Config * config, FILE * fp,
|
static int _uninstall_include(Config * config, FILE * fp,
|
||||||
String const * include);
|
String const * include);
|
||||||
|
static int _uninstall_dist(Config * config, FILE * fp, String const * dist);
|
||||||
static int _write_uninstall(Configure * configure, FILE * fp)
|
static int _write_uninstall(Configure * configure, FILE * fp)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -1563,7 +1642,8 @@ static int _write_uninstall(Configure * configure, FILE * fp)
|
|||||||
String * targets;
|
String * targets;
|
||||||
String * q;
|
String * q;
|
||||||
String * includes;
|
String * includes;
|
||||||
int i;
|
String * dist;
|
||||||
|
size_t i;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
if(configure->prefs->flags & PREFS_n)
|
if(configure->prefs->flags & PREFS_n)
|
||||||
@ -1611,6 +1691,25 @@ static int _write_uninstall(Configure * configure, FILE * fp)
|
|||||||
}
|
}
|
||||||
string_delete(q);
|
string_delete(q);
|
||||||
}
|
}
|
||||||
|
if((p = config_get(configure->config, "", "dist")) != NULL)
|
||||||
|
{
|
||||||
|
if((dist = string_new(p)) == NULL)
|
||||||
|
return 1;
|
||||||
|
q = dist;
|
||||||
|
for(i = 0; ret == 0; i++)
|
||||||
|
{
|
||||||
|
if(dist[i] != ',' && dist[i] != '\0')
|
||||||
|
continue;
|
||||||
|
c = dist[i];
|
||||||
|
dist[i] = '\0';
|
||||||
|
ret = _uninstall_dist(configure->config, fp, dist);
|
||||||
|
if(c == '\0')
|
||||||
|
break;
|
||||||
|
dist += i + 1;
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
string_delete(q);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1674,10 +1773,20 @@ static void _uninstall_target_library(Config * config, FILE * fp,
|
|||||||
static int _uninstall_include(Config * config, FILE * fp,
|
static int _uninstall_include(Config * config, FILE * fp,
|
||||||
String const * include)
|
String const * include)
|
||||||
{
|
{
|
||||||
char const * install;
|
String const * install;
|
||||||
|
|
||||||
if((install = config_get(config, include, "install")) == NULL)
|
if((install = config_get(config, include, "install")) == NULL)
|
||||||
install = "$(INCLUDEDIR)";
|
install = "$(INCLUDEDIR)";
|
||||||
fprintf(fp, "%s%s/%s\n", "\t$(RM) $(DESTDIR)", install, include);
|
fprintf(fp, "%s%s/%s\n", "\t$(RM) $(DESTDIR)", install, include);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _uninstall_dist(Config * config, FILE * fp, String const * dist)
|
||||||
|
{
|
||||||
|
String const * install;
|
||||||
|
|
||||||
|
if((install = config_get(config, dist, "install")) == NULL)
|
||||||
|
return 0;
|
||||||
|
fprintf(fp, "%s%s/%s\n", "\t$(RM) $(DESTDIR)", install, dist);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user