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> SVN-Revision: 43652
This commit is contained in:
parent
f34dfaf249
commit
2f39014a48
2 changed files with 21 additions and 0 deletions
|
@ -343,6 +343,7 @@ void zconf_nextfile(const char *name)
|
||||||
glob_t gl;
|
glob_t gl;
|
||||||
int err;
|
int err;
|
||||||
int i;
|
int i;
|
||||||
|
char path[PATH_MAX], *p;
|
||||||
|
|
||||||
err = glob(name, GLOB_ERR | GLOB_MARK, NULL, &gl);
|
err = glob(name, GLOB_ERR | GLOB_MARK, NULL, &gl);
|
||||||
|
|
||||||
|
@ -352,6 +353,15 @@ void zconf_nextfile(const char *name)
|
||||||
gl.gl_pathc = 0;
|
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) {
|
if (err) {
|
||||||
const char *reason = "unknown error";
|
const char *reason = "unknown error";
|
||||||
|
|
||||||
|
|
|
@ -2399,6 +2399,7 @@ void zconf_nextfile(const char *name)
|
||||||
glob_t gl;
|
glob_t gl;
|
||||||
int err;
|
int err;
|
||||||
int i;
|
int i;
|
||||||
|
char path[PATH_MAX], *p;
|
||||||
|
|
||||||
err = glob(name, GLOB_ERR | GLOB_MARK, NULL, &gl);
|
err = glob(name, GLOB_ERR | GLOB_MARK, NULL, &gl);
|
||||||
|
|
||||||
|
@ -2408,6 +2409,16 @@ void zconf_nextfile(const char *name)
|
||||||
gl.gl_pathc = 0;
|
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) {
|
if (err) {
|
||||||
const char *reason = "unknown error";
|
const char *reason = "unknown error";
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue