[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