| Index: third_party/protobuf/python/setup.py
 | 
| diff --git a/third_party/protobuf/python/setup.py b/third_party/protobuf/python/setup.py
 | 
| index 8a986298664eb676459f5ea0c51e35c2c0fcb097..2a5513b7176a21f27e860915eaa9beb5d9c0cc45 100755
 | 
| --- a/third_party/protobuf/python/setup.py
 | 
| +++ b/third_party/protobuf/python/setup.py
 | 
| @@ -1,29 +1,24 @@
 | 
| -#! /usr/bin/python
 | 
| +#! /usr/bin/env python
 | 
|  #
 | 
|  # See README for usage instructions.
 | 
| -import sys
 | 
| +import glob
 | 
|  import os
 | 
|  import subprocess
 | 
| +import sys
 | 
|  
 | 
|  # We must use setuptools, not distutils, because we need to use the
 | 
|  # namespace_packages option for the "google" package.
 | 
| -try:
 | 
| -  from setuptools import setup, Extension
 | 
| -except ImportError:
 | 
| -  try:
 | 
| -    from ez_setup import use_setuptools
 | 
| -    use_setuptools()
 | 
| -    from setuptools import setup, Extension
 | 
| -  except ImportError:
 | 
| -    sys.stderr.write(
 | 
| -        "Could not import setuptools; make sure you have setuptools or "
 | 
| -        "ez_setup installed.\n")
 | 
| -    raise
 | 
| +from setuptools import setup, Extension, find_packages
 | 
| +
 | 
|  from distutils.command.clean import clean as _clean
 | 
| -from distutils.command.build_py import build_py as _build_py
 | 
| -from distutils.spawn import find_executable
 | 
|  
 | 
| -maintainer_email = "protobuf@googlegroups.com"
 | 
| +if sys.version_info[0] == 3:
 | 
| +  # Python 3
 | 
| +  from distutils.command.build_py import build_py_2to3 as _build_py
 | 
| +else:
 | 
| +  # Python 2
 | 
| +  from distutils.command.build_py import build_py as _build_py
 | 
| +from distutils.spawn import find_executable
 | 
|  
 | 
|  # Find the Protocol Compiler.
 | 
|  if 'PROTOC' in os.environ and os.path.exists(os.environ['PROTOC']):
 | 
| @@ -39,23 +34,38 @@ elif os.path.exists("../vsprojects/Release/protoc.exe"):
 | 
|  else:
 | 
|    protoc = find_executable("protoc")
 | 
|  
 | 
| -def generate_proto(source):
 | 
| +
 | 
| +def GetVersion():
 | 
| +  """Gets the version from google/protobuf/__init__.py
 | 
| +
 | 
| +  Do not import google.protobuf.__init__ directly, because an installed
 | 
| +  protobuf library may be loaded instead."""
 | 
| +
 | 
| +  with open(os.path.join('google', 'protobuf', '__init__.py')) as version_file:
 | 
| +    exec(version_file.read(), globals())
 | 
| +    return __version__
 | 
| +
 | 
| +
 | 
| +def generate_proto(source, require = True):
 | 
|    """Invokes the Protocol Compiler to generate a _pb2.py from the given
 | 
|    .proto file.  Does nothing if the output already exists and is newer than
 | 
|    the input."""
 | 
|  
 | 
| +  if not require and not os.path.exists(source):
 | 
| +    return
 | 
| +
 | 
|    output = source.replace(".proto", "_pb2.py").replace("../src/", "")
 | 
|  
 | 
|    if (not os.path.exists(output) or
 | 
|        (os.path.exists(source) and
 | 
|         os.path.getmtime(source) > os.path.getmtime(output))):
 | 
| -    print "Generating %s..." % output
 | 
| +    print("Generating %s..." % output)
 | 
|  
 | 
|      if not os.path.exists(source):
 | 
|        sys.stderr.write("Can't find required file: %s\n" % source)
 | 
|        sys.exit(-1)
 | 
|  
 | 
| -    if protoc == None:
 | 
| +    if protoc is None:
 | 
|        sys.stderr.write(
 | 
|            "protoc is not installed nor found in ../src.  Please compile it "
 | 
|            "or install the binary package.\n")
 | 
| @@ -66,54 +76,34 @@ def generate_proto(source):
 | 
|        sys.exit(-1)
 | 
|  
 | 
|  def GenerateUnittestProtos():
 | 
| -  generate_proto("../src/google/protobuf/unittest.proto")
 | 
| -  generate_proto("../src/google/protobuf/unittest_custom_options.proto")
 | 
| -  generate_proto("../src/google/protobuf/unittest_import.proto")
 | 
| -  generate_proto("../src/google/protobuf/unittest_import_public.proto")
 | 
| -  generate_proto("../src/google/protobuf/unittest_mset.proto")
 | 
| -  generate_proto("../src/google/protobuf/unittest_no_generic_services.proto")
 | 
| -  generate_proto("google/protobuf/internal/test_bad_identifiers.proto")
 | 
| -  generate_proto("google/protobuf/internal/more_extensions.proto")
 | 
| -  generate_proto("google/protobuf/internal/more_extensions_dynamic.proto")
 | 
| -  generate_proto("google/protobuf/internal/more_messages.proto")
 | 
| -  generate_proto("google/protobuf/internal/factory_test1.proto")
 | 
| -  generate_proto("google/protobuf/internal/factory_test2.proto")
 | 
| -
 | 
| -def MakeTestSuite():
 | 
| -  # This is apparently needed on some systems to make sure that the tests
 | 
| -  # work even if a previous version is already installed.
 | 
| -  if 'google' in sys.modules:
 | 
| -    del sys.modules['google']
 | 
| -  GenerateUnittestProtos()
 | 
| -
 | 
| -  import unittest
 | 
| -  import google.protobuf.internal.generator_test     as generator_test
 | 
| -  import google.protobuf.internal.descriptor_test    as descriptor_test
 | 
| -  import google.protobuf.internal.reflection_test    as reflection_test
 | 
| -  import google.protobuf.internal.service_reflection_test \
 | 
| -    as service_reflection_test
 | 
| -  import google.protobuf.internal.text_format_test   as text_format_test
 | 
| -  import google.protobuf.internal.wire_format_test   as wire_format_test
 | 
| -  import google.protobuf.internal.unknown_fields_test as unknown_fields_test
 | 
| -  import google.protobuf.internal.descriptor_database_test \
 | 
| -      as descriptor_database_test
 | 
| -  import google.protobuf.internal.descriptor_pool_test as descriptor_pool_test
 | 
| -  import google.protobuf.internal.message_factory_test as message_factory_test
 | 
| -  import google.protobuf.internal.message_cpp_test as message_cpp_test
 | 
| -  import google.protobuf.internal.reflection_cpp_generated_test \
 | 
| -      as reflection_cpp_generated_test
 | 
| -
 | 
| -  loader = unittest.defaultTestLoader
 | 
| -  suite = unittest.TestSuite()
 | 
| -  for test in [ generator_test,
 | 
| -                descriptor_test,
 | 
| -                reflection_test,
 | 
| -                service_reflection_test,
 | 
| -                text_format_test,
 | 
| -                wire_format_test ]:
 | 
| -    suite.addTest(loader.loadTestsFromModule(test))
 | 
| -
 | 
| -  return suite
 | 
| +  generate_proto("../src/google/protobuf/map_unittest.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_arena.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_no_arena.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_no_arena_import.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_custom_options.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_import.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_import_public.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_mset.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_mset_wire_format.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_no_generic_services.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/unittest_proto3_arena.proto", False)
 | 
| +  generate_proto("../src/google/protobuf/util/json_format_proto3.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/any_test.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/descriptor_pool_test1.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/descriptor_pool_test2.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/factory_test1.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/factory_test2.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/import_test_package/inner.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/import_test_package/outer.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/missing_enum_values.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/message_set_extensions.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/more_extensions.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/more_extensions_dynamic.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/more_messages.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/packed_field_test.proto", False)
 | 
| +  generate_proto("google/protobuf/internal/test_bad_identifiers.proto", False)
 | 
| +  generate_proto("google/protobuf/pyext/python.proto", False)
 | 
|  
 | 
|  
 | 
|  class clean(_clean):
 | 
| @@ -124,7 +114,8 @@ class clean(_clean):
 | 
|          filepath = os.path.join(dirpath, filename)
 | 
|          if filepath.endswith("_pb2.py") or filepath.endswith(".pyc") or \
 | 
|            filepath.endswith(".so") or filepath.endswith(".o") or \
 | 
| -          filepath.endswith('google/protobuf/compiler/__init__.py'):
 | 
| +          filepath.endswith('google/protobuf/compiler/__init__.py') or \
 | 
| +          filepath.endswith('google/protobuf/util/__init__.py'):
 | 
|            os.remove(filepath)
 | 
|      # _clean is an old-style class, so super() doesn't work.
 | 
|      _clean.run(self)
 | 
| @@ -134,63 +125,99 @@ class build_py(_build_py):
 | 
|      # Generate necessary .proto file if it doesn't exist.
 | 
|      generate_proto("../src/google/protobuf/descriptor.proto")
 | 
|      generate_proto("../src/google/protobuf/compiler/plugin.proto")
 | 
| -
 | 
| +    generate_proto("../src/google/protobuf/any.proto")
 | 
| +    generate_proto("../src/google/protobuf/api.proto")
 | 
| +    generate_proto("../src/google/protobuf/duration.proto")
 | 
| +    generate_proto("../src/google/protobuf/empty.proto")
 | 
| +    generate_proto("../src/google/protobuf/field_mask.proto")
 | 
| +    generate_proto("../src/google/protobuf/source_context.proto")
 | 
| +    generate_proto("../src/google/protobuf/struct.proto")
 | 
| +    generate_proto("../src/google/protobuf/timestamp.proto")
 | 
| +    generate_proto("../src/google/protobuf/type.proto")
 | 
| +    generate_proto("../src/google/protobuf/wrappers.proto")
 | 
|      GenerateUnittestProtos()
 | 
| -    # Make sure google.protobuf.compiler is a valid package.
 | 
| -    open('google/protobuf/compiler/__init__.py', 'a').close()
 | 
| +
 | 
| +    # Make sure google.protobuf/** are valid packages.
 | 
| +    for path in ['', 'internal/', 'compiler/', 'pyext/', 'util/']:
 | 
| +      try:
 | 
| +        open('google/protobuf/%s__init__.py' % path, 'a').close()
 | 
| +      except EnvironmentError:
 | 
| +        pass
 | 
|      # _build_py is an old-style class, so super() doesn't work.
 | 
|      _build_py.run(self)
 | 
|  
 | 
| +class test_conformance(_build_py):
 | 
| +  target = 'test_python'
 | 
| +  def run(self):
 | 
| +    cmd = 'cd ../conformance && make %s' % (test_conformance.target)
 | 
| +    status = subprocess.check_call(cmd, shell=True)
 | 
| +
 | 
| +
 | 
|  if __name__ == '__main__':
 | 
|    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 = [ "." ],
 | 
| -        libraries = [ "protobuf" ]))
 | 
| -
 | 
| -  setup(name = 'protobuf',
 | 
| -        version = '2.5.0-pre',
 | 
| -        packages = [ 'google' ],
 | 
| -        namespace_packages = [ 'google' ],
 | 
| -        test_suite = 'setup.MakeTestSuite',
 | 
| -        # Must list modules explicitly so that we don't install tests.
 | 
| -        py_modules = [
 | 
| -          'google.protobuf.internal.api_implementation',
 | 
| -          'google.protobuf.internal.containers',
 | 
| -          'google.protobuf.internal.cpp_message',
 | 
| -          'google.protobuf.internal.decoder',
 | 
| -          'google.protobuf.internal.encoder',
 | 
| -          'google.protobuf.internal.enum_type_wrapper',
 | 
| -          'google.protobuf.internal.message_listener',
 | 
| -          'google.protobuf.internal.python_message',
 | 
| -          'google.protobuf.internal.type_checkers',
 | 
| -          'google.protobuf.internal.wire_format',
 | 
| -          'google.protobuf.descriptor',
 | 
| -          'google.protobuf.descriptor_pb2',
 | 
| -          'google.protobuf.compiler.plugin_pb2',
 | 
| -          'google.protobuf.message',
 | 
| -          'google.protobuf.descriptor_database',
 | 
| -          'google.protobuf.descriptor_pool',
 | 
| -          'google.protobuf.message_factory',
 | 
| -          'google.protobuf.reflection',
 | 
| -          'google.protobuf.service',
 | 
| -          'google.protobuf.service_reflection',
 | 
| -          'google.protobuf.text_format' ],
 | 
| -        cmdclass = { 'clean': clean, 'build_py': build_py },
 | 
| -        install_requires = ['setuptools'],
 | 
| -        ext_modules = ext_module_list,
 | 
| -        url = 'http://code.google.com/p/protobuf/',
 | 
| -        maintainer = maintainer_email,
 | 
| -        maintainer_email = 'protobuf@googlegroups.com',
 | 
| -        license = 'New BSD License',
 | 
| -        description = 'Protocol Buffers',
 | 
| -        long_description =
 | 
| -          "Protocol Buffers are Google's data interchange format.",
 | 
| +  cpp_impl = '--cpp_implementation'
 | 
| +  warnings_as_errors = '--warnings_as_errors'
 | 
| +  if cpp_impl in sys.argv:
 | 
| +    sys.argv.remove(cpp_impl)
 | 
| +    extra_compile_args = ['-Wno-write-strings', '-Wno-invalid-offsetof']
 | 
| +    test_conformance.target = 'test_python_cpp'
 | 
| +
 | 
| +    if "clang" in os.popen('$CC --version').read():
 | 
| +      extra_compile_args.append('-Wno-shorten-64-to-32')
 | 
| +
 | 
| +    if warnings_as_errors in sys.argv:
 | 
| +      extra_compile_args.append('-Werror')
 | 
| +      sys.argv.remove(warnings_as_errors)
 | 
| +
 | 
| +    # C++ implementation extension
 | 
| +    ext_module_list.append(
 | 
| +        Extension(
 | 
| +            "google.protobuf.pyext._message",
 | 
| +            glob.glob('google/protobuf/pyext/*.cc'),
 | 
| +            include_dirs=[".", "../src"],
 | 
| +            libraries=['protobuf'],
 | 
| +            library_dirs=['../src/.libs'],
 | 
| +            extra_compile_args=extra_compile_args,
 | 
|          )
 | 
| +    )
 | 
| +    os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'cpp'
 | 
| +
 | 
| +  # Keep this list of dependencies in sync with tox.ini.
 | 
| +  install_requires = ['six>=1.9', 'setuptools']
 | 
| +  if sys.version_info <= (2,7):
 | 
| +    install_requires.append('ordereddict')
 | 
| +    install_requires.append('unittest2')
 | 
| +
 | 
| +  setup(
 | 
| +      name='protobuf',
 | 
| +      version=GetVersion(),
 | 
| +      description='Protocol Buffers',
 | 
| +      long_description="Protocol Buffers are Google's data interchange format",
 | 
| +      url='https://developers.google.com/protocol-buffers/',
 | 
| +      maintainer='protobuf@googlegroups.com',
 | 
| +      maintainer_email='protobuf@googlegroups.com',
 | 
| +      license='New BSD License',
 | 
| +      classifiers=[
 | 
| +        "Programming Language :: Python",
 | 
| +        "Programming Language :: Python :: 2",
 | 
| +        "Programming Language :: Python :: 2.6",
 | 
| +        "Programming Language :: Python :: 2.7",
 | 
| +        "Programming Language :: Python :: 3",
 | 
| +        "Programming Language :: Python :: 3.3",
 | 
| +        "Programming Language :: Python :: 3.4",
 | 
| +        ],
 | 
| +      namespace_packages=['google'],
 | 
| +      packages=find_packages(
 | 
| +          exclude=[
 | 
| +              'import_test_package',
 | 
| +          ],
 | 
| +      ),
 | 
| +      test_suite='google.protobuf.internal',
 | 
| +      cmdclass={
 | 
| +          'clean': clean,
 | 
| +          'build_py': build_py,
 | 
| +          'test_conformance': test_conformance,
 | 
| +      },
 | 
| +      install_requires=install_requires,
 | 
| +      ext_modules=ext_module_list,
 | 
| +  )
 | 
| 
 |