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