code: def setup_shlib_compiler(self):
      compiler = self.shlib_compiler = new_compiler(
          compiler=self.compiler, dry_run=self.dry_run, force=self.force
      )
      _customize_compiler_for_shlib(compiler)
  
      if self.include_dirs is not None:
          compiler.set_include_dirs(self.include_dirs)
      if self.define is not None:
          # 'define' option is a list of (name,value) tuples
          for name, value in self.define:
              compiler.define_macro(name, value)
      if self.undef is not None:
          for macro in self.undef:
              compiler.undefine_macro(macro)
      if self.libraries is not None:
          compiler.set_libraries(self.libraries)
      if self.library_dirs is not None:
          compiler.set_library_dirs(self.library_dirs)
      if self.rpath is not None:
          compiler.set_runtime_library_dirs(self.rpath)
      if self.link_objects is not None:
          compiler.set_link_objects(self.link_objects)
  
      # hack so distutils' build_extension() builds a library instead
      compiler.link_shared_object = link_shared_object.__get__(compiler)
  
imports: import os
  import sys
  import itertools
  from distutils.command.build_ext import build_ext
  from distutils.file_util import copy_file
  from distutils.ccompiler import new_compiler
  from distutils.sysconfig import customize_compiler, get_config_var
  from distutils.errors import DistutilsError
  from distutils import log
  from setuptools.extension import Library
  from setuptools.extern import six
  from distutils.sysconfig import _config_vars
label_desc: Use image node_id 6 for calling the build_ext obj's underlying member method code with example usage: obj.setup_shlib_compiler() without return types