12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- from __future__ import division, absolute_import, print_function
- 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']
|