Exemplo n.º 1
0
    def __init__(self, cc=None, x64=False, ver0=None):
        self.x64 = x64
        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:
                self.c_environ.update(msvc_compiler_environ)
                if x64:
                    self.externals_branch = 'win34_%d' % self.vsver
                else:
                    self.externals_branch = 'win32_%d' % self.vsver
        else:
            self.cc = cc

        # detect version of current compiler
        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
        else:
            # Probably not a msvc compiler...
            self.version = 0

        # Try to find a masm assembler
        returncode, stdout, stderr = _run_subprocess('ml.exe', [],
                                                     env=self.c_environ)
        r = re.search('Macro Assembler', stderr)
        if r is None and os.path.exists('c:/masm32/bin/ml.exe'):
            masm32 = 'c:/masm32/bin/ml.exe'
            masm64 = 'c:/masm64/bin/ml64.exe'
        else:
            masm32 = 'ml.exe'
            masm64 = 'ml64.exe'

        if x64:
            self.masm = masm64
        else:
            self.masm = masm32

        # Install debug options only when interpreter is in debug mode
        if sys.executable.lower().endswith('_d.exe'):
            self.cflags = ['/MDd', '/Z7', '/Od']

            # Increase stack size, for the linker and the stack check code.
            stack_size = 8 << 20  # 8 Mb
            self.link_flags = self.link_flags + ('/STACK:%d' % stack_size,)
            # The following symbol is used in c/src/stack.h
            self.cflags.append('/DMAX_STACK_SIZE=%d' % (stack_size - 1024))
Exemplo n.º 2
0
    def __init__(self, cc=None, x64=False):
        self.x64 = x64
        if cc is None:
            msvc_compiler_environ = find_msvc_env(x64)
            Platform.__init__(self, 'cl.exe')
            if msvc_compiler_environ:
                self.c_environ = os.environ.copy()
                self.c_environ.update(msvc_compiler_environ)
        else:
            self.cc = cc

        # detect version of current compiler
        returncode, stdout, stderr = _run_subprocess(self.cc,
                                                     '',
                                                     env=self.c_environ)
        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
        else:
            # Probably not a msvc compiler...
            self.version = 0

        # Try to find a masm assembler
        returncode, stdout, stderr = _run_subprocess('ml.exe',
                                                     '',
                                                     env=self.c_environ)
        r = re.search('Macro Assembler', stderr)
        if r is None and os.path.exists('c:/masm32/bin/ml.exe'):
            masm32 = 'c:/masm32/bin/ml.exe'
            masm64 = 'c:/masm64/bin/ml64.exe'
        else:
            masm32 = 'ml.exe'
            masm64 = 'ml64.exe'

        if x64:
            self.masm = masm64
        else:
            self.masm = masm32

        # Install debug options only when interpreter is in debug mode
        if sys.executable.lower().endswith('_d.exe'):
            self.cflags = ['/MDd', '/Z7', '/Od']

            # Increase stack size, for the linker and the stack check code.
            stack_size = 8 << 20  # 8 Mb
            self.link_flags.append('/STACK:%d' % stack_size)
            # The following symbol is used in c/src/stack.h
            self.cflags.append('/DMAX_STACK_SIZE=%d' % (stack_size - 1024))
Exemplo n.º 3
0
 def _pkg_config(self, lib, opt, default, check_result_dir=False):
     try:
         pkg_config = os.environ.get('PKG_CONFIG', 'pkg-config')
         ret, out, err = _run_subprocess(pkg_config, [lib, opt])
     except OSError as e:
         err = str(e)
         ret = 1
     if ret:
         result = default
     else:
         # strip compiler flags
         result = [entry[2:] for entry in out.split()]
     #
     if not result:
         pass # if pkg-config explicitly returned nothing, then
              # we assume it means no options are needed
     elif check_result_dir:
         # check that at least one of the results is a valid dir
         for check in result:
             if os.path.isdir(check):
                 break
         else:
             if ret:
                 msg = ("running 'pkg-config %s %s' failed:\n%s\n"
                        "and the default %r is not a valid directory" % (
                     lib, opt, err.rstrip(), default))
             else:
                 msg = ("'pkg-config %s %s' returned no valid directory:\n"
                        "%s\n%s" % (lib, opt, out.rstrip(), err.rstrip()))
             raise ValueError(msg)
     return result
Exemplo n.º 4
0
 def execute_makefile(self, path_to_makefile, extra_opts=[]):
     if isinstance(path_to_makefile, GnuMakefile):
         path = path_to_makefile.makefile_dir
     else:
         path = path_to_makefile
     log.execute("make %s in %s" % (" ".join(extra_opts), path))
     returncode, stdout, stderr = _run_subprocess(self.make_cmd, ["-C", str(path)] + extra_opts)
     self._handle_error(returncode, stdout, stderr, path.join("make"))
Exemplo n.º 5
0
    def __init__(self, cc=None, x64=False):
        self.x64 = x64
        msvc_compiler_environ = find_msvc_env(x64)
        Platform.__init__(self, 'cl.exe')
        if msvc_compiler_environ:
            self.c_environ = os.environ.copy()
            self.c_environ.update(msvc_compiler_environ)
            # XXX passing an environment to subprocess is not enough. Why?
            os.environ.update(msvc_compiler_environ)

        # detect version of current compiler
        returncode, stdout, stderr = _run_subprocess(self.cc, '',
                                                     env=self.c_environ)
        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
        else:
            # Probably not a msvc compiler...
            self.version = 0

        # Try to find a masm assembler
        returncode, stdout, stderr = _run_subprocess('ml.exe', '',
                                                     env=self.c_environ)
        r = re.search('Macro Assembler', stderr)
        if r is None and os.path.exists('c:/masm32/bin/ml.exe'):
            masm32 = 'c:/masm32/bin/ml.exe'
            masm64 = 'c:/masm64/bin/ml64.exe'
        else:
            masm32 = 'ml.exe'
            masm64 = 'ml64.exe'
        
        if x64:
            self.masm = masm64
        else:
            self.masm = masm32

        # Install debug options only when interpreter is in debug mode
        if sys.executable.lower().endswith('_d.exe'):
            self.cflags = ['/MDd', '/Z7', '/Od']
            self.link_flags = ['/debug']

            # Increase stack size, for the linker and the stack check code.
            stack_size = 8 << 20  # 8 Mb
            self.link_flags.append('/STACK:%d' % stack_size)
            # The following symbol is used in c/src/stack.h
            self.cflags.append('/DMAX_STACK_SIZE=%d' % (stack_size - 1024))
Exemplo n.º 6
0
 def execute_makefile(self, path_to_makefile, extra_opts=[]):
     if isinstance(path_to_makefile, GnuMakefile):
         path = path_to_makefile.makefile_dir
     else:
         path = path_to_makefile
     log.execute('make %s in %s' % (" ".join(extra_opts), path))
     returncode, stdout, stderr = _run_subprocess(
         self.make_cmd, ['-C', str(path)] + extra_opts)
     self._handle_error(returncode, stdout, stderr, path.join('make'))
Exemplo n.º 7
0
 def _pkg_config(self, lib, opt, default):
     try:
         ret, out, err = _run_subprocess("pkg-config", [lib, opt])
     except OSError:
         ret = 1
     if ret:
         return default
     # strip compiler flags
     return [entry[2:] for entry in out.split()]
Exemplo n.º 8
0
 def execute_makefile(self, path_to_makefile, extra_opts=[]):
     if isinstance(path_to_makefile, GnuMakefile):
         path = path_to_makefile.makefile_dir
     else:
         path = path_to_makefile
     log.execute('make %s in %s' % (" ".join(extra_opts), path))
     env = os.environ.copy()
     returncode, stdout, stderr = _run_subprocess(
         self.make_cmd, ['-C', str(path)] + extra_opts, env=env)
     self._handle_error(returncode, stdout, stderr, path.join('make'))
Exemplo n.º 9
0
    def __init__(self, cc=None, x64=False):
        self.x64 = x64
        msvc_compiler_environ = find_msvc_env(x64)
        Platform.__init__(self, "cl.exe")
        if msvc_compiler_environ:
            self.c_environ = os.environ.copy()
            self.c_environ.update(msvc_compiler_environ)

        # detect version of current compiler
        returncode, stdout, stderr = _run_subprocess(self.cc, "", env=self.c_environ)
        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
        else:
            # Probably not a msvc compiler...
            self.version = 0

        # Try to find a masm assembler
        returncode, stdout, stderr = _run_subprocess("ml.exe", "", env=self.c_environ)
        r = re.search("Macro Assembler", stderr)
        if r is None and os.path.exists("c:/masm32/bin/ml.exe"):
            masm32 = "c:/masm32/bin/ml.exe"
            masm64 = "c:/masm64/bin/ml64.exe"
        else:
            masm32 = "ml.exe"
            masm64 = "ml64.exe"

        if x64:
            self.masm = masm64
        else:
            self.masm = masm32

        # Install debug options only when interpreter is in debug mode
        if sys.executable.lower().endswith("_d.exe"):
            self.cflags = ["/MDd", "/Z7", "/Od"]
            self.link_flags = ["/debug"]

            # Increase stack size, for the linker and the stack check code.
            stack_size = 8 << 20  # 8 Mb
            self.link_flags.append("/STACK:%d" % stack_size)
            # The following symbol is used in c/src/stack.h
            self.cflags.append("/DMAX_STACK_SIZE=%d" % (stack_size - 1024))
Exemplo n.º 10
0
Arquivo: windows.py Projeto: Mu-L/pypy
    def __init__(self, cc=None, x64=False, ver0=None):
        self.x64 = x64
        patch_os_env(self.externals)
        self.c_environ = os.environ.copy()
        if cc is None:
            msvc_compiler_environ, self.vsver = find_msvc_env(x64, ver0=ver0)
            Platform.__init__(self, 'cl.exe')
            if msvc_compiler_environ:
                self.c_environ.update(msvc_compiler_environ)
                self.version = "MSVC %s" % str(self.vsver)
                if self.vsver > 90:
                    tag = '14x'
                else:
                    tag = '%d' % self.vsver
                if x64:
                    self.externals_branch = 'win64_%s' % tag
                else:
                    self.externals_branch = 'win32_%s' % tag
        else:
            self.cc = cc

        # Try to find a masm assembler
        # Dilemma: raise now or later if masm is not found. Postponing the
        # exception means we can use a fake compiler for testing on linux
        # but may mean cryptic error messages and wasted build time.
        try:
            returncode, stdout, stderr = _run_subprocess(
                'ml.exe' if not x64 else 'ml64.exe', [], env=self.c_environ)
            r = re.search('Macro Assembler', stderr)
        except (EnvironmentError, OSError):
            r = None
            masm32 = "'Could not find ml.exe'"
            masm64 = "'Could not find ml.exe'"
        if r is None and os.path.exists('c:/masm32/bin/ml.exe'):
            masm32 = 'c:/masm32/bin/ml.exe'
            masm64 = 'c:/masm64/bin/ml64.exe'
        elif r:
            masm32 = 'ml.exe'
            masm64 = 'ml64.exe'

        if x64:
            self.masm = masm64
        else:
            self.masm = masm32

        # Install debug options only when interpreter is in debug mode
        if sys.executable.lower().endswith('_d.exe'):
            self.cflags = ['/MDd', '/Z7', '/Od']

            # Increase stack size, for the linker and the stack check code.
            stack_size = 8 << 20  # 8 Mb
            self.link_flags = self.link_flags + ('/STACK:%d' % stack_size,)
            # The following symbol is used in c/src/stack.h
            self.cflags.append('/DMAX_STACK_SIZE=%d' % (stack_size - 1024))
Exemplo n.º 11
0
    def execute_makefile(self, path_to_makefile, extra_opts=[]):
        if isinstance(path_to_makefile, NMakefile):
            path = path_to_makefile.makefile_dir
        else:
            path = path_to_makefile
        log.execute("make %s in %s" % (" ".join(extra_opts), path))
        oldcwd = path.chdir()
        try:
            returncode, stdout, stderr = _run_subprocess(
                "nmake", ["/nologo", "/f", str(path.join("Makefile"))] + extra_opts, env=self.c_environ
            )
        finally:
            oldcwd.chdir()

        self._handle_error(returncode, stdout, stderr, path.join("make"))
Exemplo n.º 12
0
    def execute_makefile(self, path_to_makefile, extra_opts=[]):
        if isinstance(path_to_makefile, NMakefile):
            path = path_to_makefile.makefile_dir
        else:
            path = path_to_makefile
        log.execute('make %s in %s' % (" ".join(extra_opts), path))
        oldcwd = path.chdir()
        try:
            returncode, stdout, stderr = _run_subprocess(
                'nmake',
                ['/nologo', '/f', str(path.join('Makefile'))] + extra_opts)
        finally:
            oldcwd.chdir()

        self._handle_error(returncode, stdout, stderr, path.join('make'))
Exemplo n.º 13
0
    def execute_makefile(self, path_to_makefile, extra_opts=[]):
        if isinstance(path_to_makefile, NMakefile):
            path = path_to_makefile.makefile_dir
        else:
            path = path_to_makefile
        log.execute('%s %s in %s' % (self.make, " ".join(extra_opts), path))
        oldcwd = path.chdir()
        try:
            returncode, stdout, stderr = _run_subprocess(
                self.make,
                ['/nologo', '/f', str(path.join('Makefile'))] + extra_opts,
                env=self.c_environ)
        finally:
            oldcwd.chdir()

        self._handle_error(returncode, stdout, stderr, path.join('make'))
Exemplo n.º 14
0
    def __init__(self, cc=None, x64=False, ver0=None):
        self.x64 = x64
        patch_os_env(self.externals)
        self.c_environ = os.environ.copy()
        if cc is None:
            msvc_compiler_environ, self.vsver = find_msvc_env(x64, ver0=ver0)
            Platform.__init__(self, 'cl.exe')
            if msvc_compiler_environ:
                self.c_environ.update(msvc_compiler_environ)
                self.version = "MSVC %s" % str(self.vsver)
                if self.vsver > 90:
                    tag = '14x'
                else:
                    tag = '%d' % self.vsver
                if x64:
                    self.externals_branch = 'win64_%s' % tag
                else:
                    self.externals_branch = 'win32_%s' % tag
        else:
            self.cc = cc

        # Try to find a masm assembler
        returncode, stdout, stderr = _run_subprocess(
            'ml.exe' if not x64 else 'ml64.exe', [], env=self.c_environ)
        r = re.search('Macro Assembler', stderr)
        if r is None and os.path.exists('c:/masm32/bin/ml.exe'):
            masm32 = 'c:/masm32/bin/ml.exe'
            masm64 = 'c:/masm64/bin/ml64.exe'
        else:
            masm32 = 'ml.exe'
            masm64 = 'ml64.exe'

        if x64:
            self.masm = masm64
        else:
            self.masm = masm32

        # Install debug options only when interpreter is in debug mode
        if sys.executable.lower().endswith('_d.exe'):
            self.cflags = ['/MDd', '/Z7', '/Od']

            # Increase stack size, for the linker and the stack check code.
            stack_size = 8 << 20  # 8 Mb
            self.link_flags = self.link_flags + ('/STACK:%d' % stack_size, )
            # The following symbol is used in c/src/stack.h
            self.cflags.append('/DMAX_STACK_SIZE=%d' % (stack_size - 1024))
Exemplo n.º 15
0
 def _pkg_config(self, lib, opt, default, check_result_dir=False):
     try:
         ret, out, err = _run_subprocess("pkg-config", [lib, opt])
     except OSError, e:
         err = str(e)
         ret = 1
Exemplo n.º 16
0
 def _pkg_config(self, lib, opt, default, check_result_dir=False):
     try:
         ret, out, err = _run_subprocess("pkg-config", [lib, opt])
     except OSError, e:
         err = str(e)
         ret = 1