| Viewing file:  msvccompiler.py (2.58 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
import osfrom distutils.msvccompiler import MSVCCompiler as _MSVCCompiler
 
 from .system_info import platform_bits
 
 
 def _merge(old, new):
 """Concatenate two environment paths avoiding repeats.
 
 Here `old` is the environment string before the base class initialize
 function is called and `new` is the string after the call. The new string
 will be a fixed string if it is not obtained from the current environment,
 or the same as the old string if obtained from the same environment. The aim
 here is not to append the new string if it is already contained in the old
 string so as to limit the growth of the environment string.
 
 Parameters
 ----------
 old : string
 Previous environment string.
 new : string
 New environment string.
 
 Returns
 -------
 ret : string
 Updated environment string.
 
 """
 if new in old:
 return old
 if not old:
 return new
 
 # Neither new nor old is empty. Give old priority.
 return ';'.join([old, new])
 
 
 class MSVCCompiler(_MSVCCompiler):
 def __init__(self, verbose=0, dry_run=0, force=0):
 _MSVCCompiler.__init__(self, verbose, dry_run, force)
 
 def initialize(self):
 # The 'lib' and 'include' variables may be overwritten
 # by MSVCCompiler.initialize, so save them for later merge.
 environ_lib = os.getenv('lib', '')
 environ_include = os.getenv('include', '')
 _MSVCCompiler.initialize(self)
 
 # Merge current and previous values of 'lib' and 'include'
 os.environ['lib'] = _merge(environ_lib, os.environ['lib'])
 os.environ['include'] = _merge(environ_include, os.environ['include'])
 
 # msvc9 building for 32 bits requires SSE2 to work around a
 # compiler bug.
 if platform_bits == 32:
 self.compile_options += ['/arch:SSE2']
 self.compile_options_debug += ['/arch:SSE2']
 
 
 def lib_opts_if_msvc(build_cmd):
 """ Add flags if we are using MSVC compiler
 
 We can't see `build_cmd` in our scope, because we have not initialized
 the distutils build command, so use this deferred calculation to run
 when we are building the library.
 """
 if build_cmd.compiler.compiler_type != 'msvc':
 return []
 # Explicitly disable whole-program optimization.
 flags = ['/GL-']
 # Disable voltbl section for vc142 to allow link using mingw-w64; see:
 # https://github.com/matthew-brett/dll_investigation/issues/1#issuecomment-1100468171
 if build_cmd.compiler_opt.cc_test_flags(['-d2VolatileMetadata-']):
 flags.append('-d2VolatileMetadata-')
 return flags
 
 |