#!/usr/bin/python

# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os
import subprocess
import sys

import check_icf
import check_cus
import check_exist

elf_checks = [check_exist.check_exist_all,
              check_cus.check_compile_units,
              check_icf.check_identical_code_folding]

def scanelf(root):
    """find ELFs in root

    Args:
        root: root dir to start with the search.
    Returns:
        Filenames of ELFs in root.
    """
    p = subprocess.Popen(['scanelf', '-y', '-B', '-F', '%F', '-R', root],
                         stdout=subprocess.PIPE)
    return [l.strip() for l in p.stdout]

def Main(argv):
    if len(argv) < 2:
        print('usage: %s [file|dir]')
        return 1

    files = []
    cand = argv[1]
    if os.path.isfile(cand):
        files = [cand]
    elif os.path.isdir(cand):
        files = scanelf(cand)
    else:
        print('usage: %s [file|dir]')
        return 1

    failed = False
    for f in files:
        for c in elf_checks:
            if not c(f):
                failed = True

    if failed:
        return 1
    return 0

if __name__ == '__main__':
    sys.exit(Main(sys.argv))
