# -*- mode: python; -*-

Import("env")

env = env.Clone()

env.SConscript(
    dirs=[
        'util',
    ],
    exports=[
        'env',
    ],
)

env.Library(
    target='collection_options',
    source=[
        'collection_options.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/command_generic_argument',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface',
    ],
)

env.Library(
    target = 'catalog_test_fixture',
    source =[
        'catalog_test_fixture.cpp',
    ],
    LIBDEPS=[
        'catalog_helpers',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/repl/replmocks',
        '$BUILD_DIR/mongo/db/repl/storage_interface_impl',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

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

env.Library(
    target='commit_quorum_options',
    source=[
        'commit_quorum_options.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/bson/util/bson_extract',
    ],
)

env.Library(
    target='commit_quorum_idl',
    source=[
        'commit_quorum.idl',
    ],
    LIBDEPS=[
        'commit_quorum_options',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/idl/idl_parser',
    ],
)

env.Library(
    target='validate_idl',
    source=[
        'validate.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
)

env.Library(
    target='index_build_entry_idl',
    source=[
        'index_build_entry.idl',
    ],
    LIBDEPS=[
        'commit_quorum_idl',
        '$BUILD_DIR/mongo/util/net/network',
    ],
)

env.Library(
    target='health_log',
    source=[
        "health_log.cpp",
        "health_log.idl",
    ],
    LIBDEPS=[
        "$BUILD_DIR/mongo/base",
        "$BUILD_DIR/mongo/db/concurrency/deferred_writer",
        "$BUILD_DIR/mongo/db/service_context",
        "$BUILD_DIR/mongo/idl/idl_parser",
    ],
);

env.Library(
    target='index_builds_manager',
    source=[
        'index_builds_manager.cpp',
    ],
    LIBDEPS=[
        'multi_index_block',
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog_raii',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/query/query_knobs',
        '$BUILD_DIR/mongo/db/storage/storage_repair_observer',
    ]
)

env.Library(
    target='index_build_oplog_entry',
    source=[
        "index_build_oplog_entry.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        "$BUILD_DIR/mongo/bson/util/bson_extract",
        "$BUILD_DIR/mongo/db/repl/oplog_entry",
        "$BUILD_DIR/mongo/rpc/command_status",
    ],
    LIBDEPS_PRIVATE=[
        'commit_quorum_options',
    ],
)

env.Library(
    target='index_key_validate',
    source=[
        "index_key_validate.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/index/index_descriptor',
        '$BUILD_DIR/mongo/db/index/key_generator',
        '$BUILD_DIR/mongo/db/index_names',
        '$BUILD_DIR/mongo/db/matcher/expressions',
        '$BUILD_DIR/mongo/db/query/collation/collator_factory_interface',
        '$BUILD_DIR/mongo/util/fail_point',
    ],
)

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

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

env.Library(
    target='index_timestamp_helper',
    source=[
        "index_timestamp_helper.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/logical_clock',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/server_options_core',
    ]
)

env.Library(
    target='index_build_block',
    source=[
        "index_build_block.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/collection_query_info',
        '$BUILD_DIR/mongo/db/index/index_descriptor',
        '$BUILD_DIR/mongo/db/index_names',
        '$BUILD_DIR/mongo/db/ttl_collection_cache',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/index/index_build_interceptor',
        '$BUILD_DIR/mongo/db/logical_clock',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
    ]
)

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

env.Library(
    target='database_holder',
    source=[
        'database_holder.cpp',
    ],
    LIBDEPS=[
        'collection',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/service_context',
    ],
)

env.Library(
    target='multi_index_block',
    source=[
        'multi_index_block.cpp',
        'multi_index_block.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/audit',
        '$BUILD_DIR/mongo/db/background',
        '$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/service_context',
        '$BUILD_DIR/mongo/db/storage/write_unit_of_work',
        '$BUILD_DIR/mongo/util/fail_point',
        '$BUILD_DIR/mongo/util/progress_meter',
        'collection',
        'index_build_block',
        'index_timestamp_helper',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/index/index_build_interceptor',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/idl/server_parameter',
        '$BUILD_DIR/mongo/util/log_and_backoff',
        'collection_catalog',
    ]
)

env.Library(
    target='collection_catalog',
    source=[
        'collection_catalog.cpp',
        'uncommitted_collections.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/profile_filter',
        '$BUILD_DIR/mongo/db/service_context',
        'collection',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/idl/server_parameter',
    ]
)

env.Library(
    target='collection_catalog_helper',
    source=[
        'collection_catalog_helper.cpp',
    ],
    LIBDEPS_PRIVATE=[
        'collection_catalog',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
    ]
)

env.Library(
    target='catalog_control',
    source=[
        "catalog_control.cpp",
    ],
    LIBDEPS_PRIVATE=[
        'collection',
        'collection_catalog',
        'database_holder',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/rebuild_indexes',
        '$BUILD_DIR/mongo/db/service_context',
    ],
)

env.Library(
    target="validate_state",
    source=[
        "validate_state.cpp"
    ],
    LIBDEPS_PRIVATE=[
        "collection_catalog",
        "database_holder",
        "throttle_cursor",
        "$BUILD_DIR/mongo/base",
        "$BUILD_DIR/mongo/db/catalog_raii",
        "$BUILD_DIR/mongo/db/views/views",
        "$BUILD_DIR/mongo/util/fail_point",
    ]
)

env.Library(
    target='catalog_impl',
    source=[
        "collection_impl.cpp",
        "database_holder_impl.cpp",
        "database_impl.cpp",
        "index_catalog_entry_impl.cpp",
        "index_catalog_impl.cpp",
        "index_consistency.cpp",
    ],
    LIBDEPS=[
        'collection',
        'collection_options',
        'database_holder',
        'health_log',
        'index_catalog',
        'index_catalog_entry',
        'index_key_validate',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/background',
        '$BUILD_DIR/mongo/db/collection_index_usage_tracker',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/index/index_access_method_factory',
        '$BUILD_DIR/mongo/db/op_observer',
        '$BUILD_DIR/mongo/db/repl/drop_pending_collection_reaper',
        '$BUILD_DIR/mongo/db/repl/oplog',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/key_string',
        '$BUILD_DIR/mongo/db/storage/durable_catalog_impl',
        '$BUILD_DIR/mongo/db/storage/storage_engine_impl',
        '$BUILD_DIR/mongo/db/system_index',
        '$BUILD_DIR/mongo/db/views/views_mongod',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog_helper',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$BUILD_DIR/mongo/db/index/index_build_interceptor',
        '$BUILD_DIR/mongo/db/index/index_access_methods',
        '$BUILD_DIR/mongo/db/logical_clock',
        '$BUILD_DIR/mongo/db/repl/repl_settings',
        '$BUILD_DIR/mongo/db/storage/storage_engine_common',
        '$BUILD_DIR/mongo/db/storage/storage_debug_util',
        '$BUILD_DIR/mongo/db/transaction',
        'index_build_block',
        'throttle_cursor',
        'validate_idl',
        'validate_state',
    ],
)

env.Library(
    target='collection_validation',
    source=[
        'collection_validation.cpp',
        'validate_adaptor.cpp',
    ],
    LIBDEPS=[
        'catalog_impl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/multi_key_path_tracker',
        'throttle_cursor',
        'validate_state',
    ]
)

env.Library(
    target='throttle_cursor',
    source=[
        'throttle_cursor.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/util/fail_point',
        'validate_idl',
    ],
)

env.Library(
    target='catalog_helpers',
    source=[
        'capped_utils.cpp',
        'coll_mod.cpp',
        "collection_compact.cpp",
        'create_collection.cpp',
        'drop_collection.cpp',
        'drop_database.cpp',
        'drop_indexes.cpp',
        'rename_collection.cpp',
        'list_indexes.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/background',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/db/views/views',
        '$BUILD_DIR/mongo/db/write_ops',
        'collection_options',
        'collection',
        'index_catalog',
        'index_key_validate',
        'multi_index_block',
    ],
    LIBDEPS_PRIVATE=[
        'database_holder',
    ],
)

env.Library(
    target="collection_query_info",
    source=[
        "$BUILD_DIR/mongo/db/query/collection_query_info.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/collection_index_usage_tracker',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/query/query_planner',
        '$BUILD_DIR/mongo/db/update_index_data',
        '$BUILD_DIR/mongo/db/service_context',
    ],
)

env.CppUnitTest(
    target='db_catalog_test',
    source=[
        'capped_utils_test.cpp',
        'catalog_control_test.cpp',
        'collection_catalog_test.cpp',
        'collection_options_test.cpp',
        'collection_test.cpp',
        'collection_validation_test.cpp',
        'commit_quorum_options_test.cpp',
        'create_collection_test.cpp',
        'database_test.cpp',
        'drop_database_test.cpp',
        'index_build_entry_test.cpp',
        'index_builds_manager_test.cpp',
        'index_key_validate_test.cpp',
        'index_spec_validate_test.cpp',
        'multi_index_block_test.cpp',
        'rename_collection_test.cpp',
        'throttle_cursor_test.cpp',
        'validate_state_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_mongod',
        '$BUILD_DIR/mongo/db/matcher/expressions',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/op_observer',
        '$BUILD_DIR/mongo/db/query/datetime/date_time_support',
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        '$BUILD_DIR/mongo/db/repl/drop_pending_collection_reaper',
        '$BUILD_DIR/mongo/db/repl/oplog',
        '$BUILD_DIR/mongo/db/repl/optime',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/repl/replmocks',
        '$BUILD_DIR/mongo/db/repl/storage_interface_impl',
        '$BUILD_DIR/mongo/db/s/op_observer_sharding_impl',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/db/storage/kv/kv_prefix',
        '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger',
        '$BUILD_DIR/mongo/unittest/unittest',
        '$BUILD_DIR/mongo/util/clock_source_mock',
        '$BUILD_DIR/mongo/util/fail_point',
        'catalog_control',
        'catalog_helpers',
        'catalog_test_fixture',
        'collection',
        'collection_catalog',
        'collection_catalog_helper',
        'collection_options',
        'collection_validation',
        'commit_quorum_options',
        'database_holder',
        'index_build_block',
        'index_build_entry_idl',
        'index_builds_manager',
        'index_key_validate',
        'validate_idl',
        'multi_index_block',
        'throttle_cursor',
        'validate_state',
    ],
)
