Explorar el Código

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 <[email protected]>

SVN-Revision: 43652
Jo-Philipp Wich hace 11 años
padre
commit
2f39014a48
Se han modificado 2 ficheros con 21 adiciones y 0 borrados
  1. 10 0
      scripts/config/zconf.l
  2. 11 0
      scripts/config/zconf.lex.c_shipped

+ 10 - 0
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";
 

+ 11 - 0
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";