[pypy-svn] r45329 - in pypy/dist/pypy/translator: c/src tool tool/test
fijal at codespeak.net
fijal at codespeak.net
Wed Jul 25 16:49:47 CEST 2007
Author: fijal
Date: Wed Jul 25 16:49:46 2007
New Revision: 45329
Added:
pypy/dist/pypy/translator/c/src/thread.c
Modified:
pypy/dist/pypy/translator/tool/cbuild.py
pypy/dist/pypy/translator/tool/test/test_cbuild.py
Log:
Small wrapper to create c library prior to compiling with c module
Added: pypy/dist/pypy/translator/c/src/thread.c
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/c/src/thread.c Wed Jul 25 16:49:46 2007
@@ -0,0 +1,2 @@
+#include <unistd.h>
+#include <thread.h>
Modified: pypy/dist/pypy/translator/tool/cbuild.py
==============================================================================
--- pypy/dist/pypy/translator/tool/cbuild.py (original)
+++ pypy/dist/pypy/translator/tool/cbuild.py Wed Jul 25 16:49:46 2007
@@ -153,6 +153,24 @@
finally:
lastdir.chdir()
+def cache_c_module(cfiles, modname, cache_dir=None,
+ include_dirs=None, libraries=[]):
+ """ Same as build c module, but instead caches results and
+ checks timestamps (eventually, not supported yet)
+ """
+ from pypy.tool.autopath import pypydir
+ if cache_dir is None:
+ cache_dir = py.path.local(pypydir).join('_cache')
+ else:
+ cache_dir = py.path.local(cache_dir)
+ if cache_dir.check(dir=1):
+ # XXX check timestamps of all cfiles
+ if not cache_dir.join(modname + '.so').check():
+ modname = str(cache_dir.join(modname))
+ compile_c_module(cfiles, modname, include_dirs=include_dirs,
+ libraries=libraries)
+
+
def make_module_from_c(cfile, include_dirs=None, libraries=[]):
cfile = py.path.local(cfile)
modname = cfile.purebasename
Modified: pypy/dist/pypy/translator/tool/test/test_cbuild.py
==============================================================================
--- pypy/dist/pypy/translator/tool/test/test_cbuild.py (original)
+++ pypy/dist/pypy/translator/tool/test/test_cbuild.py Wed Jul 25 16:49:46 2007
@@ -1,7 +1,7 @@
-import py
+import py, sys
from pypy.tool.udir import udir
-from pypy.translator.tool.cbuild import build_executable
+from pypy.translator.tool.cbuild import build_executable, cache_c_module
def test_simple_executable():
print udir
@@ -18,3 +18,20 @@
out = py.process.cmdexec(testexec)
assert out.startswith('hello world')
+def test_compile_threads():
+ if sys.platform == 'nt':
+ py.test.skip("Linux-specific test")
+ try:
+ import ctypes
+ except ImportError:
+ py.test.skip("Need ctypes for that test")
+ from pypy.tool.autopath import pypydir
+ pypydir = py.path.local(pypydir)
+ csourcedir = pypydir.join('translator', 'c', 'src')
+ include_dirs = [str(csourcedir)]
+ files = [csourcedir.join('thread.c')]
+ cache_c_module(files, '_thread', cache_dir=udir, include_dirs=include_dirs,
+ libraries=['pthread'])
+ cdll = ctypes.CDLL(str(udir.join('_thread.so')))
+ assert hasattr(cdll, 'RPyThreadLockInit')
+
More information about the Pypy-commit
mailing list