[pypy-svn] r45053 - pypy/dist/pypy/translator/c
fijal at codespeak.net
fijal at codespeak.net
Sat Jul 14 11:17:21 CEST 2007
Author: fijal
Date: Sat Jul 14 11:17:20 2007
New Revision: 45053
Modified:
pypy/dist/pypy/translator/c/genc.py
pypy/dist/pypy/translator/c/node.py
Log:
Support for extraincludes in the C backend
Modified: pypy/dist/pypy/translator/c/genc.py
==============================================================================
--- pypy/dist/pypy/translator/c/genc.py (original)
+++ pypy/dist/pypy/translator/c/genc.py Sat Jul 14 11:17:20 2007
@@ -133,21 +133,23 @@
from pypy.translator.c.symboltable import SymbolTable
# XXX fix symboltable
#self.symboltable = SymbolTable()
- cfile, extra = gen_source(db, modulename, targetdir,
- defines = defines,
- exports = self.exports,
- symboltable = self.symboltable)
+ cfile, extra, extraincludes = gen_source(db, modulename, targetdir,
+ defines = defines,
+ exports = self.exports,
+ symboltable = self.symboltable)
else:
if self.config.translation.instrument:
defines['INSTRUMENT'] = 1
if CBuilder.have___thread:
if not self.config.translation.no__thread:
defines['USE___THREAD'] = 1
- cfile, extra = gen_source_standalone(db, modulename, targetdir,
- entrypointname = pfname,
- defines = defines)
+ cfile, extra, extraincludes = \
+ gen_source_standalone(db, modulename, targetdir,
+ entrypointname = pfname,
+ defines = defines)
self.c_source_filename = py.path.local(cfile)
self.extrafiles = extra
+ self.extraincludes = extraincludes.keys()
if self.standalone:
self.gen_makefile(targetdir)
return cfile
@@ -176,9 +178,10 @@
def compile(self):
assert self.c_source_filename
assert not self._compiled
+ extra_includes = self.extraincludes
compile_c_module([self.c_source_filename] + self.extrafiles,
self.c_source_filename.purebasename,
- include_dirs = [autopath.this_dir],
+ include_dirs = [autopath.this_dir] + extra_includes,
libraries=self.libraries)
self._compiled = True
@@ -241,7 +244,8 @@
def compile(self):
assert self.c_source_filename
assert not self._compiled
- compiler = self.getccompiler(extra_includes=[str(self.targetdir)])
+ compiler = self.getccompiler(extra_includes=[str(self.targetdir)] +
+ self.extraincludes)
if sys.platform == 'darwin':
compiler.compile_extra.append('-mdynamic-no-pic')
if self.config.translation.compilerflags:
@@ -606,6 +610,7 @@
def extra_information(database):
includes = {}
sources = {}
+ include_dirs = {}
for node in database.globalcontainers():
if hasattr(node, 'includes'):
for include in node.includes:
@@ -613,11 +618,14 @@
if hasattr(node, 'sources'):
for source in node.sources:
sources[source] = True
+ if hasattr(node, 'include_dirs'):
+ for include_dir in node.include_dirs:
+ include_dirs[include_dir] = True
includes = includes.keys()
includes.sort()
sources = sources.keys()
sources.sort()
- return includes, sources
+ return includes, sources, include_dirs
def gen_source_standalone(database, modulename, targetdir,
entrypointname, defines={}):
@@ -648,7 +656,7 @@
for line in database.gcpolicy.pre_gc_code():
print >> fi, line
- includes, sources = extra_information(database)
+ includes, sources, include_dirs = extra_information(database)
for include in includes:
print >> fi, '#include <%s>' % (include,)
fi.close()
@@ -676,7 +684,7 @@
print >>fi, "#define INSTRUMENT_NCOUNTER %d" % n
fi.close()
- return filename, sg.getextrafiles() + sources
+ return filename, sg.getextrafiles() + sources, include_dirs
def gen_source(database, modulename, targetdir, defines={}, exports={},
@@ -706,7 +714,7 @@
for line in database.gcpolicy.pre_gc_code():
print >> fi, line
- includes, sources = extra_information(database)
+ includes, sources, include_dirs = extra_information(database)
for include in includes:
print >> fi, '#include <%s>' % (include,)
fi.close()
@@ -837,7 +845,7 @@
f.write(SETUP_PY % locals())
f.close()
- return filename, sg.getextrafiles() + sources
+ return filename, sg.getextrafiles() + sources, include_dirs
SETUP_PY = '''
Modified: pypy/dist/pypy/translator/c/node.py
==============================================================================
--- pypy/dist/pypy/translator/c/node.py (original)
+++ pypy/dist/pypy/translator/c/node.py Sat Jul 14 11:17:20 2007
@@ -613,6 +613,8 @@
db.namespace.uniquename('g_' + self.basename()))
if hasattr(obj, 'libraries'):
self.libraries = obj.libraries
+ if hasattr(obj, 'include_dirs'):
+ self.include_dirs = obj.include_dirs
self.make_funcgens()
#self.dependencies = {}
self.typename = db.gettype(T) #, who_asks=self)
More information about the Pypy-commit
mailing list