Author: Ronan Lamy <[email protected]>
Branch: _py3k-cpyext-A
Changeset: r87014:a0993b1fb7ba
Date: 2016-09-12 01:29 +0100
http://bitbucket.org/pypy/pypy/changeset/a0993b1fb7ba/
Log: hack some more: one test passes!
diff --git a/pypy/module/cpyext/test/test_cpyext.py
b/pypy/module/cpyext/test/test_cpyext.py
--- a/pypy/module/cpyext/test/test_cpyext.py
+++ b/pypy/module/cpyext/test/test_cpyext.py
@@ -7,7 +7,6 @@
from pypy import pypydir
from pypy.interpreter import gateway
from rpython.rtyper.lltypesystem import lltype, ll2ctypes
-from rpython.translator.gensupp import uniquemodulename
from rpython.tool.udir import udir
from pypy.module.cpyext import api
from pypy.module.cpyext.state import State
@@ -16,7 +15,7 @@
from rpython.tool import leakfinder
from rpython.rlib import rawrefcount
-from .support import c_compile
+from pypy.tool.cpyext.buildext import SystemCompilationInfo, get_sys_info_app
only_pypy ="config.option.runappdirect and '__pypy__' not in
sys.builtin_module_names"
@@ -33,55 +32,6 @@
assert 'PyModule_Check' in api.FUNCTIONS
assert api.FUNCTIONS['PyModule_Check'].argtypes == [api.PyObject]
-def convert_sources_to_files(sources, dirname):
- files = []
- for i, source in enumerate(sources):
- filename = dirname / ('source_%d.c' % i)
- with filename.open('w') as f:
- f.write(str(source))
- files.append(filename)
- return files
-
-class SystemCompilationInfo(object):
- """Bundles all the generic information required to compile extensions.
-
- Note: here, 'system' means OS + target interpreter + test config + ...
- """
- def __init__(self, include_extra=None, compile_extra=None, link_extra=None,
- extra_libs=None, ext=None):
- self.include_extra = include_extra or []
- self.compile_extra = compile_extra
- self.link_extra = link_extra
- self.extra_libs = extra_libs
- self.ext = ext
-
- def compile_extension_module(self, name, include_dirs=[],
- source_files=None, source_strings=None):
- """
- Build an extension module and return the filename of the resulting
- native code file.
-
- name is the name of the module, possibly including dots if it is a
- module inside a package.
-
- Any extra keyword arguments are passed on to ExternalCompilationInfo to
- build the module (so specify your source with one of those).
- """
- modname = name.split('.')[-1]
- dirname = (udir/uniquemodulename('module')).ensure(dir=1)
- if source_strings:
- assert not source_files
- files = convert_sources_to_files(source_strings, dirname)
- source_files = files
- soname = c_compile(source_files, outputfilename=str(dirname/modname),
- compile_extra=self.compile_extra,
- link_extra=self.link_extra,
- include_dirs=self.include_extra + include_dirs,
- libraries=self.extra_libs)
- pydname = soname.new(purebasename=modname, ext=self.ext)
- soname.rename(pydname)
- return str(pydname)
-
def get_cpyext_info(space):
from pypy.module.imp.importing import get_so_extension
state = space.fromcache(State)
@@ -110,34 +60,6 @@
ext=get_so_extension(space))
-def get_so_suffix():
- from imp import get_suffixes, C_EXTENSION
- for suffix, mode, typ in get_suffixes():
- if typ == C_EXTENSION:
- return suffix
- else:
- raise RuntimeError("This interpreter does not define a filename "
- "suffix for C extensions!")
-
-def get_sys_info_app():
- from distutils.sysconfig import get_python_inc
- if sys.platform == 'win32':
- compile_extra = ["/we4013"]
- link_extra = ["/LIBPATH:" + os.path.join(sys.exec_prefix, 'libs')]
- elif sys.platform == 'darwin':
- compile_extra = link_extra = None
- pass
- elif sys.platform.startswith('linux'):
- compile_extra = [
- "-O0", "-g", "-Werror=implicit-function-declaration", "-fPIC"]
- link_extra = None
- ext = get_so_suffix()
- return SystemCompilationInfo(
- include_extra=[get_python_inc()],
- compile_extra=compile_extra,
- link_extra=link_extra,
- ext=get_so_suffix())
-
def make_methods(functions, modname):
methods_table = []
codes = []
@@ -329,7 +251,11 @@
cls.w_runappdirect = space.wrap(cls.runappdirect)
else:
def w_compile_module(self, name, source_files=None,
source_strings=None):
- return self.sys_info(name, source_files, source_strings)
+ from buildext import get_sys_info_app
+ sys_info = get_sys_info_app()
+ assert source_files or source_strings
+ return sys_info.compile_extension_module(name,
+ source_files=source_files, source_strings=source_strings)
cls.w_compile_module = w_compile_module
def record_imported_module(self, name):
@@ -618,9 +544,9 @@
"""
# Build the extensions.
banana = self.compile_module(
- "apple.banana", source_files=[self.here + b'banana.c'])
+ "apple.banana", source_files=[self.here.decode() + 'banana.c'])
date = self.compile_module(
- "cherry.date", source_files=[self.here + b'date.c'])
+ "cherry.date", source_files=[self.here.decode() + 'date.c'])
# Set up some package state so that the extensions can actually be
# imported.
diff --git a/pypy/tool/pytest/apptest.py b/pypy/tool/pytest/apptest.py
--- a/pypy/tool/pytest/apptest.py
+++ b/pypy/tool/pytest/apptest.py
@@ -76,8 +76,8 @@
def skip(message):
print(message)
raise SystemExit(0)
- __builtins__.skip = skip
- __builtins__.py3k_skip = skip
+ #__builtins__.skip = skip
+ #__builtins__.py3k_skip = skip
class ExceptionWrapper:
pass
def raises(exc, func, *args, **kwargs):
@@ -98,7 +98,7 @@
return res
else:
raise AssertionError("DID NOT RAISE")
- __builtins__.raises = raises
+ #__builtins__.raises = raises
class Test:
pass
self = Test()
@@ -170,8 +170,11 @@
f.write('def %s():\n' % target_name)
f.write('\n'.join(source))
f.write("\n%s()\n" % target_name)
+ helper_dir = os.path.join(pypydir, 'tool', 'cpyext')
+ env = os.environ.copy()
+ env['PYTHONPATH'] = helper_dir
res, stdout, stderr = runsubprocess.run_subprocess(
- python_, [str(pyfile)])
+ python_, [str(pyfile)], env=env)
print pyfile.read()
print >> sys.stdout, stdout
print >> sys.stderr, stderr
@@ -325,4 +328,3 @@
space.newtuple([]),
space.newdict())
self.w_class = w_class
-
diff --git a/rpython/tool/udir.py b/rpython/tool/udir.py
--- a/rpython/tool/udir.py
+++ b/rpython/tool/udir.py
@@ -21,7 +21,11 @@
import sys
from rpython.tool.version import get_repo_version_info
-from py.path import local
+from py.path import local
+try:
+ unicode
+except NameError:
+ class unicode: pass
PYPY_KEEP = int(os.environ.get('PYPY_USESSION_KEEP', '3'))
diff --git a/rpython/tool/version.py b/rpython/tool/version.py
--- a/rpython/tool/version.py
+++ b/rpython/tool/version.py
@@ -16,6 +16,7 @@
def get_repo_version_info(hgexe=None, root=rpythonroot):
'''Obtain version information by invoking the 'hg' or 'git' commands.'''
+ return default_retval
# Try to see if we can get info from Git if hgexe is not specified.
if not hgexe:
@@ -137,4 +138,4 @@
if __name__ == '__main__':
- print get_repo_version_info()
+ print(get_repo_version_info())
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit