diff --git a/android/util.go b/android/util.go index 0f940fa40..506f8f7b7 100644 --- a/android/util.go +++ b/android/util.go @@ -137,6 +137,16 @@ func HasAnyPrefix(s string, prefixList []string) bool { return false } +// Returns true if any string in the given list has the given substring. +func SubstringInList(list []string, substr string) bool { + for _, s := range list { + if strings.Contains(s, substr) { + return true + } + } + return false +} + // Returns true if any string in the given list has the given prefix. func PrefixInList(list []string, prefix string) bool { for _, s := range list { diff --git a/cc/config/tidy.go b/cc/config/tidy.go index 7cc9f438c..7c20dd543 100644 --- a/cc/config/tidy.go +++ b/cc/config/tidy.go @@ -87,27 +87,11 @@ func init() { }, ",") }) - // Give warnings to header files only in selected directories. - // Do not give warnings to external or vendor header files, which contain too - // many warnings. + // To reduce duplicate warnings from the same header files, + // header-filter will contain only the module directory and + // those specified by DEFAULT_TIDY_HEADER_DIRS. pctx.VariableFunc("TidyDefaultHeaderDirs", func(ctx android.PackageVarContext) string { - if override := ctx.Config().Getenv("DEFAULT_TIDY_HEADER_DIRS"); override != "" { - return override - } - return strings.Join([]string{ - "art/", - "bionic/", - "bootable/", - "build/", - "cts/", - "dalvik/", - "developers/", - "development/", - "frameworks/", - "libcore/", - "libnativehelper/", - "system/", - }, "|") + return ctx.Config().Getenv("DEFAULT_TIDY_HEADER_DIRS") }) // Use WTIH_TIDY_FLAGS to pass extra global default clang-tidy flags. diff --git a/cc/tidy.go b/cc/tidy.go index 972ad7bc7..251c67b07 100644 --- a/cc/tidy.go +++ b/cc/tidy.go @@ -20,6 +20,7 @@ import ( "github.com/google/blueprint/proptools" + "android/soong/android" "android/soong/cc/config" ) @@ -75,9 +76,17 @@ func (tidy *tidyFeature) flags(ctx ModuleContext, flags Flags) Flags { } esc := proptools.NinjaAndShellEscapeList flags.TidyFlags = append(flags.TidyFlags, esc(tidy.Properties.Tidy_flags)...) - // If TidyFlags is empty, add default header filter. - if len(flags.TidyFlags) == 0 { - headerFilter := "-header-filter=\"(" + ctx.ModuleDir() + "|${config.TidyDefaultHeaderDirs})\"" + // If TidyFlags does not contain -header-filter, add default header filter. + // Find the substring because the flag could also appear as --header-filter=... + // and with or without single or double quotes. + if !android.SubstringInList(flags.TidyFlags, "-header-filter=") { + defaultDirs := ctx.Config().Getenv("DEFAULT_TIDY_HEADER_DIRS") + headerFilter := "-header-filter=" + if defaultDirs == "" { + headerFilter += ctx.ModuleDir() + "/" + } else { + headerFilter += "\"(" + ctx.ModuleDir() + "/|" + defaultDirs + ")\"" + } flags.TidyFlags = append(flags.TidyFlags, headerFilter) }