start eating include_dirs from both ends
Further restrictions on a restricting build configuration. Before, we
restricted certain paths from being included. Now, we restrict certain
paths from including.
This adds system/libfmq for now, but I'm planning to add more in the
future, as they are cleaned up.
Bug: 35624006
Test: m nothing
Change-Id: I913f190f93ab63059ee0372d342daa8f5584806b
diff --git a/android/neverallow.go b/android/neverallow.go
index a385bbc..d4a1ff1 100644
--- a/android/neverallow.go
+++ b/android/neverallow.go
@@ -63,8 +63,7 @@
}
func createIncludeDirsRules() []Rule {
- // The list of paths that cannot be referenced using include_dirs
- paths := []string{
+ notInIncludeDir := []string{
"art",
"art/libnativebridge",
"art/libnativeloader",
@@ -80,12 +79,13 @@
"external/vixl",
"external/wycheproof",
}
+ noUseIncludeDir := []string{
+ "system/libfmq",
+ }
- // Create a composite matcher that will match if the value starts with any of the restricted
- // paths. A / is appended to the prefix to ensure that restricting path X does not affect paths
- // XY.
- rules := make([]Rule, 0, len(paths))
- for _, path := range paths {
+ rules := make([]Rule, 0, len(notInIncludeDir)+len(noUseIncludeDir))
+
+ for _, path := range notInIncludeDir {
rule :=
NeverAllow().
WithMatcher("include_dirs", StartsWith(path+"/")).
@@ -95,6 +95,13 @@
rules = append(rules, rule)
}
+ for _, path := range noUseIncludeDir {
+ rule := NeverAllow().In(path+"/").WithMatcher("include_dirs", isSetMatcherInstance).
+ Because("include_dirs is deprecated, all usages of them in '" + path + "' have been migrated" +
+ " to use alternate mechanisms and so can no longer be used.")
+ rules = append(rules, rule)
+ }
+
return rules
}
diff --git a/android/neverallow_test.go b/android/neverallow_test.go
index 268346a..35aadd8 100644
--- a/android/neverallow_test.go
+++ b/android/neverallow_test.go
@@ -76,7 +76,20 @@
},
},
{
- name: "include_dir can reference another location",
+ name: "include_dir not allowed to reference art",
+ fs: map[string][]byte{
+ "system/libfmq/Android.bp": []byte(`
+ cc_library {
+ name: "libother",
+ include_dirs: ["any/random/file"],
+ }`),
+ },
+ expectedErrors: []string{
+ "all usages of them in 'system/libfmq' have been migrated",
+ },
+ },
+ {
+ name: "include_dir can work",
fs: map[string][]byte{
"other/Android.bp": []byte(`
cc_library {