Translate python_libray.pkg_path to proto.import_prefix am: cb847638af

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2721823

Change-Id: Ib5f6ee9478486881d6b4b079791bab78f2b3c2ca
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Spandan Das
2023-08-28 17:54:36 +00:00
committed by Automerger Merge Worker
3 changed files with 60 additions and 0 deletions

View File

@@ -281,6 +281,13 @@ func Bp2buildProtoProperties(ctx Bp2buildMutatorContext, m *ModuleBase, srcs baz
} }
} }
if p, ok := m.module.(PkgPathInterface); ok && p.PkgPath(ctx) != nil {
// python_library with pkg_path
// proto_library for this module should have the pkg_path as the import_prefix
attrs.Import_prefix = p.PkgPath(ctx)
attrs.Strip_import_prefix = proptools.StringPtr("")
}
tags := ApexAvailableTagsWithoutTestApexes(ctx.(TopDownMutatorContext), ctx.Module()) tags := ApexAvailableTagsWithoutTestApexes(ctx.(TopDownMutatorContext), ctx.Module())
moduleDir := ctx.ModuleDir() moduleDir := ctx.ModuleDir()
@@ -333,6 +340,11 @@ func Bp2buildProtoProperties(ctx Bp2buildMutatorContext, m *ModuleBase, srcs baz
return info, true return info, true
} }
// PkgPathInterface is used as a type assertion in bp2build to get pkg_path property of python_library_host
type PkgPathInterface interface {
PkgPath(ctx BazelConversionContext) *string
}
var ( var (
protoIncludeDirGeneratedSuffix = ".include_dir_bp2build_generated_proto" protoIncludeDirGeneratedSuffix = ".include_dir_bp2build_generated_proto"
protoIncludeDirsBp2buildKey = NewOnceKey("protoIncludeDirsBp2build") protoIncludeDirsBp2buildKey = NewOnceKey("protoIncludeDirsBp2build")

View File

@@ -348,3 +348,43 @@ func TestPythonLibraryWithProtobufs(t *testing.T) {
}, },
}) })
} }
func TestPythonLibraryWithProtobufsAndPkgPath(t *testing.T) {
t.Parallel()
runBp2BuildTestCaseWithPythonLibraries(t, Bp2buildTestCase{
Description: "test python_library protobuf with pkg_path",
Filesystem: map[string]string{
"dir/foo.proto": "",
"dir/bar.proto": "", // bar contains "import dir/foo.proto"
"dir/Android.bp": `
python_library {
name: "foo",
pkg_path: "dir",
srcs: [
"foo.proto",
"bar.proto",
],
bazel_module: {bp2build_available: true},
}`,
},
Dir: "dir",
ExpectedBazelTargets: []string{
MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{
"import_prefix": `"dir"`,
"strip_import_prefix": `""`,
"srcs": `[
"foo.proto",
"bar.proto",
]`,
}),
MakeBazelTarget("py_proto_library", "foo_py_proto", AttrNameToString{
"deps": `[":foo_proto"]`,
}),
MakeBazelTarget("py_library", "foo", AttrNameToString{
"srcs_version": `"PY3"`,
"imports": `[".."]`,
"deps": `[":foo_py_proto"]`,
}),
},
})
}

View File

@@ -197,6 +197,14 @@ func (p *PythonLibraryModule) getPkgPath() string {
return String(p.properties.Pkg_path) return String(p.properties.Pkg_path)
} }
// PkgPath is the "public" version of `getPkgPath` that is only available during bp2build
func (p *PythonLibraryModule) PkgPath(ctx android.BazelConversionContext) *string {
if ctx.Config().BuildMode != android.Bp2build {
ctx.ModuleErrorf("PkgPath is only supported in bp2build mode")
}
return p.properties.Pkg_path
}
func (p *PythonLibraryModule) getBaseProperties() *BaseProperties { func (p *PythonLibraryModule) getBaseProperties() *BaseProperties {
return &p.properties return &p.properties
} }