[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