[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