#!/usr/bin/env python
"""
sym_match - Match all symbols in a list against a list of regexes.
"""
from argparse import ArgumentParser
import sys
from sym_check import util, match, extract


def main():
    parser = ArgumentParser(
        description='Extract a list of symbols from a shared library.')
    parser.add_argument(
        '--blacklist', dest='blacklist',
        type=str, action='store', default=None)
    parser.add_argument(
        'symbol_list', metavar='symbol_list', type=str,
        help='The file containing the old symbol list')
    parser.add_argument(
        'regexes', metavar='regexes', default=[], nargs='*',
        help='The file containing the new symbol list or a library')
    args = parser.parse_args()

    if not args.regexes and args.blacklist is None:
        sys.stderr.write('Either a regex or a blacklist must be specified.\n')
        sys.exit(1)
    if args.blacklist:
        search_list = util.read_blacklist(args.blacklist)
    else:
        search_list = args.regexes

    symbol_list = util.extract_or_load(args.symbol_list)

    matching_count, report = match.find_and_report_matching(
        symbol_list, search_list)
    sys.stdout.write(report)
    if matching_count != 0:
        print('%d matching symbols found...' % matching_count)


if __name__ == '__main__':
    main()
