Issue 2975: when compiling multiple extension modules with visual studio 2008

from the same python instance, some environment variables (LIB, INCLUDE)
would grow without limit.

Tested with these statements:
    distutils.ccompiler.new_compiler().initialize()
    print os.environ['LIB']
But I don't know how to turn them into reliable unit tests.
This commit is contained in:
Amaury Forgeot d'Arc 2008-09-02 23:19:56 +00:00
parent 042025f6b8
commit 293924bf31
2 changed files with 17 additions and 2 deletions

View File

@ -193,6 +193,17 @@ def normalize_and_reduce_paths(paths):
reduced_paths.append(np) reduced_paths.append(np)
return reduced_paths return reduced_paths
def removeDuplicates(variable):
"""Remove duplicate values of an environment variable.
"""
oldList = variable.split(os.pathsep)
newList = []
for i in oldList:
if i not in newList:
newList.append(i)
newVariable = os.pathsep.join(newList)
return newVariable
def find_vcvarsall(version): def find_vcvarsall(version):
"""Find the vcvarsall.bat file """Find the vcvarsall.bat file
@ -252,12 +263,12 @@ def query_vcvarsall(version, arch="x86"):
if '=' not in line: if '=' not in line:
continue continue
line = line.strip() line = line.strip()
key, value = line.split('=') key, value = line.split('=', 1)
key = key.lower() key = key.lower()
if key in interesting: if key in interesting:
if value.endswith(os.pathsep): if value.endswith(os.pathsep):
value = value[:-1] value = value[:-1]
result[key] = value result[key] = removeDuplicates(value)
if len(result) != len(interesting): if len(result) != len(interesting):
raise ValueError(str(list(result.keys()))) raise ValueError(str(list(result.keys())))

View File

@ -81,6 +81,10 @@ Library
Extension Modules Extension Modules
----------------- -----------------
- Issue #2975: When compiling several extension modules with Visual Studio 2008
from the same python interpreter, some environment variables would grow
without limit.
- Issue #3643: Added a few more checks to _testcapi to prevent segfaults by - Issue #3643: Added a few more checks to _testcapi to prevent segfaults by
exploitation of poor argument checking. exploitation of poor argument checking.