web/lib/arch/osx/jcc/patches/patch.43.0.6c7
changeset 29 cc9b7e14412b
equal deleted inserted replaced
28:b758351d191f 29:cc9b7e14412b
       
     1 Index: setuptools/extension.py
       
     2 ===================================================================
       
     3 --- setuptools/extension.py	(revision 66382)
       
     4 +++ setuptools/extension.py	(working copy)
       
     5 @@ -28,6 +28,11 @@
       
     6  class Library(Extension):
       
     7      """Just like a regular Extension, but built as a library instead"""
       
     8  
       
     9 +    def __init__(self, *args, **kwds):
       
    10 +        self.force_shared = kwds.pop('force_shared', False)
       
    11 +        Extension.__init__(self, *args, **kwds)
       
    12 +
       
    13 +
       
    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)
       
    21 @@ -84,8 +84,12 @@
       
    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:
       
    26 +                _libtype = 'shared'
       
    27 +            else:
       
    28 +                _libtype = libtype
       
    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)
       
    35 @@ -170,14 +174,22 @@
       
    36      def build_extension(self, ext):
       
    37          _compiler = self.compiler
       
    38          try:
       
    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
       
    43 +                if force_shared:
       
    44 +                    self.compiler.link_shared_object = \
       
    45 +                        sh_link_shared_object.__get__(self.compiler)
       
    46              _build_ext.build_extension(self,ext)
       
    47              if ext._needs_stub:
       
    48                  self.write_stub(
       
    49                      self.get_finalized_command('build_py').build_lib, ext
       
    50                  )
       
    51          finally:
       
    52 +            if force_shared:
       
    53 +                self.compiler.link_shared_object = \
       
    54 +                    link_shared_object.__get__(self.compiler)
       
    55              self.compiler = _compiler
       
    56  
       
    57      def links_to_dynamic(self, ext):
       
    58 @@ -244,44 +256,41 @@
       
    59                  os.unlink(stub_file)
       
    60  
       
    61  
       
    62 -if use_stubs or os.name=='nt':
       
    63 -    # Build shared libraries
       
    64 -    #
       
    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
       
    69 -    ):  self.link(
       
    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
       
    74 -        )
       
    75 -else:
       
    76 -    # Build static libraries everywhere else
       
    77 -    libtype = 'static'
       
    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)
       
    86  
       
    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
       
    91 -    ):
       
    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,
       
    96 -        #build_temp=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
       
   101 +):
       
   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,
       
   106 +    #build_temp=None
       
   107  
       
   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:]
       
   122  
       
   123 -        self.create_static_lib(
       
   124 -            objects, basename, output_dir, debug, target_lang
       
   125 -        )
       
   126 +    self.create_static_lib(objects, basename, output_dir, debug, target_lang)
       
   127  
       
   128  
       
   129 +if use_stubs or os.name=='nt':
       
   130 +    # Build shared libraries
       
   131 +    link_shared_object = sh_link_shared_object
       
   132 +else:
       
   133 +    # Build static libraries everywhere else (unless force_shared)
       
   134 +    libtype = 'static'
       
   135 +    link_shared_object = st_link_shared_object