import logging
import os
import site
import sys
site.addsitedir(os.path.dirname(__file__))
from litsupport import test

config.name = 'test-suite'
config.test_format = test.TestSuiteTest()
config.suffixes = ['.test']
config.excludes = ['ABI-Testsuite']
config.remote_flags = ""
config.traditional_output = False
config.single_source = False
if 'SSH_AUTH_SOCK' in os.environ:
    config.environment['SSH_AUTH_SOCK'] = os.environ['SSH_AUTH_SOCK']

# Load previous test results so we can skip tests that did not change.
previous_results_file = lit_config.params.get('previous', None)
if previous_results_file:
    import json
    config.previous_results = json.load(open(previous_results_file))
else:
    config.previous_results = None

# Setup logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
file_log = logging.FileHandler("%s/test.log" % config.test_exec_root,
                               mode="w")
file_log.setLevel(logging.DEBUG)
logger.addHandler(file_log)
console_log = logging.StreamHandler()
console_log.setLevel(logging.WARNING)
logger.addHandler(console_log)

# Pass on some options to context object:
config.perf_profile_events = "cycles,cache-misses,branch-misses,instructions"
if lit_config.params.get('perf_profile_events'):
    config.perf_profile_events = lit_config.params.get('perf_profile_events')

# Find and initialize lit modules.
if lit_config.params.get('profile') == 'perf':
    config.test_modules += ['perf']
test.load_modules(config.test_modules)
