From df286571f46cbfedebbdca54fd2fbb42bec1b9a5 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Thu, 17 Jul 2014 02:28:41 +0200 Subject: [PATCH] Better handling of distributable files found in sub-folders (when installing) --- src/makefile.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/makefile.c b/src/makefile.c index 825a0ca..ca6e0bc 100644 --- a/src/makefile.c +++ b/src/makefile.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "settings.h" #include "configure.h" #include "../config.h" @@ -1973,6 +1974,9 @@ static int _install_include(Config * config, FILE * fp, String const * include) static int _dist_check(Configure * configure, char const * target, char const * mode); +static int _dist_install(Configure * configure, FILE * fp, + char const * directory, char const * mode, + char const * filename); static int _install_dist(Configure * configure, FILE * fp) { int ret = 0; @@ -1982,7 +1986,7 @@ static int _install_dist(Configure * configure, FILE * fp) size_t i; char c; String const * d; - String const * m; + String const * mode; if((p = config_get(configure->config, NULL, "dist")) == NULL) return 0; @@ -1995,15 +1999,11 @@ static int _install_dist(Configure * configure, FILE * fp) continue; c = dist[i]; dist[i] = '\0'; - if((m = config_get(configure->config, dist, "mode")) == NULL) - m = "0644"; - ret |= _dist_check(configure, dist, m); + if((mode = config_get(configure->config, dist, "mode")) == NULL) + mode = "0644"; + ret |= _dist_check(configure, dist, mode); 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%s/%s\n", "\t$(INSTALL) -m ", m, - " ", dist, " $(DESTDIR)", d, dist); - } + _dist_install(configure, fp, d, mode, dist); if(c == '\0') break; dist += i + 1; @@ -2041,6 +2041,30 @@ static int _dist_check(Configure * configure, char const * target, return 0; } +static int _dist_install(Configure * configure, FILE * fp, + char const * directory, char const * mode, + char const * filename) +{ + char sep = (configure->os != HO_WIN32) ? '/' : '\\'; + String * p; + char const * q; + + if(strchr(filename, sep) != NULL) + { + if((p = string_new(filename)) == NULL) + return -1; + q = dirname(p); + fprintf(fp, "%s%s%c%s\n", "\t$(MKDIR) $(DESTDIR)", directory, + sep, q); + string_delete(p); + } + else + fprintf(fp, "%s%s\n", "\t$(MKDIR) $(DESTDIR)", directory); + fprintf(fp, "%s%s%s%s%s%s%c%s\n", "\t$(INSTALL) -m ", mode, " ", + filename, " $(DESTDIR)", directory, sep, filename); + return 0; +} + static int _uninstall_target(Configure * configure, FILE * fp, String const * target); static int _uninstall_include(Config * config, FILE * fp,