code: def clang_search_dirs() -> List[str]:
      # Compilers are ordered based on fallback preference
      # We pick the first one that is available on the system
      compilers = ["clang", "gcc", "cpp", "cc"]
      compilers = [c for c in compilers if shutil.which(c) is not None]
      if len(compilers) == 0:
          raise RuntimeError(f"None of {compilers} were found")
      compiler = compilers[0]
  
      result = subprocess.run(
          [compiler, "-E", "-x", "c++", "-", "-v"],
          stdin=subprocess.DEVNULL,
          capture_output=True,
          check=True,
      )
      stderr = result.stderr.decode().strip().split("\n")
      search_start = r"#include.*search starts here:"
      search_end = r"End of search list."
  
      append_path = False
      search_paths = []
      for line in stderr:
          if re.match(search_start, line):
              if append_path:
                  continue
              else:
                  append_path = True
          elif re.match(search_end, line):
              break
          elif append_path:
              search_paths.append(line.strip())
  
      return search_paths
  
imports: import argparse
  import concurrent.futures
  import json
  import logging
  import os
  import re
  import shutil
  import subprocess
  import sys
  import time
  from enum import Enum
  from pathlib import Path
  from sysconfig import get_paths
  from typing import Any, List, NamedTuple, Optional, Pattern
label_desc: Use image node_id 5 for calling a global function with example usage: clang_search_dirs() and returns: search_paths