# -*- mode: python; -*-

Import("env")
Import('wiredtiger')

env = env.Clone()

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

env.Library(
    target='clustered_collection_options',
    source=[
        'clustered_collection_options.idl',
        'clustered_collection_util.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/idl/basic_types',
        '$BUILD_DIR/mongo/idl/idl_parser',
    ],
)

env.Library(
    target='collection_options',
    source=[
        'collection_options.cpp',
        'collection_options.idl',
        'collection_options_validation.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface',
        '$BUILD_DIR/mongo/db/query/query_knobs',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_options',
        '$BUILD_DIR/mongo/idl/basic_types',
        '$BUILD_DIR/mongo/idl/feature_flag',
        '$BUILD_DIR/mongo/idl/idl_parser',
        'clustered_collection_options',
    ],
)

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

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

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

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

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

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

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

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

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

env.Library(
    target='index_build_block',
    source=[
        "index_build_block.cpp",
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/audit',
        '$BUILD_DIR/mongo/db/catalog/collection_query_info',
        '$BUILD_DIR/mongo/db/collection_index_usage_tracker',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/index/index_build_interceptor',
        '$BUILD_DIR/mongo/db/index/index_descriptor',
        '$BUILD_DIR/mongo/db/index/skipped_record_tracker',
        '$BUILD_DIR/mongo/db/index_names',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/ttl_collection_cache',
        '$BUILD_DIR/mongo/db/vector_clock',
        'collection',
        'collection_catalog',
    ]
)

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

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

env.Library(
    target='multi_index_block',
    source=[
        'multi_index_block.cpp',
        'multi_index_block.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/collection_query_info',
        '$BUILD_DIR/mongo/db/catalog_raii',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/index/index_build_interceptor',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/resumable_index_builds_idl',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/storage/write_unit_of_work',
        '$BUILD_DIR/mongo/idl/server_parameter',
        '$BUILD_DIR/mongo/util/fail_point',
        '$BUILD_DIR/mongo/util/log_and_backoff',
        '$BUILD_DIR/mongo/util/progress_meter',
        'collection',
        'collection_catalog',
        'index_build_block',
        'index_catalog',
    ]
)

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

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

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

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

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_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog_helper',
        '$BUILD_DIR/mongo/db/collection_index_usage_tracker',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$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/index/index_access_methods',
        '$BUILD_DIR/mongo/db/index/index_build_interceptor',
        '$BUILD_DIR/mongo/db/op_observer',
        '$BUILD_DIR/mongo/db/record_id_helpers',
        '$BUILD_DIR/mongo/db/repl/drop_pending_collection_reaper',
        '$BUILD_DIR/mongo/db/repl/oplog',
        '$BUILD_DIR/mongo/db/repl/repl_server_parameters',
        '$BUILD_DIR/mongo/db/repl/repl_settings',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/durable_catalog_impl',
        '$BUILD_DIR/mongo/db/storage/execution_context',
        '$BUILD_DIR/mongo/db/storage/key_string',
        '$BUILD_DIR/mongo/db/storage/storage_engine_common',
        '$BUILD_DIR/mongo/db/storage/storage_engine_impl',
        '$BUILD_DIR/mongo/db/storage/storage_util',
        '$BUILD_DIR/mongo/db/system_index',
        '$BUILD_DIR/mongo/db/transaction',
        '$BUILD_DIR/mongo/db/ttl_collection_cache',
        '$BUILD_DIR/mongo/db/vector_clock',
        '$BUILD_DIR/mongo/db/views/views_mongod',
        'catalog_helpers',
        'catalog_stats',
        'clustered_collection_options',
        'collection',
        'collection_options',
        'database_holder',
        'health_log',
        'index_build_block',
        'index_catalog',
        'index_catalog_entry',
        'index_key_validate',
        'local_oplog_info',
        'throttle_cursor',
        'validate_idl',
        'validate_state',
    ],
)

env.Library(
    target='catalog_stats',
    source=[
        'catalog_stats.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/server_status',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/views/views',
        'database_holder',
    ]
)

env.Library(
    target='collection_validation',
    source=[
        'collection_validation.cpp',
        'validate_adaptor.cpp',
        'validate_results.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/index_key_validate',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/index_names',
        '$BUILD_DIR/mongo/db/multi_key_path_tracker',
        '$BUILD_DIR/mongo/db/record_id_helpers',
        "$BUILD_DIR/mongo/db/service_context",
        '$BUILD_DIR/mongo/db/storage/execution_context',
        '$BUILD_DIR/mongo/db/storage/key_string',
        '$BUILD_DIR/mongo/idl/basic_types',
        'catalog_impl',
        'collection_options',
        'index_catalog',
        '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='local_oplog_info',
    source=[
        'local_oplog_info.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/logical_time',
        '$BUILD_DIR/mongo/db/repl/optime',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/storage/flow_control',
        '$BUILD_DIR/mongo/db/vector_clock_mutable',
        'collection',
    ],
)

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_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/index_commands_idl',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_options',
        '$BUILD_DIR/mongo/db/ttl_collection_cache',
        '$BUILD_DIR/mongo/db/views/views',
        '$BUILD_DIR/mongo/db/write_ops',
        'clustered_collection_options',
        'collection',
        'collection_options',
        'database_holder',
        'index_catalog',
        'index_key_validate',
        'local_oplog_info',
        'multi_index_block',
    ],
)

env.Library(
    target="collection_query_info",
    source=[
        "$BUILD_DIR/mongo/db/query/collection_query_info.cpp",
        "$BUILD_DIR/mongo/db/query/collection_index_usage_tracker_decoration.cpp",
        "$BUILD_DIR/mongo/db/query/plan_cache_key_factory.cpp",
        "$BUILD_DIR/mongo/db/query/query_settings_decoration.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/query_planner',
        '$BUILD_DIR/mongo/db/update_index_data',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/index_catalog',
        '$BUILD_DIR/mongo/db/collection_index_usage_tracker',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/fts/base_fts',
        '$BUILD_DIR/mongo/db/service_context',
    ],
)

env.Library(
    target='import_collection_oplog_entry',
    source=[
        'import_collection_oplog_entry.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/idl/idl_parser',
    ],
)

env.Library(
    target='catalog_test_fixture',
    source=[
        'catalog_test_fixture.cpp',
    ],
    LIBDEPS=[
        '$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',
        'catalog_helpers',
    ],
)

if wiredtiger:
    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',
            'collection_writer_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_signature_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/op_observer_impl',
            '$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/service_context',
            '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
            '$BUILD_DIR/mongo/db/service_context_test_fixture',
            '$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',
            'multi_index_block',
            'throttle_cursor',
            'validate_idl',
            'validate_state',
        ],
    )
