Index: pypy/rlib/libffi.py
===================================================================
--- pypy/rlib/libffi.py	(révision 60169)
+++ pypy/rlib/libffi.py	(copie de travail)
@@ -24,6 +24,7 @@
 # maaaybe isinstance here would be better. Think
 _MS_WINDOWS = platform.name == "win32"
 _MAC_OS = platform.name == "darwin"
+_FREEBSD_7 = platform.name == "freebsd7"
 
 if _MS_WINDOWS:
     from pypy.rlib import rwin32
@@ -36,10 +37,16 @@
         pre_include_bits = ['#define MACOSX']
     else: 
         pre_include_bits = []
+
+    if _FREEBSD_7:
+        libraries = ['ffi']
+    else:
+        libraries = ['ffi', 'dl']
+
     eci = ExternalCompilationInfo(
         pre_include_bits = pre_include_bits,
         includes = includes,
-        libraries = ['ffi', 'dl'],
+        libraries = libraries,
         include_dirs = platform.include_dirs_for_libffi(),
         library_dirs = platform.library_dirs_for_libffi(),
     )
Index: pypy/translator/platform/__init__.py
===================================================================
--- pypy/translator/platform/__init__.py	(révision 60169)
+++ pypy/translator/platform/__init__.py	(copie de travail)
@@ -157,6 +157,13 @@
 elif sys.platform == 'darwin':
     from pypy.translator.platform.darwin import Darwin
     host = Darwin()
+elif sys.platform == 'freebsd7':
+    from pypy.translator.platform.freebsd7 import Freebsd7, Freebsd7_64
+    import platform
+    if platform.architecture()[0] == '32bit':
+        host = Freebsd7()
+    else:
+        host = Freebsd7_64()
 elif os.name == 'nt':
     from pypy.translator.platform.windows import Windows
     host = Windows()
Index: pypy/translator/platform/freebsd7.py
===================================================================
--- pypy/translator/platform/freebsd7.py	(révision 0)
+++ pypy/translator/platform/freebsd7.py	(révision 0)
@@ -0,0 +1,24 @@
+
+import py, os
+from pypy.translator.platform import posix
+
+class Freebsd7(posix.BasePosix):
+    name = "freebsd7"
+    
+    link_flags = ['-pthread']
+    cflags = ['-O3', '-pthread', '-fomit-frame-pointer']
+    standalone_only = []
+    shared_only = []
+    so_ext = 'so'
+    
+    def _args_for_shared(self, args):
+        return ['-shared'] + args
+
+    def include_dirs_for_libffi(self):
+        return ['/usr/local/include']
+
+    def library_dirs_for_libffi(self):
+        return ['/usr/local/lib']
+
+class Freebsd7_64(Freebsd7):
+    shared_only = ['-fPIC']
Index: pypy/rpython/lltypesystem/ll2ctypes.py
===================================================================
--- pypy/rpython/lltypesystem/ll2ctypes.py	(révision 60169)
+++ pypy/rpython/lltypesystem/ll2ctypes.py	(copie de travail)
@@ -809,7 +809,7 @@
         def _where_is_errno():
             return standard_c_lib.__errno_location()
 
-    elif sys.platform == 'darwin':
+    elif sys.platform in ('darwin', 'freebsd7'):
         standard_c_lib.__error.restype = ctypes.POINTER(ctypes.c_int)
         def _where_is_errno():
             return standard_c_lib.__error()
Index: pypy/rpython/module/ll_time.py
===================================================================
--- pypy/rpython/module/ll_time.py	(révision 60169)
+++ pypy/rpython/module/ll_time.py	(copie de travail)
@@ -29,7 +29,10 @@
     HAVE_FTIME = platform.Has('ftime')
 
 class CConfigForFTime:
-    _compilation_info_ = ExternalCompilationInfo(includes=['sys/timeb.h'])
+    _compilation_info_ = ExternalCompilationInfo(
+        includes=['sys/time.h', 'sys/timeb.h'],
+        libraries=['compat']
+    )
     TIMEB = platform.Struct('struct timeb', [('time', rffi.INT),
                                              ('millitm', rffi.INT)])
 
