code: def c_file_out_of_date(self, source_path, output_path):
      if not os.path.exists(output_path):
          return 1
      c_time = Utils.modification_time(output_path)
      if Utils.file_newer_than(source_path, c_time):
          return 1
      pos = [source_path]
      pxd_path = Utils.replace_suffix(source_path, ".pxd")
      if os.path.exists(pxd_path) and Utils.file_newer_than(
          pxd_path, c_time
      ):
          return 1
      for kind, name in self.read_dependency_file(source_path):
          if kind == "cimport":
              dep_path = self.find_pxd_file(name, pos)
          elif kind == "include":
              dep_path = self.search_include_directories(name, pos)
          else:
              continue
          if dep_path and Utils.file_newer_than(dep_path, c_time):
              return 1
      return 0
  
imports: from __future__ import absolute_import
  import os
  import re
  import sys
  import io
  from .None import Errors
  from .StringEncoding import EncodedString
  from .Scanning import PyrexScanner, FileSourceDescriptor
  from .Errors import PyrexError, CompileError, error, warning
  from .Symtab import ModuleScope
  from ..None import Utils
  from .None import Options
  from .None import Version
label_desc: Use image node_id 14 for calling the Context obj's underlying member method code with example usage: obj.c_file_out_of_date(source_path, output_path) and returns: int, int, int, int, int