Commit Graph

7753 Commits

Author SHA1 Message Date
Thomas Van Lenten
9c27f6a479 Add cast to avoid warning on Xcode 12. 2020-10-21 15:42:09 -04:00
Joshua Haberman
de371235c9 Sync from Piper @338284531
PROTOBUF_SYNC_PIPER
2020-10-21 10:04:14 -07:00
Joshua Haberman
820d1ca5af Merge tag 'refs/tags/sync-piper' into sync-stage 2020-10-21 10:04:14 -07:00
Joshua Haberman
8ea38263ec Put NDEBUG in upb, not in CFLAGS. 2020-10-15 11:22:08 -07:00
Joshua Haberman
e1b42ab946 Disable assertions for release build. 2020-10-15 10:58:11 -07:00
Joshua Haberman
4936abe813 Fixed bug with oneofs in JSON decoding. 2020-10-15 10:29:09 -07:00
Joshua Haberman
d140b1cdce Optimizations for loading of descriptors in PHP:
1. Eliminate hex2bin() call by putting binary data directly into PHP
   strings.
2. upb optimizations, including a new hash function.
2020-10-14 21:46:42 -07:00
Joshua Haberman
2187eb0448 Updated PHP generator to output raw binary strings instead of requiring hex2bin() at runtime. 2020-10-14 21:23:29 -07:00
RPG3D
ce66f6047d Update libprotobuf.cmake 2020-10-13 15:15:08 -07:00
RPG3D
6aaa40f2a9 Update libprotobuf.cmake
link log library on Android
2020-10-13 15:15:08 -07:00
RPG3D
6eedd1a519 Update libprotobuf-lite.cmake
link log library on Android
2020-10-13 15:15:08 -07:00
Misha Seltzer
7daf0aa7b0 Removed the unnecessary setuptools package dependency for Python package.
The setuptools package was added to allow definition of namespaces using
the now outdated (and discouraged from use) pkg_resources-style.

The code here, for a long while now, uses a try/except (`ImportError`)
protection around the setuptools code, and falls back to the more
encoraged pkgutil-style.

Removing this library won't affect any current workflow, and in the case
of setuptools not found, it'll actually use a more modern (and
encouraged) flow.
2020-10-12 17:27:33 -07:00
Daniel Joos
c8f76331ab
Adds a CMake option to build libprotoc separately (#7949)
This exposes the variable `protobuf_BUILD_LIBPROTOC` as CMake option to be able to build libprotoc without building the protoc binary.
2020-10-09 15:54:39 -07:00
Paul Yang
4eea2b00a3
Remove php 5 tests on mac (#7956) 2020-10-09 15:53:12 -07:00
Paul Yang
9ccde30967
Add cmake and protoc to mergeable config (#7955) 2020-10-09 15:45:46 -07:00
Paul Yang
0a648daaca
Use the https address for git clone (#7951)
The previous git address failed for no access
2020-10-08 14:56:27 -07:00
Paul Yang
7ab0be202d
Merge pull request #7952 from TeBoring/3.13.x-merge
Merge 3.13.x into master
2020-10-08 14:09:03 -07:00
Bo Yang
37e69bcddf Merge branch '3.13.x' 2020-10-08 13:32:41 -07:00
Paul Yang
d1eca4e4b4
Update version number to 3.13.0.1 for php (#7950) 2020-10-08 11:17:30 -07:00
Joshua Haberman
8308aa0c31 Properly terminate method array. 2020-10-06 14:18:21 -07:00
Joshua Haberman
5a98ff98d7 Create a separate InternalDescriptorPool method to see if that fixes preloading. 2020-10-06 10:57:33 -07:00
Joshua Haberman
e62cf76b94 Added missing base classes. 2020-10-05 22:50:15 -07:00
Joshua Haberman
05644f0313 Revert upb changes to minimize changes as we evaluate performance. 2020-10-05 22:31:50 -07:00
Joshua Haberman
ec4b194608 Regenerated protos with new script. 2020-10-05 22:27:56 -07:00
Joshua Haberman
cfc0c2b5e0 Passes all tests. 2020-10-05 22:24:34 -07:00
David L. Jones
f5a3b92cf7
Update default dependency for gtest. (#7907)
The gtest source was changed in #7237 on an opt-in basis, and has been
released since 3.12.0. The comments state that the default should change
in 3.13.0, but that didn't quite happen.

This change does flip the default, and updates comments to say 3.14.0.
2020-10-02 20:10:51 -07:00
David L. Jones
ad29d402c4
Enhance documentation for generate_py_protobufs. (#7937)
This change updates the README.md to describe the order of resolution
between `options['generate_py_protobufs']`, `--protoc`, and the `PROTOC`
env var.

Since the `setup.py` script is not the main way to find docs, this change
deletes the parts of the docstring that are redundant with `README.md`.
2020-10-02 13:36:49 -07:00
Joshua Haberman
a93d840881 WIP. 2020-10-01 23:17:10 -07:00
David L. Jones
344f28d4a2
Allow generate_py_protobufs to find a custom protoc (#7936)
Currently, the logic in `generate_py_protobufs` cannot find a custom `protoc` (even though it's supposed to be possible). Fixes:

1. Mark the `--protoc` flag as accepting an argument.
2. If the `--protoc` flag was not passed, try finding `PROTOC` in the environment.
3. (Existing behavior) Otherwise, fall back to `spawn.find_executable`.

Hat tip to @bobhancock for uncovering the problem(s).
2020-10-01 17:17:55 -07:00
David L. Jones
54bfa174e7
Mark some Bazel targets as "manual." (#7932)
The Python C++ extension targets are not used unless
`--@:use_fast_cpp_protos=true`, and may not even be able to build
if the Python headers are missing (note that
`//util/python:python_headers`, bound to `@python_headers//` in
`//:WORKSPACE`, is not currently sufficient). This change adds the
`"manual"` tag to these targets, so that they do not cause
`bazel test ...` to fail when Python headers are missing. Without
the manual tag, the targets are always selected, even if
`--@:use_fast_cpp_protos=false`.

The `:cc_proto_blacklist_test` target is metastable, depending on
whether the `--proto_toolchain_for_cc=` flag names a target with
or without the `@com_google_protobuf//` prefix. We use the correct
prefix for Bazel's default in `kokoro/linux/bazel/build.sh`, but
the `bazel test :cc_proto_blacklist_test` (with or without `//`)
fails consistently. Hopefully, this will be fixed when
bazelbuild/bazel#10590 is addressed.
2020-10-01 11:13:44 -07:00
David L. Jones
b774da0d42
Change Python kokoro configs to test only their specified version. (#7927)
Using non-versioned scripts for `build_file` means every Python version is
tested (under Tox), and this is multiplied by each Python version running Tox.

For example, when the `python38` config is used to run Tox, the
Tox layer runs on Python 3.8. This then tests all of the Python versions
individually, including, for example, python27 tests.

This change fixes the `build_file` paths to point to the same-pathed build
script. For example, `kokoro/linux/python27/presubmit.cfg` now uses
`kokoro/linux/python27/build.sh`.

Some additional fixes:

*  Use `python -m tox` in tests.sh instead of just `tox`. This helps non-site
   installations of tox, where the `tox` script may not be on `$PATH`.
*  Ensure tox (and other Python build-related packages) are available in
   Python testing images. (New images have been pushed.)
*  Disable `--warnings_as_errors` due to deprecated function.
*  Remove apt lists per [Docker best practices][1].

[1]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
2020-09-30 15:56:17 -07:00
Joshua Haberman
f1256df893 Created Options struct for PHP codegen options. 2020-09-29 16:43:38 -07:00
Joshua Haberman
b414077041 Added an anonymous namespace and removed unused code. 2020-09-29 15:57:45 -07:00
Joshua Haberman
a0eef68bbd Regenerated well-known types and moved hand-written messages into base classes. 2020-09-29 15:47:47 -07:00
Vlad Vesa
d16bf914bc Fix: gcc 9 -Warray-bounds warnings about memset() in generated code 2020-09-29 14:58:28 -07:00
Adam Cozzette
3d8943fea9
Work around Codespell false positive (#7924)
The Codespell checker is saying we should replace "files'" with
"file's", but this is not a real issue since the single-quote on the end
is being used as a quote and not an apostrophe. Let's tell Codespell to
ignore this.
2020-09-28 18:35:23 -07:00
Joshua Haberman
d90f3b8b17 Fixed build failure in conformance tests. 2020-09-28 14:40:09 -07:00
Joshua Haberman
a633ad452d Ran update_file_lists.sh to pick up arenastring.cc. 2020-09-28 12:19:39 -07:00
Joshua Haberman
2181e8cb3f Fixed undeclared variable errors. 2020-09-28 12:04:15 -07:00
Joshua Haberman
0eb317c36d Updated Changelog. 2020-09-28 11:55:27 -07:00
Joshua Haberman
aefc1e7670 Merge tag 'refs/tags/sync-piper' into sync-stage
# Conflicts:
#	conformance/failure_list_js.txt
#	src/google/protobuf/generated_message_reflection.h
2020-09-28 11:55:10 -07:00
Joshua Haberman
38d6de1eef Sync from Piper @334206209
PROTOBUF_SYNC_PIPER
2020-09-28 11:54:54 -07:00
Robin Linden
40f5b0b30f Fix undef warning when building w/ clang or gcc on Windows 2020-09-28 11:15:17 -07:00
Robert Yokota
300dfcc5bf Reserve 1088 for Confluent Schema Registry 2020-09-25 11:12:03 -07:00
David L. Jones
02955622cc
[bazel/py] Omit google/__init__.py from the Protobuf runtime. (#7908)
Since `google` is a Python namespace package, the google/__init__.py
file should be omitted to avoid collisions. For example, its presence
may cause other Pip packages in the google namespace not to be found.

This change narrows which __init__.py files are included in the
`//:protobuf_runtime` target to include only those under
`google/protobuf`. It also moves their canonical inclusion to the
internal `//:python_srcs` rule, eliminating the dual specification in
`python_protobuf.extra_srcs`.

This is the difference in files, lexicographically ordered:

```
$ bazel cquery 'labels(srcs, kind(py_library, deps(:protobuf_python)))' | sort > /tmp/deps-{before,after}.txt
$ diff /tmp/deps-{before,after}.txt
1,5d0
< //:python/compatibility_tests/v2.5.0/tests/__init__.py (null)
< //:python/compatibility_tests/v2.5.0/tests/google/__init__.py (null)
< //:python/compatibility_tests/v2.5.0/tests/google/protobuf/__init__.py (null)
< //:python/compatibility_tests/v2.5.0/tests/google/protobuf/internal/__init__.py (null)
< //:python/google/__init__.py (null)
51d45
< //:python/protobuf_distutils/protobuf_distutils/__init__.py (null)
```

This seems like a desirable change, since it avoids polluting other
packages, too.

This change is conceptually similar to #7877, but for Bazel.
2020-09-23 15:20:38 -07:00
David L. Jones
66e3562aaf
Remove uses of pkg_resources in non-namespace packages. (#7902)
In #713 and #1296, the `google` package in protobuf sources was found
to cause conflicts with other Google projects, because it was not
properly configured as a namespace package [1]. The initial fix in
786f80f addressed part of the issue, and #1298 fixed the rest.

However, 786f80f (the initial fix) also made `google.protobuf` and
`google.protobuf.pyext` into namespace packages. This was not correct:
they are both regular, non-namespace, sub-subpackages.

However (still), the follow-up #1298 did not nominate them as
namespace packages, so the namespace registration behavior has
remained, but without benefit.

This change removes the unnecessary namespace registration, which has
substantial overhead, thus reducing startup time substantially when
using protobufs.

Because this change affects the import internals, quantifying the
overhead requires a full tear-down/start-up of the Python interpreter.
So, to capture the full cost for every run, I measured the time to
launching a _fresh_ Python instance in a subprocess, varying the
imports and code under test. In other words, I used `timeit` to
measure the time to launch a _fresh_ Python subprocess which actually
performs the imports.

* Reference: normal Python startup (i.e., don't import protobuf at all).
  ```
   % python3 -m timeit -s 'import subprocess' -r 3 -n 10 'subprocess.call(["python3", "-c", "pass"])'
  10 loops, best of 3: 27.1 msec per loop
  ```

* Baseline: cost to import `google.protobuf.descriptor`, with
  extraneous namespace packages.
  ```
  % python3 -m timeit -s 'import subprocess' -r 3 -n 10 'subprocess.call(["python3", "-c", "import google.protobuf.descriptor"])'
  10 loops, best of 3: 133 msec per loop
  ```

* This change: cost to import `google.protobuf.descriptor`, without
  extraneous namespace packages.
  ```
  % python3 -m timeit -s 'import subprocess' -r 3 -n 10 'subprocess.call(["python3", "-c", "import google.protobuf.descriptor"])'
  10 loops, best of 3: 43.1 msec per loop
  ```

[1]:  https://packaging.python.org/guides/packaging-namespace-packages/
2020-09-22 20:46:07 -07:00
Joshua Haberman
cae85a9f11
PHP: Added == operators for Map and Array. (#7900) 2020-09-22 11:44:52 -07:00
Fabrice Fontaine
3abbbd8870 python/setup.py: remove unneeded wheel dependency
wheel is required since version 3.13.0 and
ff92cee10b

This will result in the following build failure when cross-compiling:

Download error on https://pypi.org/simple/wheel/: unknown url type: https -- Some packages may not be found!
Couldn't find index page for 'wheel' (maybe misspelled?)
Download error on https://pypi.org/simple/: unknown url type: https -- Some packages may not be found!
No local packages or working download links found for wheel

Remove wheel requirement from setup.py as it is only needed by
release.sh, not by setup.py

Fixes:
 - http://autobuild.buildroot.org/results/371c686a10d6870933011b46d36b1879d29046b9

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-09-21 12:25:14 -07:00
James Brock
c2d089e413 Add Purescript protobuf to third-party list 2020-09-18 10:26:39 -07:00
David L. Jones
f4aa17b28a Update documentation for protobuf_distutils Python package.
This updates README.md to use an example with pip instead of setup.py.
The README.md is then used as the long_description argument to setup(),
so that the doc shows up on pypi.
2020-09-14 20:14:32 -07:00