[Pythonmac-SIG] OS X Python: can I explicitly set MACOSX_DEPLOYMENT_TARGET for extensions?

Barry Scott barry at barrys-emacs.org
Tue Oct 27 08:59:32 EDT 2015


On Tuesday 27 October 2015 12:34:11 Ronald Oussoren wrote:
> Op 27 okt. 2015 om 09:42 heeft Barry Scott <barry at barrys-emacs.org> het 
volgende geschreven:
> >> On 19 Oct 2015, at 16:25, Andrew Jaffe <a.h.jaffe at gmail.com> wrote:
> >> 
> >> [Also posted to general python list...]
> >> 
> >> I use the python.org framework build of Python under recent versions of
> >> OS X (i.e., 10.11 El Capitan). I need to build some extensions that rely
> >> on recent versions of compilers (e.g., C++-11 features). However the
> >> python.org python is built to work on older systems as well, for
> >> backward compatibility.
> >> 
> >> Hence, it has the environment variable MACOSX_DEPLOYMENT_TARGET=10.6.
> >> This means that extensions are built by default with a toolchain that, I
> >> think, mimics gcc-4.2, in particular in terms of what stdlib it searches.
> >> 
> >> In the past, I have fixed this by installing more recent compilers with
> >> homebrew and explicitly setting CC, CXX, etc before installation.
> >> 
> >> However, I have tried just setting MACOSX_DEPLOYMENT_TARGET=10.11, and
> >> that seems to work. Is this safe? Are there any downsides? (I don't need
> >> to distribute these builds, just use them locally?)
> > 
> > I built pysvn with MACOSX_DEPLOYMENT_TARGET being 10.9, 10.10 and 10.11
> > without issue. But I am not using c++11 features yet.
> > 
> > I’m facing the problem that the SDK for 10.9 and 10.10 is missing from the
> > latest Xcode release. It only has 10.11 SDK. I’m planning to use a VM
> > running OS X 10.10 with the previous Xcode for public builds, which is
> > not your problem.
> > 
> > On windows I have seen issues with runtime API incompatibly between older
> > and newer compiler. At least on Windows you must use the right compiler
> > and
> > runtime to match the python build you have.
> 
> That is almost never aan issue on OS X although YMMV.  The primary tricky
> part is using system provided versions of 3th party libraries.

What I neglected to say and your comments reminded me of is that I
use the SDK for the matching target to avoid issues with missing API.
That has helped with compat with openssl and sqlite for example.

> > Linux is trouble free as python is built with the distribution’s chosen
> > compiler which is the one you use to build the extension.
> > 
> >> Conversely, are there any upsides? Does a newer deployment target allow
> >> more recent compilers and/or higher optimizations?
> > 
> > The upside is indeed better compiler and access to newer/fixed APIs.
> 
> Not really. The deployment target tells the compiler the lowest OS X version
> you want to deploy to and doesn't affect which APIs you can use. APIs not
> available on older OSX versions can still be used, but are weak linked and
> that means C function pointers might be NULL.

Interesting I did not know that.

> In a small number of cases the deployment target affects the function
> signature of UNIX APIs, but AFAIK that was only used with the introduction
> of 64bit on OSX and shouldn't affect code running on OS X 10.5 or later.

Barry

> 
> Ronald
> 
> > Barry
> > 
> >> -Andrew
> >> 
> >> _______________________________________________
> >> Pythonmac-SIG maillist  -  Pythonmac-SIG at python.org
> >> https://mail.python.org/mailman/listinfo/pythonmac-sig
> >> unsubscribe: https://mail.python.org/mailman/options/Pythonmac-SIG
> > 
> > _______________________________________________
> > Pythonmac-SIG maillist  -  Pythonmac-SIG at python.org
> > https://mail.python.org/mailman/listinfo/pythonmac-sig
> > unsubscribe: https://mail.python.org/mailman/options/Pythonmac-SIG
1


More information about the Pythonmac-SIG mailing list