# -*- mode: python -*-

Import("env")

env = env.Clone()

env.Library(
        target='index_descriptor',
        source=[
            'index_descriptor.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/base',
            '$BUILD_DIR/mongo/db/catalog/collection',
            '$BUILD_DIR/mongo/db/catalog/index_catalog',
        ],
        LIBDEPS_PRIVATE=[
            '$BUILD_DIR/mongo/db/index_names',
            '$BUILD_DIR/mongo/db/namespace_string',
        ],
)

env.Library(
        target='duplicate_key_tracker',
        source=[
            'duplicate_key_tracker.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/db/service_context',
        ],
        LIBDEPS_PRIVATE=[
            '$BUILD_DIR/mongo/base',
            '$BUILD_DIR/mongo/db/curop',
            '$BUILD_DIR/mongo/db/storage/index_entry_comparison',
        ],
)

env.Library(
        target='skipped_record_tracker',
        source=[
            'skipped_record_tracker.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
            '$BUILD_DIR/mongo/db/service_context',
        ],
        LIBDEPS_PRIVATE=[
            '$BUILD_DIR/mongo/base',
            '$BUILD_DIR/mongo/db/curop',
        ],
)

env.Library(
        target='key_generator',
        source=[
            'btree_key_generator.cpp',
            'expression_keys_private.cpp',
            'sort_key_generator.cpp',
            'wildcard_key_generator.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/base',
            '$BUILD_DIR/mongo/db/bson/dotted_path_support',
            '$BUILD_DIR/mongo/db/exec/projection_executor',
            '$BUILD_DIR/mongo/db/exec/working_set',
            '$BUILD_DIR/mongo/db/fts/base_fts',
            '$BUILD_DIR/mongo/db/geo/geoparser',
            '$BUILD_DIR/mongo/db/index_names',
            '$BUILD_DIR/mongo/db/mongohasher',
            '$BUILD_DIR/mongo/db/pipeline/document_path_support',
            '$BUILD_DIR/mongo/db/query/collation/collator_interface',
            '$BUILD_DIR/mongo/db/query/projection_ast',
            '$BUILD_DIR/mongo/db/query/sort_pattern',
            '$BUILD_DIR/third_party/s2/s2',
            'expression_params',
            'index_descriptor',
        ],
)

env.Library(
        target='expression_params',
        source=[
            'expression_params.cpp',
            's2_common.cpp'
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/base',
            '$BUILD_DIR/mongo/bson/util/bson_extract',
            '$BUILD_DIR/mongo/db/geo/geometry',
            '$BUILD_DIR/mongo/db/geo/geoparser',
            '$BUILD_DIR/mongo/db/mongohasher',
            '$BUILD_DIR/mongo/db/query/collation/collator_interface',
            '$BUILD_DIR/mongo/db/storage/key_string',
            '$BUILD_DIR/third_party/s2/s2',
        ]
)

env.Library(
    target='index_access_method_factory',
        source=[
            'index_access_method_factory.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/base',
        ],
)

serveronlyEnv = env.Clone()
serveronlyEnv.InjectThirdParty(libraries=['snappy'])
serveronlyEnv.Library(
    target="index_access_method",
    source=[
        "index_access_method.cpp",
        'multikey_paths.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/index_catalog_entry',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/storage/encryption_hooks',
        '$BUILD_DIR/mongo/db/storage/index_entry_comparison',
        '$BUILD_DIR/mongo/db/storage/key_string',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/third_party/shim_snappy',
        'index_descriptor',
    ],
    LIBDEPS_PRIVATE=[
        'skipped_record_tracker',
        '$BUILD_DIR/mongo/db/logical_clock',
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
)

env.Library(
    target="index_access_methods",
    source=[
        "2d_access_method.cpp",
        "btree_access_method.cpp",
        "fts_access_method.cpp",
        "hash_access_method.cpp",
        "haystack_access_method.cpp",
        "index_access_method_factory_impl.cpp",
        "s2_access_method.cpp",
        "wildcard_access_method.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/query_exec',
        'index_access_method',
        'key_generator',
    ],
)

env.Library(
    target="index_build_interceptor",
    source=[
        "index_build_interceptor.cpp",
        'index_build_interceptor.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        'duplicate_key_tracker',
        'skipped_record_tracker',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/index_timestamp_helper',
        '$BUILD_DIR/mongo/db/multi_key_path_tracker',
        'index_access_methods',
    ],
)

env.CppUnitTest(
    target='db_index_test',
    source=[
        '2d_key_generator_test.cpp',
        'btree_key_generator_test.cpp',
        'hash_key_generator_test.cpp',
        'multikey_paths_test.cpp',
        's2_key_generator_test.cpp',
        'sort_key_generator_test.cpp',
        'wildcard_key_generator_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/exec/document_value/document_value_test_util',
        '$BUILD_DIR/mongo/db/matcher/expressions',
        '$BUILD_DIR/mongo/db/mongohasher',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface_mock',
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'index_access_method',
        'key_generator',
    ],
)
