Author: Matti Picus <matti.pi...@gmail.com>
Branch: unicode-utf8
Changeset: r95666:3d5d0ea3c275
Date: 2019-01-18 12:48 +0200
http://bitbucket.org/pypy/pypy/changeset/3d5d0ea3c275/

Log:    merge default into branch

diff --git a/pypy/conftest.py b/pypy/conftest.py
--- a/pypy/conftest.py
+++ b/pypy/conftest.py
@@ -5,6 +5,18 @@
 rsyncdirs = ['.', '../lib-python', '../lib_pypy', '../demo']
 rsyncignore = ['_cache']
 
+try:
+    from hypothesis import settings, __version__
+except ImportError:
+    pass
+else:
+    if __version__[:2] < '3.6':
+        s = settings(deadline=None)
+        settings.register_profile('default', s)
+    else:
+        settings.register_profile('default', deadline=None)
+    settings.load_profile('default')
+
 # PyPy's command line extra options (these are added
 # to py.test's standard options)
 #
diff --git a/rpython/conftest.py b/rpython/conftest.py
--- a/rpython/conftest.py
+++ b/rpython/conftest.py
@@ -5,6 +5,18 @@
 
 option = None
 
+try:
+    from hypothesis import settings, __version__
+except ImportError:
+    pass
+else:
+    if __version__[:2] < '3.6':
+        s = settings(deadline=None)
+        settings.register_profile('default', s)
+    else:
+        settings.register_profile('default', deadline=None)
+    settings.load_profile('default')
+
 def braindead_deindent(self):
     """monkeypatch that wont end up doing stupid in the python tokenizer"""
     text = '\n'.join(self.lines)
diff --git a/rpython/rlib/rwinreg.py b/rpython/rlib/rwinreg.py
--- a/rpython/rlib/rwinreg.py
+++ b/rpython/rlib/rwinreg.py
@@ -47,7 +47,7 @@
 HKEY = rwin32.HANDLE
 PHKEY = rffi.CArrayPtr(HKEY)
 REGSAM = rwin32.DWORD
-suffix = 'W'
+
 def get_traits(suffix):
     RegSetValue = external(
         'RegSetValue' + suffix,
diff --git a/rpython/translator/platform/test/test_makefile.py 
b/rpython/translator/platform/test/test_makefile.py
--- a/rpython/translator/platform/test/test_makefile.py
+++ b/rpython/translator/platform/test/test_makefile.py
@@ -85,7 +85,8 @@
         txt = '#include <stdio.h>\n'
         for i in range(ncfiles):
             txt += "int func%03d();\n" % i
-        txt += "\nint main(int argc, char * argv[])\n"
+        txt += "\n__declspec(dllexport) int\n"
+        txt += "pypy_main_startup(int argc, char * argv[])\n"
         txt += "{\n   int i=0;\n"
         for i in range(ncfiles):
             txt += "   i += func%03d();\n" % i
@@ -119,7 +120,7 @@
             clean = ('clean', '', 'rm -f $(OBJECTS) $(TARGET) ')
             get_time = time.time
         #write a non-precompiled header makefile
-        mk = self.platform.gen_makefile(cfiles, eci, path=tmpdir)
+        mk = self.platform.gen_makefile(cfiles, eci, path=tmpdir, shared=True)
         mk.rule(*clean)
         mk.write()
         t0 = get_time()
@@ -128,7 +129,7 @@
         t_normal = t1 - t0
         self.platform.execute_makefile(mk, extra_opts=['clean'])
         # Write a super-duper makefile with precompiled headers
-        mk = self.platform.gen_makefile(cfiles, eci, path=tmpdir,
+        mk = self.platform.gen_makefile(cfiles, eci, path=tmpdir, shared=True,
                            headers_to_precompile=cfiles_precompiled_headers,)
         mk.rule(*clean)
         mk.write()
diff --git a/rpython/translator/platform/windows.py 
b/rpython/translator/platform/windows.py
--- a/rpython/translator/platform/windows.py
+++ b/rpython/translator/platform/windows.py
@@ -9,14 +9,14 @@
 import rpython
 rpydir = str(py.path.local(rpython.__file__).join('..'))
 
-def _get_compiler_type(cc, x64_flag, ver0=None):
+def _get_compiler_type(cc, x64_flag):
     if not cc:
         cc = os.environ.get('CC','')
     if not cc:
-        return MsvcPlatform(x64=x64_flag, ver0=ver0)
+        return MsvcPlatform(x64=x64_flag)
     elif cc.startswith('mingw') or cc == 'gcc':
         return MingwPlatform(cc)
-    return MsvcPlatform(cc=cc, x64=x64_flag, ver0=ver0)
+    return MsvcPlatform(cc=cc, x64=x64_flag)
 
 def _get_vcver0():
     # try to get the compiler which served to compile python
@@ -28,17 +28,13 @@
         return vsver
     return None
 
-def Windows(cc=None, ver0=None):
-    if ver0 is None:
-        ver0 = _get_vcver0()
-    return _get_compiler_type(cc, False, ver0=ver0)
+def Windows(cc=None):
+    return _get_compiler_type(cc, False)
 
 def Windows_x64(cc=None, ver0=None):
     raise Exception("Win64 is not supported.  You must either build for Win32"
                     " or contribute the missing support in PyPy.")
-    if ver0 is None:
-        ver0 = _get_vcver0()
-    return _get_compiler_type(cc, True, ver0=ver0)
+    return _get_compiler_type(cc, True)
 
 def _find_vcvarsall(version, x64flag):
     import rpython.tool.setuptools_msvc as msvc
@@ -46,19 +42,16 @@
         arch = 'x64'
     else:
         arch = 'x86'
-    if version == 140:
+    if version >= 140:
         return msvc.msvc14_get_vc_env(arch)
     else:
         return msvc.msvc9_query_vcvarsall(version / 10.0, arch)
-    
+
 def _get_msvc_env(vsver, x64flag):
     vcdict = None
     toolsdir = None
     try:
-        if vsver < 140:
-            toolsdir = os.environ['VS%sCOMNTOOLS' % vsver]
-        else:
-            raise KeyError('always use registry values')
+        toolsdir = os.environ['VS%sCOMNTOOLS' % vsver]
     except KeyError:
         # use setuptools from python3 to find tools
         try:
@@ -76,8 +69,8 @@
             if not os.path.exists(vcvars):
                 # even msdn does not know which to run
                 # see 
https://msdn.microsoft.com/en-us/library/1700bbwd(v=vs.90).aspx
-                # wich names both
-                vcvars = os.path.join(toolsdir, 'vcvars32.bat') 
+                # which names both
+                vcvars = os.path.join(toolsdir, 'vcvars32.bat')
 
         import subprocess
         try:
@@ -86,12 +79,14 @@
                                  stderr=subprocess.PIPE)
 
             stdout, stderr = popen.communicate()
-            if popen.wait() != 0:
+            if popen.wait() != 0 or stdout[:5].lower() == 'error':
+                log.msg('Running "%s" errored: \n\nstdout:\n%s\n\nstderr:\n%s' 
% (
+                    vcvars, stdout.split()[0], stderr))
                 return None
-            if stdout[:5].lower() == 'error':
-                log.msg('Running "%s" errored: %s' %(vcvars, 
stdout.split()[0]))
-                return None
-        except:
+            else:
+                log.msg('Running "%s" succeeded' %(vcvars,))
+        except Exception as e:
+            log.msg('Running "%s" failed: "%s"', (vcvars, str(e)))
             return None
 
         stdout = stdout.replace("\r\n", "\n")
@@ -105,15 +100,29 @@
     for key, value in vcdict.items():
         if key.upper() in ['PATH', 'INCLUDE', 'LIB']:
             env[key.upper()] = value
+    if 'PATH' not in env:
+        log.msg('Did not find "PATH" in stdout\n%s' %(stdout))
+    if not _find_executable('mt.exe', env['PATH']):
+        # For some reason the sdk bin path is missing?
+        # put it together from some other env variables that happened to exist
+        # on the buildbot where this occurred
+        if 'WindowsSDKVersion' in vcdict and 'WindowsSdkDir' in vcdict:
+            binpath = vcdict['WindowsSdkDir'] + '\\bin\\' + 
vcdict['WindowsSDKVersion'] + 'x86'
+            env['PATH'] += ';' + binpath
+        if not _find_executable('mt.exe', env['PATH']):
+            log.msg('Could not find mt.exe on path=%s' % env['PATH'])
+            log.msg('Running vsver %s set this env' % vsver)
+            for key, value in vcdict.items():
+                log.msg('%s=%s' %(key, value))
     log.msg("Updated environment with vsver %d, using x64 %s" % (vsver, 
x64flag,))
     return env
 
 def find_msvc_env(x64flag=False, ver0=None):
-    vcvers = [140, 90, 100]
+    vcvers = [140, 141, 150, 90, 100]
     if ver0 in vcvers:
         vcvers.insert(0, ver0)
     errs = []
-    for vsver in vcvers: 
+    for vsver in vcvers:
         env = _get_msvc_env(vsver, x64flag)
         if env is not None:
             return env, vsver
@@ -168,6 +177,9 @@
         patch_os_env(self.externals)
         self.c_environ = os.environ.copy()
         if cc is None:
+            # prefer compiler used to build host. Python2 only
+            if ver0 is None:
+                ver0 = _get_vcver0()
             msvc_compiler_environ, self.vsver = find_msvc_env(x64, ver0=ver0)
             Platform.__init__(self, 'cl.exe')
             if msvc_compiler_environ:
@@ -180,8 +192,13 @@
             self.cc = cc
 
         # detect version of current compiler
-        returncode, stdout, stderr = _run_subprocess(self.cc, [],
+        try:
+            returncode, stdout, stderr = _run_subprocess(self.cc, [],
                                                      env=self.c_environ)
+        except EnvironmentError:
+            log.msg('Could not run %s using PATH=\n%s' %(self.cc,
+                '\n'.join(self.c_environ['PATH'].split(';'))))
+            raise
         r = re.search(r'Microsoft.+C/C\+\+.+\s([0-9]+)\.([0-9]+).*', stderr)
         if r is not None:
             self.version = int(''.join(r.groups())) / 10 - 60
@@ -267,23 +284,21 @@
         if not standalone:
             args = self._args_for_shared(args)
 
-        if self.version >= 80:
-            # Tell the linker to generate a manifest file
-            temp_manifest = exe_name.dirpath().join(
-                exe_name.purebasename + '.manifest')
-            args += ["/MANIFEST", "/MANIFESTFILE:%s" % (temp_manifest,)]
+        # Tell the linker to generate a manifest file
+        temp_manifest = exe_name.dirpath().join(
+            exe_name.purebasename + '.manifest')
+        args += ["/MANIFEST", "/MANIFESTFILE:%s" % (temp_manifest,)]
 
         self._execute_c_compiler(self.link, args, exe_name)
 
-        if self.version >= 80:
-            # Now, embed the manifest into the program
-            if standalone:
-                mfid = 1
-            else:
-                mfid = 2
-            out_arg = '-outputresource:%s;%s' % (exe_name, mfid)
-            args = ['-nologo', '-manifest', str(temp_manifest), out_arg]
-            self._execute_c_compiler('mt.exe', args, exe_name)
+        # Now, embed the manifest into the program
+        if standalone:
+            mfid = 1
+        else:
+            mfid = 2
+        out_arg = '-outputresource:%s;%s' % (exe_name, mfid)
+        args = ['-nologo', '-manifest', str(temp_manifest), out_arg]
+        self._execute_c_compiler('mt.exe', args, exe_name)
 
         return exe_name
 
@@ -387,7 +402,8 @@
 
         if len(headers_to_precompile)>0:
             if shared:
-                no_precompile_cfiles += ['main.c', 'wmain.c']
+                no_precompile_cfiles += [m.makefile_dir / 'main.c',
+                                         m.makefile_dir / 'wmain.c']
             stdafx_h = path.join('stdafx.h')
             txt  = '#ifndef PYPY_STDAFX_H\n'
             txt += '#define PYPY_STDAFX_H\n'
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to