def calculate()

in tools/cef_api_hash.py [0:0]


  def calculate(self):
    filenames = [
        filename for filename in self.__get_filenames()
        if not filename in self.excluded_files
    ]

    objects = []
    for filename in filenames:
      if self.__verbose:
        print("Processing " + filename + "...")
      content = read_file(os.path.join(self.__headerdir, filename), True)
      platforms = list([
          p for p in self.platforms if self.__is_platform_filename(filename, p)
      ])

      # Parse cef_string.h happens in special case: grab only defined CEF_STRING_TYPE_xxx declaration
      content_objects = None
      if filename == "internal/cef_string.h":
        content_objects = self.__parse_string_type(content)
      else:
        content_objects = self.__parse_objects(content)

      for o in content_objects:
        o["text"] = self.__prepare_text(o["text"])
        o["platforms"] = platforms
        o["filename"] = filename
        objects.append(o)

    # objects will be sorted including filename, to make stable universal hashes
    objects = sorted(objects, key=lambda o: o["name"] + "@" + o["filename"])

    if self.__debug_enabled:
      namelen = max([len(o["name"]) for o in objects])
      filenamelen = max([len(o["filename"]) for o in objects])
      dumpsig = []
      for o in objects:
        dumpsig.append(
            format(o["name"], str(namelen) + "s") + "|" + format(
                o["filename"], "" + str(filenamelen) + "s") + "|" + o["text"])
      self.__write_debug_file("objects.txt", dumpsig)

    revisions = {}

    for platform in itertools.chain(["universal"], self.platforms):
      sig = self.__get_final_sig(objects, platform)
      if self.__debug_enabled:
        self.__write_debug_file(platform + ".sig", sig)
      revstr = hashlib.sha1(sig.encode('utf-8')).hexdigest()
      revisions[platform] = revstr

    return revisions