protobuf/protoc-artifacts
Paul Yang 7f3e237071 Merge 3.2.x branch into master (#2648)
* Down-integrate internal changes to github.

* Update conformance test failure list.

* Explicitly import used class in nano test to avoid random test fail.

* Update _GNUC_VER to use the correct implementation of atomic operation
on Mac.

* maps_test.js: check whether Symbol is defined before using it (#2524)

Symbol is not yet available on older versions of Node.js and so this
test fails with them. This change just directly checks whether Symbol is
available before we try to use it.

* Added well_known_types_embed.cc to CLEANFILES so that it gets cleaned up

* Updated Makefile.am to fix out-of-tree builds

* Added Bazel genrule for generating well_known_types_embed.cc

In pull request #2517 I made this change for the CMake and autotools
builds but forgot to do it for the Bazel build.

* Update _GNUC_VER to use the correct implementation of atomic operation on Mac.

* Add new js file in extra dist.

* Bump version number to 3.2.0

* Fixed issue with autoloading - Invalid paths (#2538)

* PHP fix int64 decoding (#2516)

* fix int64 decoding

* fix int64 decoding + tests

* Fix int64 decoding on 32-bit machines.

* Fix warning in compiler/js/embed.cc

embed.cc: In function ‘std::string CEscape(const string&)’:
embed.cc:51:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < str.size(); ++i) {
                                ^

* Fix include in auto-generated well_known_types_embed.cc

Restore include style fix (e3da722) that has been trampled by
auto-generation of well_known_types_embed.cc

* Fixed cross compilations with the Autotools build

Pull request #2517 caused cross compilations to start failing, because
the js_embed binary was being built to run on the target platform
instead of on the build machine. This change updates the Autotools build
to use the AX_PROG_CXX_FOR_BUILD macro to find a suitable compiler for
the build machine and always use that when building js_embed.

* Minor fix for autocreated object repeated fields and maps.

- If setting/clearing a repeated field/map that was objects, check the class
  before checking the autocreator.
- Just to be paranoid, don’t mutate within copy/mutableCopy for the autocreated
  classes to ensure there is less chance of issues if someone does something
  really crazy threading wise.
- Some more tests for the internal AutocreatedArray/AutocreatedDictionary
  classes to ensure things are working as expected.
- Add Xcode 8.2 to the full_mac_build.sh supported list.

* Fix generation of extending nested messages in JavaScript (#2439)

* Fix generation of extending nested messages in JavaScript

* Added missing test8.proto to build

* Fix generated code when there is no namespace but there is enum definition.

* Decoding unknown field should succeed.

* Add embed.cc in src/Makefile.am to fix dist check.

* Fixed "make distcheck" for the Autotools build

To make the test pass I needed to fix out-of-tree builds and update
EXTRA_DIST and CLEANFILES.

* Remove redundent embed.cc from src/Makefile.am

* Update version number to 3.2.0-rc.1 (#2578)

* Change protoc-artifacts version to 3.2.0-rc.1

* Update version number to 3.2.0rc2

* Update change logs for 3.2.0 release.

* Update php README

* Update upb, fixes some bugs (including a hash table problem). (#2611)

* Update upb, fixes some bugs (including a hash table problem).

* Ruby: added a test for the previous hash table corruption.

Verified that this triggers the bug in the currently released
version.

* Ruby: bugfix for SEGV.

* Ruby: removed old code for dup'ing defs.

* Reverting deployment target to 7.0 (#2618)

The Protobuf library doesn’t require the 7.1 deployment target so
reverting it back to 7.0

* Fix typo that breaks builds on big-endian (#2632)

* Bump version number to 3.2.0
2017-01-31 09:17:32 -08:00
..
build-protoc.sh Fix build protoc script for windows 2016-07-28 19:07:54 +00:00
build-zip.sh Fix the build-zip.sh to add .exe for win packages. 2016-07-29 11:44:05 -07:00
Dockerfile Fix maven path. 2016-07-23 19:43:03 -07:00
pom.xml Merge 3.2.x branch into master (#2648) 2017-01-31 09:17:32 -08:00
README.md Add a script to build protoc zip packages. 2016-07-25 15:01:38 -07:00

Build scripts that publish pre-compiled protoc artifacts

protoc is the compiler for .proto files. It generates language bindings for the messages and/or RPC services from .proto files.

Because protoc is a native executable, the scripts under this directory build and publish a protoc executable (a.k.a. artifact) to Maven repositories. The artifact can be used by build automation tools so that users would not need to compile and install protoc for their systems.

Versioning

The version of the protoc artifact must be the same as the version of the Protobuf project.

Artifact name

The name of a published protoc artifact is in the following format: protoc-<version>-<os>-<arch>.exe, e.g., protoc-3.0.0-alpha-3-windows-x86_64.exe.

System requirement

Install Apache Maven if you don't have it.

The scripts only work under Unix-like environments, e.g., Linux, MacOSX, and Cygwin or MinGW for Windows. Please see README.md of the Protobuf project for how to set up the build environment.

Building from a freshly checked-out source

If you just checked out the Protobuf source from github, you need to generate the configure script.

Under the protobuf project directory:

$ ./autogen.sh && ./configure && make

To install artifacts locally

The following command will install the protoc artifact to your local Maven repository.

$ mvn install

Cross-compilation

The Maven script will try to detect the OS and the architecture from Java system properties. It's possible to build a protoc binary for an architecture that is different from what Java has detected, as long as you have the proper compilers installed.

You can override the Maven properties os.detected.name and os.detected.arch to force the script to generate binaries for a specific OS and/or architecture. Valid values are defined as the return values of normalizeOs() and normalizeArch() of Detector from os-maven-plugin. Frequently used values are:

  • os.detected.name: linux, osx, windows.
  • os.detected.arch: x86_32, x86_64

For example, MinGW32 only ships with 32-bit compilers, but you can still build 32-bit protoc under 64-bit Windows, with the following command:

$ mvn install -Dos.detected.arch=x86_32

To push artifacts to Maven Central

Before you can upload artifacts to Maven Central repository, make sure you have read this page on how to configure GPG and Sonatype account.

You need to perform the deployment for every platform that you want to support. DO NOT close the staging repository until you have done the deployment for all platforms. Currently the following platforms are supported:

  • Linux (x86_32 and x86_64)
  • Windows (x86_32 and x86_64) with
  • Cygwin64 with MinGW compilers (x86_64)
  • MSYS with MinGW32 (x86_32)
  • MacOSX (x86_32 and x86_64)

As for MSYS2/MinGW64 for Windows: protoc will build, but it insists on adding a dependency of libwinpthread-1.dll, which isn't shipped with Windows.

Use the following command to deploy artifacts for the host platform to a staging repository.

$ mvn clean deploy -P release

It creates a new staging repository. Go to https://oss.sonatype.org/#stagingRepositories and find the repository, usually in the name like comgoogle-123.

You will want to run this command on a different platform. Remember, in subsequent deployments you will need to provide the repository name that you have found in the first deployment so that all artifacts go to the same repository:

$ mvn clean deploy -P release -Dstaging.repository=comgoogle-123

A 32-bit artifact can be deployed from a 64-bit host with -Dos.detected.arch=x86_32

When you have done deployment for all platforms, go to https://oss.sonatype.org/#stagingRepositories, verify that the staging repository has all the binaries, close and release this repository.

Upload zip packages to github release page.

After uploading protoc artifacts to Maven Central repository, run the build-zip.sh script to bulid zip packages for these protoc binaries and upload these zip packages to the download section of the github release. For example:

$ ./build-zip.sh 3.0.0-beta-4

The above command will create 5 zip files:

dist/protoc-3.0.0-beta-4-win32.zip
dist/protoc-3.0.0-beta-4-osx-x86_32.zip
dist/protoc-3.0.0-beta-4-osx-x86_64.zip
dist/protoc-3.0.0-beta-4-linux-x86_32.zip
dist/protoc-3.0.0-beta-4-linux-x86_64.zip

Before running the script, make sure the artifacts are accessible from: http://repo1.maven.org/maven2/com/google/protobuf/protoc/

Tips for deploying on Linux

We build on Centos 6.6 to provide a good compatibility for not very new systems. We have provided a Dockerfile under this directory to build the environment. It has been tested with Docker 1.6.1.

To build a image:

$ docker build -t protoc-artifacts .

To run the image:

$ docker run -it --rm=true protoc-artifacts

The Protobuf repository has been cloned into /protobuf.

Tips for deploying on Windows

Under Windows the following error may occur: gpg: cannot open tty `no tty': No such file or directory. This can be fixed by configuring gpg through an active profile in .m2\settings.xml where also the Sonatype password is stored:

<settings>
  <servers>
    <server>
      <id>sonatype-nexus-staging</id>
      <username>[username]</username>
      <password>[password]</password>
    </server>
  </servers>
  <profiles>
    <profile>
      <id>gpg</id>
      <properties>
        <gpg.executable>gpg</gpg.executable>
        <gpg.passphrase>[password]</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>gpg</activeProfile>
  </activeProfiles>
</settings>

Tested build environments

We have successfully built artifacts on the following environments:

  • Linux x86_32 and x86_64:
  • Centos 6.6 (within Docker 1.6.1)
  • Ubuntu 14.04.2 64-bit
  • Windows x86_32: MSYS with mingw32-gcc-g++ 4.8.1-4 on Windows 7 64-bit
  • Windows x86_64: Cygwin64 with mingw64-x86_64-gcc-g++ 4.8.3-1 on Windows 7 64-bit
  • Mac OS X x86_32 and x86_64: Mac OS X 10.9.5