Browse Source

ccanlint: handle nested modules when mentioned in examples.

If we see an ccan include line in an example, we add that to the
dependencies to try to build the example, but we didn't handle nested
modules.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell 13 years ago
parent
commit
932d65dd65

+ 1 - 1
tools/ccanlint/tests/depends_accurate.c

@@ -48,7 +48,7 @@ static bool check_dep_includes(struct manifest *m,
 		char *mod;
 		char *mod;
 		if (!strreg(f, lines[i],
 		if (!strreg(f, lines[i],
 			    "^[ \t]*#[ \t]*include[ \t]*[<\"]"
 			    "^[ \t]*#[ \t]*include[ \t]*[<\"]"
-			    "(ccan/+.+)/+[^/]+.h", &mod))
+			    "(ccan/+.+)/+[^/]+\\.h", &mod))
 			continue;
 			continue;
 
 
 		if (has_dep(m, deps, used, mod))
 		if (has_dep(m, deps, used, mod))

+ 5 - 7
tools/ccanlint/tests/examples_compile.c

@@ -1,6 +1,7 @@
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/tools.h>
 #include <tools/tools.h>
 #include <ccan/talloc/talloc.h>
 #include <ccan/talloc/talloc.h>
+#include <ccan/str_talloc/str_talloc.h>
 #include <ccan/cast/cast.h>
 #include <ccan/cast/cast.h>
 #include <ccan/str/str.h>
 #include <ccan/str/str.h>
 #include <sys/types.h>
 #include <sys/types.h>
@@ -83,13 +84,10 @@ static struct manifest **get_example_deps(struct manifest *m,
 
 
 	/* Other modules implied by includes. */
 	/* Other modules implied by includes. */
 	for (lines = get_ccan_file_lines(f); *lines; lines++) {
 	for (lines = get_ccan_file_lines(f); *lines; lines++) {
-		unsigned preflen = strspn(*lines, " \t");
-		if (strstarts(*lines + preflen, "#include <ccan/")) {
-			char *modname;
-
-			modname = talloc_strdup(f, *lines + preflen
-						+ strlen("#include <ccan/"));
-			modname[strcspn(modname, "/")] = '\0';
+		char *modname;
+		if (strreg(f, *lines,
+			    "^[ \t]*#[ \t]*include[ \t]*[<\"]"
+			   "ccan/+(.+)/+[^/]+\\.h", &modname)) {
 			if (!have_mod(deps, modname))
 			if (!have_mod(deps, modname))
 				add_dep(&deps, modname);
 				add_dep(&deps, modname);
 		}
 		}