1 Index: setuptools/extension.py
2 ===================================================================
3 --- setuptools/extension.py (revision 66382)
4 +++ setuptools/extension.py (working copy)
6 class Library(Extension):
7 """Just like a regular Extension, but built as a library instead"""
9 + def __init__(self, *args, **kwds):
10 + self.force_shared = kwds.pop('force_shared', False)
11 + Extension.__init__(self, *args, **kwds)
14 import sys, distutils.core, distutils.extension
15 distutils.core.Extension = Extension
16 distutils.extension.Extension = Extension
17 Index: setuptools/command/build_ext.py
18 ===================================================================
19 --- setuptools/command/build_ext.py (revision 66382)
20 +++ setuptools/command/build_ext.py (working copy)
22 filename = _build_ext.get_ext_filename(self,fullname)
23 ext = self.ext_map[fullname]
24 if isinstance(ext,Library):
25 + if ext.force_shared and not use_stubs:
29 fn, ext = os.path.splitext(filename)
30 - return self.shlib_compiler.library_filename(fn,libtype)
31 + return self.shlib_compiler.library_filename(fn,_libtype)
32 elif use_stubs and ext._links_to_dynamic:
33 d,fn = os.path.split(filename)
34 return os.path.join(d,'dl-'+fn)
36 def build_extension(self, ext):
37 _compiler = self.compiler
39 + force_shared = False
40 if isinstance(ext,Library):
41 self.compiler = self.shlib_compiler
42 + force_shared = ext.force_shared and not use_stubs
44 + self.compiler.link_shared_object = \
45 + sh_link_shared_object.__get__(self.compiler)
46 _build_ext.build_extension(self,ext)
49 self.get_finalized_command('build_py').build_lib, ext
53 + self.compiler.link_shared_object = \
54 + link_shared_object.__get__(self.compiler)
55 self.compiler = _compiler
57 def links_to_dynamic(self, ext):
62 -if use_stubs or os.name=='nt':
63 - # Build shared libraries
65 - def link_shared_object(self, objects, output_libname, output_dir=None,
66 - libraries=None, library_dirs=None, runtime_library_dirs=None,
67 - export_symbols=None, debug=0, extra_preargs=None,
68 - extra_postargs=None, build_temp=None, target_lang=None
70 - self.SHARED_LIBRARY, objects, output_libname,
71 - output_dir, libraries, library_dirs, runtime_library_dirs,
72 - export_symbols, debug, extra_preargs, extra_postargs,
73 - build_temp, target_lang
76 - # Build static libraries everywhere else
78 +def sh_link_shared_object(self, objects, output_libname, output_dir=None,
79 + libraries=None, library_dirs=None, runtime_library_dirs=None,
80 + export_symbols=None, debug=0, extra_preargs=None,
81 + extra_postargs=None, build_temp=None, target_lang=None
82 +): self.link(self.SHARED_LIBRARY, objects, output_libname,
83 + output_dir, libraries, library_dirs, runtime_library_dirs,
84 + export_symbols, debug, extra_preargs, extra_postargs,
85 + build_temp, target_lang)
87 - def link_shared_object(self, objects, output_libname, output_dir=None,
88 - libraries=None, library_dirs=None, runtime_library_dirs=None,
89 - export_symbols=None, debug=0, extra_preargs=None,
90 - extra_postargs=None, build_temp=None, target_lang=None
92 - # XXX we need to either disallow these attrs on Library instances,
93 - # or warn/abort here if set, or something...
94 - #libraries=None, library_dirs=None, runtime_library_dirs=None,
95 - #export_symbols=None, extra_preargs=None, extra_postargs=None,
97 +def st_link_shared_object(self, objects, output_libname, output_dir=None,
98 + libraries=None, library_dirs=None, runtime_library_dirs=None,
99 + export_symbols=None, debug=0, extra_preargs=None,
100 + extra_postargs=None, build_temp=None, target_lang=None
102 + # XXX we need to either disallow these attrs on Library instances,
103 + # or warn/abort here if set, or something...
104 + #libraries=None, library_dirs=None, runtime_library_dirs=None,
105 + #export_symbols=None, extra_preargs=None, extra_postargs=None,
108 - assert output_dir is None # distutils build_ext doesn't pass this
109 - output_dir,filename = os.path.split(output_libname)
110 - basename, ext = os.path.splitext(filename)
111 - if self.library_filename("x").startswith('lib'):
112 - # strip 'lib' prefix; this is kludgy if some platform uses
113 - # a different prefix
114 - basename = basename[3:]
115 + assert output_dir is None # distutils build_ext doesn't pass this
116 + output_dir,filename = os.path.split(output_libname)
117 + basename, ext = os.path.splitext(filename)
118 + if self.library_filename("x").startswith('lib'):
119 + # strip 'lib' prefix; this is kludgy if some platform uses
120 + # a different prefix
121 + basename = basename[3:]
123 - self.create_static_lib(
124 - objects, basename, output_dir, debug, target_lang
126 + self.create_static_lib(objects, basename, output_dir, debug, target_lang)
129 +if use_stubs or os.name=='nt':
130 + # Build shared libraries
131 + link_shared_object = sh_link_shared_object
133 + # Build static libraries everywhere else (unless force_shared)
135 + link_shared_object = st_link_shared_object