[Distutils] conditionally compiling extensions

Phillip J. Eby pje at telecommunity.com
Mon Mar 5 21:35:16 CET 2007


At 03:13 PM 3/5/2007 -0500, Christopher Armstrong wrote:
>Twisted has a few extension modules that it only wants to build if
>certain things are available on the platform - like epoll support if
>the epoll.h header file is available, for example.
>
>We can call a function to run some code to decide which extensions to
>build, but in certain cases having access to the compiler object in
>distutils would be preferable -- to test certain things about the
>platform. Currently we have some fairly heinous hacks to get our code
>to run *after* that compiler object is available (i.e., after it's
>constructed in build_ext.run), but these hacks are becoming
>problematic especially for easy_install support.
>
>Before showing what these hacks are (if you really care, you can check
>the various setup.py files in the Twisted repository), I'd like to ask
>if there is any other best-practice knowledge in the community for
>conditionally building extensions based on knowledge only available by
>using a compiler.

I don't know of any better practices, unfortunately -- certainly nothing 
that's available portably at the pure distutils level.

Setuptools has a primitive "features" system that is used by a few PEAK 
packages, but it's undocumented and it suffers from a fatal flaw of not 
noticing that the configuration has changed (and thus requires clean rebuilds).

I've thought about adding a "configure" command in 0.7 with some sort of 
cache facility (and support for wiping out build/ when this information 
changes).  However, the real problem with having any sort of feature/option 
type stuff in setuptools is how to specify egg platform information.  I 
mean, how many flags can we really put in the filename, after all?  :)

I'm definitely interested in solving this and related problems, but I have 
very few ideas about how to do it.



More information about the Distutils-SIG mailing list