class_docstr: Concrete class that implements an interface to the Borland C/C++
  compiler, as defined by the CCompiler abstract class.
code: def object_filenames(
      self, source_filenames, strip_dir=0, output_dir=""
  ):
      if output_dir is None:
          output_dir = ""
      obj_names = []
      for src_name in source_filenames:
          # use normcase to make sure '.rc' is really '.rc' and not '.RC'
          (base, ext) = os.path.splitext(os.path.normcase(src_name))
          if ext not in (self.src_extensions + [".rc", ".res"]):
              raise UnknownFileError(
                  "unknown file type '{}' (from '{}')".format(
                      ext, src_name
                  )
              )
          if strip_dir:
              base = os.path.basename(base)
          if ext == ".res":
              # these can go unchanged
              obj_names.append(os.path.join(output_dir, base + ext))
          elif ext == ".rc":
              # these need to be compiled to .res-files
              obj_names.append(os.path.join(output_dir, base + ".res"))
          else:
              obj_names.append(
                  os.path.join(output_dir, base + self.obj_extension)
              )
      return obj_names
  
file_path: catboost/contrib/python/setuptools/py3/setuptools/_distutils/bcppcompiler.py
imports: import os
  import warnings
  from .errors import DistutilsExecError, CompileError, LibError, LinkError, UnknownFileError
  from .ccompiler import CCompiler, gen_preprocess_options
  from .file_util import write_file
  from ._modified import newer
  from ._log import log
label_desc: Use image node_id 6 for calling the BCPPCompiler obj's underlying member method code with example usage: obj.object_filenames(source_filenames, strip_dir, output_dir) and returns: obj_names