aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUILD65
-rw-r--r--python/google/protobuf/pyext/extension_dict.h4
-rw-r--r--python/google/protobuf/pyext/message.h5
-rw-r--r--python/google/protobuf/pyext/message_map_container.h4
-rw-r--r--python/google/protobuf/pyext/repeated_composite_container.h4
-rw-r--r--python/google/protobuf/pyext/repeated_scalar_container.h4
-rw-r--r--python/google/protobuf/pyext/scalar_map_container.h4
-rw-r--r--util/python/BUILD8
8 files changed, 91 insertions, 7 deletions
diff --git a/BUILD b/BUILD
index ee31cd86..89b8162a 100644
--- a/BUILD
+++ b/BUILD
@@ -54,9 +54,9 @@ cc_library(
"src/google/protobuf/stubs/time.cc",
"src/google/protobuf/wire_format_lite.cc",
],
+ hdrs = glob(["src/google/protobuf/**/*.h"]),
copts = COPTS,
includes = ["src/"],
- hdrs = glob(["src/google/protobuf/**/*.h"]),
linkopts = LINK_OPTS,
visibility = ["//visibility:public"],
)
@@ -156,9 +156,9 @@ cc_proto_library(
name = "cc_wkt_protos",
srcs = WELL_KNOWN_PROTOS,
include = "src",
+ default_runtime = ":protobuf",
internal_bootstrap_hack = 1,
protoc = ":protoc",
- default_runtime = ":protobuf",
visibility = ["//visibility:public"],
)
@@ -336,8 +336,8 @@ cc_proto_library(
name = "cc_test_protos",
srcs = LITE_TEST_PROTOS + TEST_PROTOS,
include = "src",
- protoc = ":protoc",
default_runtime = ":protobuf",
+ protoc = ":protoc",
deps = [":cc_wkt_protos"],
)
@@ -509,15 +509,66 @@ internal_copied_filegroup(
include = "python",
)
+cc_binary(
+ name = "internal/_api_implementation.so",
+ srcs = ["python/google/protobuf/internal/api_implementation.cc"],
+ copts = COPTS + [
+ "-DPYTHON_PROTO2_CPP_IMPL_V2",
+ ],
+ linkshared = 1,
+ linkstatic = 1,
+ deps = select({
+ "//conditions:default": [],
+ ":use_fast_cpp_protos": ["//util/python:python_headers"],
+ }),
+)
+
+cc_binary(
+ name = "pyext/_message.so",
+ srcs = glob([
+ "python/google/protobuf/pyext/*.cc",
+ "python/google/protobuf/pyext/*.h",
+ ]),
+ copts = COPTS + [
+ "-DGOOGLE_PROTOBUF_HAS_ONEOF=1",
+ ],
+ includes = [
+ "python/",
+ "src/",
+ ],
+ linkshared = 1,
+ linkstatic = 1,
+ deps = [
+ ":protobuf",
+ ] + select({
+ "//conditions:default": [],
+ ":use_fast_cpp_protos": ["//util/python:python_headers"],
+ }),
+)
+
+config_setting(
+ name = "use_fast_cpp_protos",
+ values = {
+ "define": "use_fast_cpp_protos=true",
+ },
+)
+
py_proto_library(
name = "protobuf_python",
srcs = WELL_KNOWN_PROTOS,
- srcs_version = "PY2AND3",
include = "src",
+ data = select({
+ "//conditions:default": [],
+ ":use_fast_cpp_protos": [
+ ":internal/_api_implementation.so",
+ ":pyext/_message.so",
+ ],
+ }),
+ default_runtime = "",
protoc = ":protoc",
py_extra_srcs = [":python_srcs"],
py_libs = ["//external:six"],
- default_runtime = "",
+ srcs_version = "PY2AND3",
visibility = ["//visibility:public"],
)
@@ -536,9 +587,9 @@ py_proto_library(
name = "python_common_test_protos",
srcs = LITE_TEST_PROTOS + TEST_PROTOS,
include = "src",
+ default_runtime = "",
protoc = ":protoc",
deps = [":protobuf_python"],
- default_runtime = "",
)
py_proto_library(
@@ -548,9 +599,9 @@ py_proto_library(
"python/google/protobuf/internal/import_test_package/*.proto",
]),
include = "python",
+ default_runtime = ":protobuf_python",
protoc = ":protoc",
deps = [":python_common_test_protos"],
- default_runtime = ":protobuf_python",
)
py_library(
diff --git a/python/google/protobuf/pyext/extension_dict.h b/python/google/protobuf/pyext/extension_dict.h
index 7e1049f1..7a66cb23 100644
--- a/python/google/protobuf/pyext/extension_dict.h
+++ b/python/google/protobuf/pyext/extension_dict.h
@@ -47,7 +47,11 @@ namespace protobuf {
class Message;
class FieldDescriptor;
+#ifdef _SHARED_PTR_H
+using std::shared_ptr;
+#else
using internal::shared_ptr;
+#endif
namespace python {
diff --git a/python/google/protobuf/pyext/message.h b/python/google/protobuf/pyext/message.h
index 1ff82e2f..94de4551 100644
--- a/python/google/protobuf/pyext/message.h
+++ b/python/google/protobuf/pyext/message.h
@@ -52,7 +52,12 @@ class Descriptor;
class DescriptorPool;
class MessageFactory;
+#ifdef _SHARED_PTR_H
+using std::shared_ptr;
+using std::string;
+#else
using internal::shared_ptr;
+#endif
namespace python {
diff --git a/python/google/protobuf/pyext/message_map_container.h b/python/google/protobuf/pyext/message_map_container.h
index 8286ba8a..4f6cb26a 100644
--- a/python/google/protobuf/pyext/message_map_container.h
+++ b/python/google/protobuf/pyext/message_map_container.h
@@ -45,7 +45,11 @@ namespace protobuf {
class Message;
+#ifdef _SHARED_PTR_H
+using std::shared_ptr;
+#else
using internal::shared_ptr;
+#endif
namespace python {
diff --git a/python/google/protobuf/pyext/repeated_composite_container.h b/python/google/protobuf/pyext/repeated_composite_container.h
index 3013aba9..58d37b02 100644
--- a/python/google/protobuf/pyext/repeated_composite_container.h
+++ b/python/google/protobuf/pyext/repeated_composite_container.h
@@ -49,7 +49,11 @@ namespace protobuf {
class FieldDescriptor;
class Message;
+#ifdef _SHARED_PTR_H
+using std::shared_ptr;
+#else
using internal::shared_ptr;
+#endif
namespace python {
diff --git a/python/google/protobuf/pyext/repeated_scalar_container.h b/python/google/protobuf/pyext/repeated_scalar_container.h
index 5dfa21e0..555e621c 100644
--- a/python/google/protobuf/pyext/repeated_scalar_container.h
+++ b/python/google/protobuf/pyext/repeated_scalar_container.h
@@ -48,7 +48,11 @@ namespace protobuf {
class Message;
+#ifdef _SHARED_PTR_H
+using std::shared_ptr;
+#else
using internal::shared_ptr;
+#endif
namespace python {
diff --git a/python/google/protobuf/pyext/scalar_map_container.h b/python/google/protobuf/pyext/scalar_map_container.h
index aded8d49..4d663b88 100644
--- a/python/google/protobuf/pyext/scalar_map_container.h
+++ b/python/google/protobuf/pyext/scalar_map_container.h
@@ -45,7 +45,11 @@ namespace protobuf {
class Message;
+#ifdef _SHARED_PTR_H
+using std::shared_ptr;
+#else
using internal::shared_ptr;
+#endif
namespace python {
diff --git a/util/python/BUILD b/util/python/BUILD
new file mode 100644
index 00000000..358c381c
--- /dev/null
+++ b/util/python/BUILD
@@ -0,0 +1,8 @@
+# This is a placeholder for python headers. Projects needing to use
+# fast cpp protos in protobuf's python interface should build with
+# --define=use_fast_cpp_protos=true, and in addition, provide
+# //util/python:python_headers dependency that in turn provides Python.h.
+cc_library(
+ name = "python_headers",
+ visibility = ["//visibility:public"],
+)