diff options
| -rw-r--r-- | android/defaults.go | 20 | ||||
| -rw-r--r-- | android/module.go | 6 | ||||
| -rw-r--r-- | android/package.go | 6 | ||||
| -rw-r--r-- | android/visibility.go | 56 | ||||
| -rw-r--r-- | cmd/path_interposer/main.go | 11 | ||||
| -rwxr-xr-x | java/app.go | 3 | ||||
| -rw-r--r-- | java/droiddoc.go | 31 | ||||
| -rw-r--r-- | sysprop/sysprop_library.go | 10 | ||||
| -rw-r--r-- | ui/build/path.go | 7 | ||||
| -rw-r--r-- | ui/build/sandbox_linux.go | 6 |
10 files changed, 97 insertions, 59 deletions
diff --git a/android/defaults.go b/android/defaults.go index fd707a45f..6a908ea83 100644 --- a/android/defaults.go +++ b/android/defaults.go @@ -176,18 +176,18 @@ func InitDefaultsModule(module DefaultsModule) { defaultsVisibility := module.defaultsVisibility() module.AddProperties(&base.nameProperties, defaultsVisibility) - // The defaults_visibility property controls the visibility of a defaults module. - base.primaryVisibilityProperty = - newVisibilityProperty("defaults_visibility", &defaultsVisibility.Defaults_visibility) - // Unlike non-defaults modules the visibility property is not stored in m.base().commonProperties. - // Instead it is stored in a separate instance of commonProperties created above so use that. + // Instead it is stored in a separate instance of commonProperties created above so clear the + // existing list of properties. + clearVisibilityProperties(module) + + // The defaults_visibility property controls the visibility of a defaults module so it must be + // set as the primary property, which also adds it to the list. + setPrimaryVisibilityProperty(module, "defaults_visibility", &defaultsVisibility.Defaults_visibility) + // The visibility property needs to be checked (but not parsed) by the visibility module during - // its checking phase and parsing phase. - base.visibilityPropertyInfo = []visibilityProperty{ - base.primaryVisibilityProperty, - newVisibilityProperty("visibility", &commonProperties.Visibility), - } + // its checking phase and parsing phase so add it to the list as a normal property. + AddVisibilityProperty(module, "visibility", &commonProperties.Visibility) base.module = module } diff --git a/android/module.go b/android/module.go index 02b2c8926..f5cfe6601 100644 --- a/android/module.go +++ b/android/module.go @@ -611,10 +611,8 @@ func InitAndroidModule(m Module) { base.customizableProperties = m.GetProperties() // The default_visibility property needs to be checked and parsed by the visibility module during - // its checking and parsing phases. - base.primaryVisibilityProperty = - newVisibilityProperty("visibility", &base.commonProperties.Visibility) - base.visibilityPropertyInfo = []visibilityProperty{base.primaryVisibilityProperty} + // its checking and parsing phases so make it the primary visibility property. + setPrimaryVisibilityProperty(m, "visibility", &base.commonProperties.Visibility) } func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib Multilib) { diff --git a/android/package.go b/android/package.go index 077c4a464..bb5f4e79e 100644 --- a/android/package.go +++ b/android/package.go @@ -101,10 +101,8 @@ func PackageFactory() Module { module.AddProperties(&module.properties) // The default_visibility property needs to be checked and parsed by the visibility module during - // its checking and parsing phases. - module.primaryVisibilityProperty = - newVisibilityProperty("default_visibility", &module.properties.Default_visibility) - module.visibilityPropertyInfo = []visibilityProperty{module.primaryVisibilityProperty} + // its checking and parsing phases so make it the primary visibility property. + setPrimaryVisibilityProperty(module, "default_visibility", &module.properties.Default_visibility) return module } diff --git a/android/visibility.go b/android/visibility.go index 3f04123cd..1e3b91ddd 100644 --- a/android/visibility.go +++ b/android/visibility.go @@ -246,14 +246,8 @@ func checkRules(ctx BaseModuleContext, currentPkg, property string, visibility [ } for _, v := range visibility { - ok, pkg, name := splitRule(v, currentPkg) + ok, pkg, name := splitRule(ctx, v, currentPkg, property) if !ok { - // Visibility rule is invalid so ignore it. Keep going rather than aborting straight away to - // ensure all the rules on this module are checked. - ctx.PropertyErrorf(property, - "invalid visibility pattern %q must match"+ - " //<package>:<module>, //<package> or :<module>", - v) continue } @@ -301,21 +295,24 @@ func visibilityRuleGatherer(ctx BottomUpMutatorContext) { // Parse the visibility rules that control access to the module and store them by id // for use when enforcing the rules. - if visibility := m.visibility(); visibility != nil { - rule := parseRules(ctx, currentPkg, m.visibility()) - if rule != nil { - moduleToVisibilityRuleMap(ctx.Config()).Store(qualifiedModuleId, rule) + primaryProperty := m.base().primaryVisibilityProperty + if primaryProperty != nil { + if visibility := primaryProperty.getStrings(); visibility != nil { + rule := parseRules(ctx, currentPkg, primaryProperty.getName(), visibility) + if rule != nil { + moduleToVisibilityRuleMap(ctx.Config()).Store(qualifiedModuleId, rule) + } } } } -func parseRules(ctx BaseModuleContext, currentPkg string, visibility []string) compositeRule { +func parseRules(ctx BaseModuleContext, currentPkg, property string, visibility []string) compositeRule { rules := make(compositeRule, 0, len(visibility)) hasPrivateRule := false hasPublicRule := false hasNonPrivateRule := false for _, v := range visibility { - ok, pkg, name := splitRule(v, currentPkg) + ok, pkg, name := splitRule(ctx, v, currentPkg, property) if !ok { continue } @@ -376,10 +373,16 @@ func isAllowedFromOutsideVendor(pkg string, name string) bool { return !isAncestor("vendor", pkg) } -func splitRule(ruleExpression string, currentPkg string) (bool, string, string) { +func splitRule(ctx BaseModuleContext, ruleExpression string, currentPkg, property string) (bool, string, string) { // Make sure that the rule is of the correct format. matches := visibilityRuleRegexp.FindStringSubmatch(ruleExpression) if ruleExpression == "" || matches == nil { + // Visibility rule is invalid so ignore it. Keep going rather than aborting straight away to + // ensure all the rules on this module are checked. + ctx.PropertyErrorf(property, + "invalid visibility pattern %q must match"+ + " //<package>:<module>, //<package> or :<module>", + ruleExpression) return false, "", "" } @@ -480,3 +483,28 @@ func EffectiveVisibilityRules(ctx BaseModuleContext, module Module) []string { return rule.Strings() } + +// Clear the default visibility properties so they can be replaced. +func clearVisibilityProperties(module Module) { + module.base().visibilityPropertyInfo = nil +} + +// Add a property that contains visibility rules so that they are checked for +// correctness. +func AddVisibilityProperty(module Module, name string, stringsProperty *[]string) { + addVisibilityProperty(module, name, stringsProperty) +} + +func addVisibilityProperty(module Module, name string, stringsProperty *[]string) visibilityProperty { + base := module.base() + property := newVisibilityProperty(name, stringsProperty) + base.visibilityPropertyInfo = append(base.visibilityPropertyInfo, property) + return property +} + +// Set the primary visibility property. +// +// Also adds the property to the list of properties to be validated. +func setPrimaryVisibilityProperty(module Module, name string, stringsProperty *[]string) { + module.base().primaryVisibilityProperty = addVisibilityProperty(module, name, stringsProperty) +} diff --git a/cmd/path_interposer/main.go b/cmd/path_interposer/main.go index cd28b9608..a4fe3e489 100644 --- a/cmd/path_interposer/main.go +++ b/cmd/path_interposer/main.go @@ -53,14 +53,7 @@ func main() { os.Exit(1) } - disableError := false - if e, ok := os.LookupEnv("TEMPORARY_DISABLE_PATH_RESTRICTIONS"); ok { - disableError = e == "1" || e == "y" || e == "yes" || e == "on" || e == "true" - } - exitCode, err := Main(os.Stdout, os.Stderr, interposer, os.Args, mainOpts{ - disableError: disableError, - sendLog: paths.SendLog, config: paths.GetConfig, lookupParents: lookupParents, @@ -79,8 +72,6 @@ If a tool isn't in the allowed list, a log will be posted to the unix domain socket at <interposer>_log.`) type mainOpts struct { - disableError bool - sendLog func(logSocket string, entry *paths.LogEntry, done chan interface{}) config func(name string) paths.PathConfig lookupParents func() []paths.LogProcess @@ -131,7 +122,7 @@ func Main(stdout, stderr io.Writer, interposer string, args []string, opts mainO }, waitForLog) defer func() { <-waitForLog }() } - if config.Error && !opts.disableError { + if config.Error { return 1, fmt.Errorf("%q is not allowed to be used. See https://android.googlesource.com/platform/build/+/master/Changes.md#PATH_Tools for more information.", base) } } diff --git a/java/app.go b/java/app.go index d535c5a67..d25575c99 100755 --- a/java/app.go +++ b/java/app.go @@ -1392,7 +1392,8 @@ func AndroidTestImportFactory() android.Module { }) android.InitApexModule(module) - InitJavaModule(module, android.DeviceSupported) + android.InitAndroidMultiTargetsArchModule(module, android.DeviceSupported, android.MultilibCommon) + android.InitDefaultableModule(module) android.InitSingleSourcePrebuiltModule(module, &module.properties, "Apk") return module diff --git a/java/droiddoc.go b/java/droiddoc.go index a9b5d5fe0..eba77666e 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -1505,20 +1505,37 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) { updatedBaselineOutput := android.PathForModuleOut(ctx, "api_lint_baseline.txt") d.apiLintTimestamp = android.PathForModuleOut(ctx, "api_lint.timestamp") + msg := `` + + `************************************************************\n` + + `Your API changes are triggering API Lint warnings or errors.\n` + + `To make these errors go away, fix the code according to the\n` + + `error and/or warning messages above.\n` + + `\n` + + `If it's not possible to do so, there are workarounds:\n` + + `\n` + + `1. You can suppress the errors with @SuppressLint(\"<id>\")\n` + if baselineFile.Valid() { cmd.FlagWithInput("--baseline ", baselineFile.Path()) cmd.FlagWithOutput("--update-baseline ", updatedBaselineOutput) + + msg += fmt.Sprintf(``+ + `2. You can update the baseline by executing the following\n`+ + ` command:\n`+ + ` cp \\ \n`+ + ` \"$PWD/%s\" \\ \n`+ + ` \"$PWD/%s\" \n`+ + ` To submit the revised baseline.txt to the main Android\n`+ + ` repository, you will need approval.\n`, updatedBaselineOutput, baselineFile.Path()) + } else { + msg += fmt.Sprintf(``+ + `2. You can add a baseline file of existing lint failures\n`+ + ` to the build rule of %s.\n`, d.Name()) } + msg += `************************************************************\n` zipSyncCleanupCmd(rule, srcJarDir) - msg := fmt.Sprintf(`\n******************************\n`+ - `Your API changes are triggering API Lint warnings or errors.\n\n`+ - `To make these errors go away, you have two choices:\n`+ - ` 1. You can suppress the errors with @SuppressLint(\"<id>\").\n\n`+ - ` 2. You can update the baseline by executing the following command:\n`+ - ` cp \"$PWD/%s\" \"$PWD/%s\"\n\n`+ - `******************************\n`, updatedBaselineOutput, baselineFile.Path()) rule.Command(). Text("touch").Output(d.apiLintTimestamp). Text(") || ("). diff --git a/sysprop/sysprop_library.go b/sysprop/sysprop_library.go index 093287312..9f27647a0 100644 --- a/sysprop/sysprop_library.go +++ b/sysprop/sysprop_library.go @@ -494,11 +494,13 @@ func syspropLibraryHook(ctx android.LoadHookContext, m *syspropLibrary) { }) } - syspropLibrariesLock.Lock() - defer syspropLibrariesLock.Unlock() + if m.ExportedToMake() { + syspropLibrariesLock.Lock() + defer syspropLibrariesLock.Unlock() - libraries := syspropLibraries(ctx.Config()) - *libraries = append(*libraries, ctx.ModuleName()) + libraries := syspropLibraries(ctx.Config()) + *libraries = append(*libraries, "//"+ctx.ModuleDir()+":"+ctx.ModuleName()) + } } func syspropDepsMutator(ctx android.BottomUpMutatorContext) { diff --git a/ui/build/path.go b/ui/build/path.go index c34ba1b52..7122927a6 100644 --- a/ui/build/path.go +++ b/ui/build/path.go @@ -177,9 +177,12 @@ func SetupPath(ctx Context, config Config) { execs = append(execs, parsePathDir(pathEntry)...) } - allowAllSymlinks := config.Environment().IsEnvTrue("TEMPORARY_DISABLE_PATH_RESTRICTIONS") + if config.Environment().IsEnvTrue("TEMPORARY_DISABLE_PATH_RESTRICTIONS") { + ctx.Fatalln("TEMPORARY_DISABLE_PATH_RESTRICTIONS was a temporary migration method, and is now obsolete.") + } + for _, name := range execs { - if !paths.GetConfig(name).Symlink && !allowAllSymlinks { + if !paths.GetConfig(name).Symlink { continue } diff --git a/ui/build/sandbox_linux.go b/ui/build/sandbox_linux.go index 98eb028a8..dab0e756b 100644 --- a/ui/build/sandbox_linux.go +++ b/ui/build/sandbox_linux.go @@ -181,15 +181,15 @@ func (c *Cmd) wrapSandbox() { // For now, just map everything. Make most things readonly. "-R", "/", + // Mount a writable tmp dir + "-B", "/tmp", + // Mount source are read-write "-B", sandboxConfig.srcDir, //Mount out dir as read-write "-B", sandboxConfig.outDir, - // Mount a writable tmp dir - "-B", "/tmp", - // Disable newcgroup for now, since it may require newer kernels // TODO: try out cgroups "--disable_clone_newcgroup", |