cmrit
/
cmrithackathon-master
/.venv
/lib
/python3.11
/site-packages
/numpy
/distutils
/msvccompiler.py
import os | |
from 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 | |