previous commit broke numpy buffer access for Py<=2.4
[cython.git] / setup.py
index bdc54033e739c09596f0f5c1b81e7d9ce2ed987f..401a60fd825c36a9171c7c91518d614ff2035656 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -6,10 +6,9 @@ import sys
 if 'sdist' in sys.argv and sys.platform != "win32" and sys.version_info >= (2,4):
     # Record the current revision in .hgrev
     import subprocess # os.popen is cleaner but deprecated
-    changset = subprocess.Popen("hg log --rev tip | grep changeset", 
-                                shell=True,
-                                stdout=subprocess.PIPE).stdout.read()
-    rev = changset.decode('ISO-8859-1').split(':')[-1].strip()
+    changeset = subprocess.Popen("hg identify --id --rev tip".split(),
+                                 stdout=subprocess.PIPE).stdout.read()
+    rev = changeset.decode('ISO-8859-1').strip()
     hgrev = open('.hgrev', 'w')
     hgrev.write(rev)
     hgrev.close()
@@ -40,7 +39,7 @@ if sys.version_info[0] >= 3:
 pxd_include_dirs = [
     directory for directory, dirs, files in os.walk('Cython/Includes')
     if '__init__.pyx' in files or '__init__.pxd' in files
-    or directory == 'Cython/Includes' ]
+    or directory == 'Cython/Includes' or directory == 'Cython/Includes/Deprecated']
 
 pxd_include_patterns = [
     p+'/*.pxd' for p in pxd_include_dirs ] + [
@@ -155,6 +154,12 @@ def compile_cython_modules(profile=False):
                     result = compile(pyx_source_file)
                     c_source_file = result.c_file
                 if c_source_file:
+                    # Py2 distutils can't handle unicode file paths
+                    if isinstance(c_source_file, unicode):
+                        filename_encoding = sys.getfilesystemencoding()
+                        if filename_encoding is None:
+                            filename_encoding = sys.getdefaultencoding()
+                        c_source_file = c_source_file.encode(filename_encoding)
                     extensions.append(
                         Extension(module, sources = [c_source_file])
                         )
@@ -164,15 +169,23 @@ def compile_cython_modules(profile=False):
                 setup_args['ext_modules'] = extensions
                 add_command_class("build_ext", build_ext)
         except Exception:
-            print("ERROR: %s" % sys.exc_info()[1])
-            print("Extension module compilation failed, using plain Python implementation")
+            print('''
+ERROR: %s
+
+Extension module compilation failed, looks like Cython cannot run
+properly on this system.  To work around this, pass the option
+"--no-cython-compile".  This will install a pure Python version of
+Cython without compiling its own sources.
+''' % sys.exc_info()[1])
+            raise
+
+cython_profile = '--cython-profile' in sys.argv
+if cython_profile:
+    sys.argv.remove('--cython-profile')
 
 try:
     sys.argv.remove("--no-cython-compile")
 except ValueError:
-    cython_profile = '--cython-profile' in sys.argv
-    if cython_profile:
-        sys.argv.remove('--cython-profile')
     compile_cython_modules(cython_profile)
 
 setup_args.update(setuptools_extra_args)