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:

- 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
