Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r64709:18c04dc498b8 Date: 2013-06-02 10:28 +0200 http://bitbucket.org/pypy/pypy/changeset/18c04dc498b8/
Log: Kill code duplication. diff --git a/lib_pypy/_ctypes_test.py b/lib_pypy/_ctypes_test.py --- a/lib_pypy/_ctypes_test.py +++ b/lib_pypy/_ctypes_test.py @@ -1,65 +1,7 @@ -import os, sys, imp -import tempfile - -def _get_c_extension_suffix(): - for ext, mod, typ in imp.get_suffixes(): - if typ == imp.C_EXTENSION: - return ext - - -def compile_shared(): - """Compile '_ctypes_test.c' into an extension module, and import it - """ - thisdir = os.path.dirname(__file__) - output_dir = tempfile.mkdtemp() - - from distutils.ccompiler import new_compiler - - compiler = new_compiler() - compiler.output_dir = output_dir - - # Compile .c file - include_dir = os.path.join(thisdir, '..', 'include') - if sys.platform == 'win32': - ccflags = ['-D_CRT_SECURE_NO_WARNINGS'] - else: - ccflags = ['-fPIC', '-Wimplicit-function-declaration'] - res = compiler.compile([os.path.join(thisdir, '_ctypes_test.c')], - include_dirs=[include_dir], - extra_preargs=ccflags) - object_filename = res[0] - - # set link options - output_filename = '_ctypes_test' + _get_c_extension_suffix() - if sys.platform == 'win32': - # XXX libpypy-c.lib is currently not installed automatically - library = os.path.join(thisdir, '..', 'include', 'libpypy-c') - if not os.path.exists(library + '.lib'): - #For a nightly build - library = os.path.join(thisdir, '..', 'include', 'python27') - if not os.path.exists(library + '.lib'): - # For a local translation - library = os.path.join(thisdir, '..', 'pypy', 'goal', 'libpypy-c') - libraries = [library, 'oleaut32'] - extra_ldargs = ['/MANIFEST', # needed for VC10 - '/EXPORT:init_ctypes_test'] - else: - libraries = [] - extra_ldargs = [] - - # link the dynamic library - compiler.link_shared_object( - [object_filename], - output_filename, - libraries=libraries, - extra_preargs=extra_ldargs) - - # Now import the newly created library, it will replace our module in sys.modules - import imp - fp, filename, description = imp.find_module('_ctypes_test', path=[output_dir]) - imp.load_module('_ctypes_test', fp, filename, description) - - +try: + import cpyext +except ImportError: + raise ImportError("No module named '_ctypes_test'") try: import _ctypes _ctypes.PyObj_FromPtr = None @@ -67,4 +9,5 @@ except ImportError: pass # obscure condition of _ctypes_test.py being imported by py.test else: - compile_shared() + import _pypy_testcapi + _pypy_testcapi.compile_shared('_ctypes_test.c', '_ctypes_test') diff --git a/lib_pypy/_testcapi.py b/lib_pypy/_pypy_testcapi.py copy from lib_pypy/_testcapi.py copy to lib_pypy/_pypy_testcapi.py --- a/lib_pypy/_testcapi.py +++ b/lib_pypy/_pypy_testcapi.py @@ -7,8 +7,9 @@ return ext -def compile_shared(): - """Compile '_testcapi.c' into an extension module, and import it +def compile_shared(csource, modulename): + """Compile '_testcapi.c' or '_ctypes_test.c' into an extension module, + and import it. """ thisdir = os.path.dirname(__file__) output_dir = tempfile.mkdtemp() @@ -24,13 +25,13 @@ ccflags = ['-D_CRT_SECURE_NO_WARNINGS'] else: ccflags = ['-fPIC', '-Wimplicit-function-declaration'] - res = compiler.compile([os.path.join(thisdir, '_testcapimodule.c')], + res = compiler.compile([os.path.join(thisdir, csource)], include_dirs=[include_dir], extra_preargs=ccflags) object_filename = res[0] # set link options - output_filename = '_testcapi' + _get_c_extension_suffix() + output_filename = modulename + _get_c_extension_suffix() if sys.platform == 'win32': # XXX libpypy-c.lib is currently not installed automatically library = os.path.join(thisdir, '..', 'include', 'libpypy-c') @@ -42,7 +43,7 @@ library = os.path.join(thisdir, '..', 'pypy', 'goal', 'libpypy-c') libraries = [library, 'oleaut32'] extra_ldargs = ['/MANIFEST', # needed for VC10 - '/EXPORT:init_testcapi'] + '/EXPORT:init' + modulename] else: libraries = [] extra_ldargs = [] @@ -54,14 +55,7 @@ libraries=libraries, extra_preargs=extra_ldargs) - # Now import the newly created library, it will replace our module in sys.modules - import imp - fp, filename, description = imp.find_module('_testcapi', path=[output_dir]) - imp.load_module('_testcapi', fp, filename, description) - -try: - import cpyext -except ImportError: - raise ImportError("No module named '_testcapi'") -else: - compile_shared() + # Now import the newly created library, it will replace the original + # module in sys.modules + fp, filename, description = imp.find_module(modulename, path=[output_dir]) + imp.load_module(modulename, fp, filename, description) diff --git a/lib_pypy/_testcapi.py b/lib_pypy/_testcapi.py --- a/lib_pypy/_testcapi.py +++ b/lib_pypy/_testcapi.py @@ -1,67 +1,7 @@ -import os, sys, imp -import tempfile - -def _get_c_extension_suffix(): - for ext, mod, typ in imp.get_suffixes(): - if typ == imp.C_EXTENSION: - return ext - - -def compile_shared(): - """Compile '_testcapi.c' into an extension module, and import it - """ - thisdir = os.path.dirname(__file__) - output_dir = tempfile.mkdtemp() - - from distutils.ccompiler import new_compiler - - compiler = new_compiler() - compiler.output_dir = output_dir - - # Compile .c file - include_dir = os.path.join(thisdir, '..', 'include') - if sys.platform == 'win32': - ccflags = ['-D_CRT_SECURE_NO_WARNINGS'] - else: - ccflags = ['-fPIC', '-Wimplicit-function-declaration'] - res = compiler.compile([os.path.join(thisdir, '_testcapimodule.c')], - include_dirs=[include_dir], - extra_preargs=ccflags) - object_filename = res[0] - - # set link options - output_filename = '_testcapi' + _get_c_extension_suffix() - if sys.platform == 'win32': - # XXX libpypy-c.lib is currently not installed automatically - library = os.path.join(thisdir, '..', 'include', 'libpypy-c') - if not os.path.exists(library + '.lib'): - #For a nightly build - library = os.path.join(thisdir, '..', 'include', 'python27') - if not os.path.exists(library + '.lib'): - # For a local translation - library = os.path.join(thisdir, '..', 'pypy', 'goal', 'libpypy-c') - libraries = [library, 'oleaut32'] - extra_ldargs = ['/MANIFEST', # needed for VC10 - '/EXPORT:init_testcapi'] - else: - libraries = [] - extra_ldargs = [] - - # link the dynamic library - compiler.link_shared_object( - [object_filename], - output_filename, - libraries=libraries, - extra_preargs=extra_ldargs) - - # Now import the newly created library, it will replace our module in sys.modules - import imp - fp, filename, description = imp.find_module('_testcapi', path=[output_dir]) - imp.load_module('_testcapi', fp, filename, description) - try: import cpyext except ImportError: raise ImportError("No module named '_testcapi'") else: - compile_shared() + import _pypy_testcapi + _pypy_testcapi.compile_shared('_testcapimodule.c', '_testcapi') _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit