#!/usr/bin/python2

# 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))
