diff options
author | Inseob Kim <inseob@google.com> | 2019-03-18 10:19:51 +0900 |
---|---|---|
committer | Inseob Kim <inseob@google.com> | 2019-03-20 15:33:06 +0900 |
commit | 8098faad9f1c4bdead1aa0d6800c2253776b9ca3 (patch) | |
tree | 74893330d452c523808ab109ca4896ba786cb20e | |
parent | 66184450d5765889a5fb71d14c1a44959ebaefbe (diff) | |
download | build_soong-8098faad9f1c4bdead1aa0d6800c2253776b9ca3.tar.gz build_soong-8098faad9f1c4bdead1aa0d6800c2253776b9ca3.tar.bz2 build_soong-8098faad9f1c4bdead1aa0d6800c2253776b9ca3.zip |
Refine error messages in case of missing api files
Some non-interpretable error messages has been shown in case of missing
current api files. Instead of that messy errors, This clearly tells
users what is the problem and how to fix it.
Bug: 126259114
Test: 1) try to build a sysprop_library and a java_sdk_library without
creating txt files under api/, and see it fails.
Test: 2) Copy and paste the emitted command, and try to build again.
Change-Id: I986781cc710475647c2b996b0f1c51a6f50c0ba2
-rw-r--r-- | java/sdk_library.go | 28 | ||||
-rwxr-xr-x | scripts/gen-java-current-api-files.sh | 33 |
2 files changed, 61 insertions, 0 deletions
diff --git a/java/sdk_library.go b/java/sdk_library.go index 6441c633..18866d57 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -675,6 +675,34 @@ func (module *SdkLibrary) createInternalModules(mctx android.TopDownMutatorConte if module.sdkLibraryProperties.Api_packages == nil { mctx.PropertyErrorf("api_packages", "java_sdk_library must specify api_packages") } + + missing_current_api := false + + for _, scope := range []string{"", "system-", "test-"} { + for _, api := range []string{"current.txt", "removed.txt"} { + path := path.Join(mctx.ModuleDir(), "api", scope+api) + p := android.ExistentPathForSource(mctx, path) + if !p.Valid() { + mctx.ModuleErrorf("Current api file %#v doesn't exist", path) + missing_current_api = true + } + } + } + + if missing_current_api { + script := "build/soong/scripts/gen-java-current-api-files.sh" + p := android.ExistentPathForSource(mctx, script) + + if !p.Valid() { + panic(fmt.Sprintf("script file %s doesn't exist", script)) + } + + mctx.ModuleErrorf("One or more current api files are missing. "+ + "You can update them by:\n"+ + "%s %q && m update-api", script, mctx.ModuleDir()) + return + } + // for public API stubs module.createStubsLibrary(mctx, apiScopePublic) module.createDocs(mctx, apiScopePublic) diff --git a/scripts/gen-java-current-api-files.sh b/scripts/gen-java-current-api-files.sh new file mode 100755 index 00000000..517d3916 --- /dev/null +++ b/scripts/gen-java-current-api-files.sh @@ -0,0 +1,33 @@ +#!/bin/bash -e + +# Copyright (C) 2019 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [[ -z "$1" ]]; then + echo "usage: $0 <modulePath>" >&2 + exit 1 +fi + +api_dir=$1/api + +mkdir -p "$api_dir" + +scopes=("" system- test-) +apis=(current removed) + +for scope in "${scopes[@]}"; do + for api in "${apis[@]}"; do + touch "${api_dir}/${scope}${api}.txt" + done +done |