Name: Protocol Buffers Short Name: protobuf URL: https://github.com/google/protobuf License: BSD License File: LICENSE Version: 3.0.0-beta-3 Revision: 3470b6895aa659b7559ed678e029a5338e535f14 Security Critical: yes Steps used to create the current version: 1. Pull the release from https://github.com/google/protobuf/releases 2. Add build files (BUILD.gn, proto_library.gni, protobuf.gyp, protobuf_lite.gypi, protobuf_nacl.gyp). Be sure to update the list of source files, as additional .cc files and headers might have been added -- you need to find the transitive closure of include files required by targets. Other things to care about are defines required by protobuf on various platforms, warnings generated by compilers, and new dependencies introduced. 3. Get open-source library six.py from https://pypi.python.org/pypi/six/ and add it to protobuf/third_party/six/six.py. 4. Apply patches in patches/ (see the description below): $ for patch in patches/*; do patch -s -p1 < $patch; done For future releases, it will be worth looking into which patches still need to be applied. 5. Generate descriptor_pb2.py using something like the following steps. Make sure you've regenerated your buildfiles and will build protoc from the newly-modified sources above. $ cd $SRC_DIR $ ninja -C out/Debug protoc $ cd third_party/protobuf/src $ ../../../out/Debug/protoc --python_out=../python google/protobuf/descriptor.proto 6. Add an __init__.py to protobuf/ that adds third_party/six/ to Python path. 7. Update README.chromium. Description of the patches: - 0001-ignore-option-retain-unknown-fields.patch Previous versions of protobuf in Chromium carried a local patch that retained unknown fields in protobuf_lite mode. It was enabled by setting option retain_unknown_fields = true in .proto file. Now that it is enabled by default, this option is no longer recognized by protobuf, and so I had to patch it so that I don't have to fix all .proto files in Chromium in a single CL. I plan to remove those occurences, and then this patch will no longer be necessary. - 0003-remove-static-initializers.patch This patch removes all static initializers from Chromium. The change in Status class is not completely compatible with upstream, but it's compatible enough to work in Chromium, which doesn't use this functionality yet. The work on upstreaming the removal of static initializers is in progress: https://github.com/google/protobuf/issues/1404 - 0004-fix-integer-types-and-shared-library-exports.patch This patch makes protobuf int64 to be int64_t (as opposed to long long in upstream), and similarly for other integer types. It also allows exporting protobuf symbols in Linux .so libraries, so that protobuf can be built as a component (see http://crrev.com/179806). - 0005-fix-include-js-generator.protobuf During merge with internal branch, the <> in one of the #includes were accidentally replaced with "", which results in a failure in checkdeps. Fixed in https://github.com/google/protobuf/pull/1547. - 0007-uninline_googleonce.patch - 0008-uninline_get_empty_string.patch - 0009-uninline-arenastring.patch - 0010-uninline-generated-code.patch These patches uninline some functions, resulting in a significant reduction (somewhere between 500 KB and 1 MB) of binary size. - 0011-libprotobuf_export.patch During merge with internal branch, the dll export attribute was accidentally removed in C++11 mode. Fixed in https://github.com/google/protobuf/pull/1549