protoc 2.6.1.1 → 2.6.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/protoc/Makefile.in +10 -13
- data/ext/protoc/extconf.rb +0 -1
- data/ext/protoc/protobuf/CHANGES.txt +593 -0
- data/ext/protoc/protobuf/CONTRIBUTORS.txt +93 -0
- data/ext/protoc/protobuf/INSTALL.txt +237 -0
- data/ext/protoc/protobuf/LICENSE +33 -0
- data/ext/protoc/protobuf/Makefile.am +267 -0
- data/ext/protoc/protobuf/README.md +167 -0
- data/ext/protoc/protobuf/autogen.sh +41 -0
- data/ext/protoc/protobuf/benchmarks/ProtoBench.java +203 -0
- data/ext/protoc/protobuf/benchmarks/google_message1.dat +0 -0
- data/ext/protoc/protobuf/benchmarks/google_message2.dat +0 -0
- data/ext/protoc/protobuf/benchmarks/google_size.proto +136 -0
- data/ext/protoc/protobuf/benchmarks/google_speed.proto +136 -0
- data/ext/protoc/protobuf/benchmarks/readme.txt +50 -0
- data/ext/protoc/protobuf/configure.ac +159 -0
- data/ext/protoc/protobuf/editors/README.txt +5 -0
- data/ext/protoc/protobuf/editors/proto.vim +105 -0
- data/ext/protoc/protobuf/editors/protobuf-mode.el +220 -0
- data/ext/protoc/protobuf/examples/AddPerson.java +95 -0
- data/ext/protoc/protobuf/examples/ListPeople.java +50 -0
- data/ext/protoc/protobuf/examples/Makefile +58 -0
- data/ext/protoc/protobuf/examples/README.txt +29 -0
- data/ext/protoc/protobuf/examples/add_person.cc +95 -0
- data/ext/protoc/protobuf/examples/add_person.py +58 -0
- data/ext/protoc/protobuf/examples/addressbook.proto +30 -0
- data/ext/protoc/protobuf/examples/list_people.cc +68 -0
- data/ext/protoc/protobuf/examples/list_people.py +38 -0
- data/ext/protoc/protobuf/generate_descriptor_proto.sh +33 -0
- data/ext/protoc/protobuf/java/README.txt +96 -0
- data/ext/protoc/protobuf/java/pom.xml +217 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java +466 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java +355 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java +253 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java +51 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingService.java +64 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java +163 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ByteString.java +1022 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java +1311 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java +1297 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java +2238 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java +622 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Extension.java +96 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java +392 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java +185 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java +907 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java +2213 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java +949 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Internal.java +391 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java +122 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyField.java +154 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java +176 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java +367 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java +163 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java +362 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Message.java +244 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java +320 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java +60 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java +143 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java +931 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Parser.java +261 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java +58 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolStringList.java +48 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java +696 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java +957 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java +47 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java +71 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcController.java +118 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java +134 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Service.java +117 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ServiceException.java +52 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java +241 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java +618 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java +1984 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java +99 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java +995 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java +205 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Utf8.java +349 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java +163 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +527 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +68 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java +759 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +141 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +769 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +401 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +80 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java +735 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +326 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +48 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +1515 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +180 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +421 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +134 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java +121 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +319 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +174 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +143 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +85 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java +148 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +396 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java +353 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +185 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java +381 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +190 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +97 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +115 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java +320 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +155 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +420 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +96 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java +4124 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java +994 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +653 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +227 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java +606 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +61 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +55 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/multiple_files_test.proto +77 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_builders_test.proto +53 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension.proto +46 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +48 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension.proto +49 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +50 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +38 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +42 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +43 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +157 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8.proto +50 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +51 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_custom_options.proto +43 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +60 -0
- data/ext/protoc/protobuf/m4/ac_system_extensions.m4 +37 -0
- data/ext/protoc/protobuf/m4/acx_check_suncc.m4 +75 -0
- data/ext/protoc/protobuf/m4/acx_pthread.m4 +397 -0
- data/ext/protoc/protobuf/m4/stl_hash.m4 +72 -0
- data/ext/protoc/protobuf/more_tests/Makefile +41 -0
- data/ext/protoc/protobuf/post_process_dist.sh +60 -0
- data/ext/protoc/protobuf/protobuf-lite.pc.in +13 -0
- data/ext/protoc/protobuf/protobuf.pc.in +14 -0
- data/ext/protoc/protobuf/python/README.txt +105 -0
- data/ext/protoc/protobuf/python/ez_setup.py +284 -0
- data/ext/protoc/protobuf/python/google/__init__.py +1 -0
- data/ext/protoc/protobuf/python/google/protobuf/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor.py +849 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor_database.py +137 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor_pool.py +643 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.cc +139 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.py +89 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation_default_test.py +63 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/containers.py +269 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/cpp_message.py +663 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/decoder.py +831 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_database_test.py +63 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test.py +564 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test1.proto +94 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test2.proto +70 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_test.py +669 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/encoder.py +788 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/enum_type_wrapper.py +89 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test1.proto +57 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test2.proto +92 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/generator_test.py +343 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_test.py +131 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_listener.py +78 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_test.py +681 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/missing_enum_values.proto +50 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions.proto +58 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions_dynamic.proto +49 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_messages.proto +51 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/python_message.py +1251 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/reflection_test.py +2934 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/service_reflection_test.py +136 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/symbol_database_test.py +120 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/test_bad_identifiers.proto +52 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/test_util.py +662 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/text_encoding_test.py +68 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/text_format_test.py +743 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/type_checkers.py +328 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/unknown_fields_test.py +231 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format.py +268 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format_test.py +253 -0
- data/ext/protoc/protobuf/python/google/protobuf/message.py +284 -0
- data/ext/protoc/protobuf/python/google/protobuf/message_factory.py +155 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/README +6 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/cpp_message.py +61 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.cc +357 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.h +96 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py +58 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.cc +338 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.h +123 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message.cc +2561 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message.h +305 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py +56 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/proto2_api_test.proto +38 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/python.proto +66 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/python_protobuf.h +57 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py +94 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc +763 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.h +172 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc +825 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h +112 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/scoped_pyobject_ptr.h +95 -0
- data/ext/protoc/protobuf/python/google/protobuf/reflection.py +205 -0
- data/ext/protoc/protobuf/python/google/protobuf/service.py +226 -0
- data/ext/protoc/protobuf/python/google/protobuf/service_reflection.py +284 -0
- data/ext/protoc/protobuf/python/google/protobuf/symbol_database.py +185 -0
- data/ext/protoc/protobuf/python/google/protobuf/text_encoding.py +110 -0
- data/ext/protoc/protobuf/python/google/protobuf/text_format.py +873 -0
- data/ext/protoc/protobuf/python/mox.py +1401 -0
- data/ext/protoc/protobuf/python/setup.py +201 -0
- data/ext/protoc/protobuf/python/stubout.py +140 -0
- data/ext/protoc/protobuf/src/Makefile.am +418 -0
- data/ext/protoc/protobuf/src/google/protobuf/SEBS +240 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.cc +84 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.h +145 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.cc +1603 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.h +378 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc +1654 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc +288 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h +103 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +431 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h +122 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc +210 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h +86 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h +185 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc +665 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.h +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc +125 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc +494 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h +206 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc +2645 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.h +175 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc +375 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_options.h +58 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc +123 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +451 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +123 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc +334 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc +642 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h +127 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto +132 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc +2074 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.h +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.cc +480 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.h +317 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer_unittest.cc +617 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.cc +195 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.h +95 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc +233 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.h +69 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc +67 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.cc +333 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.h +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc +778 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.h +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.cc +207 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.h +109 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.cc +213 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.h +162 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.cc +534 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.h +115 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.cc +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc +77 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.h +101 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.cc +737 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.h +322 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.cc +826 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.cc +1666 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.h +140 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.cc +1343 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.h +173 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc +266 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.h +124 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_plugin_unittest.cc +124 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc +877 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.h +160 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.cc +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.h +135 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc +201 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h +90 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.cc +1056 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.h +160 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/main.cc +61 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.cc +240 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.h +117 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/package_info.h +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.cc +1750 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.h +522 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser_unittest.cc +2612 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.cc +163 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.cc +1148 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.h +897 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.proto +147 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.cc +1262 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.h +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_plugin_unittest.cc +118 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.cc +463 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.h +108 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/test_plugin.cc +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_output_unittest.sh +91 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.cc +218 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.h +93 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.cc +5420 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.h +1691 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.cc +9135 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.h +6761 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.proto +687 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.cc +543 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.h +369 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database_unittest.cc +748 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_pb2_test.py +54 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_unittest.cc +5501 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.cc +764 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.h +148 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message_unittest.cc +230 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set.cc +1663 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set.h +1234 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set_heavy.cc +734 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set_unittest.cc +1095 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_enum_reflection.h +91 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.cc +1683 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.h +504 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc +795 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.cc +65 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.h +113 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.cc +914 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.h +1220 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_inl.h +69 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_unittest.cc +1378 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.cc +326 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.h +209 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream_unittest.sh +44 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/package_info.h +54 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer.cc +198 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer.h +136 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer_unittest.cc +285 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/strtod.cc +113 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/strtod.h +50 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.cc +1127 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.h +402 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer_unittest.cc +999 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.cc +57 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.h +248 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +358 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +405 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +354 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_unittest.cc +965 -0
- data/ext/protoc/protobuf/src/google/protobuf/lite_unittest.cc +350 -0
- data/ext/protoc/protobuf/src/google/protobuf/message.cc +358 -0
- data/ext/protoc/protobuf/src/google/protobuf/message.h +866 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_lite.cc +335 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_lite.h +247 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_unittest.cc +427 -0
- data/ext/protoc/protobuf/src/google/protobuf/package_info.h +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.cc +269 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.h +81 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops_unittest.cc +475 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field.cc +87 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field.h +1603 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field_reflection_unittest.cc +195 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field_unittest.cc +1442 -0
- data/ext/protoc/protobuf/src/google/protobuf/service.cc +46 -0
- data/ext/protoc/protobuf/src/google/protobuf/service.h +291 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops.h +227 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h +325 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_gcc.h +151 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_qnx.h +146 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h +122 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h +137 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_macosx.h +225 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h +313 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_pnacl.h +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_solaris.h +188 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_tsan.h +219 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc +137 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h +293 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc +112 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h +150 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common.cc +395 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common.h +1226 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common_unittest.cc +357 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/hash.h +232 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/map_util.h +771 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once.cc +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once.h +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once_unittest.cc +253 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/platform_macros.h +103 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/shared_ptr.h +470 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stl_util.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.cc +175 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.h +76 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf_unittest.cc +152 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid.cc +536 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid_unittest.cc +40 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.cc +1279 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.h +562 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil_unittest.cc +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.cc +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.h +170 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util.h +138 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util_unittest.cc +130 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits.h +336 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits_unittest.cc +628 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util.cc +3345 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util.h +215 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.cc +1585 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.h +101 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/bad_utf8_string +1 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message_oneof_implemented +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_packed_fields_message +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt +129 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt +129 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/file.cc +194 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/file.h +97 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.cc +255 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.h +102 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/zcgunzip.cc +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/zcgzip.cc +79 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format.cc +1746 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format.h +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format_unittest.cc +1479 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest.proto +861 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_custom_options.proto +393 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_embed_optimize_for.proto +50 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_empty.proto +37 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_enormous_descriptor.proto +1046 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import.proto +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_lite.proto +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public.proto +40 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public_lite.proto +42 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_lite.proto +384 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_lite_imports_nonlite.proto +43 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_mset.proto +83 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_no_generic_services.proto +53 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_optimize_for.proto +66 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.cc +265 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.h +318 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set_unittest.cc +599 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format.cc +1101 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format.h +336 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.cc +471 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.h +661 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite_inl.h +860 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_unittest.cc +1120 -0
- data/ext/protoc/protobuf/src/solaris/libstdc++.la +51 -0
- data/ext/protoc/protobuf/vsprojects/config.h +29 -0
- data/ext/protoc/protobuf/vsprojects/convert2008to2005.sh +20 -0
- data/ext/protoc/protobuf/vsprojects/extract_includes.bat +50 -0
- data/ext/protoc/protobuf/vsprojects/libprotobuf-lite.vcproj +302 -0
- data/ext/protoc/protobuf/vsprojects/libprotobuf.vcproj +470 -0
- data/ext/protoc/protobuf/vsprojects/libprotoc.vcproj +466 -0
- data/ext/protoc/protobuf/vsprojects/lite-test.vcproj +305 -0
- data/ext/protoc/protobuf/vsprojects/protobuf.sln +92 -0
- data/ext/protoc/protobuf/vsprojects/protoc.vcproj +192 -0
- data/ext/protoc/protobuf/vsprojects/readme.txt +114 -0
- data/ext/protoc/protobuf/vsprojects/test_plugin.vcproj +209 -0
- data/ext/protoc/protobuf/vsprojects/tests.vcproj +681 -0
- data/lib/protoc/version.rb +1 -1
- metadata +480 -3
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// Protocol Buffers - Google's data interchange format
|
|
2
|
+
// Copyright 2008 Google Inc. All rights reserved.
|
|
3
|
+
// https://developers.google.com/protocol-buffers/
|
|
4
|
+
//
|
|
5
|
+
// Redistribution and use in source and binary forms, with or without
|
|
6
|
+
// modification, are permitted provided that the following conditions are
|
|
7
|
+
// met:
|
|
8
|
+
//
|
|
9
|
+
// * Redistributions of source code must retain the above copyright
|
|
10
|
+
// notice, this list of conditions and the following disclaimer.
|
|
11
|
+
// * Redistributions in binary form must reproduce the above
|
|
12
|
+
// copyright notice, this list of conditions and the following disclaimer
|
|
13
|
+
// in the documentation and/or other materials provided with the
|
|
14
|
+
// distribution.
|
|
15
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
16
|
+
// contributors may be used to endorse or promote products derived from
|
|
17
|
+
// this software without specific prior written permission.
|
|
18
|
+
//
|
|
19
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
20
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
21
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
22
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
23
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
24
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
25
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
26
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
27
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
28
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
31
|
+
// Author: robinson@google.com (Will Robinson)
|
|
32
|
+
//
|
|
33
|
+
// Generates Python code for a given .proto file.
|
|
34
|
+
|
|
35
|
+
#ifndef GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__
|
|
36
|
+
#define GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__
|
|
37
|
+
|
|
38
|
+
#include <string>
|
|
39
|
+
|
|
40
|
+
#include <google/protobuf/compiler/code_generator.h>
|
|
41
|
+
#include <google/protobuf/stubs/common.h>
|
|
42
|
+
|
|
43
|
+
namespace google {
|
|
44
|
+
namespace protobuf {
|
|
45
|
+
|
|
46
|
+
class Descriptor;
|
|
47
|
+
class EnumDescriptor;
|
|
48
|
+
class EnumValueDescriptor;
|
|
49
|
+
class FieldDescriptor;
|
|
50
|
+
class ServiceDescriptor;
|
|
51
|
+
|
|
52
|
+
namespace io { class Printer; }
|
|
53
|
+
|
|
54
|
+
namespace compiler {
|
|
55
|
+
namespace python {
|
|
56
|
+
|
|
57
|
+
// CodeGenerator implementation for generated Python protocol buffer classes.
|
|
58
|
+
// If you create your own protocol compiler binary and you want it to support
|
|
59
|
+
// Python output, you can do so by registering an instance of this
|
|
60
|
+
// CodeGenerator with the CommandLineInterface in your main() function.
|
|
61
|
+
class LIBPROTOC_EXPORT Generator : public CodeGenerator {
|
|
62
|
+
public:
|
|
63
|
+
Generator();
|
|
64
|
+
virtual ~Generator();
|
|
65
|
+
|
|
66
|
+
// CodeGenerator methods.
|
|
67
|
+
virtual bool Generate(const FileDescriptor* file,
|
|
68
|
+
const string& parameter,
|
|
69
|
+
GeneratorContext* generator_context,
|
|
70
|
+
string* error) const;
|
|
71
|
+
|
|
72
|
+
private:
|
|
73
|
+
void PrintImports() const;
|
|
74
|
+
void PrintFileDescriptor() const;
|
|
75
|
+
void PrintTopLevelEnums() const;
|
|
76
|
+
void PrintAllNestedEnumsInFile() const;
|
|
77
|
+
void PrintNestedEnums(const Descriptor& descriptor) const;
|
|
78
|
+
void PrintEnum(const EnumDescriptor& enum_descriptor) const;
|
|
79
|
+
|
|
80
|
+
void PrintTopLevelExtensions() const;
|
|
81
|
+
|
|
82
|
+
void PrintFieldDescriptor(
|
|
83
|
+
const FieldDescriptor& field, bool is_extension) const;
|
|
84
|
+
void PrintFieldDescriptorsInDescriptor(
|
|
85
|
+
const Descriptor& message_descriptor,
|
|
86
|
+
bool is_extension,
|
|
87
|
+
const string& list_variable_name,
|
|
88
|
+
int (Descriptor::*CountFn)() const,
|
|
89
|
+
const FieldDescriptor* (Descriptor::*GetterFn)(int) const) const;
|
|
90
|
+
void PrintFieldsInDescriptor(const Descriptor& message_descriptor) const;
|
|
91
|
+
void PrintExtensionsInDescriptor(const Descriptor& message_descriptor) const;
|
|
92
|
+
void PrintMessageDescriptors() const;
|
|
93
|
+
void PrintDescriptor(const Descriptor& message_descriptor) const;
|
|
94
|
+
void PrintNestedDescriptors(const Descriptor& containing_descriptor) const;
|
|
95
|
+
|
|
96
|
+
void PrintMessages() const;
|
|
97
|
+
void PrintMessage(const Descriptor& message_descriptor, const string& prefix,
|
|
98
|
+
vector<string>* to_register) const;
|
|
99
|
+
void PrintNestedMessages(const Descriptor& containing_descriptor,
|
|
100
|
+
const string& prefix,
|
|
101
|
+
vector<string>* to_register) const;
|
|
102
|
+
|
|
103
|
+
void FixForeignFieldsInDescriptors() const;
|
|
104
|
+
void FixForeignFieldsInDescriptor(
|
|
105
|
+
const Descriptor& descriptor,
|
|
106
|
+
const Descriptor* containing_descriptor) const;
|
|
107
|
+
void FixForeignFieldsInField(const Descriptor* containing_type,
|
|
108
|
+
const FieldDescriptor& field,
|
|
109
|
+
const string& python_dict_name) const;
|
|
110
|
+
void AddMessageToFileDescriptor(const Descriptor& descriptor) const;
|
|
111
|
+
void AddEnumToFileDescriptor(const EnumDescriptor& descriptor) const;
|
|
112
|
+
void AddExtensionToFileDescriptor(const FieldDescriptor& descriptor) const;
|
|
113
|
+
string FieldReferencingExpression(const Descriptor* containing_type,
|
|
114
|
+
const FieldDescriptor& field,
|
|
115
|
+
const string& python_dict_name) const;
|
|
116
|
+
template <typename DescriptorT>
|
|
117
|
+
void FixContainingTypeInDescriptor(
|
|
118
|
+
const DescriptorT& descriptor,
|
|
119
|
+
const Descriptor* containing_descriptor) const;
|
|
120
|
+
|
|
121
|
+
void FixForeignFieldsInExtensions() const;
|
|
122
|
+
void FixForeignFieldsInExtension(
|
|
123
|
+
const FieldDescriptor& extension_field) const;
|
|
124
|
+
void FixForeignFieldsInNestedExtensions(const Descriptor& descriptor) const;
|
|
125
|
+
|
|
126
|
+
void PrintServices() const;
|
|
127
|
+
void PrintServiceDescriptor(const ServiceDescriptor& descriptor) const;
|
|
128
|
+
void PrintServiceClass(const ServiceDescriptor& descriptor) const;
|
|
129
|
+
void PrintServiceStub(const ServiceDescriptor& descriptor) const;
|
|
130
|
+
|
|
131
|
+
void PrintEnumValueDescriptor(const EnumValueDescriptor& descriptor) const;
|
|
132
|
+
string OptionsValue(const string& class_name,
|
|
133
|
+
const string& serialized_options) const;
|
|
134
|
+
bool GeneratingDescriptorProto() const;
|
|
135
|
+
|
|
136
|
+
template <typename DescriptorT>
|
|
137
|
+
string ModuleLevelDescriptorName(const DescriptorT& descriptor) const;
|
|
138
|
+
string ModuleLevelMessageName(const Descriptor& descriptor) const;
|
|
139
|
+
string ModuleLevelServiceDescriptorName(
|
|
140
|
+
const ServiceDescriptor& descriptor) const;
|
|
141
|
+
|
|
142
|
+
template <typename DescriptorT, typename DescriptorProtoT>
|
|
143
|
+
void PrintSerializedPbInterval(
|
|
144
|
+
const DescriptorT& descriptor, DescriptorProtoT& proto) const;
|
|
145
|
+
|
|
146
|
+
void FixAllDescriptorOptions() const;
|
|
147
|
+
void FixOptionsForField(const FieldDescriptor& field) const;
|
|
148
|
+
void FixOptionsForEnum(const EnumDescriptor& descriptor) const;
|
|
149
|
+
void FixOptionsForMessage(const Descriptor& descriptor) const;
|
|
150
|
+
|
|
151
|
+
// Very coarse-grained lock to ensure that Generate() is reentrant.
|
|
152
|
+
// Guards file_, printer_ and file_descriptor_serialized_.
|
|
153
|
+
mutable Mutex mutex_;
|
|
154
|
+
mutable const FileDescriptor* file_; // Set in Generate(). Under mutex_.
|
|
155
|
+
mutable string file_descriptor_serialized_;
|
|
156
|
+
mutable io::Printer* printer_; // Set in Generate(). Under mutex_.
|
|
157
|
+
|
|
158
|
+
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Generator);
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
} // namespace python
|
|
162
|
+
} // namespace compiler
|
|
163
|
+
} // namespace protobuf
|
|
164
|
+
|
|
165
|
+
} // namespace google
|
|
166
|
+
#endif // GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// Protocol Buffers - Google's data interchange format
|
|
2
|
+
// Copyright 2008 Google Inc. All rights reserved.
|
|
3
|
+
// https://developers.google.com/protocol-buffers/
|
|
4
|
+
//
|
|
5
|
+
// Redistribution and use in source and binary forms, with or without
|
|
6
|
+
// modification, are permitted provided that the following conditions are
|
|
7
|
+
// met:
|
|
8
|
+
//
|
|
9
|
+
// * Redistributions of source code must retain the above copyright
|
|
10
|
+
// notice, this list of conditions and the following disclaimer.
|
|
11
|
+
// * Redistributions in binary form must reproduce the above
|
|
12
|
+
// copyright notice, this list of conditions and the following disclaimer
|
|
13
|
+
// in the documentation and/or other materials provided with the
|
|
14
|
+
// distribution.
|
|
15
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
16
|
+
// contributors may be used to endorse or promote products derived from
|
|
17
|
+
// this software without specific prior written permission.
|
|
18
|
+
//
|
|
19
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
20
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
21
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
22
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
23
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
24
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
25
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
26
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
27
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
28
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
31
|
+
// Author: kenton@google.com (Kenton Varda)
|
|
32
|
+
//
|
|
33
|
+
// TODO(kenton): Share code with the versions of this test in other languages?
|
|
34
|
+
// It seemed like parameterizing it would add more complexity than it is
|
|
35
|
+
// worth.
|
|
36
|
+
|
|
37
|
+
#include <memory>
|
|
38
|
+
|
|
39
|
+
#include <google/protobuf/compiler/python/python_generator.h>
|
|
40
|
+
#include <google/protobuf/compiler/command_line_interface.h>
|
|
41
|
+
#include <google/protobuf/io/zero_copy_stream.h>
|
|
42
|
+
#include <google/protobuf/io/printer.h>
|
|
43
|
+
|
|
44
|
+
#include <google/protobuf/testing/googletest.h>
|
|
45
|
+
#include <gtest/gtest.h>
|
|
46
|
+
#include <google/protobuf/testing/file.h>
|
|
47
|
+
|
|
48
|
+
namespace google {
|
|
49
|
+
namespace protobuf {
|
|
50
|
+
namespace compiler {
|
|
51
|
+
namespace python {
|
|
52
|
+
namespace {
|
|
53
|
+
|
|
54
|
+
class TestGenerator : public CodeGenerator {
|
|
55
|
+
public:
|
|
56
|
+
TestGenerator() {}
|
|
57
|
+
~TestGenerator() {}
|
|
58
|
+
|
|
59
|
+
virtual bool Generate(const FileDescriptor* file,
|
|
60
|
+
const string& parameter,
|
|
61
|
+
GeneratorContext* context,
|
|
62
|
+
string* error) const {
|
|
63
|
+
TryInsert("test_pb2.py", "imports", context);
|
|
64
|
+
TryInsert("test_pb2.py", "module_scope", context);
|
|
65
|
+
TryInsert("test_pb2.py", "class_scope:foo.Bar", context);
|
|
66
|
+
TryInsert("test_pb2.py", "class_scope:foo.Bar.Baz", context);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
void TryInsert(const string& filename, const string& insertion_point,
|
|
71
|
+
GeneratorContext* context) const {
|
|
72
|
+
scoped_ptr<io::ZeroCopyOutputStream> output(
|
|
73
|
+
context->OpenForInsert(filename, insertion_point));
|
|
74
|
+
io::Printer printer(output.get(), '$');
|
|
75
|
+
printer.Print("// inserted $name$\n", "name", insertion_point);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// This test verifies that all the expected insertion points exist. It does
|
|
80
|
+
// not verify that they are correctly-placed; that would require actually
|
|
81
|
+
// compiling the output which is a bit more than I care to do for this test.
|
|
82
|
+
TEST(PythonPluginTest, PluginTest) {
|
|
83
|
+
GOOGLE_CHECK_OK(File::SetContents(TestTempDir() + "/test.proto",
|
|
84
|
+
"syntax = \"proto2\";\n"
|
|
85
|
+
"package foo;\n"
|
|
86
|
+
"message Bar {\n"
|
|
87
|
+
" message Baz {}\n"
|
|
88
|
+
"}\n",
|
|
89
|
+
true));
|
|
90
|
+
|
|
91
|
+
google::protobuf::compiler::CommandLineInterface cli;
|
|
92
|
+
cli.SetInputsAreProtoPathRelative(true);
|
|
93
|
+
|
|
94
|
+
python::Generator python_generator;
|
|
95
|
+
TestGenerator test_generator;
|
|
96
|
+
cli.RegisterGenerator("--python_out", &python_generator, "");
|
|
97
|
+
cli.RegisterGenerator("--test_out", &test_generator, "");
|
|
98
|
+
|
|
99
|
+
string proto_path = "-I" + TestTempDir();
|
|
100
|
+
string python_out = "--python_out=" + TestTempDir();
|
|
101
|
+
string test_out = "--test_out=" + TestTempDir();
|
|
102
|
+
|
|
103
|
+
const char* argv[] = {
|
|
104
|
+
"protoc",
|
|
105
|
+
proto_path.c_str(),
|
|
106
|
+
python_out.c_str(),
|
|
107
|
+
test_out.c_str(),
|
|
108
|
+
"test.proto"
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
EXPECT_EQ(0, cli.Run(5, argv));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
} // namespace
|
|
115
|
+
} // namespace python
|
|
116
|
+
} // namespace compiler
|
|
117
|
+
} // namespace protobuf
|
|
118
|
+
} // namespace google
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
// Protocol Buffers - Google's data interchange format
|
|
2
|
+
// Copyright 2008 Google Inc. All rights reserved.
|
|
3
|
+
// https://developers.google.com/protocol-buffers/
|
|
4
|
+
//
|
|
5
|
+
// Redistribution and use in source and binary forms, with or without
|
|
6
|
+
// modification, are permitted provided that the following conditions are
|
|
7
|
+
// met:
|
|
8
|
+
//
|
|
9
|
+
// * Redistributions of source code must retain the above copyright
|
|
10
|
+
// notice, this list of conditions and the following disclaimer.
|
|
11
|
+
// * Redistributions in binary form must reproduce the above
|
|
12
|
+
// copyright notice, this list of conditions and the following disclaimer
|
|
13
|
+
// in the documentation and/or other materials provided with the
|
|
14
|
+
// distribution.
|
|
15
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
16
|
+
// contributors may be used to endorse or promote products derived from
|
|
17
|
+
// this software without specific prior written permission.
|
|
18
|
+
//
|
|
19
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
20
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
21
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
22
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
23
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
24
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
25
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
26
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
27
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
28
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
31
|
+
// Author: kenton@google.com (Kenton Varda)
|
|
32
|
+
|
|
33
|
+
#include <google/protobuf/compiler/subprocess.h>
|
|
34
|
+
|
|
35
|
+
#include <algorithm>
|
|
36
|
+
#include <iostream>
|
|
37
|
+
|
|
38
|
+
#ifndef _WIN32
|
|
39
|
+
#include <errno.h>
|
|
40
|
+
#include <sys/select.h>
|
|
41
|
+
#include <sys/wait.h>
|
|
42
|
+
#include <signal.h>
|
|
43
|
+
#endif
|
|
44
|
+
|
|
45
|
+
#include <google/protobuf/stubs/common.h>
|
|
46
|
+
#include <google/protobuf/message.h>
|
|
47
|
+
#include <google/protobuf/stubs/substitute.h>
|
|
48
|
+
|
|
49
|
+
namespace google {
|
|
50
|
+
namespace protobuf {
|
|
51
|
+
namespace compiler {
|
|
52
|
+
|
|
53
|
+
#ifdef _WIN32
|
|
54
|
+
|
|
55
|
+
static void CloseHandleOrDie(HANDLE handle) {
|
|
56
|
+
if (!CloseHandle(handle)) {
|
|
57
|
+
GOOGLE_LOG(FATAL) << "CloseHandle: "
|
|
58
|
+
<< Subprocess::Win32ErrorMessage(GetLastError());
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
Subprocess::Subprocess()
|
|
63
|
+
: process_start_error_(ERROR_SUCCESS),
|
|
64
|
+
child_handle_(NULL), child_stdin_(NULL), child_stdout_(NULL) {}
|
|
65
|
+
|
|
66
|
+
Subprocess::~Subprocess() {
|
|
67
|
+
if (child_stdin_ != NULL) {
|
|
68
|
+
CloseHandleOrDie(child_stdin_);
|
|
69
|
+
}
|
|
70
|
+
if (child_stdout_ != NULL) {
|
|
71
|
+
CloseHandleOrDie(child_stdout_);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
void Subprocess::Start(const string& program, SearchMode search_mode) {
|
|
76
|
+
// Create the pipes.
|
|
77
|
+
HANDLE stdin_pipe_read;
|
|
78
|
+
HANDLE stdin_pipe_write;
|
|
79
|
+
HANDLE stdout_pipe_read;
|
|
80
|
+
HANDLE stdout_pipe_write;
|
|
81
|
+
|
|
82
|
+
if (!CreatePipe(&stdin_pipe_read, &stdin_pipe_write, NULL, 0)) {
|
|
83
|
+
GOOGLE_LOG(FATAL) << "CreatePipe: " << Win32ErrorMessage(GetLastError());
|
|
84
|
+
}
|
|
85
|
+
if (!CreatePipe(&stdout_pipe_read, &stdout_pipe_write, NULL, 0)) {
|
|
86
|
+
GOOGLE_LOG(FATAL) << "CreatePipe: " << Win32ErrorMessage(GetLastError());
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Make child side of the pipes inheritable.
|
|
90
|
+
if (!SetHandleInformation(stdin_pipe_read,
|
|
91
|
+
HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) {
|
|
92
|
+
GOOGLE_LOG(FATAL) << "SetHandleInformation: "
|
|
93
|
+
<< Win32ErrorMessage(GetLastError());
|
|
94
|
+
}
|
|
95
|
+
if (!SetHandleInformation(stdout_pipe_write,
|
|
96
|
+
HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) {
|
|
97
|
+
GOOGLE_LOG(FATAL) << "SetHandleInformation: "
|
|
98
|
+
<< Win32ErrorMessage(GetLastError());
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Setup STARTUPINFO to redirect handles.
|
|
102
|
+
STARTUPINFOA startup_info;
|
|
103
|
+
ZeroMemory(&startup_info, sizeof(startup_info));
|
|
104
|
+
startup_info.cb = sizeof(startup_info);
|
|
105
|
+
startup_info.dwFlags = STARTF_USESTDHANDLES;
|
|
106
|
+
startup_info.hStdInput = stdin_pipe_read;
|
|
107
|
+
startup_info.hStdOutput = stdout_pipe_write;
|
|
108
|
+
startup_info.hStdError = GetStdHandle(STD_ERROR_HANDLE);
|
|
109
|
+
|
|
110
|
+
if (startup_info.hStdError == INVALID_HANDLE_VALUE) {
|
|
111
|
+
GOOGLE_LOG(FATAL) << "GetStdHandle: "
|
|
112
|
+
<< Win32ErrorMessage(GetLastError());
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// CreateProcess() mutates its second parameter. WTF?
|
|
116
|
+
char* name_copy = strdup(program.c_str());
|
|
117
|
+
|
|
118
|
+
// Create the process.
|
|
119
|
+
PROCESS_INFORMATION process_info;
|
|
120
|
+
|
|
121
|
+
if (CreateProcessA((search_mode == SEARCH_PATH) ? NULL : program.c_str(),
|
|
122
|
+
(search_mode == SEARCH_PATH) ? name_copy : NULL,
|
|
123
|
+
NULL, // process security attributes
|
|
124
|
+
NULL, // thread security attributes
|
|
125
|
+
TRUE, // inherit handles?
|
|
126
|
+
0, // obscure creation flags
|
|
127
|
+
NULL, // environment (inherit from parent)
|
|
128
|
+
NULL, // current directory (inherit from parent)
|
|
129
|
+
&startup_info,
|
|
130
|
+
&process_info)) {
|
|
131
|
+
child_handle_ = process_info.hProcess;
|
|
132
|
+
CloseHandleOrDie(process_info.hThread);
|
|
133
|
+
child_stdin_ = stdin_pipe_write;
|
|
134
|
+
child_stdout_ = stdout_pipe_read;
|
|
135
|
+
} else {
|
|
136
|
+
process_start_error_ = GetLastError();
|
|
137
|
+
CloseHandleOrDie(stdin_pipe_write);
|
|
138
|
+
CloseHandleOrDie(stdout_pipe_read);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
CloseHandleOrDie(stdin_pipe_read);
|
|
142
|
+
CloseHandleOrDie(stdout_pipe_write);
|
|
143
|
+
free(name_copy);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
bool Subprocess::Communicate(const Message& input, Message* output,
|
|
147
|
+
string* error) {
|
|
148
|
+
if (process_start_error_ != ERROR_SUCCESS) {
|
|
149
|
+
*error = Win32ErrorMessage(process_start_error_);
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
GOOGLE_CHECK(child_handle_ != NULL) << "Must call Start() first.";
|
|
154
|
+
|
|
155
|
+
string input_data = input.SerializeAsString();
|
|
156
|
+
string output_data;
|
|
157
|
+
|
|
158
|
+
int input_pos = 0;
|
|
159
|
+
|
|
160
|
+
while (child_stdout_ != NULL) {
|
|
161
|
+
HANDLE handles[2];
|
|
162
|
+
int handle_count = 0;
|
|
163
|
+
|
|
164
|
+
if (child_stdin_ != NULL) {
|
|
165
|
+
handles[handle_count++] = child_stdin_;
|
|
166
|
+
}
|
|
167
|
+
if (child_stdout_ != NULL) {
|
|
168
|
+
handles[handle_count++] = child_stdout_;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
DWORD wait_result =
|
|
172
|
+
WaitForMultipleObjects(handle_count, handles, FALSE, INFINITE);
|
|
173
|
+
|
|
174
|
+
HANDLE signaled_handle;
|
|
175
|
+
if (wait_result >= WAIT_OBJECT_0 &&
|
|
176
|
+
wait_result < WAIT_OBJECT_0 + handle_count) {
|
|
177
|
+
signaled_handle = handles[wait_result - WAIT_OBJECT_0];
|
|
178
|
+
} else if (wait_result == WAIT_FAILED) {
|
|
179
|
+
GOOGLE_LOG(FATAL) << "WaitForMultipleObjects: "
|
|
180
|
+
<< Win32ErrorMessage(GetLastError());
|
|
181
|
+
} else {
|
|
182
|
+
GOOGLE_LOG(FATAL) << "WaitForMultipleObjects: Unexpected return code: "
|
|
183
|
+
<< wait_result;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (signaled_handle == child_stdin_) {
|
|
187
|
+
DWORD n;
|
|
188
|
+
if (!WriteFile(child_stdin_,
|
|
189
|
+
input_data.data() + input_pos,
|
|
190
|
+
input_data.size() - input_pos,
|
|
191
|
+
&n, NULL)) {
|
|
192
|
+
// Child closed pipe. Presumably it will report an error later.
|
|
193
|
+
// Pretend we're done for now.
|
|
194
|
+
input_pos = input_data.size();
|
|
195
|
+
} else {
|
|
196
|
+
input_pos += n;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (input_pos == input_data.size()) {
|
|
200
|
+
// We're done writing. Close.
|
|
201
|
+
CloseHandleOrDie(child_stdin_);
|
|
202
|
+
child_stdin_ = NULL;
|
|
203
|
+
}
|
|
204
|
+
} else if (signaled_handle == child_stdout_) {
|
|
205
|
+
char buffer[4096];
|
|
206
|
+
DWORD n;
|
|
207
|
+
|
|
208
|
+
if (!ReadFile(child_stdout_, buffer, sizeof(buffer), &n, NULL)) {
|
|
209
|
+
// We're done reading. Close.
|
|
210
|
+
CloseHandleOrDie(child_stdout_);
|
|
211
|
+
child_stdout_ = NULL;
|
|
212
|
+
} else {
|
|
213
|
+
output_data.append(buffer, n);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (child_stdin_ != NULL) {
|
|
219
|
+
// Child did not finish reading input before it closed the output.
|
|
220
|
+
// Presumably it exited with an error.
|
|
221
|
+
CloseHandleOrDie(child_stdin_);
|
|
222
|
+
child_stdin_ = NULL;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
DWORD wait_result = WaitForSingleObject(child_handle_, INFINITE);
|
|
226
|
+
|
|
227
|
+
if (wait_result == WAIT_FAILED) {
|
|
228
|
+
GOOGLE_LOG(FATAL) << "WaitForSingleObject: "
|
|
229
|
+
<< Win32ErrorMessage(GetLastError());
|
|
230
|
+
} else if (wait_result != WAIT_OBJECT_0) {
|
|
231
|
+
GOOGLE_LOG(FATAL) << "WaitForSingleObject: Unexpected return code: "
|
|
232
|
+
<< wait_result;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
DWORD exit_code;
|
|
236
|
+
if (!GetExitCodeProcess(child_handle_, &exit_code)) {
|
|
237
|
+
GOOGLE_LOG(FATAL) << "GetExitCodeProcess: "
|
|
238
|
+
<< Win32ErrorMessage(GetLastError());
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
CloseHandleOrDie(child_handle_);
|
|
242
|
+
child_handle_ = NULL;
|
|
243
|
+
|
|
244
|
+
if (exit_code != 0) {
|
|
245
|
+
*error = strings::Substitute(
|
|
246
|
+
"Plugin failed with status code $0.", exit_code);
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (!output->ParseFromString(output_data)) {
|
|
251
|
+
*error = "Plugin output is unparseable: " + CEscape(output_data);
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
string Subprocess::Win32ErrorMessage(DWORD error_code) {
|
|
259
|
+
char* message;
|
|
260
|
+
|
|
261
|
+
// WTF?
|
|
262
|
+
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
263
|
+
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
264
|
+
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
265
|
+
NULL, error_code, 0,
|
|
266
|
+
(LPTSTR)&message, // NOT A BUG!
|
|
267
|
+
0, NULL);
|
|
268
|
+
|
|
269
|
+
string result = message;
|
|
270
|
+
LocalFree(message);
|
|
271
|
+
return result;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// ===================================================================
|
|
275
|
+
|
|
276
|
+
#else // _WIN32
|
|
277
|
+
|
|
278
|
+
Subprocess::Subprocess()
|
|
279
|
+
: child_pid_(-1), child_stdin_(-1), child_stdout_(-1) {}
|
|
280
|
+
|
|
281
|
+
Subprocess::~Subprocess() {
|
|
282
|
+
if (child_stdin_ != -1) {
|
|
283
|
+
close(child_stdin_);
|
|
284
|
+
}
|
|
285
|
+
if (child_stdout_ != -1) {
|
|
286
|
+
close(child_stdout_);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
void Subprocess::Start(const string& program, SearchMode search_mode) {
|
|
291
|
+
// Note that we assume that there are no other threads, thus we don't have to
|
|
292
|
+
// do crazy stuff like using socket pairs or avoiding libc locks.
|
|
293
|
+
|
|
294
|
+
// [0] is read end, [1] is write end.
|
|
295
|
+
int stdin_pipe[2];
|
|
296
|
+
int stdout_pipe[2];
|
|
297
|
+
|
|
298
|
+
GOOGLE_CHECK(pipe(stdin_pipe) != -1);
|
|
299
|
+
GOOGLE_CHECK(pipe(stdout_pipe) != -1);
|
|
300
|
+
|
|
301
|
+
char* argv[2] = { strdup(program.c_str()), NULL };
|
|
302
|
+
|
|
303
|
+
child_pid_ = fork();
|
|
304
|
+
if (child_pid_ == -1) {
|
|
305
|
+
GOOGLE_LOG(FATAL) << "fork: " << strerror(errno);
|
|
306
|
+
} else if (child_pid_ == 0) {
|
|
307
|
+
// We are the child.
|
|
308
|
+
dup2(stdin_pipe[0], STDIN_FILENO);
|
|
309
|
+
dup2(stdout_pipe[1], STDOUT_FILENO);
|
|
310
|
+
|
|
311
|
+
close(stdin_pipe[0]);
|
|
312
|
+
close(stdin_pipe[1]);
|
|
313
|
+
close(stdout_pipe[0]);
|
|
314
|
+
close(stdout_pipe[1]);
|
|
315
|
+
|
|
316
|
+
switch (search_mode) {
|
|
317
|
+
case SEARCH_PATH:
|
|
318
|
+
execvp(argv[0], argv);
|
|
319
|
+
break;
|
|
320
|
+
case EXACT_NAME:
|
|
321
|
+
execv(argv[0], argv);
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Write directly to STDERR_FILENO to avoid stdio code paths that may do
|
|
326
|
+
// stuff that is unsafe here.
|
|
327
|
+
int ignored;
|
|
328
|
+
ignored = write(STDERR_FILENO, argv[0], strlen(argv[0]));
|
|
329
|
+
const char* message = ": program not found or is not executable\n";
|
|
330
|
+
ignored = write(STDERR_FILENO, message, strlen(message));
|
|
331
|
+
(void) ignored;
|
|
332
|
+
|
|
333
|
+
// Must use _exit() rather than exit() to avoid flushing output buffers
|
|
334
|
+
// that will also be flushed by the parent.
|
|
335
|
+
_exit(1);
|
|
336
|
+
} else {
|
|
337
|
+
free(argv[0]);
|
|
338
|
+
|
|
339
|
+
close(stdin_pipe[0]);
|
|
340
|
+
close(stdout_pipe[1]);
|
|
341
|
+
|
|
342
|
+
child_stdin_ = stdin_pipe[1];
|
|
343
|
+
child_stdout_ = stdout_pipe[0];
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
bool Subprocess::Communicate(const Message& input, Message* output,
|
|
348
|
+
string* error) {
|
|
349
|
+
|
|
350
|
+
GOOGLE_CHECK_NE(child_stdin_, -1) << "Must call Start() first.";
|
|
351
|
+
|
|
352
|
+
// The "sighandler_t" typedef is GNU-specific, so define our own.
|
|
353
|
+
typedef void SignalHandler(int);
|
|
354
|
+
|
|
355
|
+
// Make sure SIGPIPE is disabled so that if the child dies it doesn't kill us.
|
|
356
|
+
SignalHandler* old_pipe_handler = signal(SIGPIPE, SIG_IGN);
|
|
357
|
+
|
|
358
|
+
string input_data = input.SerializeAsString();
|
|
359
|
+
string output_data;
|
|
360
|
+
|
|
361
|
+
int input_pos = 0;
|
|
362
|
+
int max_fd = max(child_stdin_, child_stdout_);
|
|
363
|
+
|
|
364
|
+
while (child_stdout_ != -1) {
|
|
365
|
+
fd_set read_fds;
|
|
366
|
+
fd_set write_fds;
|
|
367
|
+
FD_ZERO(&read_fds);
|
|
368
|
+
FD_ZERO(&write_fds);
|
|
369
|
+
if (child_stdout_ != -1) {
|
|
370
|
+
FD_SET(child_stdout_, &read_fds);
|
|
371
|
+
}
|
|
372
|
+
if (child_stdin_ != -1) {
|
|
373
|
+
FD_SET(child_stdin_, &write_fds);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
if (select(max_fd + 1, &read_fds, &write_fds, NULL, NULL) < 0) {
|
|
377
|
+
if (errno == EINTR) {
|
|
378
|
+
// Interrupted by signal. Try again.
|
|
379
|
+
continue;
|
|
380
|
+
} else {
|
|
381
|
+
GOOGLE_LOG(FATAL) << "select: " << strerror(errno);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
if (child_stdin_ != -1 && FD_ISSET(child_stdin_, &write_fds)) {
|
|
386
|
+
int n = write(child_stdin_, input_data.data() + input_pos,
|
|
387
|
+
input_data.size() - input_pos);
|
|
388
|
+
if (n < 0) {
|
|
389
|
+
// Child closed pipe. Presumably it will report an error later.
|
|
390
|
+
// Pretend we're done for now.
|
|
391
|
+
input_pos = input_data.size();
|
|
392
|
+
} else {
|
|
393
|
+
input_pos += n;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
if (input_pos == input_data.size()) {
|
|
397
|
+
// We're done writing. Close.
|
|
398
|
+
close(child_stdin_);
|
|
399
|
+
child_stdin_ = -1;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
if (child_stdout_ != -1 && FD_ISSET(child_stdout_, &read_fds)) {
|
|
404
|
+
char buffer[4096];
|
|
405
|
+
int n = read(child_stdout_, buffer, sizeof(buffer));
|
|
406
|
+
|
|
407
|
+
if (n > 0) {
|
|
408
|
+
output_data.append(buffer, n);
|
|
409
|
+
} else {
|
|
410
|
+
// We're done reading. Close.
|
|
411
|
+
close(child_stdout_);
|
|
412
|
+
child_stdout_ = -1;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
if (child_stdin_ != -1) {
|
|
418
|
+
// Child did not finish reading input before it closed the output.
|
|
419
|
+
// Presumably it exited with an error.
|
|
420
|
+
close(child_stdin_);
|
|
421
|
+
child_stdin_ = -1;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
int status;
|
|
425
|
+
while (waitpid(child_pid_, &status, 0) == -1) {
|
|
426
|
+
if (errno != EINTR) {
|
|
427
|
+
GOOGLE_LOG(FATAL) << "waitpid: " << strerror(errno);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Restore SIGPIPE handling.
|
|
432
|
+
signal(SIGPIPE, old_pipe_handler);
|
|
433
|
+
|
|
434
|
+
if (WIFEXITED(status)) {
|
|
435
|
+
if (WEXITSTATUS(status) != 0) {
|
|
436
|
+
int error_code = WEXITSTATUS(status);
|
|
437
|
+
*error = strings::Substitute(
|
|
438
|
+
"Plugin failed with status code $0.", error_code);
|
|
439
|
+
return false;
|
|
440
|
+
}
|
|
441
|
+
} else if (WIFSIGNALED(status)) {
|
|
442
|
+
int signal = WTERMSIG(status);
|
|
443
|
+
*error = strings::Substitute(
|
|
444
|
+
"Plugin killed by signal $0.", signal);
|
|
445
|
+
return false;
|
|
446
|
+
} else {
|
|
447
|
+
*error = "Neither WEXITSTATUS nor WTERMSIG is true?";
|
|
448
|
+
return false;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
if (!output->ParseFromString(output_data)) {
|
|
452
|
+
*error = "Plugin output is unparseable: " + CEscape(output_data);
|
|
453
|
+
return false;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
return true;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
#endif // !_WIN32
|
|
460
|
+
|
|
461
|
+
} // namespace compiler
|
|
462
|
+
} // namespace protobuf
|
|
463
|
+
} // namespace google
|