import os
import sys

if sys.platform.startswith('win'):
    CCFLAGS = ['/EHsc', '/nologo']
    LIBS = []
else:
    CCFLAGS = ''
    LIBS = ['pthread']

kwargs = {
    'CPPPATH': os.environ.get('INCLUDE'),
    'CCFLAGS': CCFLAGS,
    'LIBPATH': os.environ.get('LIBPATH'),
    'LIBS': LIBS,
}
if 'CXX' in os.environ:
    kwargs['CXX'] = os.environ['CXX']

env = Environment(**kwargs)
genv = env.Clone(LIBS=['gtest'] + LIBS)
c2env = env.Clone(CPPPATH=['.', 'catch2_v2'])

catch2_v3 = env.Library('catch2_v3', ['catch2_v3/catch.cpp'])

c3env = env.Clone(CPPPATH=['.', 'catch2_v3'], LIBS=[catch2_v3])

Export('env genv c2env c3env')

genv.Program('gtest.cpp')
genv.Program('gtest_args.cpp')

boost_files = [
    'boost_success.cpp',
    'boost_failure.cpp',
    'boost_fatal_error.cpp',
    'boost_error.cpp',
    'boost_fixture_setup_error.cpp',
    'boost_one_argument.cpp',
    'boost_two_arguments.cpp'
]

for filename in boost_files:
    env.Program(filename)

for env, label in [(c3env, "_v3"), (c2env, "")]:
    catch2_success = env.Object(f'catch2_success{label}', 'catch2_success.cpp')
    catch2_failure = env.Object(f'catch2_failure{label}', 'catch2_failure.cpp')
    catch2_error = env.Object(f'catch2_error{label}', 'catch2_error.cpp')
    catch2_special_chars = env.Object(
        f'catch2_special_chars{label}',
        'catch2_special_chars.cpp'
    )

    env.Program(catch2_success)
    env.Program(catch2_failure)
    env.Program(catch2_error)
    env.Program(catch2_special_chars)

SConscript('acceptance/googletest-samples/SConscript')
SConscript('acceptance/boosttest-samples/SConscript')
SConscript('acceptance/catch2-samples/SConscript')
