Platform naming standardization
Hi, I'm involved with a software project that makes extensive use of third party modules with C extensions. To ease installation, we pre-build them for some popular platforms and provide a distribution system for the app to fetch them. setuptools uses distutils.util.get_platform() to decide whether an egg found on the path is compatible, with some special extra magic added in for Mac OS X. Unfortunately, get_platform() as implemented does not provide enough information to ensure binary compatibility. Among the platforms we use, these are the issues: 1) On all platforms, interpreters compiled with UCS2 and UCS4 are binary incompatible, so modules compiled on one will fail to import on the other. We work around this by appending -ucsX to the platform string, based on the value of sys.maxunicode. 2) On OS X, the modification to the value returned by pkg_resources.get_platform() isn't correct for fat version of Python 2.5, as detailed in setuptools issue 19. To solve that, we're using the patch I submitted to the issue (with a couple recent changes). 3) On Solaris (and likely other UNIXes where 32 and 64 bit user spaces coexist), no distinction is made between a 32 bit and 64 bit interpreter, and they are not binary compatible. We work around this by checking sys.maxint, and right now in testing I'm appending -32 or -64 to the platform string (but before -ucsX). I haven't settled on this, though, since I have a feeling maybe it should be part of the arch (sun4u_32, i86pc_64, etc.) or something like 'solaris32' and 'solaris64' instead of 'solaris'. 4) Also on Solaris, the OS is binary compatible with older releases, so Solaris binary distributors will often build on the oldest reasonable release. This is not possible with setuptools now, although extending pkg_resources.compatible_platforms() in pretty much the same manner as is done for OS X solves this (and I can provide a patch). It's not even crucial to me that these be fixed, but before I continue to hack up the platform string, I wanted to ask the SIG to address these issues and hopefully decide on a standard. That way, I can at least implement patches in my app that will be compatible with whatever (if anything) is decided. Thanks, --nate
participants (7)
-
Chris Withers
-
David Cournapeau
-
David Lyon
-
M.-A. Lemburg
-
Nate Coraor
-
Ronald Oussoren
-
Tarek Ziadé