# -*- coding: utf-8 -*-
# Copyright 2018 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""check whether chrome was built with identical code folding."""


import os
import re
import subprocess


def check_identical_code_folding(dso_path):
    """check whether chrome was built with identical code folding.

    Args:
      dso_path: path to the dso.

    Returns:
      False if the dso is chrome and it was not built with icf,
      True otherwise.
    """

    if not dso_path.endswith("/chrome.debug"):
        return True

    # Run 'nm' on the chrome binary and read the output.
    nm = subprocess.Popen(
        ["nm", dso_path],
        stdout=subprocess.PIPE,
        stderr=open(os.devnull, "w"),
        encoding="utf-8",
    )
    nm_output, _ = nm.communicate()

    # Search for addresses of text symbols.
    text_addresses = re.findall("^[0-9a-f]+[ ]+[tT] ", nm_output, re.MULTILINE)

    # Calculate number of text symbols in chrome binary.
    num_text_addresses = len(text_addresses)

    # Calculate number of unique text symbols in chrome binary.
    num_unique_text_addresses = len(set(text_addresses))

    # Check that the number of duplicate symbols is at least 10,000.
    #   - https://crbug.com/813272#c18
    if num_text_addresses - num_unique_text_addresses >= 10000:
        return True

    print("%s was not built with ICF" % dso_path)
    print("    num_text_addresses = %d" % num_text_addresses)
    print("    num_unique_text_addresses = %d" % num_unique_text_addresses)
    return False
