Translate python_libray.pkg_path to proto.import_prefix
If a python_library uses a pkg_path foo/bar, then the proto srcs in
that libray need to import the dep .proto as foo/bar/proto.proto.
This behavior is restricted to python modules. To implement this is in
bp2build, this CL creates a new interface with a single method
`PkgPath`. Only python module structs implement this interface, and
this method is only available during bp2build
Test: Added a bp2build unit test
Test: TH
Change-Id: If8d207c0b321f75337a053795826b283a5eaaf46
diff --git a/bp2build/python_library_conversion_test.go b/bp2build/python_library_conversion_test.go
index a53371d..595acd2 100644
--- a/bp2build/python_library_conversion_test.go
+++ b/bp2build/python_library_conversion_test.go
@@ -348,3 +348,43 @@
},
})
}
+
+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"]`,
+ }),
+ },
+ })
+}