# -*- mode: python -*-

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

env = env.Clone()

env.Library(
    target='repl_server_parameters',
    source=[
        'repl_server_parameters.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/client/read_preference',
        '$BUILD_DIR/mongo/db/server_base',
    ],
)

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

env.Library(
    target='apply_ops_command_info',
    source=[
        'apply_ops_command_info.cpp',
        'apply_ops.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        'oplog_entry',
    ],
)

env.Library(
    target='change_stream_oplog_notification',
    source=[
        'change_stream_oplog_notification.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/pipeline/change_stream_helpers',
        'oplog',
        'oplog_entry',
    ],
)

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

env.Library(
    target='oplog',
    source=[
        'apply_ops.cpp',
        'oplog.cpp',
        'oplog_entry_or_grouped_inserts.cpp',
        'transaction_oplog_application.cpp',
    ],
    LIBDEPS=[
        'apply_ops_command_info',
        'tenant_migration_decoration',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/catalog/health_log_interface',
        '$BUILD_DIR/mongo/db/catalog/import_collection_oplog_entry',
        '$BUILD_DIR/mongo/db/catalog/index_build_oplog_entry',
        '$BUILD_DIR/mongo/db/catalog/local_oplog_info',
        '$BUILD_DIR/mongo/db/change_stream_change_collection_manager',
        '$BUILD_DIR/mongo/db/change_stream_pre_images_collection_manager',
        '$BUILD_DIR/mongo/db/change_stream_serverless_helpers',
        '$BUILD_DIR/mongo/db/coll_mod_command_idl',
        '$BUILD_DIR/mongo/db/commands/txn_cmd_request',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/global_index',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/index_commands_idl',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/op_observer/op_observer_util',
        '$BUILD_DIR/mongo/db/ops/write_ops',
        '$BUILD_DIR/mongo/db/pipeline/change_stream_preimage',
        '$BUILD_DIR/mongo/db/s/sharding_catalog',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/stats/server_read_concern_write_concern_metrics',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        '$BUILD_DIR/mongo/rpc/command_status',
        '$BUILD_DIR/mongo/s/common_s',
        'dbcheck',
        'image_collection_entry',
        'oplog_constraint_violation_logger',
        'repl_coordinator_interface',
        'repl_server_parameters',
        'repl_settings',
        'tenant_migration_access_blocker',
        'tenant_migration_utils',
        'timestamp_block',
    ],
)

env.Library(
    target='replication_auth',
    source=[
        'replication_auth.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/client/authentication',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
    ],
)

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

env.Library(
    target='rollback_source_impl',
    source=[
        'rollback_source_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/util/fail_point',
        'oplog',
        'oplog_interface_remote',
        'repl_coordinator_interface',
    ],
    LIBDEPS_PRIVATE=[
        'replication_auth',
    ],
)

env.Library(
    target='bgsync',
    source=[
        'bgsync.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        'abstract_async_component',
        'data_replicator_external_state_impl',
        'oplog',
        'oplog_fetcher',
        'oplog_interface_local',
        'oplog_interface_remote',
        'oplog_write_interface',
        'repl_coordinator_interface',
        'rollback_impl',
        'rollback_source_impl',
        'rs_rollback',
        'storage_interface',
        'sync_source_resolver',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor',
        'repl_server_parameters',
    ],
)

env.Library(
    target='repl_settings',
    source=[
        'repl_settings.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_base',
        'repl_server_parameters',
    ],
)

env.Library(
    target='abstract_async_component',
    source=[
        'abstract_async_component.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/executor/task_executor_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/util/concurrency/spin_lock',
    ],
)

env.Library(
    target='dbcheck',
    source=[
        'dbcheck.cpp',
        'dbcheck_idl.cpp',
        'dbcheck.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/bson_validate',
        '$BUILD_DIR/mongo/db/catalog/health_log_interface',
        '$BUILD_DIR/mongo/db/shard_role',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/catalog/throttle_cursor',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/record_id_helpers',
        '$BUILD_DIR/mongo/db/repl/repl_server_parameters',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/util/md5',
    ],
)

env.Library(
    target='rollback_idl',
    source=[
        'rollback.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/idl/idl_parser',
        'optime',
    ],
)

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

env.Library(
    target='storage_interface_impl',
    source=[
        'storage_interface_impl.cpp',
        'collection_bulk_loader_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/local_oplog_info',
        'oplog',
        'rollback_idl',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/catalog/multi_index_block',
        '$BUILD_DIR/mongo/db/change_stream_change_collection_manager',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/record_id_helpers',
        '$BUILD_DIR/mongo/db/storage/oplog_cap_maintainer_thread',
        '$BUILD_DIR/mongo/db/storage/record_store_base',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        '$BUILD_DIR/mongo/db/vector_clock',
        'repl_server_parameters',
    ],
)

env.Library(
    target='replication_consistency_markers_idl',
    source=[
        'replication_consistency_markers.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/idl/idl_parser',
        'optime',
    ],
)

env.Library(
    target='replication_consistency_markers_impl',
    source=[
        'replication_consistency_markers_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/server_options',
        '$BUILD_DIR/mongo/db/storage/record_store_base',
        'optime',
        'repl_coordinator_interface',
        'replication_consistency_markers_idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
    ],
)

env.Library(
    target='replication_recovery',
    source=[
        'replication_recovery.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'oplog',
        'oplog_application',
        'oplog_interface_local',
        'repl_server_parameters',
        'replica_set_aware_service',
    ],
)

env.Library(
    target='replication_process',
    source=[
        'replication_consistency_markers.cpp',
        'replication_process.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/service_context',
        'optime',
        'rollback_idl',
        'storage_interface',
    ],
)

env.Library(
    target='drop_pending_collection_reaper',
    source=[
        'drop_pending_collection_reaper.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/service_context',
        'optime',
        'storage_interface',
    ],
)

env.Library(
    target='scatter_gather',
    source=[
        'scatter_gather_algorithm.cpp',
        'scatter_gather_runner.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/executor/task_executor_interface',
    ],
)

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

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

env.Library(
    target='oplog_buffer_collection',
    source=[
        'oplog_buffer_collection.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/shard_role',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/document_validation',
        '$BUILD_DIR/mongo/db/ops/write_ops_exec',
    ],
)

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

env.Library(
    target='oplog_interface_local',
    source=[
        'oplog_interface_local.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/transaction/transaction',
    ],
)

env.Library(
    target='oplog_interface_mock',
    source=[
        'oplog_interface_mock.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/util/net/network',
        'oplog_entry',
    ],
)

env.Library(
    target='oplog_interface_remote',
    source=[
        'oplog_interface_remote.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/clientdriver_network',
    ],
)

env.Library(
    target='rs_rollback',
    source=[
        'rs_rollback.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/database_holder',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/catalog/index_build_oplog_entry',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/ops/write_ops',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
        '$BUILD_DIR/mongo/db/storage/remove_saver',
        '$BUILD_DIR/mongo/util/fail_point',
        'drop_pending_collection_reaper',
        'oplog',
        'replication_process',
        'roll_back_local_operations',
        'rollback_impl',
    ],
)

isSelfEnv = env.Clone()
isSelfEnv.InjectThirdParty(libraries=['asio'])
isSelfEnv.Library(
    target="isself",
    source=[
        'isself.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/util/net/network',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
    ],
)

env.Library(
    target='task_executor_mock',
    source=[
        'task_executor_mock.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/unittest/task_executor_proxy',
    ],
)

env.Library(
    target='dbcheck_test_fixture',
    source=[
        'dbcheck_test_fixture.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/catalog_test_fixture',
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/catalog/health_log',
        '$BUILD_DIR/mongo/db/catalog/health_log_interface',
        '$BUILD_DIR/mongo/db/commands/dbcheck_command',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/unittest/unittest',
        'dbcheck',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/op_observer/op_observer_impl',
    ],
)

env.Library(
    target='rollback_test_fixture',
    source=[
        'rollback_test_fixture.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/read_write_concern_defaults_mock',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        'drop_pending_collection_reaper',
        'oplog_interface_mock',
        'optime',
        'replication_process',
        'replication_recovery',
        'replmocks',
        'rs_rollback',
        'storage_interface_impl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/transaction/transaction',
    ],
)

env.Library(
    target='rollback_impl',
    source=[
        'rollback_impl.cpp',
        'rollback_impl.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/net/network',
        'optime',
        'repl_coordinator_interface',
        'roll_back_local_operations',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/catalog/import_collection_oplog_entry',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/ops/write_ops',
        '$BUILD_DIR/mongo/db/repl/tenant_migration_access_blocker',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/serverless/serverless_lock',
        '$BUILD_DIR/mongo/db/session/kill_sessions_local',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/storage/remove_saver',
        'drop_pending_collection_reaper',
        'replica_set_aware_service',
    ],
)

env.Library(
    target='oplog_entry',
    source=[
        'oplog_entry.cpp',
        'oplog_entry_serialization.cpp',
        'oplog_entry.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/security_token_auth',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/exec/document_value/document_value',
        'optime',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/server_feature_flags',
    ],
)

env.Benchmark(
    target='oplog_entry_bm',
    source=[
        'oplog_entry_bm.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        'apply_ops_command_info',
        'oplog_entry',
    ],
)

env.Library(
    target='oplog_write_interface',
    source=[
        'oplog_writer_batcher.cpp',
        'oplog_writer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/service_context',
        'oplog_entry',
        'repl_coordinator_interface',
        'repl_server_parameters',
    ],
)

env.Library(
    target='oplog_write',
    source=['oplog_writer_impl.cpp'],
    LIBDEPS=[
        'oplog_write_interface',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/change_stream_change_collection_manager',
        '$BUILD_DIR/mongo/db/change_stream_serverless_helpers',
        '$BUILD_DIR/mongo/db/commands/mongod_fsync',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
        'initial_syncer',
    ],
)

env.Library(
    target='oplog_application_interface',
    source=[
        'oplog_applier.cpp',
        'oplog_applier_batcher.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        'oplog_entry',
        'repl_server_parameters',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/admission/execution_admission_context',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/util/concurrency/spin_lock',
        '$BUILD_DIR/mongo/util/fail_point',
        '$BUILD_DIR/mongo/util/processinfo',
        'repl_coordinator_interface',
    ],
)

env.Library(
    target='oplog_application',
    source=[
        'insert_group.cpp',
        'oplog_applier_impl.cpp',
        'oplog_applier_utils.cpp',
        'session_update_tracker.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/db/catalog/validate_state',
        '$BUILD_DIR/mongo/db/query/query_stats/query_stats',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/stats/timer_stats',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/mongo/util/net/network',
        'initial_syncer',
        'oplog',
        'oplog_application_interface',
        'oplog_entry',
        'oplog_write',
        'repl_coordinator_interface',
        'repl_settings',
        'replication_metrics',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/change_stream_change_collection_manager',
        '$BUILD_DIR/mongo/db/change_stream_serverless_helpers',
        '$BUILD_DIR/mongo/db/commands/mongod_fsync',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/curop_metrics',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'repl_server_parameters',
        'replication_auth',
    ],
)

env.Library(
    target='oplog_entry_test_helpers',
    source=[
        'oplog_entry_test_helpers.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/session/logical_session_id',
        'oplog_entry',
        'optime',
    ],
)

env.Library(
    target='idempotency_test_util',
    source=[
        'idempotency_document_structure.cpp',
        'idempotency_scalar_generator.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/exec/document_value/document_value',
    ],
)

env.Library(
    target='split_horizon',
    source=[
        'split_horizon.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/util/net/network',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/util/concurrency/spin_lock',
    ],
)

env.Library(
    target='member_data',
    source=[
        'member_data.cpp',
    ],
    LIBDEPS=[
        'replica_set_messages',
    ],
)

env.Library(
    target='topology_coordinator',
    source=[
        'heartbeat_response_action.cpp',
        'topology_coordinator.cpp',
        'topology_coordinator.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/audit',
        '$BUILD_DIR/mongo/rpc/metadata',
        '$BUILD_DIR/mongo/util/fail_point',
        'isself',
        'member_data',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/commit_quorum_options',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/stats/counters',
        'repl_server_parameters',
    ],
)

env.Library(
    target='repl_coordinator_impl',
    source=[
        'check_quorum_for_config_change.cpp',
        'repl_set_config_checks.cpp',
        'replication_coordinator_impl.cpp',
        'replication_coordinator_impl_elect_v1.cpp',
        'replication_coordinator_impl_heartbeat.cpp',
        'vote_requester.cpp',
        'replication_coordinator_impl.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/commands/mongod_fcv',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/mongod_options',
        '$BUILD_DIR/mongo/db/prepare_conflict_tracker',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/session/kill_sessions_local',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        '$BUILD_DIR/mongo/rpc/command_status',
        '$BUILD_DIR/mongo/rpc/metadata',
        '$BUILD_DIR/mongo/transport/transport_layer_common',
        '$BUILD_DIR/mongo/util/fail_point',
        'data_replicator_external_state_initial_sync',
        'initial_syncer',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
        'replication_metrics',
        'replication_process',
        'reporter',
        'scatter_gather',
        'tenant_migration_cloners',
        'topology_coordinator',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/catalog/local_oplog_info',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/serverless/serverless_lock',
        '$BUILD_DIR/mongo/db/session/session_catalog',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'delayable_timeout_callback',
        'repl_server_parameters',
        'replica_set_aware_service',
        'split_horizon',
    ],
)

env.Library(
    target='repl_coordinator_test_fixture',
    source=[
        'replication_coordinator_test_fixture.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/executor/network_interface_factory',
        '$BUILD_DIR/mongo/executor/network_interface_mock',
        '$BUILD_DIR/mongo/executor/network_interface_thread_pool',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor',
        '$BUILD_DIR/mongo/unittest/unittest',
        'repl_coordinator_impl',
        'replmocks',
        'topology_coordinator',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/read_write_concern_defaults',
        '$BUILD_DIR/mongo/db/read_write_concern_defaults_mock',
        '$BUILD_DIR/mongo/db/repl/repl_server_parameters',
        '$BUILD_DIR/mongo/db/storage/storage_engine_common',
    ],
)

env.Library(
    target='repl_coordinator_interface',
    source=[
        'always_allow_non_local_writes.cpp',
        'repl_client_info.cpp',
        'replication_coordinator.cpp',
        'replication_coordinator_noop.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/net/network',
        'optime',
        'replication_process',
        'split_prepare_session_manager',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'repl_settings',
    ],
)

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

env.Library(
    target='replmocks',
    source=[
        'replication_consistency_markers_mock.cpp',
        'replication_coordinator_external_state_mock.cpp',
        'replication_coordinator_mock.cpp',
        'storage_interface_mock.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/executor/network_interface_mock',
        'isself',
        'oplog',
        'oplog_buffer_blocking_queue',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
        'storage_interface',
    ],
)

env.Library(
    'read_concern_args',
    source=[
        'read_concern_args.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/server_base',
        'optime',
    ],
)

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

env.Library(
    target='replica_set_messages',
    source=[
        'hello_response.cpp',
        'member_config.cpp',
        'repl_set_config.cpp',
        'repl_set_config_validators.cpp',
        'repl_set_heartbeat_args_v1.cpp',
        'repl_set_heartbeat_response.cpp',
        'repl_set_request_votes_args.cpp',
        'repl_set_tag.cpp',
        'repl_set_write_concern_mode_definitions.cpp',
        'update_position_args.cpp',
        'last_vote.cpp',
        'member_config.idl',
        'repl_set_config.idl',
        'repl_set_config_params.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/util/bson_extract',
        '$BUILD_DIR/mongo/client/connection_string',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/rpc/command_status',
        '$BUILD_DIR/mongo/rpc/metadata',
        '$BUILD_DIR/mongo/transport/transport_layer_common',
        '$BUILD_DIR/mongo/util/net/network',
        'optime',
        'read_concern_args',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/server_feature_flags',
        '$BUILD_DIR/mongo/util/fail_point',
        'repl_server_parameters',
        'split_horizon',
    ],
)

env.Library(
    target='repl_set_status_commands',
    source=[
        'repl_set_command.cpp',
        'repl_set_get_status_cmd.cpp',
        'repl_set_test_egress.cpp',
        'repl_set_test_egress.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/auth/authprivilege',
        '$BUILD_DIR/mongo/db/commands',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
        '$BUILD_DIR/mongo/db/not_primary_error_tracker',
        'repl_coordinator_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/executor/connection_pool_executor',
        '$BUILD_DIR/mongo/executor/network_interface',
        '$BUILD_DIR/mongo/executor/network_interface_factory',
        '$BUILD_DIR/mongo/executor/network_interface_tl',
    ],
)

env.Library(
    target='repl_set_commands',
    source=[
        'repl_set_commands.cpp',
        'repl_set_request_votes.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/commands',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/not_primary_error_tracker',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'drop_pending_collection_reaper',
        'repl_coordinator_interface',
        'repl_server_parameters',
        'repl_set_status_commands',
        'repl_settings',
        'replica_set_messages',
        'replication_process',
        'serveronly_repl',
    ],
)

env.Library(
    target='oplog_fetcher',
    source=[
        'oplog_fetcher.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/logical_time_metadata_hook',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/stats/timer_stats',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        'abstract_async_component',
        'repl_coordinator_interface',
        'replica_set_messages',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$BUILD_DIR/mongo/db/pipeline/pipeline',
        '$BUILD_DIR/mongo/db/pipeline/process_interface/mongo_process_interface',
        '$BUILD_DIR/mongo/db/query_expressions',
        '$BUILD_DIR/mongo/db/server_base',
        'repl_server_parameters',
        'replication_auth',
    ],
)

env.Library(
    target='reporter',
    source=[
        'reporter.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/executor/remote_command',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        '$BUILD_DIR/mongo/rpc/command_status',
        'replica_set_messages',
    ],
)

env.Library(
    target='sync_source_resolver',
    source=[
        'sync_source_resolver.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        '$BUILD_DIR/mongo/rpc/metadata',
        '$BUILD_DIR/mongo/util/net/network',
        'oplog_entry',
        'optime',
        'read_concern_args',
    ],
)

env.Library(
    target='sync_source_selector_mock',
    source=[
        'sync_source_selector_mock.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/rpc/metadata',
        '$BUILD_DIR/mongo/util/net/network',
        'optime',
    ],
)

env.Library(
    target='initial_sync_cloners',
    source=[
        'all_database_cloner.cpp',
        'collection_cloner.cpp',
        'database_cloner.cpp',
        'initial_sync_base_cloner.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/server_feature_flags',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/mongo/util/net/network',
        'base_cloner',
        'cloner_utils',
        'member_data',
        'repl_sync_shared_data',
        'replication_consistency_markers_impl',
        'task_runner',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/commands/list_collections_filter',
        '$BUILD_DIR/mongo/db/index_build_entry_helpers',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/util/progress_meter',
        'repl_server_parameters',
        'replication_auth',
    ],
)

env.Library(
    target='tenant_migration_cloners',
    source=[
        'tenant_all_database_cloner.cpp',
        'tenant_collection_cloner.cpp',
        'tenant_database_cloner.cpp',
        'tenant_base_cloner.cpp',
        'tenant_file_cloner.cpp',
        'tenant_file_importer_service.cpp',
    ],
    LIBDEPS=[
        'base_cloner',
        'cloner_utils',
        'repl_sync_shared_data',
        'task_runner',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/catalog/document_validation',
        '$BUILD_DIR/mongo/db/commands/list_collections_filter',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/ops/write_ops_exec',
        '$BUILD_DIR/mongo/db/stats/top',
        '$BUILD_DIR/mongo/db/storage/durable_catalog',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger_import',
        '$BUILD_DIR/mongo/idl/cluster_parameter_synchronization_helpers',
        '$BUILD_DIR/mongo/rpc/metadata',
        '$BUILD_DIR/mongo/util/progress_meter',
        'oplog',
        'oplog_application_interface',
        'repl_server_parameters',
        'replica_set_aware_service',
        'replication_auth',
        'tenant_migration_state_machine_idl',
    ],
)

env.Library(
    target='task_runner',
    source=[
        'task_runner.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
    ],
)

env.Library(
    target='optime',
    source=[
        'bson_extract_optime.cpp',
        'optime.cpp',
        'optime_base.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/bson/util/bson_extract',
        '$BUILD_DIR/mongo/idl/idl_parser',
    ],
)

env.Library(
    target='data_replicator_external_state_impl',
    source=[
        'data_replicator_external_state_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        'oplog_application',
        'oplog_buffer_blocking_queue',
        'oplog_buffer_collection',
        'oplog_buffer_proxy',
        'optime',
        'repl_coordinator_interface',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        'repl_server_parameters',
    ],
)

env.Library(
    target='data_replicator_external_state_initial_sync',
    source=[
        'data_replicator_external_state_initial_sync.cpp',
    ],
    LIBDEPS=[
        'data_replicator_external_state_impl',
    ],
)

env.Library(
    target='data_replicator_external_state_mock',
    source=[
        'data_replicator_external_state_mock.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/util/net/network',
        'oplog_application_interface',
        'oplog_buffer_blocking_queue',
        'oplog_entry',
        'optime',
        'replica_set_messages',
    ],
)

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

env.Library(
    target='base_cloner',
    source=[
        'base_cloner.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/util/fail_point',
        'repl_sync_shared_data',
    ],
    LIBDEPS_PRIVATE=[
        'repl_server_parameters',
        'replication_consistency_markers_impl',
    ],
)

env.Library(
    target='cloner_utils',
    source=[
        'cloner_utils.cpp',
        'database_cloner_common.cpp',
        'database_cloner.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/server_feature_flags',
        'read_concern_args',
    ],
)

env.Library(
    target='initial_syncer',
    source=[
        'initial_syncer.cpp',
        'initial_syncer_common_stats.cpp',
        'initial_syncer_factory.cpp',
        'multiapplier.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        'initial_sync_cloners',
        'oplog',
        'oplog_application_interface',
        'oplog_buffer_blocking_queue',
        'oplog_entry',
        'oplog_fetcher',
        'optime',
        'repl_sync_shared_data',
        'rollback_checker',
        'storage_interface',
        'tenant_migration_access_blocker',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/serverless/serverless_lock',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/executor/scoped_task_executor',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        'repl_server_parameters',
    ],
)

env.Library(
    target='rollback_checker',
    source=[
        'rollback_checker.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/executor/task_executor_interface',
    ],
)

env.Library(
    target='roll_back_local_operations',
    source=[
        'roll_back_local_operations.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/util/fail_point',
        'oplog_entry',
        'optime',
    ],
)

env.Library(
    target='hello_command',
    source=[
        'hello.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/auth/authprivilege',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/rpc/metadata',
        'optime',
    ],
)

env.Library(
    target='replication_info',
    source=[
        'replication_info.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/auth/saslauth',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/util/fail_point',
        'oplog',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/read_write_concern_defaults',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/transport/message_compressor',
        'hello_auth',
        'hello_command',
        'primary_only_service',
        'replication_auth',
        'split_horizon',
    ],
)

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

env.Library(
    target='tenant_migration_state_machine_idl',
    source=[
        'tenant_migration_state_machine.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/connection_string',
        '$BUILD_DIR/mongo/client/read_preference',
        '$BUILD_DIR/mongo/db/commands/mongod_fcv',
        '$BUILD_DIR/mongo/db/serverless/serverless_types_idl',
        '$BUILD_DIR/mongo/idl/idl_parser',
        '$BUILD_DIR/mongo/util/net/ssl_manager',
        'optime',
        'repl_coordinator_interface',
    ],
)

env.Library(
    target='tenant_migration_statistics',
    source=[
        "tenant_migration_statistics.cpp",
        "tenant_migration_server_status_section.cpp",
    ],
    LIBDEPS=[
        "repl_server_parameters",
    ],
    LIBDEPS_PRIVATE=[
        "$BUILD_DIR/mongo/base",
        '$BUILD_DIR/mongo/db/commands/server_status_core',
    ],
)

env.Library(
    target='tenant_migration_utils',
    source=[
        'tenant_migration_shard_merge_util.cpp',
        'tenant_migration_util.cpp',
        'tenant_migration_recipient_entry_helpers.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/keys_collection_util',
        '$BUILD_DIR/mongo/util/future_util',
        'repl_coordinator_interface',
        'repl_server_parameters',
        'wait_for_majority_service',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/ops/write_ops',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/storage/storage_file_util',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'tenant_migration_state_machine_idl',
    ],
)

env.Library(
    target='shard_merge_recipient_service',
    source=[
        'shard_merge_recipient_op_observer.cpp',
        'shard_merge_recipient_service.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/client/read_preference',
        '$BUILD_DIR/mongo/db/catalog/commit_quorum_options',
        '$BUILD_DIR/mongo/db/vector_clock_mutable',
        'tenant_migration_access_blocker',
        'tenant_migration_statistics',
        'tenant_migration_utils',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/catalog/local_oplog_info',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_mongod',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/ops/write_ops_exec',
        '$BUILD_DIR/mongo/db/pipeline/process_interface/mongo_process_interface',
        '$BUILD_DIR/mongo/db/serverless/serverless_lock',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        'cloner_utils',
        'oplog',
        'oplog_buffer_collection',
        'oplog_entry',
        'oplog_fetcher',
        'oplog_interface_local',
        'primary_only_service',
        'repl_server_parameters',
        'replica_set_aware_service',
        'replication_auth',
        'tenant_migration_cloners',
        'tenant_migration_state_machine_idl',
        'tenant_oplog_processing',
        'timestamp_block',
    ],
)

env.Library(
    target='tenant_migration_recipient_service',
    source=[
        'tenant_migration_recipient_op_observer.cpp',
        'tenant_migration_recipient_service.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/client/read_preference',
        '$BUILD_DIR/mongo/db/catalog/commit_quorum_options',
        '$BUILD_DIR/mongo/db/vector_clock_mutable',
        'tenant_migration_access_blocker',
        'tenant_migration_statistics',
        'tenant_migration_utils',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/catalog/local_oplog_info',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/ops/write_ops_exec',
        '$BUILD_DIR/mongo/db/pipeline/process_interface/mongo_process_interface',
        '$BUILD_DIR/mongo/db/serverless/serverless_lock',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        'cloner_utils',
        'oplog',
        'oplog_buffer_collection',
        'oplog_entry',
        'oplog_fetcher',
        'oplog_interface_local',
        'primary_only_service',
        'repl_server_parameters',
        'replica_set_aware_service',
        'replication_auth',
        'tenant_migration_cloners',
        'tenant_migration_state_machine_idl',
        'tenant_oplog_processing',
    ],
)

env.Library(
    target='tenant_migration_access_blocker',
    source=[
        'tenant_migration_access_blocker_registry.cpp',
        'tenant_migration_access_blocker_server_status_section.cpp',
        'tenant_migration_access_blocker_util.cpp',
        'tenant_migration_donor_access_blocker.cpp',
        'tenant_migration_recipient_access_blocker.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/remote_command_targeter',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$BUILD_DIR/mongo/db/commands/tenant_migration_cmds_request',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/rw_concern_d',
        '$BUILD_DIR/mongo/db/serverless/shard_split_state_machine',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/executor/network_interface_factory',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor',
        '$BUILD_DIR/mongo/util/future_util',
        'optime',
        'repl_coordinator_interface',
        'tenant_migration_decoration',
        'tenant_migration_errors',
        'tenant_migration_state_machine_idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/local_oplog_info',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        'tenant_migration_utils',
    ],
)

env.Library(
    target='tenant_migration_donor_service',
    source=[
        'tenant_migration_donor_op_observer.cpp',
        'tenant_migration_donor_service.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/executor/async_rpc',
        'primary_only_service',
        'tenant_migration_access_blocker',
        'tenant_migration_statistics',
        'tenant_migration_utils',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        "$BUILD_DIR/mongo/db/catalog/local_oplog_info",
        "$BUILD_DIR/mongo/db/concurrency/exception_util",
        "$BUILD_DIR/mongo/db/index_builds_coordinator_interface",
        "$BUILD_DIR/mongo/db/serverless/serverless_lock",
    ],
)

env.Library(
    target='serveronly_repl',
    source=[
        'noop_writer.cpp',
        'replication_coordinator_external_state_impl.cpp',
        'sync_source_feedback.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/change_stream_pre_images_collection_manager',
        '$BUILD_DIR/mongo/db/change_stream_serverless_helpers',
        '$BUILD_DIR/mongo/db/cloner',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/not_primary_error_tracker',
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/query/query_stats/query_stats',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/session/kill_sessions_local',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/system_index',
        '$BUILD_DIR/mongo/db/vector_clock',
        '$BUILD_DIR/mongo/rpc/client_metadata',
        '$BUILD_DIR/mongo/util/fail_point',
        'bgsync',
        'drop_pending_collection_reaper',
        'oplog_application',
        'oplog_buffer_batched_queue',
        'oplog_buffer_collection',
        'oplog_buffer_proxy',
        'oplog_interface_remote',
        'oplog_write',
        'optime',
        'primary_only_service',
        'repl_coordinator_interface',
        'repl_settings',
        'replication_consistency_markers_impl',
        'replication_info',
        'replication_metrics',
        'replication_process',
        'replication_recovery',
        'reporter',
        'rollback_source_impl',
        'tenant_migration_access_blocker',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/local_oplog_info',
        '$BUILD_DIR/mongo/db/change_stream_change_collection_manager',
        '$BUILD_DIR/mongo/db/commands/mongod_fcv',
        '$BUILD_DIR/mongo/db/commands/rwc_defaults_commands',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/storage/flow_control',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        'repl_server_parameters',
    ],
)

env.Library(
    target='mock_repl_coord_server_fixture',
    source=[
        'mock_repl_coord_server_fixture.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/db/shard_role',
        'drop_pending_collection_reaper',
        'oplog',
        'oplog_entry',
        'replmocks',
    ],
)

env.Library(
    target='primary_only_service_test_fixture',
    source=[
        'primary_only_service_test_fixture.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        'primary_only_service',
        'wait_for_majority_service',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/op_observer/op_observer_impl',
        '$BUILD_DIR/mongo/db/op_observer/operation_logger_impl',
        'repl_coordinator_interface',
        'replmocks',
    ],
)

if wiredtiger:
    env.Library(
        target='oplog_applier_impl_test_fixture',
        source=[
            'oplog_applier_impl_test_fixture.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/db/catalog/database_holder',
            '$BUILD_DIR/mongo/db/catalog/document_validation',
            '$BUILD_DIR/mongo/db/catalog/health_log',
            '$BUILD_DIR/mongo/db/catalog/health_log_interface',
            '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
            '$BUILD_DIR/mongo/db/multitenancy',
            '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
            '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
            '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger',
            'drop_pending_collection_reaper',
            'oplog_application',
            'replmocks',
            'storage_interface_impl',
        ],
        LIBDEPS_PRIVATE=[
            '$BUILD_DIR/mongo/db/op_observer/op_observer',
        ],
    )

    env.Library(
        target='idempotency_test_fixture',
        source=[
            'idempotency_test_fixture.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/db/auth/authmocks',
            '$BUILD_DIR/mongo/db/catalog/collection_validation',
            '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
            'oplog_applier_impl_test_fixture',
            'oplog_entry_test_helpers',
        ],
    )

    env.CppUnitTest(
        target='db_repl_idempotency_test',
        source=[
            'idempotency_test.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/db/update/update_test_helpers',
            'idempotency_test_fixture',
            'idempotency_test_util',
        ],
    )

    env.CppUnitTest(
        target='tenant_migration_donor_service_test',
        source=[
            'tenant_migration_donor_service_test.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/client/replica_set_monitor_protocol_test_util',
            '$BUILD_DIR/mongo/db/op_observer/op_observer',
            '$BUILD_DIR/mongo/db/op_observer/op_observer_impl',
            '$BUILD_DIR/mongo/transport/transport_layer_egress_init',
            '$BUILD_DIR/mongo/unittest/unittest',
            '$BUILD_DIR/mongo/util/clock_source_mock',
            '$BUILD_DIR/mongo/util/version_impl',
            'idempotency_test_fixture',
            'tenant_migration_donor_service',
        ],
    )

    env.CppUnitTest(
        target='db_repl_test',
        source=[
            'abstract_async_component_test.cpp',
            'apply_ops_test.cpp',
            'check_quorum_for_config_change_test.cpp',
            'dbcheck_test.cpp',
            'delayable_timeout_callback_test.cpp',
            'drop_pending_collection_reaper_test.cpp',
            'idempotency_document_structure_test.cpp',
            'initial_syncer_test.cpp',
            'insert_group_test.cpp',
            'isself_test.cpp',
            'member_config_test.cpp',
            'multiapplier_test.cpp',
            'oplog_applier_impl_test.cpp',
            'oplog_applier_test.cpp',
            'oplog_applier_batcher_test_fixture.cpp',
            'oplog_buffer_batched_queue_test.cpp',
            'oplog_buffer_blocking_queue_test.cpp',
            'oplog_buffer_collection_test.cpp',
            'oplog_buffer_proxy_test.cpp',
            'oplog_entry_test.cpp',
            'oplog_fetcher_mock.cpp',
            'oplog_fetcher_test.cpp',
            'oplog_test.cpp',
            'oplog_writer_batcher_test.cpp',
            'oplog_writer_impl_test.cpp',
            'optime_extract_test.cpp',
            'primary_only_service_test.cpp',
            'primary_only_service_util_test.cpp',
            'read_concern_args_test.cpp',
            'repl_client_info_test.cpp',
            'repl_set_config_checks_test.cpp',
            'repl_set_config_test.cpp',
            'repl_set_heartbeat_response_test.cpp',
            'repl_set_tag_test.cpp',
            'repl_set_write_concern_mode_definitions_test.cpp',
            'replication_consistency_markers_impl_test.cpp',
            'replication_process_test.cpp',
            'replication_recovery_test.cpp',
            'reporter_test.cpp',
            'roll_back_local_operations_test.cpp',
            'rollback_checker_test.cpp',
            'rollback_impl_test.cpp',
            'scatter_gather_test.cpp',
            'shard_merge_recipient_op_observer_test.cpp',
            'shard_merge_recipient_service_test.cpp',
            'speculative_majority_read_info_test.cpp',
            'split_horizon_test.cpp',
            'split_prepare_session_manager_test.cpp',
            'storage_interface_impl_test.cpp',
            'storage_timestamp_test.cpp',
            'sync_source_resolver_test.cpp',
            'task_runner_test.cpp',
            'task_runner_test_fixture.cpp',
            'tenant_file_importer_service_test.cpp',
            'tenant_migration_access_blocker_registry_test.cpp',
            'tenant_migration_access_blocker_util_test.cpp',
            'tenant_migration_recipient_access_blocker_test.cpp',
            'tenant_migration_recipient_entry_helpers_test.cpp',
            'tenant_oplog_applier_test.cpp',
            'tenant_oplog_applier_shard_merge_test.cpp',
            'tenant_oplog_batcher_test.cpp',
            'vote_requester_test.cpp',
            'wait_for_majority_service_test.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/bson/mutable/mutable_bson',
            '$BUILD_DIR/mongo/client/replica_set_monitor_protocol_test_util',
            '$BUILD_DIR/mongo/db/auth/authmocks',
            '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
            '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
            '$BUILD_DIR/mongo/db/catalog/catalog_test_fixture',
            '$BUILD_DIR/mongo/db/catalog/health_log',
            '$BUILD_DIR/mongo/db/change_stream_change_collection_manager',
            '$BUILD_DIR/mongo/db/change_stream_pre_images_collection_manager',
            '$BUILD_DIR/mongo/db/commands/create_command',
            '$BUILD_DIR/mongo/db/commands/mongod_fcv',
            '$BUILD_DIR/mongo/db/commands/txn_cmd_request',
            '$BUILD_DIR/mongo/db/dbdirectclient',
            '$BUILD_DIR/mongo/db/index/index_access_method',
            '$BUILD_DIR/mongo/db/index_build_entry_helpers',
            '$BUILD_DIR/mongo/db/index_builds_coordinator_mongod',
            '$BUILD_DIR/mongo/db/multitenancy',
            '$BUILD_DIR/mongo/db/op_observer/op_observer',
            '$BUILD_DIR/mongo/db/op_observer/op_observer_impl',
            '$BUILD_DIR/mongo/db/op_observer/operation_logger_impl',
            '$BUILD_DIR/mongo/db/pipeline/change_stream_expired_pre_image_remover',
            '$BUILD_DIR/mongo/db/query/command_request_response',
            '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
            '$BUILD_DIR/mongo/db/server_base',
            '$BUILD_DIR/mongo/db/serverless/serverless_lock',
            '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
            '$BUILD_DIR/mongo/db/service_context_test_fixture',
            '$BUILD_DIR/mongo/db/session/logical_session_id_helpers',
            '$BUILD_DIR/mongo/db/shard_role',
            '$BUILD_DIR/mongo/db/stats/counters',
            '$BUILD_DIR/mongo/db/storage/storage_control',
            '$BUILD_DIR/mongo/db/transaction/transaction',
            '$BUILD_DIR/mongo/db/update/update_test_helpers',
            '$BUILD_DIR/mongo/dbtests/mocklib',
            '$BUILD_DIR/mongo/executor/network_interface_factory',
            '$BUILD_DIR/mongo/executor/network_interface_mock',
            '$BUILD_DIR/mongo/executor/network_interface_thread_pool',
            '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
            '$BUILD_DIR/mongo/rpc/command_status',
            '$BUILD_DIR/mongo/transport/transport_layer_mock',
            '$BUILD_DIR/mongo/unittest/task_executor_proxy',
            '$BUILD_DIR/mongo/unittest/unittest',
            '$BUILD_DIR/mongo/util/clock_source_mock',
            '$BUILD_DIR/mongo/util/concurrency/thread_pool',
            'abstract_async_component',
            'data_replicator_external_state_mock',
            'dbcheck',
            'dbcheck_test_fixture',
            'delayable_timeout_callback',
            'drop_pending_collection_reaper',
            'idempotency_test_fixture',
            'idempotency_test_util',
            'image_collection_entry',
            'initial_syncer',
            'isself',
            'oplog',
            'oplog_application_interface',
            'oplog_applier_impl_test_fixture',
            'oplog_buffer_batched_queue',
            'oplog_buffer_collection',
            'oplog_buffer_proxy',
            'oplog_entry',
            'oplog_entry_test_helpers',
            'oplog_fetcher',
            'oplog_interface_local',
            'oplog_interface_mock',
            'oplog_interface_remote',
            'oplog_write',
            'optime',
            'primary_only_service_test_fixture',
            'repl_coordinator_impl',
            'repl_server_parameters',
            'replica_set_aware_service',
            'replica_set_messages',
            'replication_consistency_markers_impl',
            'replication_process',
            'replication_recovery',
            'replmocks',
            'reporter',
            'roll_back_local_operations',
            'rollback_checker',
            'rollback_impl',
            'rollback_test_fixture',
            'rs_rollback',
            'scatter_gather',
            'shard_merge_recipient_service',
            'speculative_majority_read_info',
            'split_horizon',
            'split_prepare_session_manager',
            'storage_interface_impl',
            'sync_source_resolver',
            'sync_source_selector_mock',
            'task_executor_mock',
            'task_runner',
            'tenant_migration_donor_service',
            'tenant_migration_recipient_service',
            'tenant_migration_utils',
            'tenant_oplog_processing',
            'timestamp_block',
        ],
    )

# The following two tests appear to clash when combined with the above list.

env.CppUnitTest(
    target='db_repl_coordinator_test',
    source=[
        'replication_coordinator_impl_elect_v1_test.cpp',
        'replication_coordinator_impl_heartbeat_v1_test.cpp',
        'replication_coordinator_impl_reconfig_test.cpp',
        'replication_coordinator_impl_test.cpp',
        'topology_coordinator_v1_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/read_write_concern_defaults_mock',
        '$BUILD_DIR/mongo/db/serverless/shard_split_utils',
        '$BUILD_DIR/mongo/db/service_request_common',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/util/signal_handlers',
        'isself',
        'repl_coordinator_impl',
        'repl_coordinator_test_fixture',
        'repl_server_parameters',
        'topology_coordinator',
    ],
)

env.CppUnitTest(
    target='topology_version_observer_test',
    source=[
        'topology_version_observer_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/util/bson_extract',
        '$BUILD_DIR/mongo/util/clock_sources',
        'repl_coordinator_impl',
        'repl_coordinator_test_fixture',
        'topology_version_observer',
    ],
)

env.Library(
    target='cloner_test_fixtures',
    source=[
        'cloner_test_fixture.cpp',
        'initial_sync_cloner_test_fixture.cpp',
        'tenant_cloner_test_fixture.cpp',
    ],
    LIBDEPS=[
        # Required for service context test fixture
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/dbtests/mocklib',
        '$BUILD_DIR/mongo/util/clock_source_mock',
        'repl_server_parameters',
        'repl_sync_shared_data',
        'replmocks',
        'storage_interface_impl',
    ],
)

env.CppUnitTest(
    target='db_repl_cloners_test',
    source=[
        'all_database_cloner_test.cpp',
        'collection_cloner_test.cpp',
        'database_cloner_test.cpp',
        'initial_sync_shared_data_test.cpp',
        'tenant_all_database_cloner_test.cpp',
        'tenant_collection_cloner_test.cpp',
        'tenant_database_cloner_test.cpp',
        'tenant_file_cloner_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'cloner_test_fixtures',
        'initial_sync_cloners',
        'tenant_migration_cloners',
    ],
)

env.CppUnitTest(
    target='db_repl_set_aware_service_test',
    source=[
        'replica_set_aware_service_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        'repl_coordinator_impl',
        'repl_coordinator_test_fixture',
        'replica_set_aware_service',
    ],
)

env.Library(
    target='replication_metrics',
    source=[
        'replication_metrics.cpp',
        'replication_metrics.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$BUILD_DIR/mongo/db/service_context',
        'election_reason_counter',
        'election_reason_counter_parser',
        'topology_coordinator',
    ],
)

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

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

env.Library(
    target='topology_version_observer',
    source=[
        'topology_version_observer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/service_context',
        'repl_coordinator_interface',
        'replica_set_messages',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/util/concurrency/spin_lock',
        '$BUILD_DIR/mongo/util/fail_point',
    ],
)

env.Library(
    target='hello_auth',
    source=[
        'hello_auth.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/auth/authentication_session',
        '$BUILD_DIR/mongo/db/auth/sasl_commands',
        '$BUILD_DIR/mongo/db/auth/saslauth',
        '$BUILD_DIR/mongo/db/commands/authentication_commands',
        'hello_command',
    ],
)
wait_for_majority_service_env = env.Clone()
# TODO(SERVER-77205): Review and Possibly Remove '-Wno-deprecated' After Mozjs Update
wait_for_majority_service_env.Append(
    CXXFLAGS=[] if wait_for_majority_service_env.TargetOSIs('windows') else [
        '-Wno-deprecated',
    ], )
wait_for_majority_service_env.Library(
    target='wait_for_majority_service',
    source=[
        'wait_for_majority_service.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/rw_concern_d',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/mongo/util/future_util',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/util/concurrency/spin_lock',
    ],
)

env.Library(
    target='primary_only_service',
    source=[
        'primary_only_service.cpp',
        'primary_only_service_util.cpp',
        'primary_only_service_op_observer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/executor/task_executor_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/logical_time_metadata_hook',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/executor/connection_pool_executor',
        '$BUILD_DIR/mongo/executor/network_interface',
        '$BUILD_DIR/mongo/executor/network_interface_factory',
        '$BUILD_DIR/mongo/executor/network_interface_thread_pool',
        '$BUILD_DIR/mongo/executor/network_interface_tl',
        '$BUILD_DIR/mongo/executor/scoped_task_executor',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor',
        '$BUILD_DIR/mongo/util/concurrency/spin_lock',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        'repl_coordinator_interface',
        'repl_server_parameters',
        'replica_set_aware_service',
        'wait_for_majority_service',
    ],
)

env.Library(
    target='tenant_oplog_processing',
    source=[
        'tenant_oplog_batcher.cpp',
        'tenant_oplog_applier.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        'abstract_async_component',
        'cloner_utils',
        'oplog',
        'oplog_application',
        'oplog_application_interface',
        'repl_server_parameters',
    ],
)

env.Library(
    target='image_collection_entry',
    source=[
        'image_collection_entry.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/session/logical_session_id',
        '$BUILD_DIR/mongo/idl/idl_parser',
        'oplog_entry',
    ],
)

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

env.Library(
    target='split_prepare_session_manager',
    source=[
        'split_prepare_session_manager.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/session/logical_session_id',
        '$BUILD_DIR/mongo/db/session/logical_session_id_helpers',
    ],
)

env.Benchmark(
    target='oplog_application_bm',
    source=[
        'oplog_application_bm.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/catalog_impl',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_mongod',
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/op_observer/op_observer_impl',
        '$BUILD_DIR/mongo/db/op_observer/operation_logger_impl',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/service_context_d',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger',
        '$BUILD_DIR/mongo/transport/session_manager',
        '$BUILD_DIR/mongo/unittest/unittest',
        '$BUILD_DIR/mongo/util/periodic_runner_factory',
        'drop_pending_collection_reaper',
        'repl_coordinator_impl',
        'repl_coordinator_interface',
        'replication_consistency_markers_impl',
        'replication_recovery',
        'replmocks',
        'storage_interface_impl',
    ],
)

env.Benchmark(
    target='oplog_applier_utils_bm',
    source=[
        'oplog_applier_utils_bm.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/query/stats/stats_test_utils',
        'oplog_application',
    ],
)

env.Benchmark(
    target='replication_consistency_markers_impl_bm',
    source=[
        'replication_consistency_markers_impl_bm.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/auth_op_observer',
        '$BUILD_DIR/mongo/db/auth/authserver',
        '$BUILD_DIR/mongo/db/op_observer/change_stream_pre_images_op_observer',
        '$BUILD_DIR/mongo/db/op_observer/fallback_op_observer',
        '$BUILD_DIR/mongo/db/op_observer/fcv_op_observer',
        '$BUILD_DIR/mongo/db/op_observer/find_and_modify_images_op_observer',
        '$BUILD_DIR/mongo/db/op_observer/op_observer_impl',
        '$BUILD_DIR/mongo/db/op_observer/operation_logger_impl',
        '$BUILD_DIR/mongo/db/op_observer/operation_logger_transaction_proxy',
        '$BUILD_DIR/mongo/db/op_observer/user_write_block_mode_op_observer',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/serverless/shard_split_donor_service',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_op_observer',
        '$BUILD_DIR/mongo/idl/cluster_server_parameter_op_observer',
        'primary_only_service',
        'replication_consistency_markers_impl',
        'replmocks',
        'shard_merge_recipient_service',
        'storage_interface_impl',
        'tenant_migration_donor_service',
        'tenant_migration_recipient_service',
    ],
)

env.Benchmark(
    target='oplog_write_bm',
    source=[
        'oplog_write_bm.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/catalog_impl',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_mongod',
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/op_observer/op_observer_impl',
        '$BUILD_DIR/mongo/db/op_observer/operation_logger_impl',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/service_context_d',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger',
        '$BUILD_DIR/mongo/transport/session_manager',
        '$BUILD_DIR/mongo/unittest/unittest',
        '$BUILD_DIR/mongo/util/periodic_runner_factory',
        'drop_pending_collection_reaper',
        'repl_coordinator_impl',
        'repl_coordinator_interface',
        'repl_server_parameters',
        'replication_consistency_markers_impl',
        'replication_recovery',
        'replmocks',
        'storage_interface_impl',
    ],
)
