code: def run_compile():
      """
      Do it all in one call!
      """
      import tempfile
  
      i = sys.argv.index("-c")
      del sys.argv[i]
  
      remove_build_dir = 0
      try:
          i = sys.argv.index("--build-dir")
      except ValueError:
          i = None
      if i is not None:
          build_dir = sys.argv[i + 1]
          del sys.argv[i + 1]
          del sys.argv[i]
      else:
          remove_build_dir = 1
          build_dir = tempfile.mkdtemp()
  
      _reg1 = re.compile(r"[-][-]link[-]")
      sysinfo_flags = [_m for _m in sys.argv[1:] if _reg1.match(_m)]
      sys.argv = [_m for _m in sys.argv if _m not in sysinfo_flags]
      if sysinfo_flags:
          sysinfo_flags = [f[7:] for f in sysinfo_flags]
  
      _reg2 = re.compile(
          r"[-][-]((no[-]|)(wrap[-]functions|lower)|debug[-]capi|quiet)|[-]include"
      )
      f2py_flags = [_m for _m in sys.argv[1:] if _reg2.match(_m)]
      sys.argv = [_m for _m in sys.argv if _m not in f2py_flags]
      f2py_flags2 = []
      fl = 0
      for a in sys.argv[1:]:
          if a in ["only:", "skip:"]:
              fl = 1
          elif a == ":":
              fl = 0
          if fl or a == ":":
              f2py_flags2.append(a)
      if f2py_flags2 and f2py_flags2[-1] != ":":
          f2py_flags2.append(":")
      f2py_flags.extend(f2py_flags2)
  
      sys.argv = [_m for _m in sys.argv if _m not in f2py_flags2]
      _reg3 = re.compile(
          r"[-][-]((f(90)?compiler([-]exec|)|compiler)=|help[-]compiler)"
      )
      flib_flags = [_m for _m in sys.argv[1:] if _reg3.match(_m)]
      sys.argv = [_m for _m in sys.argv if _m not in flib_flags]
      _reg4 = re.compile(
          r"[-][-]((f(77|90)(flags|exec)|opt|arch)=|(debug|noopt|noarch|help[-]fcompiler))"
      )
      fc_flags = [_m for _m in sys.argv[1:] if _reg4.match(_m)]
      sys.argv = [_m for _m in sys.argv if _m not in fc_flags]
  
      if 1:
          del_list = []
          for s in flib_flags:
              v = "--fcompiler="
              if s[: len(v)] == v:
                  from numpy.distutils import fcompiler
  
                  fcompiler.load_all_fcompiler_classes()
                  allowed_keys = list(fcompiler.fcompiler_class.keys())
                  nv = ov = s[len(v) :].lower()
                  if ov not in allowed_keys:
                      vmap = {}  # XXX
                      try:
                          nv = vmap[ov]
                      except KeyError:
                          if ov not in vmap.values():
                              print(
                                  'Unknown vendor: "%s"' % (s[len(v) :])
                              )
                      nv = ov
                  i = flib_flags.index(s)
                  flib_flags[i] = "--fcompiler=" + nv
                  continue
          for s in del_list:
              i = flib_flags.index(s)
              del flib_flags[i]
          assert len(flib_flags) <= 2, repr(flib_flags)
  
      _reg5 = re.compile(r"[-][-](verbose)")
      setup_flags = [_m for _m in sys.argv[1:] if _reg5.match(_m)]
      sys.argv = [_m for _m in sys.argv if _m not in setup_flags]
  
      if "--quiet" in f2py_flags:
          setup_flags.append("--quiet")
  
      modulename = "untitled"
      sources = sys.argv[1:]
  
      for optname in ["--include_paths", "--include-paths"]:
          if optname in sys.argv:
              i = sys.argv.index(optname)
              f2py_flags.extend(sys.argv[i : i + 2])
              del sys.argv[i + 1], sys.argv[i]
              sources = sys.argv[1:]
  
      if "-m" in sys.argv:
          i = sys.argv.index("-m")
          modulename = sys.argv[i + 1]
          del sys.argv[i + 1], sys.argv[i]
          sources = sys.argv[1:]
      else:
          from numpy.distutils.command.build_src import (
              get_f2py_modulename,
          )
  
          pyf_files, sources = filter_files(
              "", "[.]pyf([.]src|)", sources
          )
          sources = pyf_files + sources
          for f in pyf_files:
              modulename = get_f2py_modulename(f)
              if modulename:
                  break
  
      extra_objects, sources = filter_files("", "[.](o|a|so)", sources)
      include_dirs, sources = filter_files(
          "-I", "", sources, remove_prefix=1
      )
      library_dirs, sources = filter_files(
          "-L", "", sources, remove_prefix=1
      )
      libraries, sources = filter_files(
          "-l", "", sources, remove_prefix=1
      )
      undef_macros, sources = filter_files(
          "-U", "", sources, remove_prefix=1
      )
      define_macros, sources = filter_files(
          "-D", "", sources, remove_prefix=1
      )
      for i in range(len(define_macros)):
          name_value = define_macros[i].split("=", 1)
          if len(name_value) == 1:
              name_value.append(None)
          if len(name_value) == 2:
              define_macros[i] = tuple(name_value)
          else:
              print("Invalid use of -D:", name_value)
  
      from numpy.distutils.system_info import get_info
  
      num_info = {}
      if num_info:
          include_dirs.extend(num_info.get("include_dirs", []))
  
      from numpy.distutils.core import setup, Extension
  
      ext_args = {
          "name": modulename,
          "sources": sources,
          "include_dirs": include_dirs,
          "library_dirs": library_dirs,
          "libraries": libraries,
          "define_macros": define_macros,
          "undef_macros": undef_macros,
          "extra_objects": extra_objects,
          "f2py_options": f2py_flags,
      }
  
      if sysinfo_flags:
          from numpy.distutils.misc_util import dict_append
  
          for n in sysinfo_flags:
              i = get_info(n)
              if not i:
                  outmess(
                      "No %s resources found in system"
                      " (try `f2py --help-link`)\n" % (repr(n))
                  )
              dict_append(ext_args, **i)
  
      ext = Extension(**ext_args)
      sys.argv = [sys.argv[0]] + setup_flags
      sys.argv.extend(
          [
              "build",
              "--build-temp",
              build_dir,
              "--build-base",
              build_dir,
              "--build-platlib",
              ".",
          ]
      )
      if fc_flags:
          sys.argv.extend(["config_fc"] + fc_flags)
      if flib_flags:
          sys.argv.extend(["build_ext"] + flib_flags)
  
      setup(ext_modules=[ext])
  
      if remove_build_dir and os.path.exists(build_dir):
          import shutil
  
          outmess("Removing build directory %s\n" % (build_dir))
          shutil.rmtree(build_dir)
  
imports: from __future__ import division, absolute_import, print_function
  import sys
  import os
  import pprint
  import re
  from .None import crackfortran
  from .None import rules
  from .None import cb_rules
  from .None import auxfuncs
  from .None import cfuncs
  from .None import f90mod_rules
  from .None import __version__
label_desc: Use image node_id 8 for calling a global function with example usage: run_compile() without return types