classification
Title: distutils compilers are unicode strings on OS X since Python 2.7.4
Type: Stage: resolved
Components: Distutils Versions: Python 2.7
process
Status: closed Resolution: duplicate
Dependencies: Superseder: Extension module builds fail on OS X with TypeError if Xcode command line tools not installed
View: 18071
Assigned To: ned.deily Nosy List: Alexey.Borzenkov, eric.araujo, ned.deily, schmir, tarek
Priority: normal Keywords:

Created on 2013-07-28 14:18 by Alexey.Borzenkov, last changed 2013-07-30 21:49 by ned.deily. This issue is now closed.

Messages (2)
msg193826 - (view) Author: Alexey Borzenkov (Alexey.Borzenkov) Date: 2013-07-28 14:18
A user reported getting a TypeError when building greenlet on OS X with Python 2.7.4 built with homebrew. The TypeError happens because we subclass build_ext so before building extensions we can change compiler's compiler_so. The problem is that instead of a list it's a unicode string.

I couldn't reproduce the problem myself, but I traced it to the following:

In Lib/distutils/ccompiler.py, method CCompiler.set_executable, type check is only for str. So if set_executable is called with a unicode string is would not be turned into a list.

In Lib/_osx_support.py, function _read_output, the output is always decoded as utf-8 (why?). This function is used in _find_build_tool, which in turn is used in _find_appropriate_compiler, but only if it cannot find the compiler on the PATH (not sure when this could happen, when the user doesn't have Command Line Support installed?). Because of this compiler will be configured as a unicode string and this would probably mean no extensions can be built.

I this either _osx_support should be fixed to not decode output as utf-8, or set_executable should be fixed to test for basestring instead of str.
msg193960 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2013-07-30 21:49
Thanks for the analysis.  I'm consolidating this issue with Issue18071.
History
Date User Action Args
2013-07-30 21:49:20ned.deilysetmessages: - msg193830
2013-07-30 21:49:12ned.deilysetstatus: open -> closed

messages: + msg193960
2013-07-28 15:04:25ned.deilysetassignee: eric.araujo -> ned.deily
superseder: Extension module builds fail on OS X with TypeError if Xcode command line tools not installed

nosy: + ned.deily
messages: + msg193830
resolution: duplicate
stage: resolved
2013-07-28 14:51:23schmirsetnosy: + schmir
2013-07-28 14:18:25Alexey.Borzenkovcreate