Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 259591 | Differences between
and this patch

Collapse All | Expand All

(-)setuptools/extension.py (+5 lines)
Lines 28-33 Link Here
28
class Library(Extension):
28
class Library(Extension):
29
    """Just like a regular Extension, but built as a library instead"""
29
    """Just like a regular Extension, but built as a library instead"""
30
30
31
    def __init__(self, *args, **kwds):
32
        self.force_shared = kwds.pop('force_shared', False)
33
        Extension.__init__(self, *args, **kwds)
34
35
31
import sys, distutils.core, distutils.extension
36
import sys, distutils.core, distutils.extension
32
distutils.core.Extension = Extension
37
distutils.core.Extension = Extension
33
distutils.extension.Extension = Extension
38
distutils.extension.Extension = Extension
(-)setuptools/command/build_ext.py (-37 / +46 lines)
Lines 84-91 Link Here
84
        filename = _build_ext.get_ext_filename(self,fullname)
84
        filename = _build_ext.get_ext_filename(self,fullname)
85
        ext = self.ext_map[fullname]
85
        ext = self.ext_map[fullname]
86
        if isinstance(ext,Library):
86
        if isinstance(ext,Library):
87
            if ext.force_shared and not use_stubs:
88
                _libtype = 'shared'
89
            else:
90
                _libtype = libtype
87
            fn, ext = os.path.splitext(filename)
91
            fn, ext = os.path.splitext(filename)
88
            return self.shlib_compiler.library_filename(fn,libtype)
92
            return self.shlib_compiler.library_filename(fn,_libtype)
89
        elif use_stubs and ext._links_to_dynamic:
93
        elif use_stubs and ext._links_to_dynamic:
90
            d,fn = os.path.split(filename)
94
            d,fn = os.path.split(filename)
91
            return os.path.join(d,'dl-'+fn)
95
            return os.path.join(d,'dl-'+fn)
Lines 170-183 Link Here
170
    def build_extension(self, ext):
174
    def build_extension(self, ext):
171
        _compiler = self.compiler
175
        _compiler = self.compiler
172
        try:
176
        try:
177
            force_shared = False
173
            if isinstance(ext,Library):
178
            if isinstance(ext,Library):
174
                self.compiler = self.shlib_compiler
179
                self.compiler = self.shlib_compiler
180
                force_shared = ext.force_shared and not use_stubs
181
                if force_shared:
182
                    self.compiler.link_shared_object = \
183
                        sh_link_shared_object.__get__(self.compiler)
175
            _build_ext.build_extension(self,ext)
184
            _build_ext.build_extension(self,ext)
176
            if ext._needs_stub:
185
            if ext._needs_stub:
177
                self.write_stub(
186
                self.write_stub(
178
                    self.get_finalized_command('build_py').build_lib, ext
187
                    self.get_finalized_command('build_py').build_lib, ext
179
                )
188
                )
180
        finally:
189
        finally:
190
            if force_shared:
191
                self.compiler.link_shared_object = \
192
                    link_shared_object.__get__(self.compiler)
181
            self.compiler = _compiler
193
            self.compiler = _compiler
182
194
183
    def links_to_dynamic(self, ext):
195
    def links_to_dynamic(self, ext):
Lines 244-287 Link Here
244
                os.unlink(stub_file)
256
                os.unlink(stub_file)
245
257
246
258
247
if use_stubs or os.name=='nt':
259
def sh_link_shared_object(self, objects, output_libname, output_dir=None,
248
    # Build shared libraries
260
    libraries=None, library_dirs=None, runtime_library_dirs=None,
249
    #
261
    export_symbols=None, debug=0, extra_preargs=None,
250
    def link_shared_object(self, objects, output_libname, output_dir=None,
262
    extra_postargs=None, build_temp=None, target_lang=None
251
        libraries=None, library_dirs=None, runtime_library_dirs=None,
263
):  self.link(self.SHARED_LIBRARY, objects, output_libname,
252
        export_symbols=None, debug=0, extra_preargs=None,
264
              output_dir, libraries, library_dirs, runtime_library_dirs,
253
        extra_postargs=None, build_temp=None, target_lang=None
265
              export_symbols, debug, extra_preargs, extra_postargs,
254
    ):  self.link(
266
              build_temp, target_lang)
255
            self.SHARED_LIBRARY, objects, output_libname,
256
            output_dir, libraries, library_dirs, runtime_library_dirs,
257
            export_symbols, debug, extra_preargs, extra_postargs,
258
            build_temp, target_lang
259
        )
260
else:
261
    # Build static libraries everywhere else
262
    libtype = 'static'
263
267
264
    def link_shared_object(self, objects, output_libname, output_dir=None,
268
def st_link_shared_object(self, objects, output_libname, output_dir=None,
265
        libraries=None, library_dirs=None, runtime_library_dirs=None,
269
    libraries=None, library_dirs=None, runtime_library_dirs=None,
266
        export_symbols=None, debug=0, extra_preargs=None,
270
    export_symbols=None, debug=0, extra_preargs=None,
267
        extra_postargs=None, build_temp=None, target_lang=None
271
    extra_postargs=None, build_temp=None, target_lang=None
268
    ):
272
):
269
        # XXX we need to either disallow these attrs on Library instances,
273
    # XXX we need to either disallow these attrs on Library instances,
270
        #     or warn/abort here if set, or something...
274
    #     or warn/abort here if set, or something...
271
        #libraries=None, library_dirs=None, runtime_library_dirs=None,
275
    #libraries=None, library_dirs=None, runtime_library_dirs=None,
272
        #export_symbols=None, extra_preargs=None, extra_postargs=None,
276
    #export_symbols=None, extra_preargs=None, extra_postargs=None,
273
        #build_temp=None
277
    #build_temp=None
274
278
275
        assert output_dir is None   # distutils build_ext doesn't pass this
279
    assert output_dir is None   # distutils build_ext doesn't pass this
276
        output_dir,filename = os.path.split(output_libname)
280
    output_dir,filename = os.path.split(output_libname)
277
        basename, ext = os.path.splitext(filename)
281
    basename, ext = os.path.splitext(filename)
278
        if self.library_filename("x").startswith('lib'):
282
    if self.library_filename("x").startswith('lib'):
279
            # strip 'lib' prefix; this is kludgy if some platform uses
283
        # strip 'lib' prefix; this is kludgy if some platform uses
280
            # a different prefix
284
        # a different prefix
281
            basename = basename[3:]
285
        basename = basename[3:]
282
286
283
        self.create_static_lib(
287
    self.create_static_lib(objects, basename, output_dir, debug, target_lang)
284
            objects, basename, output_dir, debug, target_lang
285
        )
286
288
287
289
290
if use_stubs or os.name=='nt':
291
    # Build shared libraries
292
    link_shared_object = sh_link_shared_object
293
else:
294
    # Build static libraries everywhere else (unless force_shared)
295
    libtype = 'static'
296
    link_shared_object = st_link_shared_object

Return to bug 259591