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 = True
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)

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