# -*- mode: python; -*-

Import("env")

env.Library('boost_system', ['libs/system/src/error_code.cpp'])

boost_thread_source = dict(
    posix=['libs/thread/src/pthread/once.cpp',
           'libs/thread/src/pthread/thread.cpp'],
    windows=['libs/thread/src/win32/thread.cpp',
             'libs/thread/src/win32/tss_pe.cpp']
    ).get(env['TARGET_OS_FAMILY'], 'UNKNOWN_OS_FAMILY_FOR_BOOST_THREADS__%s' % env['TARGET_OS_FAMILY'])

threadlib_env = env.Clone()
threadlib_env.Append(CPPDEFINES=['BOOST_THREAD_BUILD_LIB'])
threadlib_env.Library('boost_thread', [
                    'libs/thread/src/future.cpp',
                    'libs/thread/src/tss_null.cpp'
                    ] + boost_thread_source,
                    LIBDEPS=[
                        'boost_system',
                    ])

env.Library('boost_filesystem', [
        'libs/filesystem/src/codecvt_error_category.cpp',
        'libs/filesystem/src/operations.cpp',
        'libs/filesystem/src/path.cpp',
        'libs/filesystem/src/path_traits.cpp',
        'libs/filesystem/src/portability.cpp',
        'libs/filesystem/src/unique_path.cpp',
        'libs/filesystem/src/utf8_codecvt_facet.cpp',
        'libs/filesystem/src/windows_file_codecvt.cpp',
        ],
        LIBDEPS=[
            'boost_system',
        ])

env.Library('boost_program_options', [
        'libs/program_options/src/cmdline.cpp',
        'libs/program_options/src/config_file.cpp',
        'libs/program_options/src/convert.cpp',
        'libs/program_options/src/options_description.cpp',
        'libs/program_options/src/parsers.cpp',
        'libs/program_options/src/positional_options.cpp',
        'libs/program_options/src/split.cpp',
        'libs/program_options/src/utf8_codecvt_facet.cpp',
        'libs/program_options/src/value_semantic.cpp',
        'libs/program_options/src/variables_map.cpp',
        'libs/program_options/src/winmain.cpp',
        ])

env.Library('boost_chrono', [
        'libs/chrono/src/chrono.cpp',
        'libs/chrono/src/process_cpu_clocks.cpp',
        'libs/chrono/src/thread_clock.cpp',
        ],
        LIBDEPS=[
            'boost_system',
        ])

regexEnv = env.Clone()
if regexEnv.ToolchainIs("clang"):
    regexEnv.AppendUnique(CCFLAGS=["-Wno-deprecated-register"])
regexEnv.Library('boost_regex', [
        'libs/regex/src/c_regex_traits.cpp',
        'libs/regex/src/cpp_regex_traits.cpp',
        'libs/regex/src/cregex.cpp',
        'libs/regex/src/fileiter.cpp',
        'libs/regex/src/icu.cpp',
        'libs/regex/src/instances.cpp',
        'libs/regex/src/posix_api.cpp',
        'libs/regex/src/regex.cpp',
        'libs/regex/src/regex_debug.cpp',
        'libs/regex/src/regex_raw_buffer.cpp',
        'libs/regex/src/regex_traits_defaults.cpp',
        'libs/regex/src/static_mutex.cpp',
        'libs/regex/src/usinstances.cpp',
        'libs/regex/src/w32_regex_traits.cpp',
        'libs/regex/src/wc_regex_traits.cpp',
        'libs/regex/src/wide_posix_api.cpp',
        'libs/regex/src/winstances.cpp',
        ])
