[pypy-commit] pypy win64-stage1: begin to revive mingw support, allow --cc <arbitrary exe name>

mattip noreply at buildbot.pypy.org
Mon Mar 19 22:47:50 CET 2012


Author: mattip
Branch: win64-stage1
Changeset: r53820:87e86cdaa9c3
Date: 2012-03-19 23:47 +0200
http://bitbucket.org/pypy/pypy/changeset/87e86cdaa9c3/

Log:	begin to revive mingw support, allow --cc <arbitrary exe name>

diff --git a/pypy/rlib/_rffi_stacklet.py b/pypy/rlib/_rffi_stacklet.py
--- a/pypy/rlib/_rffi_stacklet.py
+++ b/pypy/rlib/_rffi_stacklet.py
@@ -14,7 +14,7 @@
     includes = ['src/stacklet/stacklet.h'],
     separate_module_sources = ['#include "src/stacklet/stacklet.c"\n'],
 )
-if sys.platform == 'win32':
+if 'masm' in dir(eci.platform): # Microsoft compiler
     if is_emulated_long:
         asmsrc = 'switch_x64_msvc.asm'
     else:
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
@@ -301,6 +301,8 @@
     global platform
     log.msg("Setting platform to %r cc=%s" % (new_platform,cc))
     platform = pick_platform(new_platform, cc)
+    if not platform:
+        raise ValueError("pick_platform failed")
 
     if new_platform == 'host':
         global host
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
@@ -8,14 +8,31 @@
 from pypy.translator.platform import Platform, posix
 
 def Windows(cc=None):
-    if cc == 'mingw32':
+    import subprocess
+    if not cc:
+        return MsvcPlatform(cc=cc, x64=False)
+    elif cc.startswith('mingw'):
         return MingwPlatform(cc)
-    else:
-        return MsvcPlatform(cc, False)
+    try:
+        subprocess.check_output([cc, '--version'])
+    except:
+        log.error("Unknown cc option '%s'"%cc)
+        return None
+    return MingwPlatform(cc)
+
+def Windows_x64(cc=None):
+    import subprocess
+    if not cc:
+        return MsvcPlatform(cc=cc, x64=True)
+    elif cc.startswith('mingw'):
+        return MingwPlatform(cc)
+    try:
+        subprocess.check_output([cc, '--version'])
+    except:
+        log.error("Unknown cc option '%s'"%cc)
+        return None
+    return MingwPlatform(cc)
     
-def Windows_x64(cc=None):
-    return MsvcPlatform(cc, True)
-
 def _get_msvc_env(vsver, x64flag):
     try:
         toolsdir = os.environ['VS%sCOMNTOOLS' % vsver]
@@ -31,14 +48,16 @@
         vcvars = os.path.join(toolsdir, 'vsvars32.bat')
 
     import subprocess
-    popen = subprocess.Popen('"%s" & set' % (vcvars,),
+    try:
+        popen = subprocess.Popen('"%s" & set' % (vcvars,),
                              stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE)
 
-    stdout, stderr = popen.communicate()
-    if popen.wait() != 0:
-        return
-
+        stdout, stderr = popen.communicate()
+        if popen.wait() != 0:
+            return None
+    except:
+        return None
     env = {}
 
     stdout = stdout.replace("\r\n", "\n")
@@ -395,7 +414,9 @@
     so_ext = 'dll'
 
     def __init__(self, cc=None):
-        Platform.__init__(self, 'gcc')
+        if not cc:
+            cc = 'gcc'
+        Platform.__init__(self, cc)
 
     def _args_for_shared(self, args):
         return ['-shared'] + args
diff --git a/pypy/translator/tool/cbuild.py b/pypy/translator/tool/cbuild.py
--- a/pypy/translator/tool/cbuild.py
+++ b/pypy/translator/tool/cbuild.py
@@ -321,12 +321,14 @@
 /* Windows: winsock/winsock2 mess */
 #define WIN32_LEAN_AND_MEAN
 #ifdef _WIN64
-   typedef          __int64 Signed;
-   typedef unsigned __int64 Unsigned;
+   typedef          long long Signed;
+   typedef unsigned long long Unsigned;
+#warning 64 bit build
 #  define SIGNED_MIN LLONG_MIN 
 #else
    typedef          long Signed;
    typedef unsigned long Unsigned;
+#warning 32 bit build
 #  define SIGNED_MIN LONG_MIN
 #endif
 '''


More information about the pypy-commit mailing list