As of protobuf 22.0, upstream no longer provides language-specific
tarballs. As a consequence, we will need to build the protobuf packages
from the same tarball. To reduce the churn in the actual update, I'd
like to fold py-protobuf into protobuf first.

It would probably be acceptable and easier to merge py3-protobuf into
the C++ protobuf package. I tried to use MULTI_PACKAGES to keep the
current status quo. I think we want MULTI_PACKAGES if we should ever
need to ship other language bindings.

I don't really like the post-build and post-install steps, but since the
python module and the cmake module need to use different ${WRKSRC}
(which isn't MULTI_PACKAGES-aware as far as I can see), it seems
unavoidable to handroll a few things. As an aside, I'm not entirely sure
how much the loading of the Python module buys me here...

The update paths from protobuf-3.21.12p0 -> protobuf-3.21.12p1 and
py3-protobuf-4.21.12 py3-protobuf-4.21.12p0 work in my testing.

I have a few questions:

First off, are there better ideas or approaches?

Are the @pkgpath annotations in the PLISTs sensible?

How do I correctly set an RDEP on python for the -python package?
Do I need to do the FLAVORS/FLAVOR thing? If so, how exactly?

I assume that all dependencies of devel/py-protobuf${MODPY_FLAVOR}
will need adjusting and a bump. Some handholding here would also be
appreciated.

Once this is in proper shape, I will of course run it through a bulk
before commit.

Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/protobuf/Makefile,v
retrieving revision 1.66
diff -u -p -r1.66 Makefile
--- Makefile    19 Feb 2023 11:50:53 -0000      1.66
+++ Makefile    20 Feb 2023 10:01:54 -0000
@@ -1,14 +1,24 @@
-COMMENT =              c++ protocol buffers
+COMMENT-main =         c++ protocol buffers (Google data interchange format)
+COMMENT-python =       python bindings to the Google data interchange format
+
+MULTI_PACKAGES =       -main -python
 
-CPPMAJOR =             3
 PROTOBUF_VERSION =     21.12
-V =                    ${CPPMAJOR}.${PROTOBUF_VERSION}
+CMAJOR =               3
+CVERSION =             ${CMAJOR}.${PROTOBUF_VERSION}
+PMAJOR =               4
+PVERSION =             ${PMAJOR}.${PROTOBUF_VERSION}
+
+SUBST_VARS +=          CVERSION PVERSION
+UPDATE_PLIST_ARGS +=   -i CVERSION -i PVERSION
+
 TAG =                  v${PROTOBUF_VERSION:S/rc-/rc/}
-DISTNAME =             protobuf-cpp-${V}
-PKGNAME =              protobuf-${V:S/-//g}
-REVISION =             0
 
-WRKDIST =              ${WRKDIR}/protobuf-${V}
+DISTNAME =             protobuf-all-${PROTOBUF_VERSION}
+FULLPKGNAME-main =     protobuf-${CVERSION:S/-//g}
+FULLPKGNAME-python =   py3-protobuf-${PVERSION:S/-//g}
+REVISION-main =                1
+REVISION-python =      0
 
 SHARED_LIBS +=         protobuf-lite   19.0    # 32.12
 SHARED_LIBS +=         protobuf        21.0    # 32.12
@@ -21,15 +31,45 @@ HOMEPAGE =          https://github.com/protocolb
 # New BSD
 PERMIT_PACKAGE =       Yes
 
+WRKDIST =              ${WRKDIR}/protobuf-${PROTOBUF_VERSION}
+
+FIX_EXTRACT_PERMISSIONS =      Yes
+
 WANTLIB +=             c m pthread ${COMPILER_LIBCXX} z
 
 MASTER_SITES =         
https://github.com/protocolbuffers/protobuf/releases/download/${TAG}/
 
 COMPILER =             base-clang ports-gcc
 
-MODULES =              devel/cmake
+MODULES =              devel/cmake \
+                       lang/python
+
+# XXX need RDEP on python for -python package...
+# Do I need FLAVORS = python3 / FLAVOR = python3 ?
+MODPY_RUNDEP =         No
+MODPY_PYBUILD =                No
+MODPY_SETUPTOOLS =     Yes
 
 CONFIGURE_ARGS +=      -Dprotobuf_BUILD_SHARED_LIBS=ON
 CONFIGURE_ARGS +=      -Dprotobuf_BUILD_TESTS=OFF
+
+pre-configure:
+       ln -sf ${MODPY_BIN} ${WRKDIR}/bin/python
+
+PROTO_PY_CMD = cd ${WRKSRC}/python && \
+                   ${SETENV} ${MAKE_ENV} PROTOC=${WRKBUILD}/protoc \
+                   python
+
+post-build:
+       ${PROTO_PY_CMD} -O -sBm build -w --no-isolation
+
+post-install:
+       ${INSTALL_DATA_DIR} ${WRKINST}${MODPY_LIBDIR}; \
+       ${PROTO_PY_CMD} -O -m installer -d ${WRKINST} 
${WRKSRC}/python/dist/*.whl
+
+TEST_DEPENDS +=                math/py-numpy${MODPY_FLAVOR}
+
+test:
+       cd ${WRKSRC}/python && ${_PBUILD} env ${MAKE_ENV} python setup.py test
 
 .include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/devel/protobuf/distinfo,v
retrieving revision 1.40
diff -u -p -r1.40 distinfo
--- distinfo    14 Dec 2022 17:22:42 -0000      1.40
+++ distinfo    19 Feb 2023 20:46:45 -0000
@@ -1,2 +1,2 @@
-SHA256 (protobuf-cpp-3.21.12.tar.gz) = 
TqubUkqlkTxv/7ILKoq/Xvf5WoC8BwHzptu0xgf3NGA=
-SIZE (protobuf-cpp-3.21.12.tar.gz) = 4842303
+SHA256 (protobuf-all-21.12.tar.gz) = 
LGo2x7WlWsyuBjZn7zxV8mQuZ0dtltNV/wrLE9u0fwk=
+SIZE (protobuf-all-21.12.tar.gz) = 7649074
Index: pkg/DESCR
===================================================================
RCS file: pkg/DESCR
diff -N pkg/DESCR
--- pkg/DESCR   24 Mar 2010 19:03:37 -0000      1.1.1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,7 +0,0 @@
-Protocol buffers are a flexible, efficient, automated mechanism for
-serializing structured data - think XML, but smaller, faster, and
-simpler. You define how you want your data to be structured once, then
-you can use special generated source code to easily write and read your
-structured data to and from a variety of data streams and using a
-variety of languages. You can even update your data structure without
-breaking deployed programs that are compiled against the "old" format.
Index: pkg/DESCR-main
===================================================================
RCS file: pkg/DESCR-main
diff -N pkg/DESCR-main
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/DESCR-main      19 Feb 2023 20:43:02 -0000
@@ -0,0 +1,7 @@
+Protocol buffers are a flexible, efficient, automated mechanism for
+serializing structured data - think XML, but smaller, faster, and
+simpler. You define how you want your data to be structured once, then
+you can use special generated source code to easily write and read your
+structured data to and from a variety of data streams and using a
+variety of languages. You can even update your data structure without
+breaking deployed programs that are compiled against the "old" format.
Index: pkg/DESCR-python
===================================================================
RCS file: pkg/DESCR-python
diff -N pkg/DESCR-python
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/DESCR-python    19 Feb 2023 20:43:17 -0000
@@ -0,0 +1,2 @@
+Protocol Buffers (a.k.a., protobuf) are Google's language-neutral,
+platform-neutral, extensible mechanism for serializing structured data.
Index: pkg/PLIST
===================================================================
RCS file: pkg/PLIST
diff -N pkg/PLIST
--- pkg/PLIST   19 Feb 2023 11:50:53 -0000      1.15
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,158 +0,0 @@
-bin/protoc
-@bin bin/protoc-3.21.12.0
-include/google/
-include/google/protobuf/
-include/google/protobuf/any.h
-include/google/protobuf/any.pb.h
-include/google/protobuf/any.proto
-include/google/protobuf/api.pb.h
-include/google/protobuf/api.proto
-include/google/protobuf/arena.h
-include/google/protobuf/arena_impl.h
-include/google/protobuf/arenastring.h
-include/google/protobuf/arenaz_sampler.h
-include/google/protobuf/compiler/
-include/google/protobuf/compiler/code_generator.h
-include/google/protobuf/compiler/command_line_interface.h
-include/google/protobuf/compiler/cpp/
-include/google/protobuf/compiler/cpp/cpp_generator.h
-include/google/protobuf/compiler/cpp/file.h
-include/google/protobuf/compiler/cpp/generator.h
-include/google/protobuf/compiler/cpp/helpers.h
-include/google/protobuf/compiler/cpp/names.h
-include/google/protobuf/compiler/csharp/
-include/google/protobuf/compiler/csharp/csharp_doc_comment.h
-include/google/protobuf/compiler/csharp/csharp_generator.h
-include/google/protobuf/compiler/csharp/csharp_names.h
-include/google/protobuf/compiler/csharp/csharp_options.h
-include/google/protobuf/compiler/importer.h
-include/google/protobuf/compiler/java/
-include/google/protobuf/compiler/java/generator.h
-include/google/protobuf/compiler/java/java_generator.h
-include/google/protobuf/compiler/java/kotlin_generator.h
-include/google/protobuf/compiler/java/names.h
-include/google/protobuf/compiler/objectivec/
-include/google/protobuf/compiler/objectivec/objectivec_generator.h
-include/google/protobuf/compiler/objectivec/objectivec_helpers.h
-include/google/protobuf/compiler/parser.h
-include/google/protobuf/compiler/php/
-include/google/protobuf/compiler/php/php_generator.h
-include/google/protobuf/compiler/plugin.h
-include/google/protobuf/compiler/plugin.pb.h
-include/google/protobuf/compiler/plugin.proto
-include/google/protobuf/compiler/python/
-include/google/protobuf/compiler/python/generator.h
-include/google/protobuf/compiler/python/pyi_generator.h
-include/google/protobuf/compiler/python/python_generator.h
-include/google/protobuf/compiler/ruby/
-include/google/protobuf/compiler/ruby/ruby_generator.h
-include/google/protobuf/descriptor.h
-include/google/protobuf/descriptor.pb.h
-include/google/protobuf/descriptor.proto
-include/google/protobuf/descriptor_database.h
-include/google/protobuf/duration.pb.h
-include/google/protobuf/duration.proto
-include/google/protobuf/dynamic_message.h
-include/google/protobuf/empty.pb.h
-include/google/protobuf/empty.proto
-include/google/protobuf/endian.h
-include/google/protobuf/explicitly_constructed.h
-include/google/protobuf/extension_set.h
-include/google/protobuf/extension_set_inl.h
-include/google/protobuf/field_access_listener.h
-include/google/protobuf/field_mask.pb.h
-include/google/protobuf/field_mask.proto
-include/google/protobuf/generated_enum_reflection.h
-include/google/protobuf/generated_enum_util.h
-include/google/protobuf/generated_message_bases.h
-include/google/protobuf/generated_message_reflection.h
-include/google/protobuf/generated_message_tctable_decl.h
-include/google/protobuf/generated_message_tctable_impl.h
-include/google/protobuf/generated_message_util.h
-include/google/protobuf/has_bits.h
-include/google/protobuf/implicit_weak_message.h
-include/google/protobuf/inlined_string_field.h
-include/google/protobuf/io/
-include/google/protobuf/io/coded_stream.h
-include/google/protobuf/io/gzip_stream.h
-include/google/protobuf/io/io_win32.h
-include/google/protobuf/io/printer.h
-include/google/protobuf/io/strtod.h
-include/google/protobuf/io/tokenizer.h
-include/google/protobuf/io/zero_copy_stream.h
-include/google/protobuf/io/zero_copy_stream_impl.h
-include/google/protobuf/io/zero_copy_stream_impl_lite.h
-include/google/protobuf/map.h
-include/google/protobuf/map_entry.h
-include/google/protobuf/map_entry_lite.h
-include/google/protobuf/map_field.h
-include/google/protobuf/map_field_inl.h
-include/google/protobuf/map_field_lite.h
-include/google/protobuf/map_type_handler.h
-include/google/protobuf/message.h
-include/google/protobuf/message_lite.h
-include/google/protobuf/metadata.h
-include/google/protobuf/metadata_lite.h
-include/google/protobuf/parse_context.h
-include/google/protobuf/port.h
-include/google/protobuf/port_def.inc
-include/google/protobuf/port_undef.inc
-include/google/protobuf/reflection.h
-include/google/protobuf/reflection_ops.h
-include/google/protobuf/repeated_field.h
-include/google/protobuf/repeated_ptr_field.h
-include/google/protobuf/service.h
-include/google/protobuf/source_context.pb.h
-include/google/protobuf/source_context.proto
-include/google/protobuf/struct.pb.h
-include/google/protobuf/struct.proto
-include/google/protobuf/stubs/
-include/google/protobuf/stubs/bytestream.h
-include/google/protobuf/stubs/callback.h
-include/google/protobuf/stubs/casts.h
-include/google/protobuf/stubs/common.h
-include/google/protobuf/stubs/hash.h
-include/google/protobuf/stubs/logging.h
-include/google/protobuf/stubs/macros.h
-include/google/protobuf/stubs/map_util.h
-include/google/protobuf/stubs/mutex.h
-include/google/protobuf/stubs/once.h
-include/google/protobuf/stubs/platform_macros.h
-include/google/protobuf/stubs/port.h
-include/google/protobuf/stubs/status.h
-include/google/protobuf/stubs/stl_util.h
-include/google/protobuf/stubs/stringpiece.h
-include/google/protobuf/stubs/strutil.h
-include/google/protobuf/stubs/template_util.h
-include/google/protobuf/text_format.h
-include/google/protobuf/timestamp.pb.h
-include/google/protobuf/timestamp.proto
-include/google/protobuf/type.pb.h
-include/google/protobuf/type.proto
-include/google/protobuf/unknown_field_set.h
-include/google/protobuf/util/
-include/google/protobuf/util/delimited_message_util.h
-include/google/protobuf/util/field_comparator.h
-include/google/protobuf/util/field_mask_util.h
-include/google/protobuf/util/json_util.h
-include/google/protobuf/util/message_differencer.h
-include/google/protobuf/util/time_util.h
-include/google/protobuf/util/type_resolver.h
-include/google/protobuf/util/type_resolver_util.h
-include/google/protobuf/wire_format.h
-include/google/protobuf/wire_format_lite.h
-include/google/protobuf/wrappers.pb.h
-include/google/protobuf/wrappers.proto
-lib/cmake/
-lib/cmake/protobuf/
-lib/cmake/protobuf/protobuf-config-version.cmake
-lib/cmake/protobuf/protobuf-config.cmake
-lib/cmake/protobuf/protobuf-module.cmake
-lib/cmake/protobuf/protobuf-options.cmake
-lib/cmake/protobuf/protobuf-targets${MODCMAKE_BUILD_SUFFIX}
-lib/cmake/protobuf/protobuf-targets.cmake
-@lib lib/libprotobuf-lite.so.${LIBprotobuf-lite_VERSION}
-@lib lib/libprotobuf.so.${LIBprotobuf_VERSION}
-@lib lib/libprotoc.so.${LIBprotoc_VERSION}
-lib/pkgconfig/protobuf-lite.pc
-lib/pkgconfig/protobuf.pc
Index: pkg/PLIST-main
===================================================================
RCS file: pkg/PLIST-main
diff -N pkg/PLIST-main
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/PLIST-main      20 Feb 2023 10:02:12 -0000
@@ -0,0 +1,159 @@
+@pkgpath devel/protobuf
+bin/protoc
+@bin bin/protoc-3.21.12.0
+include/google/
+include/google/protobuf/
+include/google/protobuf/any.h
+include/google/protobuf/any.pb.h
+include/google/protobuf/any.proto
+include/google/protobuf/api.pb.h
+include/google/protobuf/api.proto
+include/google/protobuf/arena.h
+include/google/protobuf/arena_impl.h
+include/google/protobuf/arenastring.h
+include/google/protobuf/arenaz_sampler.h
+include/google/protobuf/compiler/
+include/google/protobuf/compiler/code_generator.h
+include/google/protobuf/compiler/command_line_interface.h
+include/google/protobuf/compiler/cpp/
+include/google/protobuf/compiler/cpp/cpp_generator.h
+include/google/protobuf/compiler/cpp/file.h
+include/google/protobuf/compiler/cpp/generator.h
+include/google/protobuf/compiler/cpp/helpers.h
+include/google/protobuf/compiler/cpp/names.h
+include/google/protobuf/compiler/csharp/
+include/google/protobuf/compiler/csharp/csharp_doc_comment.h
+include/google/protobuf/compiler/csharp/csharp_generator.h
+include/google/protobuf/compiler/csharp/csharp_names.h
+include/google/protobuf/compiler/csharp/csharp_options.h
+include/google/protobuf/compiler/importer.h
+include/google/protobuf/compiler/java/
+include/google/protobuf/compiler/java/generator.h
+include/google/protobuf/compiler/java/java_generator.h
+include/google/protobuf/compiler/java/kotlin_generator.h
+include/google/protobuf/compiler/java/names.h
+include/google/protobuf/compiler/objectivec/
+include/google/protobuf/compiler/objectivec/objectivec_generator.h
+include/google/protobuf/compiler/objectivec/objectivec_helpers.h
+include/google/protobuf/compiler/parser.h
+include/google/protobuf/compiler/php/
+include/google/protobuf/compiler/php/php_generator.h
+include/google/protobuf/compiler/plugin.h
+include/google/protobuf/compiler/plugin.pb.h
+include/google/protobuf/compiler/plugin.proto
+include/google/protobuf/compiler/python/
+include/google/protobuf/compiler/python/generator.h
+include/google/protobuf/compiler/python/pyi_generator.h
+include/google/protobuf/compiler/python/python_generator.h
+include/google/protobuf/compiler/ruby/
+include/google/protobuf/compiler/ruby/ruby_generator.h
+include/google/protobuf/descriptor.h
+include/google/protobuf/descriptor.pb.h
+include/google/protobuf/descriptor.proto
+include/google/protobuf/descriptor_database.h
+include/google/protobuf/duration.pb.h
+include/google/protobuf/duration.proto
+include/google/protobuf/dynamic_message.h
+include/google/protobuf/empty.pb.h
+include/google/protobuf/empty.proto
+include/google/protobuf/endian.h
+include/google/protobuf/explicitly_constructed.h
+include/google/protobuf/extension_set.h
+include/google/protobuf/extension_set_inl.h
+include/google/protobuf/field_access_listener.h
+include/google/protobuf/field_mask.pb.h
+include/google/protobuf/field_mask.proto
+include/google/protobuf/generated_enum_reflection.h
+include/google/protobuf/generated_enum_util.h
+include/google/protobuf/generated_message_bases.h
+include/google/protobuf/generated_message_reflection.h
+include/google/protobuf/generated_message_tctable_decl.h
+include/google/protobuf/generated_message_tctable_impl.h
+include/google/protobuf/generated_message_util.h
+include/google/protobuf/has_bits.h
+include/google/protobuf/implicit_weak_message.h
+include/google/protobuf/inlined_string_field.h
+include/google/protobuf/io/
+include/google/protobuf/io/coded_stream.h
+include/google/protobuf/io/gzip_stream.h
+include/google/protobuf/io/io_win32.h
+include/google/protobuf/io/printer.h
+include/google/protobuf/io/strtod.h
+include/google/protobuf/io/tokenizer.h
+include/google/protobuf/io/zero_copy_stream.h
+include/google/protobuf/io/zero_copy_stream_impl.h
+include/google/protobuf/io/zero_copy_stream_impl_lite.h
+include/google/protobuf/map.h
+include/google/protobuf/map_entry.h
+include/google/protobuf/map_entry_lite.h
+include/google/protobuf/map_field.h
+include/google/protobuf/map_field_inl.h
+include/google/protobuf/map_field_lite.h
+include/google/protobuf/map_type_handler.h
+include/google/protobuf/message.h
+include/google/protobuf/message_lite.h
+include/google/protobuf/metadata.h
+include/google/protobuf/metadata_lite.h
+include/google/protobuf/parse_context.h
+include/google/protobuf/port.h
+include/google/protobuf/port_def.inc
+include/google/protobuf/port_undef.inc
+include/google/protobuf/reflection.h
+include/google/protobuf/reflection_ops.h
+include/google/protobuf/repeated_field.h
+include/google/protobuf/repeated_ptr_field.h
+include/google/protobuf/service.h
+include/google/protobuf/source_context.pb.h
+include/google/protobuf/source_context.proto
+include/google/protobuf/struct.pb.h
+include/google/protobuf/struct.proto
+include/google/protobuf/stubs/
+include/google/protobuf/stubs/bytestream.h
+include/google/protobuf/stubs/callback.h
+include/google/protobuf/stubs/casts.h
+include/google/protobuf/stubs/common.h
+include/google/protobuf/stubs/hash.h
+include/google/protobuf/stubs/logging.h
+include/google/protobuf/stubs/macros.h
+include/google/protobuf/stubs/map_util.h
+include/google/protobuf/stubs/mutex.h
+include/google/protobuf/stubs/once.h
+include/google/protobuf/stubs/platform_macros.h
+include/google/protobuf/stubs/port.h
+include/google/protobuf/stubs/status.h
+include/google/protobuf/stubs/stl_util.h
+include/google/protobuf/stubs/stringpiece.h
+include/google/protobuf/stubs/strutil.h
+include/google/protobuf/stubs/template_util.h
+include/google/protobuf/text_format.h
+include/google/protobuf/timestamp.pb.h
+include/google/protobuf/timestamp.proto
+include/google/protobuf/type.pb.h
+include/google/protobuf/type.proto
+include/google/protobuf/unknown_field_set.h
+include/google/protobuf/util/
+include/google/protobuf/util/delimited_message_util.h
+include/google/protobuf/util/field_comparator.h
+include/google/protobuf/util/field_mask_util.h
+include/google/protobuf/util/json_util.h
+include/google/protobuf/util/message_differencer.h
+include/google/protobuf/util/time_util.h
+include/google/protobuf/util/type_resolver.h
+include/google/protobuf/util/type_resolver_util.h
+include/google/protobuf/wire_format.h
+include/google/protobuf/wire_format_lite.h
+include/google/protobuf/wrappers.pb.h
+include/google/protobuf/wrappers.proto
+lib/cmake/
+lib/cmake/protobuf/
+lib/cmake/protobuf/protobuf-config-version.cmake
+lib/cmake/protobuf/protobuf-config.cmake
+lib/cmake/protobuf/protobuf-module.cmake
+lib/cmake/protobuf/protobuf-options.cmake
+lib/cmake/protobuf/protobuf-targets${MODCMAKE_BUILD_SUFFIX}
+lib/cmake/protobuf/protobuf-targets.cmake
+@lib lib/libprotobuf-lite.so.${LIBprotobuf-lite_VERSION}
+@lib lib/libprotobuf.so.${LIBprotobuf_VERSION}
+@lib lib/libprotoc.so.${LIBprotoc_VERSION}
+lib/pkgconfig/protobuf-lite.pc
+lib/pkgconfig/protobuf.pc
Index: pkg/PLIST-python
===================================================================
RCS file: pkg/PLIST-python
diff -N pkg/PLIST-python
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/PLIST-python    20 Feb 2023 09:48:54 -0000
@@ -0,0 +1,161 @@
+@conflict py-protobuf-*
+@pkgpath devel/py-protobuf
+@pkgpath devel/py-protobuf,python3
+lib/python${MODPY_VERSION}/
+lib/python${MODPY_VERSION}/site-packages/
+lib/python${MODPY_VERSION}/site-packages/google/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}any_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}any_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}api_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}api_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}descriptor.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}descriptor.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}descriptor_database.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}descriptor_database.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}descriptor_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}descriptor_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}descriptor_pool.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}descriptor_pool.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}duration_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}duration_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}empty_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}empty_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}field_mask_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}field_mask_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}json_format.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}json_format.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}message.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}message.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}message_factory.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}message_factory.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}proto_builder.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}proto_builder.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}reflection.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}reflection.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}service.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}service.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}service_reflection.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}service_reflection.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}source_context_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}source_context_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}struct_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}struct_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}symbol_database.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}symbol_database.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}text_encoding.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}text_encoding.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}text_format.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}text_format.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}timestamp_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}timestamp_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}type_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}type_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}unknown_fields.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}unknown_fields.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}wrappers_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/${MODPY_PYCACHE}wrappers_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/any_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/api_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/compiler/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/compiler/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/google/protobuf/compiler/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/compiler/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/compiler/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/compiler/${MODPY_PYCACHE}plugin_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/compiler/${MODPY_PYCACHE}plugin_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/compiler/plugin_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/descriptor.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/descriptor_database.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/descriptor_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/descriptor_pool.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/duration_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/empty_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/field_mask_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}api_implementation.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}api_implementation.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}builder.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}builder.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}containers.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}containers.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}decoder.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}decoder.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}encoder.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}encoder.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}enum_type_wrapper.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}enum_type_wrapper.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}extension_dict.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}extension_dict.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}message_listener.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}message_listener.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}python_message.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}python_message.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}type_checkers.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}type_checkers.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}well_known_types.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}well_known_types.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}wire_format.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/${MODPY_PYCACHE}wire_format.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/api_implementation.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/builder.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/containers.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/decoder.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/encoder.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/enum_type_wrapper.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/extension_dict.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/message_listener.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/python_message.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/type_checkers.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/well_known_types.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/internal/wire_format.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/json_format.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/message.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/message_factory.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/proto_builder.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/pyext/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/pyext/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/google/protobuf/pyext/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/pyext/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/pyext/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/pyext/${MODPY_PYCACHE}cpp_message.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/pyext/${MODPY_PYCACHE}cpp_message.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/pyext/cpp_message.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/reflection.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/service.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/service_reflection.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/source_context_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/struct_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/symbol_database.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/text_encoding.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/text_format.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/timestamp_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/type_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/unknown_fields.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/${MODPY_PYCACHE}json_format_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/${MODPY_PYCACHE}json_format_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/${MODPY_PYCACHE}json_format_proto3_pb2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/${MODPY_PYCACHE}json_format_proto3_pb2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/json_format_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/util/json_format_proto3_pb2.py
+lib/python${MODPY_VERSION}/site-packages/google/protobuf/wrappers_pb2.py
+lib/python${MODPY_VERSION}/site-packages/protobuf-${PVERSION}-py${MODPY_VERSION}-nspkg.pth
+lib/python${MODPY_VERSION}/site-packages/protobuf-${PVERSION}.dist-info/
+lib/python${MODPY_VERSION}/site-packages/protobuf-${PVERSION}.dist-info/METADATA
+lib/python${MODPY_VERSION}/site-packages/protobuf-${PVERSION}.dist-info/RECORD
+lib/python${MODPY_VERSION}/site-packages/protobuf-${PVERSION}.dist-info/WHEEL
+lib/python${MODPY_VERSION}/site-packages/protobuf-${PVERSION}.dist-info/namespace_packages.txt
+lib/python${MODPY_VERSION}/site-packages/protobuf-${PVERSION}.dist-info/top_level.txt


Reply via email to