# -*- mode: python -*-

Import("env")
Import("use_system_version_of_library")

env = env.Clone()

env.Library(
    target="collator_interface",
    source=[
        "collation_index_key.cpp",
        "collator_interface.cpp",
    ],
    LIBDEPS=[
        "$BUILD_DIR/mongo/base",
        "$BUILD_DIR/mongo/idl/basic_types",
    ],
)

env.Library(
    target="collator_interface_mock",
    source=[
        "collator_interface_mock.cpp",
    ],
    LIBDEPS=[
        "collator_interface",
    ],
)

env.Library(
    target="collator_factory_interface",
    source=[
        "collator_factory_interface.cpp",
    ],
    LIBDEPS=[
        "$BUILD_DIR/mongo/db/service_context",
        "collator_interface",
    ],
)

env.Library(
    target="collator_factory_mock",
    source=[
        "collator_factory_mock.cpp",
    ],
    LIBDEPS=[
        "collator_factory_interface",
        "collator_interface_mock",
    ],
)

env.Library(
    target="collator_factory_icu",
    source=[
        "collator_factory_icu_decoration.cpp",
    ],
    LIBDEPS=[
        "collator_icu",
    ],
)

# The collator_icu library and the collator_interface_icu_test unit tests need an environment which
# has access to the third-party ICU headers.
icuEnv = env.Clone()

if not use_system_version_of_library("icu"):
    icuEnv.InjectThirdParty("icu")
    # Since we are injecting the third-party ICU headers, we must also copy the same defines that we
    # use to configure ICU when building ICU sources. See comment in
    # src/third_party/icu4c-57.1/source/SConscript.
    icuEnv.Append(
        CPPDEFINES=[
            ('UCONFIG_NO_BREAK_ITERATION', 1),
            ('UCONFIG_NO_FORMATTING', 1),
            ('UCONFIG_NO_TRANSLITERATION', 1),
            ('UCONFIG_NO_REGULAR_EXPRESSIONS', 1),
            ("U_CHARSET_IS_UTF8", 1),
            ("U_DISABLE_RENAMING", 1),
            ("U_STATIC_IMPLEMENTATION", 1),
            ("U_USING_ICU_NAMESPACE", 0),
        ],
    )

icuEnv.Library(
    target="collator_icu",
    source=[
        "collator_factory_icu.cpp",
        "collator_interface_icu.cpp",
    ],
    LIBDEPS=[
        "$BUILD_DIR/mongo/base",
        "$BUILD_DIR/mongo/bson/util/bson_extract",
        "$BUILD_DIR/mongo/util/icu_init",
        "$BUILD_DIR/third_party/shim_icu",
        "collator_factory_interface",
    ],
)

icuEnv.CppUnitTest(
    target="db_query_collation_test",
    source=[
        "collation_bson_comparison_test.cpp",
        "collation_index_key_test.cpp",
        "collator_factory_icu_locales_test.cpp",
        "collator_factory_icu_test.cpp",
        "collator_factory_mock_test.cpp",
        "collator_interface_icu_test.cpp",
        "collator_interface_mock_test.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/storage/key_string',
        "collator_factory_mock",
        "collator_icu",
        "collator_interface",
        "collator_interface_mock",
    ],
)
