[pypy-svn] r56412 - in pypy/dist/pypy: module/_rawffi/test rlib rlib/test

henrikv at codespeak.net henrikv at codespeak.net
Thu Jul 10 14:57:33 CEST 2008


Author: henrikv
Date: Thu Jul 10 14:57:32 2008
New Revision: 56412

Modified:
   pypy/dist/pypy/module/_rawffi/test/test__rawffi.py
   pypy/dist/pypy/rlib/libffi.py
   pypy/dist/pypy/rlib/test/test_libffi.py
Log:
(henrikv, fijal) Make libffi work on MACOSX


Modified: pypy/dist/pypy/module/_rawffi/test/test__rawffi.py
==============================================================================
--- pypy/dist/pypy/module/_rawffi/test/test__rawffi.py	(original)
+++ pypy/dist/pypy/module/_rawffi/test/test__rawffi.py	Thu Jul 10 14:57:32 2008
@@ -8,10 +8,6 @@
 
 import os, sys, py
 
-def setup_module(mod):
-    if sys.platform not in ('linux2', 'win32'):
-        py.test.skip("Linux & win32 only tests by now")
-
 class AppTestFfi:
     def prepare_c_example():
         from pypy.tool.udir import udir
@@ -162,17 +158,20 @@
     prepare_c_example = staticmethod(prepare_c_example)
     
     def setup_class(cls):
+        from pypy.rlib.libffi import get_libc_name
         space = gettestobjspace(usemodules=('_rawffi','struct'))
         cls.space = space
         cls.w_lib_name = space.wrap(cls.prepare_c_example())
+        cls.w_libc_name = space.wrap(get_libc_name())
         if sys.platform == 'win32':
             cls.w_iswin32 = space.wrap(True)
-            cls.w_libc_name = space.wrap('msvcrt')
             cls.w_libm_name = space.wrap('msvcrt')
         else:
             cls.w_iswin32 = space.wrap(False)
-            cls.w_libc_name = space.wrap('libc.so.6')
             cls.w_libm_name = space.wrap('libm.so')
+            if sys.platform == "darwin":
+                cls.w_libm_name = space.wrap('libm.dylib')
+                
         cls.w_sizes_and_alignments = space.wrap(dict(
             [(k, (v.c_size, v.c_alignment)) for k,v in TYPEMAP.iteritems()]))
 

Modified: pypy/dist/pypy/rlib/libffi.py
==============================================================================
--- pypy/dist/pypy/rlib/libffi.py	(original)
+++ pypy/dist/pypy/rlib/libffi.py	Thu Jul 10 14:57:32 2008
@@ -11,11 +11,13 @@
 from pypy.translator.tool.cbuild import ExternalCompilationInfo
 import py
 import os
+import sys
 import ctypes.util
 
 DEBUG = False # writes dlerror() messages to stderr
 
 _MS_WINDOWS = os.name == "nt"
+_MAC_OS = sys.platform == "darwin"
 
 if _MS_WINDOWS:
     from pypy.rlib import rwin32
@@ -23,7 +25,10 @@
 if not _MS_WINDOWS:
     includes = ['dlfcn.h', 'ffi.h']
     include_dirs = []
-    pot_incl = py.path.local('/usr/include/libffi')
+    if _MAC_OS:
+        pot_incl = py.path.local('/usr/include/ffi') 
+    else:
+        pot_incl = py.path.local('/usr/include/libffi') 
     if pot_incl.check():
         include_dirs.append(str(pot_incl))
     lib_dirs = []
@@ -31,7 +36,12 @@
     if pot_lib.check():
         lib_dirs.append(str(pot_lib))
 
+    if _MAC_OS:
+        pre_include_bits = ['#define MACOSX']
+    else: 
+        pre_include_bits = []
     eci = ExternalCompilationInfo(
+        pre_include_bits = pre_include_bits,
         includes = includes,
         libraries = ['ffi', 'dl'],
         include_dirs = include_dirs,

Modified: pypy/dist/pypy/rlib/test/test_libffi.py
==============================================================================
--- pypy/dist/pypy/rlib/test/test_libffi.py	(original)
+++ pypy/dist/pypy/rlib/test/test_libffi.py	Thu Jul 10 14:57:32 2008
@@ -13,9 +13,6 @@
 import time
 
 def setup_module(mod):
-    if not (sys.platform.startswith('linux') or
-            sys.platform == 'win32'):
-        py.test.skip("Fragile tests, linux & win32 only by now")
     for name in type_names:
         # XXX force this to be seen by ll2ctypes
         # so that ALLOCATED.clear() clears it
@@ -28,20 +25,16 @@
 
     def test_dlopen(self):
         py.test.raises(OSError, "dlopen(rffi.str2charp('xxxxxxxxxxxx'))")
-        if sys.platform == 'win32':
-            assert dlopen(rffi.str2charp('kernel32.dll'))
-        else:
-            assert dlopen(rffi.str2charp('/lib/libc.so.6'))
+        assert dlopen(rffi.str2charp(get_libc_name()))
         
     def get_libc(self):
-        if sys.platform == 'win32':
-            return CDLL('msvcrt.dll')
-        else:
-            return CDLL('/lib/libc.so.6')
+        return CDLL(get_libc_name())
     
     def get_libm(self):
         if sys.platform == 'win32':
             return CDLL('msvcrt.dll')
+        elif sys.platform == "darwin":
+            return CDLL('libm.dylib')
         else:
             return CDLL('libm.so')
     



More information about the Pypy-commit mailing list