Commits

Armin Rigo  committed 1189d3c

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

  • Participants
  • Parent commits 22a470d

Comments (0)

Files changed (1)

File cffi/ffiplatform.py

 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():
                 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
     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')