# -*- Python -*-
import os
import sys

import lit.formats

config.name = 'per_test_timeout'

shellType = lit_config.params.get('external', '1')

if shellType == '0':
    lit_config.note('Using internal shell')
    externalShell = False
else:
    lit_config.note('Using external shell')
    externalShell = True

configSetTimeout = lit_config.params.get('set_timeout', '0')

if configSetTimeout != '0':
    # Try setting the max individual test time in the configuration
    lit_config.maxIndividualTestTime = int(configSetTimeout)

config.test_format = lit.formats.ShTest(execute_external=externalShell)
config.suffixes = ['.py']

config.test_source_root = os.path.dirname(__file__)
config.test_exec_root = config.test_source_root
config.target_triple = '(unused)'
src_root = os.path.join(config.test_source_root, '..')

pythonpath_list = [src_root]
# Ensure the user's PYTHONPATH is included.
if 'PYTHONPATH' in os.environ:
    pythonpath_list.append(os.environ['PYTHONPATH'])
if 'PYTHONPATH' in config.environment:
    pythonpath_list.append(config.environment['PYTHONPATH'])
config.environment['PYTHONPATH'] = os.pathsep.join(pythonpath_list)

config.substitutions.append(('%{python}', '"%s"' % (sys.executable)))
