Conditionally apply rustdoc flags to third party crates
This CL changes the logic in rust/builder.go so that some rustdoc flags are only applied to external crates. This will allow us to since warnings and deal with soft-failures in external crates while allowing us to be more strict with our internal Rust code. Bug: 195136952 Test: m rustdoc Change-Id: Icdde304bbbb323cae9657e8f842f58ae79e811ce
This commit is contained in:
parent
067b889762
commit
b2703adce4
4 changed files with 33 additions and 27 deletions
|
@ -20,6 +20,7 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
|
@ -2094,3 +2095,25 @@ func PathsIfNonNil(paths ...Path) Paths {
|
|||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
var thirdPartyDirPrefixExceptions = []*regexp.Regexp{
|
||||
regexp.MustCompile("^vendor/[^/]*google[^/]*/"),
|
||||
regexp.MustCompile("^hardware/google/"),
|
||||
regexp.MustCompile("^hardware/interfaces/"),
|
||||
regexp.MustCompile("^hardware/libhardware[^/]*/"),
|
||||
regexp.MustCompile("^hardware/ril/"),
|
||||
}
|
||||
|
||||
func IsThirdPartyPath(path string) bool {
|
||||
thirdPartyDirPrefixes := []string{"external/", "vendor/", "hardware/"}
|
||||
|
||||
if HasAnyPrefix(path, thirdPartyDirPrefixes) {
|
||||
for _, prefix := range thirdPartyDirPrefixExceptions {
|
||||
if prefix.MatchString(path) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -450,7 +450,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps
|
|||
"${config.CommonGlobalCflags}",
|
||||
fmt.Sprintf("${config.%sGlobalCflags}", hod))
|
||||
|
||||
if isThirdParty(modulePath) {
|
||||
if android.IsThirdPartyPath(modulePath) {
|
||||
flags.Global.CommonFlags = append(flags.Global.CommonFlags, "${config.ExternalCflags}")
|
||||
}
|
||||
|
||||
|
@ -675,28 +675,6 @@ func compileObjs(ctx android.ModuleContext, flags builderFlags,
|
|||
return transformSourceToObj(ctx, subdir, srcFiles, flags, pathDeps, cFlagsDeps)
|
||||
}
|
||||
|
||||
var thirdPartyDirPrefixExceptions = []*regexp.Regexp{
|
||||
regexp.MustCompile("^vendor/[^/]*google[^/]*/"),
|
||||
regexp.MustCompile("^hardware/google/"),
|
||||
regexp.MustCompile("^hardware/interfaces/"),
|
||||
regexp.MustCompile("^hardware/libhardware[^/]*/"),
|
||||
regexp.MustCompile("^hardware/ril/"),
|
||||
}
|
||||
|
||||
func isThirdParty(path string) bool {
|
||||
thirdPartyDirPrefixes := []string{"external/", "vendor/", "hardware/"}
|
||||
|
||||
if android.HasAnyPrefix(path, thirdPartyDirPrefixes) {
|
||||
for _, prefix := range thirdPartyDirPrefixExceptions {
|
||||
if prefix.MatchString(path) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Properties for rust_bindgen related to generating rust bindings.
|
||||
// This exists here so these properties can be included in a cc_default
|
||||
// which can be used in both cc and rust modules.
|
||||
|
|
|
@ -16,6 +16,8 @@ package cc
|
|||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"android/soong/android"
|
||||
)
|
||||
|
||||
func TestIsThirdParty(t *testing.T) {
|
||||
|
@ -32,12 +34,12 @@ func TestIsThirdParty(t *testing.T) {
|
|||
"bionic/libc",
|
||||
}
|
||||
for _, path := range thirdPartyPaths {
|
||||
if !isThirdParty(path) {
|
||||
if !android.IsThirdPartyPath(path) {
|
||||
t.Errorf("Expected %s to be considered third party", path)
|
||||
}
|
||||
}
|
||||
for _, path := range nonThirdPartyPaths {
|
||||
if isThirdParty(path) {
|
||||
if android.IsThirdPartyPath(path) {
|
||||
t.Errorf("Expected %s to *not* be considered third party", path)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -332,8 +332,11 @@ func Rustdoc(ctx ModuleContext, main android.Path, deps PathDeps,
|
|||
rustdocFlags = append(rustdocFlags, makeLibFlags(deps)...)
|
||||
docTimestampFile := android.PathForModuleOut(ctx, "rustdoc.timestamp")
|
||||
|
||||
// Silence warnings about renamed lints
|
||||
rustdocFlags = append(rustdocFlags, " -A renamed_and_removed_lints")
|
||||
// Silence warnings about renamed lints for third-party crates
|
||||
modulePath := android.PathForModuleSrc(ctx).String()
|
||||
if android.IsThirdPartyPath(modulePath) {
|
||||
rustdocFlags = append(rustdocFlags, " -A renamed_and_removed_lints")
|
||||
}
|
||||
|
||||
// Yes, the same out directory is used simultaneously by all rustdoc builds.
|
||||
// This is what cargo does. The docs for individual crates get generated to
|
||||
|
|
Loading…
Reference in a new issue