code: def main():
      cmd_parts = split_cmd_by_delim(sys.argv[1:])
      assert len(cmd_parts) == 4
      args, javac_opts, peers, ktc_opts = cmd_parts
      opts, jsrcs = parse_args(args)
  
      jsrcs += list(filter(lambda x: x.endswith(".jsrc"), peers))
      peers = list(filter(lambda x: not x.endswith(".jsrc"), peers))
  
      sources_dir = "src"
      mkdir_p(sources_dir)
      for s in jsrcs:
          if s.endswith(".jsrc"):
              with contextlib.closing(tarfile.open(s, "r")) as tf:
                  tf.extractall(sources_dir)
  
      srcs = []
      for r, _, files in os.walk(sources_dir):
          for f in files:
              srcs.append(os.path.join(r, f))
      srcs += jsrcs
      ktsrcs = list(filter(lambda x: x.endswith(".kt"), srcs))
      srcs = list(filter(lambda x: x.endswith(".java"), srcs))
  
      classes_dir = "cls"
      mkdir_p(classes_dir)
      classpath = os.pathsep.join(peers)
  
      if srcs:
          temp_sources_file = "temp.sources.list"
          with open(temp_sources_file, "w") as ts:
              ts.write(" ".join(srcs))
  
      if ktsrcs:
          temp_kt_sources_file = "temp.kt.sources.list"
          with open(temp_kt_sources_file, "w") as ts:
              ts.write(" ".join(ktsrcs + srcs))
          kt_classes_dir = "kt_cls"
          mkdir_p(kt_classes_dir)
          sp.check_call(
              [
                  opts.java_bin,
                  "-Didea.max.content.load.filesize=30720",
                  "-jar",
                  opts.kotlin_compiler,
                  "-classpath",
                  classpath,
                  "-d",
                  kt_classes_dir,
              ]
              + ktc_opts
              + ["@" + temp_kt_sources_file]
          )
          classpath = os.pathsep.join([kt_classes_dir, classpath])
  
      if srcs:
          sp.check_call(
              [
                  opts.javac_bin,
                  "-nowarn",
                  "-g",
                  "-classpath",
                  classpath,
                  "-encoding",
                  "UTF-8",
                  "-d",
                  classes_dir,
              ]
              + javac_opts
              + ["@" + temp_sources_file]
          )
  
      for s in jsrcs:
          if s.endswith("-sources.jar"):
              with zipfile.ZipFile(s) as zf:
                  zf.extractall(sources_dir)
  
          elif s.endswith(".jar"):
              with zipfile.ZipFile(s) as zf:
                  zf.extractall(classes_dir)
  
      if ktsrcs:
          dir_util.copy_tree(kt_classes_dir, classes_dir)
  
      if opts.vcs_mf:
          sp.check_call(
              [
                  opts.jar_bin,
                  "cfm",
                  opts.jar_output,
                  opts.vcs_mf,
                  os.curdir,
              ],
              cwd=classes_dir,
          )
      else:
          sp.check_call(
              [opts.jar_bin, "cfM", opts.jar_output, os.curdir],
              cwd=classes_dir,
          )
  
      if opts.srcs_jar_output:
          for s in jsrcs:
              if s.endswith(".java"):
                  if opts.package_prefix:
                      d = os.path.join(
                          sources_dir,
                          *(
                              opts.package_prefix.split(".")
                              + [os.path.basename(s)]
                          ),
                      )
  
                  else:
                      d = os.path.join(sources_dir, os.path.basename(s))
  
                  shutil.copyfile(s, d)
  
          if opts.vcs_mf:
              sp.check_call(
                  [
                      opts.jar_bin,
                      "cfm",
                      opts.srcs_jar_output,
                      opts.vcs_mf,
                      os.curdir,
                  ],
                  cwd=sources_dir,
              )
          else:
              sp.check_call(
                  [
                      opts.jar_bin,
                      "cfM",
                      opts.srcs_jar_output,
                      os.curdir,
                  ],
                  cwd=sources_dir,
              )
  
file_path: catboost/build/scripts/compile_java.py
imports: import argparse
  import contextlib
  from distutils import dir_util
  import os
  import shutil
  import subprocess
  import tarfile
  import zipfile
  import sys
label_desc: Use image node_id 4 for calling a global function with example usage: main() without return types