Commits

Jason R. Coombs  committed affe70d

Converted have_pyrex into a function

  • Participants
  • Parent commits 2979b8e

Comments (0)

Files changed (1)

File setuptools/extension.py

 
 _Extension = _get_unpatched(distutils.core.Extension)
 
-# Prefer Cython to Pyrex
-pyrex_impls = 'Cython.Distutils.build_ext', 'Pyrex.Distutils.build_ext'
-for pyrex_impl in pyrex_impls:
-    try:
-        # from (pyrex_impl) import build_ext
-        build_ext = __import__(pyrex_impl, fromlist=['build_ext']).build_ext
-        break
-    except:
-        pass
-have_pyrex = 'build_ext' in globals()
+def have_pyrex():
+    """
+    Return True if Cython or Pyrex can be imported.
+    """
+    pyrex_impls = 'Cython.Distutils.build_ext', 'Pyrex.Distutils.build_ext'
+    for pyrex_impl in pyrex_impls:
+        try:
+            # from (pyrex_impl) import build_ext
+            __import__(pyrex_impl, fromlist=['build_ext']).build_ext
+            return True
+        except Exception:
+            pass
+    return False
 
 
 class Extension(_Extension):
 
     def __init__(self, *args, **kw):
         _Extension.__init__(self, *args, **kw)
-        if not have_pyrex:
+        if not have_pyrex():
             self._convert_pyx_sources_to_c()
 
     def _convert_pyx_sources_to_c(self):
         "convert .pyx extensions to .c"
-        self.sources = [source[:-3] + 'c' for source in self.sources
-            if source.endswith('.pyx')]
+        def pyx_to_c(source):
+            if source.endswith('.pyx'):
+                source = source[:-4] + '.c'
+            return source
+        self.sources = map(pyx_to_c, self.sources)
 
 class Library(Extension):
     """Just like a regular Extension, but built as a library instead"""