java_sdk_library: Allow api dir to be specified

For modules that provide API surfaces in addition to the standard
current, test and system it is useful to be able to specify the
directory containing the api's .txt files to make it easy to create
multiple API surfaces from within the same Android.bp file. e.g. This
is useful for conscrypt, icu and libcore to manage their intra core
and core platform APIs.

Bug: 145998881
Test: m checkbuild
Change-Id: I753631d9b6993fbf30019fef5c052a9429e519de
This commit is contained in:
Paul Duffin 2019-12-30 17:23:46 +00:00
parent 7a586d3a59
commit 749f98fb64
2 changed files with 15 additions and 5 deletions

View file

@ -106,6 +106,10 @@ type sdkLibraryProperties struct {
// list of package names that must be hidden from the API
Hidden_api_packages []string
// the relative path to the directory containing the api specification files.
// Defaults to "api".
Api_dir *string
// local files that are used within user customized droiddoc options.
Droiddoc_option_files []string
@ -585,8 +589,9 @@ func (module *SdkLibrary) createStubsSources(mctx android.LoadHookContext, apiSc
currentApiFileName = "test-" + currentApiFileName
removedApiFileName = "test-" + removedApiFileName
}
currentApiFileName = path.Join("api", currentApiFileName)
removedApiFileName = path.Join("api", removedApiFileName)
apiDir := module.getApiDir()
currentApiFileName = path.Join(apiDir, currentApiFileName)
removedApiFileName = path.Join(apiDir, removedApiFileName)
// TODO(jiyong): remove these three props
props.Api_tag_name = proptools.StringPtr(module.apiTagName(apiScope))
props.Api_filename = proptools.StringPtr(currentApiFileName)
@ -701,6 +706,10 @@ func javaSdkLibraries(config android.Config) *[]string {
}).(*[]string)
}
func (module *SdkLibrary) getApiDir() string {
return proptools.StringDefault(module.sdkLibraryProperties.Api_dir, "api")
}
// For a java_sdk_library module, create internal modules for stubs, docs,
// runtime libs and xml file. If requested, the stubs and docs are created twice
// once for public API level and once for system API level
@ -725,9 +734,10 @@ func (module *SdkLibrary) CreateInternalModules(mctx android.LoadHookContext) {
missing_current_api := false
apiDir := module.getApiDir()
for _, scope := range scopes {
for _, api := range []string{"current.txt", "removed.txt"} {
path := path.Join(mctx.ModuleDir(), "api", scope+api)
path := path.Join(mctx.ModuleDir(), apiDir, scope+api)
p := android.ExistentPathForSource(mctx, path)
if !p.Valid() {
mctx.ModuleErrorf("Current api file %#v doesn't exist", path)
@ -747,7 +757,7 @@ func (module *SdkLibrary) CreateInternalModules(mctx android.LoadHookContext) {
mctx.ModuleErrorf("One or more current api files are missing. "+
"You can update them by:\n"+
"%s %q %s && m update-api",
script, mctx.ModuleDir(), strings.Join(scopes, " "))
script, filepath.Join(mctx.ModuleDir(), apiDir), strings.Join(scopes, " "))
return
}

View file

@ -19,7 +19,7 @@ if [[ -z "$1" ]]; then
exit 1
fi
api_dir=$1/api
api_dir=$1
shift
mkdir -p "$api_dir"