Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r937:1189d3c3f216
Date: 2012-09-17 21:11 +0200
http://bitbucket.org/cffi/cffi/changeset/1189d3c3f216/

Log:    Don't use os.chdir(). Instead, give the tmpdir as options to
        distutils, which seems to work.

diff --git a/cffi/ffiplatform.py b/cffi/ffiplatform.py
--- a/cffi/ffiplatform.py
+++ b/cffi/ffiplatform.py
@@ -20,23 +20,11 @@
 def compile(tmpdir, ext):
     """Compile a C extension module using distutils."""
 
-    # Turn the 'ext.sources' into absolute paths, because we're going to
-    # do chdir().  In the common case where the path is precisely where
-    # we're going to chdir(), then replace it with a pathless copy.
-    for i, src in enumerate(ext.sources):
-        src = os.path.abspath(src)
-        if samefile(os.path.dirname(src), tmpdir):
-            src = os.path.basename(src)
-        ext.sources[i] = src
-
     saved_environ = os.environ.copy()
-    saved_path = os.getcwd()
     try:
-        os.chdir(tmpdir)
-        outputfilename = _build(ext)
+        outputfilename = _build(tmpdir, ext)
         outputfilename = os.path.abspath(outputfilename)
     finally:
-        os.chdir(saved_path)
         # workaround for a distutils bugs where some env vars can
         # become longer and longer every time it is used
         for key, value in saved_environ.items():
@@ -44,7 +32,7 @@
                 os.environ[key] = value
     return outputfilename
 
-def _build(ext):
+def _build(tmpdir, ext):
     # XXX compact but horrible :-(
     from distutils.core import Distribution
     import distutils.errors
@@ -52,6 +40,8 @@
     dist = Distribution({'ext_modules': [ext]})
     options = dist.get_option_dict('build_ext')
     options['force'] = ('ffiplatform', True)
+    options['build_lib'] = ('ffiplatform', tmpdir)
+    options['build_temp'] = ('ffiplatform', tmpdir)
     #
     try:
         dist.run_command('build_ext')
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to