jcc fails to build using setuptools 0.6c11 due to the version check being string based. The submitted patch jcc-setup.patch resoloves this.
hunk #1 of patch.43 fails on build_ext.py due to an if statement at line 85 in build_ext.py. The submitted patch setuptools-0.6c11, a modification of patch.43 resolves this. David
--- setup.py (original) +++ setup.py (new) @@ -112,13 +112,21 @@ with_setuptools = require('setuptools')[0].version enable_shared = False - if with_setuptools >= '0.6c7' and 'NO_SHARED' not in os.environ: + + # ----------- begin patch ------------- + # since the setuptools version check is a string comparison, + # the check fails for versions above 0.6c9 + # therefore, we must parse, conver to numbers and do number comparisons + first,second = with_setuptools.split('c') + first = float(first) + second = int(second) + if ( first > 0.6 or (first == 0.6 and second >= 7) ) and 'NO_SHARED' not in os.environ: if platform in ('darwin', 'ipod', 'win32'): enable_shared = True elif platform == 'linux2': try: from setuptools.command.build_ext import sh_link_shared_object - enable_shared = True # jcc/patches/patch.43 was applied + enable_shared = True # number comparison patch applied except ImportError: import setuptools jccdir = os.path.dirname(os.path.abspath(__file__))
Index: setuptools/extension.py =================================================================== --- setuptools/extension.py (revision 66382) +++ setuptools/extension.py (working copy) @@ -28,6 +28,11 @@ class Library(Extension): """Just like a regular Extension, but built as a library instead""" + def __init__(self, *args, **kwds): + self.force_shared = kwds.pop('force_shared', False) + Extension.__init__(self, *args, **kwds) + + import sys, distutils.core, distutils.extension distutils.core.Extension = Extension distutils.extension.Extension = Extension Index: setuptools/command/build_ext.py =================================================================== --- setuptools/command/build_ext.py (revision 66382) +++ setuptools/command/build_ext.py (working copy) @@ -85,8 +85,12 @@ if fullname in self.ext_map: ext = self.ext_map[fullname] if isinstance(ext,Library): + if ext.force_shared and not use_stubs: + _libtype = 'shared' + else: + _libtype = libtype fn, ext = os.path.splitext(filename) - return self.shlib_compiler.library_filename(fn,libtype) + return self.shlib_compiler.library_filename(fn,_libtype) elif use_stubs and ext._links_to_dynamic: d,fn = os.path.split(filename) return os.path.join(d,'dl-'+fn) @@ -170,14 +174,22 @@ def build_extension(self, ext): _compiler = self.compiler try: + force_shared = False if isinstance(ext,Library): self.compiler = self.shlib_compiler + force_shared = ext.force_shared and not use_stubs + if force_shared: + self.compiler.link_shared_object = \ + sh_link_shared_object.__get__(self.compiler) _build_ext.build_extension(self,ext) if ext._needs_stub: self.write_stub( self.get_finalized_command('build_py').build_lib, ext ) finally: + if force_shared: + self.compiler.link_shared_object = \ + link_shared_object.__get__(self.compiler) self.compiler = _compiler def links_to_dynamic(self, ext): @@ -244,44 +256,41 @@ os.unlink(stub_file) +def sh_link_shared_object(self, objects, output_libname, output_dir=None, + libraries=None, library_dirs=None, runtime_library_dirs=None, + export_symbols=None, debug=0, extra_preargs=None, + extra_postargs=None, build_temp=None, target_lang=None +): self.link(self.SHARED_LIBRARY, objects, output_libname, + output_dir, libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, extra_preargs, extra_postargs, + build_temp, target_lang) + +def st_link_shared_object(self, objects, output_libname, output_dir=None, + libraries=None, library_dirs=None, runtime_library_dirs=None, + export_symbols=None, debug=0, extra_preargs=None, + extra_postargs=None, build_temp=None, target_lang=None +): + # XXX we need to either disallow these attrs on Library instances, + # or warn/abort here if set, or something... + #libraries=None, library_dirs=None, runtime_library_dirs=None, + #export_symbols=None, extra_preargs=None, extra_postargs=None, + #build_temp=None + + assert output_dir is None # distutils build_ext doesn't pass this + output_dir,filename = os.path.split(output_libname) + basename, ext = os.path.splitext(filename) + if self.library_filename("x").startswith('lib'): + # strip 'lib' prefix; this is kludgy if some platform uses + # a different prefix + basename = basename[3:] + + self.create_static_lib(objects, basename, output_dir, debug, target_lang) + + if use_stubs or os.name=='nt': # Build shared libraries - # - def link_shared_object(self, objects, output_libname, output_dir=None, - libraries=None, library_dirs=None, runtime_library_dirs=None, - export_symbols=None, debug=0, extra_preargs=None, - extra_postargs=None, build_temp=None, target_lang=None - ): self.link( - self.SHARED_LIBRARY, objects, output_libname, - output_dir, libraries, library_dirs, runtime_library_dirs, - export_symbols, debug, extra_preargs, extra_postargs, - build_temp, target_lang - ) + link_shared_object = sh_link_shared_object else: - # Build static libraries everywhere else + # Build static libraries everywhere else (unless force_shared) libtype = 'static' - - def link_shared_object(self, objects, output_libname, output_dir=None, - libraries=None, library_dirs=None, runtime_library_dirs=None, - export_symbols=None, debug=0, extra_preargs=None, - extra_postargs=None, build_temp=None, target_lang=None - ): - # XXX we need to either disallow these attrs on Library instances, - # or warn/abort here if set, or something... - #libraries=None, library_dirs=None, runtime_library_dirs=None, - #export_symbols=None, extra_preargs=None, extra_postargs=None, - #build_temp=None - - assert output_dir is None # distutils build_ext doesn't pass this - output_dir,filename = os.path.split(output_libname) - basename, ext = os.path.splitext(filename) - if self.library_filename("x").startswith('lib'): - # strip 'lib' prefix; this is kludgy if some platform uses - # a different prefix - basename = basename[3:] - - self.create_static_lib( - objects, basename, output_dir, debug, target_lang - ) - - + link_shared_object = st_link_shared_object