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