aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2014-12-12 12:29:58 +0000
committerJo-Philipp Wich <jow@openwrt.org>2014-12-12 12:29:58 +0000
commit6fa321ff1c2c65534fec999ef7765bc4635c41d0 (patch)
tree7fee4173095fc5e94b8b8ac4623c91a06dadfc5f
parentf46b02b7116a59eacebcaf8dd7e40d9f84503dae (diff)
downloadupstream-6fa321ff1c2c65534fec999ef7765bc4635c41d0.tar.gz
upstream-6fa321ff1c2c65534fec999ef7765bc4635c41d0.tar.bz2
upstream-6fa321ff1c2c65534fec999ef7765bc4635c41d0.zip
scripts/config: support includes relative to the currently processed file
When the initial glob() attempt on a path specified with "source" statement yields no result, then retry the globbing on the same path with the directory part of the currently processed file prepended. This allows us to reference Config.in files relative to their parent instead of relative to the top dir. Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@43652 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--scripts/config/zconf.l10
-rw-r--r--scripts/config/zconf.lex.c_shipped11
2 files changed, 21 insertions, 0 deletions
diff --git a/scripts/config/zconf.l b/scripts/config/zconf.l
index 3aef45983a..1dd765817a 100644
--- a/scripts/config/zconf.l
+++ b/scripts/config/zconf.l
@@ -343,6 +343,7 @@ void zconf_nextfile(const char *name)
glob_t gl;
int err;
int i;
+ char path[PATH_MAX], *p;
err = glob(name, GLOB_ERR | GLOB_MARK, NULL, &gl);
@@ -352,6 +353,15 @@ void zconf_nextfile(const char *name)
gl.gl_pathc = 0;
}
+ if (err == GLOB_NOMATCH) {
+ p = strdup(current_file->name);
+ if (p) {
+ snprintf(path, sizeof(path), "%s/%s", dirname(p), name);
+ err = glob(path, GLOB_ERR | GLOB_MARK, NULL, &gl);
+ free(p);
+ }
+ }
+
if (err) {
const char *reason = "unknown error";
diff --git a/scripts/config/zconf.lex.c_shipped b/scripts/config/zconf.lex.c_shipped
index 766549fbfe..c938b2fae6 100644
--- a/scripts/config/zconf.lex.c_shipped
+++ b/scripts/config/zconf.lex.c_shipped
@@ -2399,6 +2399,7 @@ void zconf_nextfile(const char *name)
glob_t gl;
int err;
int i;
+ char path[PATH_MAX], *p;
err = glob(name, GLOB_ERR | GLOB_MARK, NULL, &gl);
@@ -2408,6 +2409,16 @@ void zconf_nextfile(const char *name)
gl.gl_pathc = 0;
}
+ if (err == GLOB_NOMATCH) {
+ p = strdup(current_file->name);
+ if (p) {
+ snprintf(path, sizeof(path), "%s/%s", dirname(p), name);
+ fprintf(stderr, "TRY:%s\n", path);
+ err = glob(path, GLOB_ERR | GLOB_MARK, NULL, &gl);
+ free(p);
+ }
+ }
+
if (err) {
const char *reason = "unknown error";