Hey. Any reason why we should copy .h files during translation and can't just have them there?
Cheers, fijal On Wed, Jun 30, 2010 at 8:51 AM, <[email protected]> wrote: > Author: antocuni > Date: Wed Jun 30 16:51:13 2010 > New Revision: 75683 > > Added: > pypy/trunk/include/ (props changed) > pypy/trunk/include/README > Removed: > pypy/trunk/pypy/_interfaces/ > Modified: > pypy/trunk/lib-python/modified-2.5.2/distutils/command/build_ext.py > pypy/trunk/lib-python/modified-2.5.2/distutils/sysconfig_pypy.py > pypy/trunk/pypy/module/cpyext/api.py > pypy/trunk/pypy/module/cpyext/test/test_api.py > Log: > create a directory trunk/include to contains all the headers file. They are > automatically copied there from cpyext/include during translation. The > generated pypy_decl.h and pypy_macros.h are also put there, instead of the > now-gone pypy/_interfaces. > > The goal is to have the svn checkout as similar as possible as release > tarballs and virtualenvs, which have an include/ dir at the top > > > > Added: pypy/trunk/include/README > ============================================================================== > --- (empty file) > +++ pypy/trunk/include/README Wed Jun 30 16:51:13 2010 > @@ -0,0 +1,7 @@ > +This directory contains all the include files needed to build cpython > +extensions with PyPy. Note that these are just copies of the original > headers > +that are in pypy/module/cpyext/include: they are automatically copied from > +there during translation. > + > +Moreover, pypy_decl.h and pypy_macros.h are automatically generated, also > +during translation. > > Modified: pypy/trunk/lib-python/modified-2.5.2/distutils/command/build_ext.py > ============================================================================== > --- pypy/trunk/lib-python/modified-2.5.2/distutils/command/build_ext.py > (original) > +++ pypy/trunk/lib-python/modified-2.5.2/distutils/command/build_ext.py Wed > Jun 30 16:51:13 2010 > @@ -167,7 +167,7 @@ > # for Release and Debug builds. > # also Python's library directory must be appended to library_dirs > if os.name == 'nt': > - self.library_dirs.append(os.path.join(sys.prefix, 'pypy', > '_interfaces')) > + self.library_dirs.append(os.path.join(sys.prefix, 'include')) > if self.debug: > self.build_temp = os.path.join(self.build_temp, "Debug") > else: > > Modified: pypy/trunk/lib-python/modified-2.5.2/distutils/sysconfig_pypy.py > ============================================================================== > --- pypy/trunk/lib-python/modified-2.5.2/distutils/sysconfig_pypy.py > (original) > +++ pypy/trunk/lib-python/modified-2.5.2/distutils/sysconfig_pypy.py Wed > Jun 30 16:51:13 2010 > @@ -13,12 +13,7 @@ > > def get_python_inc(plat_specific=0, prefix=None): > from os.path import join as j > - cand = j(sys.prefix, 'include') > - if os.path.exists(cand): > - return cand > - if plat_specific: > - return j(sys.prefix, "pypy", "_interfaces") > - return j(sys.prefix, 'pypy', 'module', 'cpyext', 'include') > + return j(sys.prefix, 'include') > > def get_python_version(): > """Return a string containing the major and minor Python version, > > Modified: pypy/trunk/pypy/module/cpyext/api.py > ============================================================================== > --- pypy/trunk/pypy/module/cpyext/api.py (original) > +++ pypy/trunk/pypy/module/cpyext/api.py Wed Jun 30 16:51:13 2010 > @@ -45,11 +45,9 @@ > pypydir = py.path.local(autopath.pypydir) > include_dir = pypydir / 'module' / 'cpyext' / 'include' > source_dir = pypydir / 'module' / 'cpyext' / 'src' > -interfaces_dir = pypydir / "_interfaces" > include_dirs = [ > include_dir, > udir, > - interfaces_dir, > ] > > class CConfig: > @@ -100,9 +98,16 @@ > udir.join('pypy_macros.h').write("/* Will be filled later */") > globals().update(rffi_platform.configure(CConfig_constants)) > > -def copy_header_files(): > +def copy_header_files(dstdir): > + assert dstdir.check(dir=True) > + headers = include_dir.listdir('*.h') + include_dir.listdir('*.inl') > for name in ("pypy_decl.h", "pypy_macros.h"): > - udir.join(name).copy(interfaces_dir / name) > + headers.append(udir.join(name)) > + for header in headers: > + header.copy(dstdir) > + target = dstdir.join(header.basename) > + target.chmod(0444) # make the file read-only, to make sure that > nobody > + # edits it by mistake > > _NOT_SPECIFIED = object() > CANNOT_FAIL = object() > @@ -881,7 +886,8 @@ > deco(func.get_wrapper(space)) > > setup_init_functions(eci) > - copy_header_files() > + trunk_include = pypydir.dirpath() / 'include' > + copy_header_files(trunk_include) > > initfunctype = lltype.Ptr(lltype.FuncType([], lltype.Void)) > �...@unwrap_spec(ObjSpace, str, str) > > Modified: pypy/trunk/pypy/module/cpyext/test/test_api.py > ============================================================================== > --- pypy/trunk/pypy/module/cpyext/test/test_api.py (original) > +++ pypy/trunk/pypy/module/cpyext/test/test_api.py Wed Jun 30 16:51:13 > 2010 > @@ -1,3 +1,4 @@ > +import py > from pypy.conftest import gettestobjspace > from pypy.rpython.lltypesystem import rffi, lltype > from pypy.interpreter.baseobjspace import W_Root > @@ -68,3 +69,13 @@ > api.PyPy_GetWrapped(space.w_None) > api.PyPy_GetReference(space.w_None) > > + > +def test_copy_header_files(tmpdir): > + api.copy_header_files(tmpdir) > + def check(name): > + f = tmpdir.join(name) > + assert f.check(file=True) > + py.test.raises(py.error.EACCES, "f.open('w')") # check that it's not > writable > + check('Python.h') > + check('modsupport.inl') > + check('pypy_decl.h') > _______________________________________________ > pypy-svn mailing list > [email protected] > http://codespeak.net/mailman/listinfo/pypy-svn > _______________________________________________ [email protected] http://codespeak.net/mailman/listinfo/pypy-dev
