Commit 9be57899 authored by Ned Deily's avatar Ned Deily

Issue #21923: Prevent AttributeError in distutils.sysconfig.customize_compiler

due to possible uninitialized _config_vars.  Original patch by Alex Gaynor.
parent 4f7e09a9
...@@ -165,7 +165,8 @@ def customize_compiler(compiler): ...@@ -165,7 +165,8 @@ def customize_compiler(compiler):
# version and build tools may not support the same set # version and build tools may not support the same set
# of CPU architectures for universal builds. # of CPU architectures for universal builds.
global _config_vars global _config_vars
if not _config_vars.get('CUSTOMIZED_OSX_COMPILER', ''): # Use get_config_var() to ensure _config_vars is initialized.
if not get_config_var('CUSTOMIZED_OSX_COMPILER'):
import _osx_support import _osx_support
_osx_support.customize_compiler(_config_vars) _osx_support.customize_compiler(_config_vars)
_config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True'
......
...@@ -3,6 +3,9 @@ import os ...@@ -3,6 +3,9 @@ import os
import test import test
import unittest import unittest
import shutil import shutil
import subprocess
import sys
import textwrap
from distutils import sysconfig from distutils import sysconfig
from distutils.tests import support from distutils.tests import support
...@@ -99,6 +102,24 @@ class SysconfigTestCase(support.EnvironGuard, ...@@ -99,6 +102,24 @@ class SysconfigTestCase(support.EnvironGuard,
self.assertEqual(global_sysconfig.get_config_var('LDSHARED'), sysconfig.get_config_var('LDSHARED')) self.assertEqual(global_sysconfig.get_config_var('LDSHARED'), sysconfig.get_config_var('LDSHARED'))
self.assertEqual(global_sysconfig.get_config_var('CC'), sysconfig.get_config_var('CC')) self.assertEqual(global_sysconfig.get_config_var('CC'), sysconfig.get_config_var('CC'))
def test_customize_compiler_before_get_config_vars(self):
# Issue #21923: test that a Distribution compiler
# instance can be called without an explicit call to
# get_config_vars().
with open(TESTFN, 'w') as f:
f.writelines(textwrap.dedent('''\
from distutils.core import Distribution
config = Distribution().get_command_obj('config')
# try_compile may pass or it may fail if no compiler
# is found but it should not raise an exception.
rc = config.try_compile('int x;')
'''))
p = subprocess.Popen([str(sys.executable), TESTFN],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True)
outs, errs = p.communicate()
self.assertEqual(0, p.returncode, "Subprocess failed: " + outs)
def test_suite(): def test_suite():
......
...@@ -22,6 +22,9 @@ Library ...@@ -22,6 +22,9 @@ Library
- Issue #19870: BaseCookie now parses 'secure' and 'httponly' flags. - Issue #19870: BaseCookie now parses 'secure' and 'httponly' flags.
Backport of issue #16611. Backport of issue #16611.
- Issue #21923: Prevent AttributeError in distutils.sysconfig.customize_compiler
due to possible uninitialized _config_vars.
What's New in Python 2.7.8? What's New in Python 2.7.8?
=========================== ===========================
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment