[pypy-svn] r46303 - in pypy/branch/pypy-more-rtti-inprogress/rpython/tool: . test
arigo at codespeak.net
arigo at codespeak.net
Tue Sep 4 13:39:51 CEST 2007
Author: arigo
Date: Tue Sep 4 13:39:50 2007
New Revision: 46303
Modified:
pypy/branch/pypy-more-rtti-inprogress/rpython/tool/rffi_platform.py
pypy/branch/pypy-more-rtti-inprogress/rpython/tool/test/test_rffi_platform.py
Log:
If a CConfig has only 'rffi_platform.Has' entries, and if the
CConfig tries to #include non-existing headers, then it is not
a fatal error but simply an indication that the platform does
not have the functions or names in question.
Modified: pypy/branch/pypy-more-rtti-inprogress/rpython/tool/rffi_platform.py
==============================================================================
--- pypy/branch/pypy-more-rtti-inprogress/rpython/tool/rffi_platform.py (original)
+++ pypy/branch/pypy-more-rtti-inprogress/rpython/tool/rffi_platform.py Tue Sep 4 13:39:50 2007
@@ -127,40 +127,43 @@
if isinstance(value, CConfigEntry):
entries.append((key, value))
- writer = _CWriter(CConfig)
- writer.write_header()
- for key, entry in entries:
- writer.write_entry(key, entry)
-
- f = writer.f
- writer.start_main()
- for key, entry in entries:
- writer.write_entry_main(key)
- writer.close()
-
- include_dirs = getattr(CConfig, '_include_dirs_', [])
- infolist = list(run_example_code(writer.path, include_dirs))
- assert len(infolist) == len(entries)
-
- resultinfo = {}
- resultentries = {}
- for info, (key, entry) in zip(infolist, entries):
- resultinfo[key] = info
- resultentries[entry] = key
-
- result = ConfigResult(CConfig, resultinfo, resultentries)
- for name, entry in entries:
- result.get_entry_result(entry)
+ if entries: # can be empty if there are only CConfigSingleEntries
+ writer = _CWriter(CConfig)
+ writer.write_header()
+ for key, entry in entries:
+ writer.write_entry(key, entry)
+
+ f = writer.f
+ writer.start_main()
+ for key, entry in entries:
+ writer.write_entry_main(key)
+ writer.close()
+
+ include_dirs = getattr(CConfig, '_include_dirs_', [])
+ infolist = list(run_example_code(writer.path, include_dirs))
+ assert len(infolist) == len(entries)
+
+ resultinfo = {}
+ resultentries = {}
+ for info, (key, entry) in zip(infolist, entries):
+ resultinfo[key] = info
+ resultentries[entry] = key
+
+ result = ConfigResult(CConfig, resultinfo, resultentries)
+ for name, entry in entries:
+ result.get_entry_result(entry)
+ res = result.get_result()
+ else:
+ res = {}
for key in dir(CConfig):
value = getattr(CConfig, key)
if isinstance(value, CConfigSingleEntry):
writer = _CWriter(CConfig)
writer.write_header()
- result.result[value] = value.question(writer.ask_gcc)
- result.entries[value] = key
-
- return result.get_result()
+ res[key] = value.question(writer.ask_gcc)
+
+ return res
# ____________________________________________________________
Modified: pypy/branch/pypy-more-rtti-inprogress/rpython/tool/test/test_rffi_platform.py
==============================================================================
--- pypy/branch/pypy-more-rtti-inprogress/rpython/tool/test/test_rffi_platform.py (original)
+++ pypy/branch/pypy-more-rtti-inprogress/rpython/tool/test/test_rffi_platform.py Tue Sep 4 13:39:50 2007
@@ -189,3 +189,5 @@
def test_has():
assert rffi_platform.has("x", "int x = 3;")
assert not rffi_platform.has("x", "")
+ # has() should also not crash if it is given an invalid #include
+ assert not rffi_platform.has("x", "#include <some/path/which/cannot/exist>")
More information about the Pypy-commit
mailing list