[pypy-svn] r58909 - in pypy/branch/cbuild-refactor/pypy/translator: platform platform/test tool tool/test
fijal at codespeak.net
fijal at codespeak.net
Fri Oct 10 16:01:05 CEST 2008
Author: fijal
Date: Fri Oct 10 16:01:04 2008
New Revision: 58909
Modified:
pypy/branch/cbuild-refactor/pypy/translator/platform/__init__.py
pypy/branch/cbuild-refactor/pypy/translator/platform/linux.py
pypy/branch/cbuild-refactor/pypy/translator/platform/test/test_platform.py
pypy/branch/cbuild-refactor/pypy/translator/tool/cbuild.py
pypy/branch/cbuild-refactor/pypy/translator/tool/test/test_cbuild.py
Log:
(fijal, pedronis)
Gradually move from cbuild to platform
Modified: pypy/branch/cbuild-refactor/pypy/translator/platform/__init__.py
==============================================================================
--- pypy/branch/cbuild-refactor/pypy/translator/platform/__init__.py (original)
+++ pypy/branch/cbuild-refactor/pypy/translator/platform/__init__.py Fri Oct 10 16:01:04 2008
@@ -20,7 +20,7 @@
def __init__(self, cc):
self.cc = cc
- def compile(self, cfiles, eci):
+ def compile(self, cfiles, eci, outputfilename=None, standalone=True):
raise NotImplementedError("Pure abstract baseclass")
def execute(self, file_to_exec):
Modified: pypy/branch/cbuild-refactor/pypy/translator/platform/linux.py
==============================================================================
--- pypy/branch/cbuild-refactor/pypy/translator/platform/linux.py (original)
+++ pypy/branch/cbuild-refactor/pypy/translator/platform/linux.py Fri Oct 10 16:01:04 2008
@@ -1,9 +1,8 @@
-import py
+import py, os
from pypy.translator.platform import Platform, CompilationError, ExecutionResult
from subprocess import PIPE, Popen
-import py
from pypy.tool.ansi_print import ansi_log
log = py.log.Producer("cbuild")
py.log.setconsumer("cbuild", ansi_log)
@@ -18,18 +17,30 @@
def __init__(self, cc='gcc'):
self.cc = cc
- def _args_from_eci(self, cc, cfiles, eci):
+ def _args_from_eci(self, cfiles, eci):
include_dirs = ['-I%s' % (idir,) for idir in eci.include_dirs]
library_dirs = ['-L%s' % (ldir,) for ldir in eci.library_dirs]
libraries = ['-l%s' % (lib,) for lib in eci.libraries]
- return ([self.cc] + include_dirs + [str(f) for f in cfiles] +
+ return (include_dirs + [str(f) for f in cfiles] +
library_dirs + libraries)
- def compile(self, cfiles, eci):
+ def _args_for_shared(self, args):
+ return ['-shared'] + args
+
+ def compile(self, cfiles, eci, outputfilename=None, standalone=True):
cfiles = [py.path.local(f) for f in cfiles]
- args = self._args_from_eci(self.cc, cfiles, eci)
- exe_name = cfiles[0].dirpath().join(cfiles[0].purebasename)
+ cfiles += [py.path.local(f) for f in eci.separate_module_files]
+ args = self._args_from_eci(cfiles, eci)
+ if outputfilename is None:
+ outputfilename = cfiles[0].purebasename
+ exe_name = py.path.local(os.path.join(str(cfiles[0].dirpath()),
+ outputfilename))
+ if not standalone:
+ exe_name += '.so'
args += ['-o', str(exe_name)]
+ if not standalone:
+ args = self._args_for_shared(args)
+ args = [self.cc] + args
log.execute(' '.join(args))
returncode, stdout, stderr = _run_subprocess(args)
if returncode != 0:
Modified: pypy/branch/cbuild-refactor/pypy/translator/platform/test/test_platform.py
==============================================================================
--- pypy/branch/cbuild-refactor/pypy/translator/platform/test/test_platform.py (original)
+++ pypy/branch/cbuild-refactor/pypy/translator/platform/test/test_platform.py Fri Oct 10 16:01:04 2008
@@ -1,5 +1,5 @@
-import py
+import py, sys
from pypy.tool.udir import udir
from pypy.translator.platform import host, CompilationError
from pypy.translator.tool.cbuild import ExternalCompilationInfo
@@ -51,3 +51,24 @@
assert res.out == '42\n'
assert res.err == ''
assert res.returncode == 0
+
+def test_standalone_library():
+ tmpdir = udir.join('standalone_library').ensure(dir=1)
+ c_file = tmpdir.join('stand1.c')
+ c_file.write('''
+ #include <math.h>
+ #include <stdio.h>
+
+ int main()
+ {
+ printf("%f\\n", pow(2.0, 2.0));
+ }''')
+ if sys.platform != 'win32':
+ eci = ExternalCompilationInfo(
+ libraries = ['m'],
+ )
+ else:
+ eci = ExternalCompilationInfo()
+ executable = host.compile([c_file], eci)
+ res = host.execute(executable)
+ assert res.out.startswith('4.0')
Modified: pypy/branch/cbuild-refactor/pypy/translator/tool/cbuild.py
==============================================================================
--- pypy/branch/cbuild-refactor/pypy/translator/tool/cbuild.py (original)
+++ pypy/branch/cbuild-refactor/pypy/translator/tool/cbuild.py Fri Oct 10 16:01:04 2008
@@ -3,6 +3,7 @@
import os, sys, inspect, re, imp
from pypy.translator.tool import stdoutcapture
from pypy.tool.autopath import pypydir
+from pypy.translator.platform import host
import py
from pypy.tool.ansi_print import ansi_log
@@ -259,7 +260,8 @@
self = self.convert_sources_to_files()
if not self.separate_module_files:
return self
- lib = compile_c_module([], 'externmod', self)
+ lib = str(host.compile([], self, outputfilename='externmod',
+ standalone=False))
d = self._copy_attributes()
d['libraries'] += (lib,)
d['separate_module_files'] = ()
Modified: pypy/branch/cbuild-refactor/pypy/translator/tool/test/test_cbuild.py
==============================================================================
--- pypy/branch/cbuild-refactor/pypy/translator/tool/test/test_cbuild.py (original)
+++ pypy/branch/cbuild-refactor/pypy/translator/tool/test/test_cbuild.py Fri Oct 10 16:01:04 2008
@@ -6,22 +6,6 @@
from subprocess import Popen, PIPE, STDOUT
from pypy.rlib.pyplatform import Maemo
-def test_simple_executable():
- print udir
- testpath = udir.join('testbuildexec')
- t = testpath.ensure("test.c")
- t.write(r"""
- #include <stdio.h>
- int main() {
- printf("hello world\n");
- return 0;
- }
-""")
- eci = ExternalCompilationInfo()
- testexec = build_executable([t], eci)
- out = py.process.cmdexec(testexec)
- assert out.startswith('hello world')
-
class TestEci:
def setup_class(cls):
tmpdir = udir.ensure('testeci', dir=1)
@@ -34,28 +18,6 @@
'''))
cls.modfile = c_file
cls.tmpdir = tmpdir
-
- def test_standalone(self):
- tmpdir = self.tmpdir
- c_file = tmpdir.join('stand1.c')
- c_file.write('''
- #include <math.h>
- #include <stdio.h>
-
- int main()
- {
- printf("%f\\n", pow(2.0, 2.0));
- }''')
- if sys.platform != 'win32':
- eci = ExternalCompilationInfo(
- libraries = ['m'],
- )
- else:
- eci = ExternalCompilationInfo()
- output = build_executable([c_file], eci)
- p = Popen(output, stdout=PIPE, stderr=STDOUT)
- p.wait()
- assert p.stdout.readline().startswith('4.0')
def test_merge(self):
e1 = ExternalCompilationInfo(
@@ -158,6 +120,11 @@
ExternalCompilationInfo.from_config_tool,
'dxowqbncpqympqhe-config')
+
+
+
+
+class Stuff:
def test_platform(self):
from pypy.rlib.pyplatform import Platform
class Expected(Exception):
More information about the Pypy-commit
mailing list