[pypy-svn] pypy default: Added support for PYPY_LOCALBASE in translator.platform.

tav commits-noreply at bitbucket.org
Sun Mar 13 03:15:39 CET 2011


Author: tav <tav at espians.com>
Branch: 
Changeset: r42546:f93911d7479c
Date: 2011-03-13 02:15 +0000
http://bitbucket.org/pypy/pypy/changeset/f93911d7479c/

Log:	Added support for PYPY_LOCALBASE in translator.platform.

diff --git a/pypy/translator/platform/posix.py b/pypy/translator/platform/posix.py
--- a/pypy/translator/platform/posix.py
+++ b/pypy/translator/platform/posix.py
@@ -1,10 +1,9 @@
+"""Base support for POSIX-like platforms."""
 
-""" Base class for all posixish platforms
-"""
+import py, os
 
+from pypy.tool import autopath
 from pypy.translator.platform import Platform, log, _run_subprocess
-from pypy.tool import autopath
-import py, os, sys
 
 class BasePosix(Platform):
     exe_ext = ''
@@ -21,13 +20,13 @@
         self.cc = cc
 
     def _libs(self, libraries):
-        return ['-l%s' % (lib,) for lib in libraries]
+        return ['-l%s' % lib for lib in libraries]
 
     def _libdirs(self, library_dirs):
-        return ['-L%s' % (ldir,) for ldir in library_dirs]
+        return ['-L%s' % ldir for ldir in library_dirs]
 
     def _includedirs(self, include_dirs):
-        return ['-I%s' % (idir,) for idir in include_dirs]
+        return ['-I%s' % idir for idir in include_dirs]
 
     def _linkfiles(self, link_files):
         return list(link_files)

diff --git a/pypy/translator/platform/linux.py b/pypy/translator/platform/linux.py
--- a/pypy/translator/platform/linux.py
+++ b/pypy/translator/platform/linux.py
@@ -1,6 +1,5 @@
+"""Support for Linux."""
 
-import py, os
-from pypy.translator.platform import _run_subprocess
 from pypy.translator.platform.posix import BasePosix
 
 class BaseLinux(BasePosix):
@@ -17,11 +16,11 @@
     def _args_for_shared(self, args):
         return ['-shared'] + args
 
-    def include_dirs_for_libffi(self):
+    def _include_dirs_for_libffi(self):
         return self._pkg_config("libffi", "--cflags-only-I",
                                 ['/usr/include/libffi'])
 
-    def library_dirs_for_libffi(self):
+    def _library_dirs_for_libffi(self):
         return self._pkg_config("libffi", "--libs-only-L",
                                 ['/usr/lib/libffi'])
 
@@ -29,6 +28,7 @@
 class Linux(BaseLinux):
     shared_only = ()    # it seems that on 32-bit linux, compiling with -fPIC
                         # gives assembler that asmgcc is not happy about.
+
     def library_dirs_for_libffi_a(self):
         # places where we need to look for libffi.a
         return self.library_dirs_for_libffi() + ['/usr/lib']

diff --git a/pypy/translator/platform/windows.py b/pypy/translator/platform/windows.py
--- a/pypy/translator/platform/windows.py
+++ b/pypy/translator/platform/windows.py
@@ -1,9 +1,11 @@
+"""Support for Windows."""
 
 import py, os, sys, re
-from pypy.translator.platform import CompilationError, ExecutionResult
+
+from pypy.tool import autopath
+from pypy.translator.platform import CompilationError
 from pypy.translator.platform import log, _run_subprocess
 from pypy.translator.platform import Platform, posix
-from pypy.tool import autopath
 
 def Windows(cc=None):
     if cc == 'mingw32':
@@ -355,10 +357,10 @@
     def _args_for_shared(self, args):
         return ['-shared'] + args
 
-    def include_dirs_for_libffi(self):
+    def _include_dirs_for_libffi(self):
         return []
 
-    def library_dirs_for_libffi(self):
+    def _library_dirs_for_libffi(self):
         return []
 
     def _handle_error(self, returncode, stdout, stderr, outname):

diff --git a/pypy/translator/platform/maemo.py b/pypy/translator/platform/maemo.py
--- a/pypy/translator/platform/maemo.py
+++ b/pypy/translator/platform/maemo.py
@@ -1,9 +1,11 @@
+"""Support for Maemo."""
+
 import py, os
+
+from pypy.tool.udir import udir
+from pypy.translator.platform import ExecutionResult, log
 from pypy.translator.platform.linux import Linux
-from pypy.translator.platform.posix import _run_subprocess, GnuMakefile
-from pypy.translator.platform import ExecutionResult, log
-from pypy.tool.udir import udir
-from pypy.tool import autopath
+from pypy.translator.platform.posix import GnuMakefile, _run_subprocess
 
 def check_scratchbox():
     # in order to work, that file must exist and be executable by us
@@ -74,11 +76,11 @@
                                                      env)
         return ExecutionResult(returncode, stdout, stderr)
 
-    def include_dirs_for_libffi(self):
+    def _include_dirs_for_libffi(self):
         # insanely obscure dir
         return ['/usr/include/arm-linux-gnueabi/']
 
-    def library_dirs_for_libffi(self):
+    def _library_dirs_for_libffi(self):
         # on the other hand, library lands in usual place...
         return []
 

diff --git a/pypy/translator/platform/distutils_platform.py b/pypy/translator/platform/distutils_platform.py
--- a/pypy/translator/platform/distutils_platform.py
+++ b/pypy/translator/platform/distutils_platform.py
@@ -1,6 +1,6 @@
+import py, os, sys
 
 from pypy.translator.platform import Platform, log, CompilationError
-import py, sys, os
 from pypy.translator.tool import stdoutcapture
 
 def log_spawned_cmd(spawn):
@@ -105,7 +105,7 @@
                     fdump.write(data)
                     fdump.close()
         except (distutils.errors.CompileError,
-                distutils.errors.LinkError), e:
+                distutils.errors.LinkError):
             raise CompilationError('', data)
         except:
             print >>sys.stderr, data
@@ -157,9 +157,9 @@
             extra_preargs=self.link_extra,
             library_dirs=self.eci.library_dirs)
 
-    def include_dirs_for_libffi(self):
+    def _include_dirs_for_libffi(self):
         return ['/usr/include/libffi']
 
-    def library_dirs_for_libffi(self):
+    def _library_dirs_for_libffi(self):
         return ['/usr/lib/libffi']
 

diff --git a/pypy/translator/platform/freebsd.py b/pypy/translator/platform/freebsd.py
--- a/pypy/translator/platform/freebsd.py
+++ b/pypy/translator/platform/freebsd.py
@@ -1,5 +1,7 @@
+"""Support for FreeBSD."""
 
-import py, os
+import os
+
 from pypy.translator.platform import posix
 
 def get_env(key, default):
@@ -10,7 +12,6 @@
 
 def get_env_vector(key, default):
     string = get_env(key, default)
-    print key, string, default
     # XXX: handle quotes
     return string.split()
 
@@ -42,10 +43,10 @@
         res_lib_dirs.append(os.path.join(get_env("LOCALBASE", "/usr/local"), "lib"))
         return res_lib_dirs
 
-    def include_dirs_for_libffi(self):
+    def _include_dirs_for_libffi(self):
         return [os.path.join(get_env("LOCALBASE", "/usr/local"), "include")]
 
-    def library_dirs_for_libffi(self):
+    def _library_dirs_for_libffi(self):
         return [os.path.join(get_env("LOCALBASE", "/usr/local"), "lib")]
 
 class Freebsd_64(Freebsd):

diff --git a/pypy/translator/platform/__init__.py b/pypy/translator/platform/__init__.py
--- a/pypy/translator/platform/__init__.py
+++ b/pypy/translator/platform/__init__.py
@@ -1,17 +1,14 @@
+"""Platform-specific support for compiling/executing C sources."""
 
-""" Platform object that allows you to compile/execute C sources for given
-platform.
-"""
+import py, os, sys
 
-import sys, py, os
+from pypy.tool.ansi_print import ansi_log
+from pypy.tool.runsubprocess import run_subprocess as _run_subprocess
+from pypy.tool.udir import udir
 
-from pypy.tool.udir import udir
-from pypy.tool.ansi_print import ansi_log
 log = py.log.Producer("platform")
 py.log.setconsumer("platform", ansi_log)
 
-from pypy.tool.runsubprocess import run_subprocess as _run_subprocess
-
 class CompilationError(Exception):
     def __init__(self, out, err):
         self.out = out.replace('\r\n', '\n')
@@ -145,11 +142,17 @@
                 break
         return response_file
 
+    def preprocess_include_dirs(self, include_dirs):
+        if 'PYPY_LOCALBASE' in os.environ:
+            dirs = list(self._preprocess_include_dirs(include_dirs))
+            return [os.environ['PYPY_LOCALBASE'] + '/include'] + dirs
+        return self._preprocess_include_dirs(include_dirs)
+
     def _preprocess_include_dirs(self, include_dirs):
         return include_dirs
 
     def _compile_args_from_eci(self, eci, standalone):
-        include_dirs = self._preprocess_include_dirs(eci.include_dirs)
+        include_dirs = self.preprocess_include_dirs(eci.include_dirs)
         args = self._includedirs(include_dirs)
         if standalone:
             extra = self.standalone_only
@@ -158,11 +161,17 @@
         cflags = list(self.cflags) + list(extra)
         return (cflags + list(eci.compile_extra) + args)
     
+    def preprocess_library_dirs(self, library_dirs):
+        if 'PYPY_LOCALBASE' in os.environ:
+            dirs = list(self._preprocess_library_dirs(library_dirs))
+            return [os.environ['PYPY_LOCALBASE'] + '/lib'] + dirs
+        return self._preprocess_library_dirs(library_dirs)
+
     def _preprocess_library_dirs(self, library_dirs):
         return library_dirs
 
     def _link_args_from_eci(self, eci, standalone):
-        library_dirs = self._preprocess_library_dirs(eci.library_dirs)
+        library_dirs = self.preprocess_library_dirs(eci.library_dirs)
         library_dirs = self._libdirs(library_dirs)
         libraries = self._libs(eci.libraries)
         link_files = self._linkfiles(eci.link_files)
@@ -198,9 +207,21 @@
     # below are some detailed informations for platforms
 
     def include_dirs_for_libffi(self):
+        dirs = self._include_dirs_for_libffi()
+        if 'PYPY_LOCALBASE' in os.environ:
+            return [os.environ['PYPY_LOCALBASE'] + '/include'] + dirs
+        return dirs
+
+    def library_dirs_for_libffi(self):
+        dirs = self._library_dirs_for_libffi()
+        if 'PYPY_LOCALBASE' in os.environ:
+            return [os.environ['PYPY_LOCALBASE'] + '/lib'] + dirs
+        return dirs
+
+    def _include_dirs_for_libffi(self):
         raise NotImplementedError("Needs to be overwritten")
 
-    def library_dirs_for_libffi(self):
+    def _library_dirs_for_libffi(self):
         raise NotImplementedError("Needs to be overwritten")        
 
     def check___thread(self):

diff --git a/pypy/translator/platform/darwin.py b/pypy/translator/platform/darwin.py
--- a/pypy/translator/platform/darwin.py
+++ b/pypy/translator/platform/darwin.py
@@ -1,5 +1,7 @@
+"""Support for OS X."""
 
-import py, os
+import os
+
 from pypy.translator.platform import posix
 
 class Darwin(posix.BasePosix):
@@ -10,7 +12,7 @@
     standalone_only = ('-mdynamic-no-pic',)
     shared_only = ()
 
-    so_ext = 'so'
+    so_ext = 'dylib'
 
     # NOTE: GCC 4.2 will fail at runtime due to subtle issues, possibly
     # related to GC roots. Using LLVM-GCC or Clang will break the build.
@@ -29,22 +31,10 @@
                 + ['-dynamiclib', '-undefined', 'dynamic_lookup']
                 + args)
     
-    def _preprocess_include_dirs(self, include_dirs):
-        res_incl_dirs = list(include_dirs)
-        res_incl_dirs.append('/usr/local/include') # Homebrew
-        res_incl_dirs.append('/opt/local/include') # MacPorts
-        return res_incl_dirs
-
-    def _preprocess_library_dirs(self, library_dirs):
-        res_lib_dirs = list(library_dirs) 
-        res_lib_dirs.append('/usr/local/lib') # Homebrew
-        res_lib_dirs.append('/opt/local/lib') # MacPorts
-        return res_lib_dirs
-
-    def include_dirs_for_libffi(self):
+    def _include_dirs_for_libffi(self):
         return ['/usr/include/ffi']
 
-    def library_dirs_for_libffi(self):
+    def _library_dirs_for_libffi(self):
         return ['/usr/lib']
 
     def check___thread(self):


More information about the Pypy-commit mailing list