# -*- mode: python -*-

Import("endian")
Import("env")
Import("icuEnabled")

env = env.Clone()

env.InjectThirdPartyIncludePaths("icu")

env.Append(
    CPPDEFINES=[
        'U_USING_ICU_NAMESPACE=0',
    ],
)

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

env.CppUnitTest(
    target="collation_spec_test",
    source=[
        "collation_spec_test.cpp",
    ],
    LIBDEPS=[
        "collator_interface",
    ],
)

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

env.CppUnitTest(
    target="collation_serializer_test",
    source=[
        "collation_serializer_test.cpp",
    ],
    LIBDEPS=[
        "collation_serializer",
        "collator_interface_mock",
    ],
)

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

env.CppUnitTest(
    target="collator_interface_mock_test",
    source=[
        "collator_interface_mock_test.cpp",
    ],
    LIBDEPS=[
        "collator_interface_mock",
    ],
)

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

env.CppUnitTest(
    target="collation_index_key_test",
    source=[
        "collation_index_key_test.cpp",
    ],
    LIBDEPS=[
        "collation_index_key",
        "collator_interface_mock",
    ],
)

env.Library(
    target="collator_factory_interface",
    source=[
        "collator_factory_interface.cpp",
    ],
    LIBDEPS=[
        "$BUILD_DIR/mongo/base",
        "$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.CppUnitTest(
    target="collator_factory_mock_test",
    source=[
        "collator_factory_mock_test.cpp",
    ],
    LIBDEPS=[
        "collator_factory_mock",
    ],
)

if icuEnabled:
    generateICUInit = env.Command(
        target="icu_init.cpp",
        source=[
            "generate_icu_init_cpp.py",
            ("$BUILD_DIR/third_party/icu4c-57.1/source/mongo_sources/icudt57l.dat"
                if endian == "little"
                else "$BUILD_DIR/third_party/icu4c-57.1/source/mongo_sources/icudt57b.dat"),
        ],
        action="$PYTHON ${SOURCES[0]} -o $TARGET -i ${SOURCES[1]}",
    )

    env.Alias("generated-sources", generateICUInit)

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

    env.CppUnitTest(
        target="collator_interface_icu_test",
        source=[
            "collator_interface_icu_test.cpp",
        ],
        LIBDEPS=[
            "collator_icu",
        ],
    )

    env.CppUnitTest(
        target="collator_factory_icu_test",
        source=[
            "collator_factory_icu_test.cpp",
        ],
        LIBDEPS=[
            "collator_icu",
        ],
    )
