# -*- mode: python -*-

Import("env")

env = env.Clone()

env.Library(
    target='index_descriptor',
    source=[
        'index_descriptor.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/index_catalog',
        '$BUILD_DIR/mongo/db/index_names',
        '$BUILD_DIR/mongo/db/matcher/expressions',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/query/collation/collator_factory_interface',
    ],
)

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

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

env.Library(
    target='key_generator',
    source=[
        'btree_key_generator.cpp',
        'expression_keys_private.cpp',
        'sort_key_generator.cpp',
        'wildcard_key_generator.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$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/mongo/db/record_id_helpers',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_conversion_util',
        '$BUILD_DIR/third_party/s2/s2',
        'expression_params',
        'index_descriptor',
    ],
)

env.Benchmark(
    target='key_gen_bm',
    source='key_gen_bm.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        'key_generator',
    ],
)

env.Library(
    target='expression_params',
    source=[
        'expression_params.cpp',
        's2_common.cpp'
    ],
    LIBDEPS_PRIVATE=[
        '$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_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/index_names',
    ],
)

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

env.Library(
    target="index_access_methods",
    source=[
        "2d_access_method.cpp",
        "btree_access_method.cpp",
        "fts_access_method.cpp",
        "hash_access_method.cpp",
        "index_access_method_factory_impl.cpp",
        "s2_access_method.cpp",
        "s2_bucket_access_method.cpp",
        "wildcard_access_method.cpp",
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/fts/base_fts',
        '$BUILD_DIR/mongo/db/index_names',
        'expression_params',
        'index_access_method',
        'key_generator',
    ]
)

env.Library(
    target="index_build_interceptor",
    source=[
        "index_build_interceptor.cpp",
        'index_build_interceptor.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/multi_key_path_tracker',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/key_string',
        '$BUILD_DIR/mongo/util/progress_meter',
        'duplicate_key_tracker',
        'index_access_methods',
        'skipped_record_tracker',
    ],
)

env.CppUnitTest(
    target='db_index_test',
    source=[
        '2d_key_generator_test.cpp',
        'btree_key_generator_test.cpp',
        'hash_key_generator_test.cpp',
        's2_key_generator_test.cpp',
        's2_bucket_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/exec/working_set',
        '$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',
        '$BUILD_DIR/mongo/db/query/sort_pattern',
        '$BUILD_DIR/mongo/db/record_id_helpers',
        'expression_params',
        'key_generator',
    ],
)
