aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliujisi@google.com <liujisi@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2010-12-08 03:45:27 +0000
committerliujisi@google.com <liujisi@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2010-12-08 03:45:27 +0000
commit9b7f6c544ae9546e7ae0c438e36900754edb108d (patch)
tree22aa38d996d14fbd1e34ea0ac3a1093d7acf01bc
parent1fd96c43a01ec913a89de31c58c0bc9f1e5bf542 (diff)
downloadprotobuf-9b7f6c544ae9546e7ae0c438e36900754edb108d.tar.gz
protobuf-9b7f6c544ae9546e7ae0c438e36900754edb108d.tar.bz2
protobuf-9b7f6c544ae9546e7ae0c438e36900754edb108d.zip
Fix issues: 223 224 242.
-rw-r--r--python/README.txt24
-rwxr-xr-xpython/setup.py30
-rw-r--r--src/google/protobuf/compiler/command_line_interface_unittest.cc2
3 files changed, 43 insertions, 13 deletions
diff --git a/python/README.txt b/python/README.txt
index 96f1a734..73a26566 100644
--- a/python/README.txt
+++ b/python/README.txt
@@ -63,6 +63,9 @@ Installation
$ python setup.py install
This step may require superuser privileges.
+ NOTE: To use C++ implementation, you need to export the environment variable
+ before this step. See the "C++ Implementation" section below for more
+ details.
Usage
=====
@@ -71,3 +74,24 @@ The complete documentation for Protocol Buffers is available via the
web at:
http://code.google.com/apis/protocolbuffers/
+
+C++ Implementation
+==================
+
+WARNING: This is EXPERIMENTAL and only available for CPython platforms.
+
+The C++ implementation for Python messages is built as a Python extension to
+improve the overall protobuf Python performance.
+
+To use the C++ implementation, export an environment variable:
+
+ $ export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
+
+You need to export this variable before running setup.py script to build and
+install the extension. You must also set the variable at runtime, otherwise
+the pure-Python implementation will be used. In a future release, we will
+change the default so that C++ implementation is used whenever it is available.
+It is strongly recommended to run `python setup.py test` after setting the
+variable to "cpp", so the tests will be against C++ implemented Python
+messages.
+
diff --git a/python/setup.py b/python/setup.py
index 47646a81..53e8b4a5 100755
--- a/python/setup.py
+++ b/python/setup.py
@@ -102,17 +102,22 @@ if __name__ == '__main__':
# Generate necessary .proto file if it doesn't exist.
# TODO(kenton): Maybe we should hook this into a distutils command?
generate_proto("../src/google/protobuf/descriptor.proto")
-
- python_c_extension = Extension("google.protobuf.internal._net_proto2___python",
- [ "google/protobuf/pyext/python_descriptor.cc",
- "google/protobuf/pyext/python_protobuf.cc",
- "google/protobuf/pyext/python-proto2.cc",
- ],
- include_dirs = [ "../src", ".", ],
- libraries = [ "protobuf" ],
- runtime_library_dirs = [ "../src/.libs" ],
- library_dirs = [ "../src/.libs" ],
- )
+ generate_proto("../src/google/protobuf/compiler/plugin.proto")
+
+ ext_module_list = []
+
+ # C++ implementation extension
+ if os.getenv("PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION", "python") == "cpp":
+ print "Using EXPERIMENTAL C++ Implmenetation."
+ ext_module_list.append(Extension(
+ "google.protobuf.internal._net_proto2___python",
+ [ "google/protobuf/pyext/python_descriptor.cc",
+ "google/protobuf/pyext/python_protobuf.cc",
+ "google/protobuf/pyext/python-proto2.cc" ],
+ include_dirs = [ "../src", ".", ],
+ libraries = [ "protobuf" ],
+ runtime_library_dirs = [ "../src/.libs" ],
+ library_dirs = [ "../src/.libs" ]))
setup(name = 'protobuf',
version = '2.4.0-pre',
@@ -132,12 +137,13 @@ if __name__ == '__main__':
'google.protobuf.internal.wire_format',
'google.protobuf.descriptor',
'google.protobuf.descriptor_pb2',
+ 'google.protobuf.compiler.plugin_pb2',
'google.protobuf.message',
'google.protobuf.reflection',
'google.protobuf.service',
'google.protobuf.service_reflection',
'google.protobuf.text_format' ],
- ext_modules = [ python_c_extension ],
+ ext_modules = ext_module_list,
url = 'http://code.google.com/p/protobuf/',
maintainer = maintainer_email,
maintainer_email = 'protobuf@googlegroups.com',
diff --git a/src/google/protobuf/compiler/command_line_interface_unittest.cc b/src/google/protobuf/compiler/command_line_interface_unittest.cc
index 6634b676..d353376b 100644
--- a/src/google/protobuf/compiler/command_line_interface_unittest.cc
+++ b/src/google/protobuf/compiler/command_line_interface_unittest.cc
@@ -566,7 +566,7 @@ TEST_F(CommandLineInterfaceTest, Insert) {
"foo.proto", "Foo");
}
-#if defined(_WIN32) || defined(__CYGWIN__)
+#if defined(_WIN32)
TEST_F(CommandLineInterfaceTest, WindowsOutputPath) {
// Test that the output path can be a Windows-style path.