# -*- mode: python -*-

Import("env")

env = env.Clone()

env.Library(
    target='oplog',
    source=[
        'apply_ops.cpp',
        'do_txn.cpp',
        'oplog.cpp',
        env.Idlc('apply_ops.idl')[0],
    ],
    LIBDEPS_PRIVATE=[
        'dbcheck',
        'repl_coordinator_interface',
        'repl_settings',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/background',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/commands/feature_compatibility_parsers',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/index_d',
        '$BUILD_DIR/mongo/db/op_observer',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/stats/server_read_concern_write_concern_metrics',
        '$BUILD_DIR/mongo/idl/idl_parser',
    ],
)

env.Library(
    target='oplogreader',
    source=[
        'oplogreader.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/auth/internal_user_auth',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/util/net/network',
    ],
)

env.CppUnitTest(
    target='apply_ops_test',
    source=[
        'apply_ops_test.cpp',
    ],
    LIBDEPS=[
        'oplog',
        'oplog_entry',
        'replmocks',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/rpc/command_status',
    ],
)

env.CppUnitTest(
    target='oplog_test',
    source=[
        'oplog_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/unittest/concurrency',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        'oplog',
        'oplog_entry',
        'oplog_interface_local',
        'replmocks',
    ],
)

env.CppUnitTest(
    target='do_txn_test',
    source=[
        'do_txn_test.cpp',
    ],
    LIBDEPS=[
        'oplog',
        'oplog_entry',
        'replmocks',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/rpc/command_status',
    ],
)

env.Library(
    target='rollback_source_impl',
    source=[
        'rollback_source_impl.cpp',
    ],
    LIBDEPS=[
        'oplog',
        'oplog_interface_remote',
        'oplogreader',
        'repl_coordinator_interface',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/background',
        '$BUILD_DIR/mongo/db/catalog/database',
        '$BUILD_DIR/mongo/db/cloner',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/index_d',
        '$BUILD_DIR/mongo/db/index/index_descriptor',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/util/fail_point',
    ],
)



env.Library(
    target='bgsync',
    source=[
        'bgsync.cpp',
    ],
    LIBDEPS=[
        'oplog',
        'abstract_async_component',
        'data_replicator_external_state_impl',
        'oplog_fetcher',
        'oplog_interface_local',
        'oplog_interface_remote',
        'repl_coordinator_interface',
        'rollback_impl',
        'rollback_source_impl',
        'rs_rollback',
        'storage_interface',
        'sync_source_resolver',
        '$BUILD_DIR/mongo/client/connection_pool',
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/server_parameters',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/executor/network_interface_factory',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
    ],
)

env.Library(
    target='repl_settings',
    source=[
        'repl_settings.cpp',
        'repl_settings_init.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/server_parameters',
    ],
)

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

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

env.CppUnitTest(
    target='abstract_async_component_test',
    source=[
        'abstract_async_component_test.cpp',
    ],
    LIBDEPS=[
        'abstract_async_component',
        'task_executor_mock',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
    ],
)

env.Library(
    target='dbcheck',
    source=[
        'dbcheck.cpp',
        "dbcheck_idl.cpp",
        env.Idlc('dbcheck.idl')[0],
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/idl/idl_parser',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/catalog/database',
        '$BUILD_DIR/mongo/db/catalog/health_log',
        '$BUILD_DIR/mongo/db/db_raii',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/util/md5',
    ],
)


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

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

env.Library(
    target='storage_interface_impl',
    source=[
        'storage_interface_impl.cpp',
        'collection_bulk_loader_impl.cpp',
    ],
    LIBDEPS=[
        'oplog',
        'rollback_idl',
        'storage_interface',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/query_exec',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/logical_clock',
    ],
)

env.CppUnitTest(
    target='storage_interface_impl_test',
    source=[
        'storage_interface_impl_test.cpp',
    ],
    LIBDEPS=[
        'oplog_interface_local',
        'replmocks',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

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

env.Library(
    target='replication_consistency_markers_impl',
    source=[
        'replication_consistency_markers_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/server_options',
        'optime',
        'repl_coordinator_interface',
        'replication_consistency_markers_idl',
    ],
)

env.CppUnitTest(
    target='replication_consistency_markers_impl_test',
    source=[
        'replication_consistency_markers_impl_test.cpp',
    ],
    LIBDEPS=[
        'replication_consistency_markers_impl',
        'replmocks',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

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

env.CppUnitTest(
    target='replication_recovery_test',
    source=[
        'replication_recovery_test.cpp',
    ],
    LIBDEPS=[
        'oplog_interface_local',
        'replmocks',
        'replication_recovery',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

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

env.CppUnitTest(
    target='replication_process_test',
    source=[
        'replication_process_test.cpp',
    ],
    LIBDEPS=[
        'replication_consistency_markers_impl',
        'replication_process',
        'replmocks',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

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

env.CppUnitTest(
    target='drop_pending_collection_reaper_test',
    source=[
        'drop_pending_collection_reaper_test.cpp',
    ],
    LIBDEPS=[
        'drop_pending_collection_reaper',
        'replmocks',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

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_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=[
        'storage_interface',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/service_context',
    ],
)

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

env.CppUnitTest(
    target='oplog_buffer_collection_test',
    source=[
        'oplog_buffer_collection_test.cpp',
    ],
    LIBDEPS=[
        'oplog_buffer_collection',
        'oplog_interface_local',
        'replmocks',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/unittest/concurrency',
    ],
    NO_CRUTCH = True,
)

env.CppUnitTest(
    target='oplog_buffer_proxy_test',
    source=[
        'oplog_buffer_proxy_test.cpp',
    ],
    LIBDEPS=[
        'oplog_buffer_proxy',
    ],
)

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

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

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=[
        'drop_pending_collection_reaper',
        'oplog',
        'replication_process',
        'roll_back_local_operations',
        'rollback_impl',
        'rslog',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/util/fail_point',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/query_exec',
    ],
)

env.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',
        '$BUILD_DIR/mongo/db/auth/internal_user_auth',
    ],
)

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

env.Library(
    target='rollback_test_fixture',
    source=[
        'rollback_test_fixture.cpp',
    ],
    LIBDEPS=[
        'drop_pending_collection_reaper',
        'oplog_interface_mock',
        'optime',
        'replication_process',
        'replmocks',
        'rs_rollback',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

env.CppUnitTest(
    target='rs_rollback_test',
    source=[
        'rs_rollback_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        'oplog_interface_local',
        'rollback_test_fixture',
        'rs_rollback',
    ],
)

env.Library(
    target='rollback_impl',
    source=[
        'rollback_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/repair_database_and_check_version',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/write_ops',
        '$BUILD_DIR/mongo/util/net/network',
        'optime',
        'repl_coordinator_interface',
        'roll_back_local_operations',
    ],
    LIBDEPS_PRIVATE=[
        'drop_pending_collection_reaper',
    ],
)

env.CppUnitTest(
    target='rollback_impl_test',
    source=[
        'rollback_impl_test.cpp',
    ],
    LIBDEPS=[
        'oplog_interface_mock',
        'rollback_impl',
        'rollback_test_fixture',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/auth/authmocks',
    ],
)

env.Library(
    target='oplog_entry',
    source=[
        'oplog_entry.cpp',
        env.Idlc('oplog_entry.idl')[0],
    ],
    LIBDEPS=[
        'optime',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/logical_session_id',
        '$BUILD_DIR/mongo/idl/idl_parser',
    ],
)

env.Library(
    target='oplog_application',
    source=[
        'applier_helpers.cpp',
        'oplog_applier.cpp',
        'session_update_tracker.cpp',
        'sync_tail.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/prefetch',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/stats/timer_stats',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/mongo/util/net/network',
        'initial_syncer',
        'oplog',
        'oplog_entry',
        'oplogreader',
        'repl_coordinator_interface',
        'repl_settings',
        'replication_metrics',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/mongod_fsync',
    ],
)

env.Library(
    target='idempotency_test_fixture',
    source=[
        'idempotency_test_fixture.cpp',
    ],
    LIBDEPS=[
        'sync_tail_test_fixture',
        '$BUILD_DIR/mongo/db/auth/authmocks',
    ],
)

env.Library(
    target='sync_tail_test_fixture',
    source=[
        'sync_tail_test_fixture.cpp',
    ],
    LIBDEPS=[
        'oplog_application',
        'replmocks',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/catalog/document_validation',
        '$BUILD_DIR/mongo/db/s/op_observer_sharding_impl',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

env.CppUnitTest(
    target='sync_tail_test',
    source=[
        'sync_tail_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/commands/mongod_fcv',
        '$BUILD_DIR/mongo/util/clock_source_mock',
        'idempotency_test_fixture',
        'oplog_interface_local',
        'sync_tail_test_fixture',
    ],
)

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

env.CppUnitTest(
    target='idempotency_test',
    source=[
        'idempotency_test.cpp',
    ],
    LIBDEPS=[
        'idempotency_test_fixture',
        'idempotency_test_util',
    ],
)

env.CppUnitTest(
    target='oplog_entry_test',
    source=[
        'oplog_entry_test.cpp',
    ],
    LIBDEPS=[
        'idempotency_test_fixture',
    ],
)

env.CppUnitTest(
    target='idempotency_document_structure_test',
    source=[
        'idempotency_document_structure_test.cpp',
    ],
    LIBDEPS=[
        'idempotency_test_util',
    ],
)

env.CppUnitTest(
    target='idempotency_update_sequence_test',
    source=[
        'idempotency_update_sequence_test.cpp',
    ],
    LIBDEPS=[
        'idempotency_test_util',
    ],
)

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

env.CppUnitTest(
    target='split_horizon_test',
    source=[
        'split_horizon_test.cpp',
    ],
    LIBDEPS=[
        'split_horizon',
    ],
)


env.Library('topology_coordinator',
            [
                'heartbeat_response_action.cpp',
                'member_data.cpp',
                'topology_coordinator.cpp',
            ],
            LIBDEPS=[
                '$BUILD_DIR/mongo/db/audit',
                '$BUILD_DIR/mongo/rpc/metadata',
                '$BUILD_DIR/mongo/util/fail_point',
                'replica_set_messages',
                'repl_settings',
                'rslog',
                'repl_coordinator_interface',
            ],
            LIBDEPS_PRIVATE=[
                'split_horizon',
            ],)

env.CppUnitTest('repl_set_heartbeat_response_test',
                'repl_set_heartbeat_response_test.cpp',
                LIBDEPS=['replica_set_messages'])

env.CppUnitTest(
    target='topology_coordinator_v1_test',
    source=[
        'topology_coordinator_v1_test.cpp',
    ],
    LIBDEPS=[
        'topology_coordinator',
        'replica_set_messages',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/executor/network_interface_factory',
        '$BUILD_DIR/mongo/executor/network_interface_mock',
        '$BUILD_DIR/mongo/executor/network_interface_thread_pool',
    ],
)

env.Library(
    target='repl_coordinator_impl',
    source=[
        'check_quorum_for_config_change.cpp',
        'elect_cmd_runner.cpp',
        'freshness_checker.cpp',
        'repl_set_config_checks.cpp',
        'replication_coordinator_impl.cpp',
        'replication_coordinator_impl_elect.cpp',
        'replication_coordinator_impl_elect_v1.cpp',
        'replication_coordinator_impl_heartbeat.cpp',
        'vote_requester.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/index/index_descriptor',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/db/service_context',
        '$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',
        '$BUILD_DIR/mongo/db/repl/replication_metrics',
        'collection_cloner',
        'initial_syncer',
        'data_replicator_external_state_initial_sync',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
        'replication_process',
        'reporter',
        'rslog',
        'scatter_gather',
        'topology_coordinator',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
    ],
)

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

    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/storage/ephemeral_for_test/storage_ephemeral_for_test',
        '$BUILD_DIR/mongo/db/storage/storage_engine_common',
    ],
)

env.CppUnitTest(
    target='replication_coordinator_impl_test',
    source=[
        'replication_coordinator_impl_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/unittest/concurrency',
        'repl_coordinator_test_fixture',
    ],
)

env.CppUnitTest(
    target='repl_set_config_checks_test',
    source=[
        'repl_set_config_checks_test.cpp',
    ],
    LIBDEPS=[
        'repl_coordinator_impl',
        'replmocks',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
    ],
)

env.CppUnitTest(
    target='scatter_gather_test',
    source=[
        'scatter_gather_test.cpp',
    ],
    LIBDEPS=[
        'scatter_gather',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
    ],
)

env.CppUnitTest(
    target='check_quorum_for_config_change_test',
    source=[
        'check_quorum_for_config_change_test.cpp',
    ],
    LIBDEPS=[
        'repl_coordinator_impl',
        'replmocks',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
    ],
)

env.CppUnitTest(
    target='freshness_checker_test',
    source=[
        'freshness_checker_test.cpp',
    ],
    LIBDEPS=[
        'repl_coordinator_impl',
        'replica_set_messages',
        'replmocks',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
    ],
)

env.CppUnitTest(
    target='vote_requester_test',
    source=[
        'vote_requester_test.cpp',
    ],
    LIBDEPS=[
        'repl_coordinator_impl',
        'replica_set_messages',
        'replmocks',
        '$BUILD_DIR/mongo/db/auth/authmocks',
    ],
)


env.CppUnitTest(
    target='elect_cmd_runner_test',
    source=[
        'elect_cmd_runner_test.cpp',
    ],
    LIBDEPS=[
        'repl_coordinator_impl',
        'replica_set_messages',
        'replmocks',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
    ],
)

env.CppUnitTest('replication_coordinator_impl_elect_v1_test',
                'replication_coordinator_impl_elect_v1_test.cpp',
                LIBDEPS=['repl_coordinator_test_fixture'])

env.CppUnitTest('replication_coordinator_impl_heartbeat_v1_test',
                'replication_coordinator_impl_heartbeat_v1_test.cpp',
                LIBDEPS=['repl_coordinator_test_fixture'])

env.CppUnitTest('replication_coordinator_impl_reconfig_test',
                'replication_coordinator_impl_reconfig_test.cpp',
                LIBDEPS=['repl_coordinator_test_fixture'])

env.Library(
    target='repl_coordinator_interface',
    source=[
        'always_allow_non_local_writes.cpp',
        'repl_client_info.cpp',
        'replication_coordinator.cpp',
    ],
    LIBDEPS=[
        'optime',
        'replication_process',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/net/network',
    ],
)

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=[
        'oplog_buffer_blocking_queue',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
        'storage_interface',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/executor/network_interface_mock',
    ],
)

env.Library('read_concern_args',
            [
                'read_concern_args.cpp'
            ],
            LIBDEPS=[
                '$BUILD_DIR/mongo/base',
                '$BUILD_DIR/mongo/bson/util/bson_extract',
                '$BUILD_DIR/mongo/db/logical_time',
                'optime',
            ])

env.Library('replica_set_messages',
            [
                'is_master_response.cpp',
                'member_config.cpp',
                'repl_set_config.cpp',
                'repl_set_heartbeat_args.cpp',
                'repl_set_heartbeat_args_v1.cpp',
                'repl_set_heartbeat_response.cpp',
                'repl_set_html_summary.cpp',
                'repl_set_request_votes_args.cpp',
                'repl_set_tag.cpp',
                'update_position_args.cpp',
                'last_vote.cpp',
            ],
            LIBDEPS=[
                '$BUILD_DIR/mongo/base',
                '$BUILD_DIR/mongo/bson/util/bson_extract',
                '$BUILD_DIR/mongo/client/connection_string',
                '$BUILD_DIR/mongo/db/common',
                '$BUILD_DIR/mongo/db/server_options_core',
                '$BUILD_DIR/mongo/transport/transport_layer_common',
                '$BUILD_DIR/mongo/util/net/network',
                '$BUILD_DIR/mongo/rpc/command_status',
                'optime',
                'read_concern_args',
                'split_horizon',
            ],)

env.CppUnitTest('repl_set_config_test',
                [
                    'member_config_test.cpp',
                    'repl_set_config_test.cpp',
                    'repl_set_tag_test.cpp',
                ],
                LIBDEPS=[
                    '$BUILD_DIR/mongo/bson/mutable/mutable_bson',
                    'replica_set_messages',
                ])

env.CppUnitTest('isself_test',
                [
                    'isself_test.cpp',
                ],
                LIBDEPS=[
                    '$BUILD_DIR/mongo/db/auth/authmocks',
                    '$BUILD_DIR/mongo/db/serveronly',
                    '$BUILD_DIR/mongo/db/service_context_d',
                    '$BUILD_DIR/mongo/db/service_context_test_fixture',
                    'isself',
                ],
                )

env.Library(
    target='repl_set_status_commands',
    source=[
        'repl_set_command.cpp',
        'repl_set_get_status_cmd.cpp',
    ],
    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/lasterror',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
    ],
)

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/lasterror',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'drop_pending_collection_reaper',
        'repl_set_status_commands',
        'repl_settings',
        'replica_set_messages',
        'replication_process',
        'serveronly_repl',
    ],
)

env.Library(
    target='abstract_oplog_fetcher_test_fixture',
    source=[
        'abstract_oplog_fetcher_test_fixture.cpp',
    ],
    LIBDEPS=[
        'abstract_oplog_fetcher',
        'oplog_entry',
        '$BUILD_DIR/mongo/unittest/task_executor_proxy',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
    ],
)

env.Library(
    target='abstract_oplog_fetcher',
    source=[
        'abstract_oplog_fetcher.cpp',
    ],
    LIBDEPS=[
        'abstract_async_component',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/stats/timer_stats',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/server_status_core',
    ],
)

env.CppUnitTest(
    target='abstract_oplog_fetcher_test',
    source='abstract_oplog_fetcher_test.cpp',
    LIBDEPS=[
        'abstract_oplog_fetcher',
        'abstract_oplog_fetcher_test_fixture',
        'oplog_entry',
        'task_executor_mock',
    ],
)

env.Library(
    target='oplog_fetcher',
    source=[
        'oplog_fetcher.cpp',
    ],
    LIBDEPS=[
        'abstract_oplog_fetcher',
        'repl_coordinator_interface',
        'replica_set_messages',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/stats/timer_stats',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/server_status_core',
    ],
)

env.CppUnitTest(
    target='oplog_fetcher_test',
    source='oplog_fetcher_test.cpp',
    LIBDEPS=[
        'oplog_fetcher',
        'data_replicator_external_state_mock',
        'abstract_oplog_fetcher_test_fixture',
    ],
)

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

env.CppUnitTest(
    target='reporter_test',
    source='reporter_test.cpp',
    LIBDEPS=[
        'reporter',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/unittest/task_executor_proxy',
    ],
)

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

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

env.CppUnitTest(
    target='sync_source_resolver_test',
    source='sync_source_resolver_test.cpp',
    LIBDEPS=[
        'sync_source_resolver',
        'sync_source_selector_mock',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/unittest/task_executor_proxy',
    ],
)

env.Library(
    target='base_cloner_test_fixture',
    source=[
        'base_cloner_test_fixture.cpp',
    ],
    LIBDEPS=[
        'replmocks',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
    ],
)

env.Library(
    target='collection_cloner',
    source=[
        'collection_cloner.cpp',
    ],
    LIBDEPS=[
        'task_runner',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/client/remote_command_retry_scheduler',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/catalog/document_validation',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        '$BUILD_DIR/mongo/rpc/command_status',
        '$BUILD_DIR/mongo/s/query/async_results_merger',
        '$BUILD_DIR/mongo/util/progress_meter',
    ],
)

env.CppUnitTest(
    target='collection_cloner_test',
    source='collection_cloner_test.cpp',
    LIBDEPS=[
        'collection_cloner',
        'base_cloner_test_fixture',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/unittest/task_executor_proxy',
    ],
)

env.Library(
    target='database_cloner',
    source=[
        'database_cloner.cpp',
    ],
    LIBDEPS=[
        'collection_cloner',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/list_collections_filter',
    ],
)

env.CppUnitTest(
    target='database_cloner_test',
    source='database_cloner_test.cpp',
    LIBDEPS=[
        'database_cloner',
        'base_cloner_test_fixture',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/commands/list_collections_filter',
        '$BUILD_DIR/mongo/unittest/task_executor_proxy',
    ],
)

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

env.CppUnitTest(
    target='databases_cloner_test',
    source='databases_cloner_test.cpp',
    LIBDEPS=[
        'databases_cloner',
        'oplog_entry',
        'replmocks',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/unittest/task_executor_proxy',
    ],
)

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

env.CppUnitTest(
    target='task_runner_test',
    source=[
        'task_runner_test.cpp',
        'task_runner_test_fixture.cpp',
    ],
    LIBDEPS=[
        'replmocks',
        'task_runner',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/unittest/concurrency',
        '$BUILD_DIR/mongo/unittest/unittest',
    ],
)

env.CppUnitTest(
    target='read_concern_args_test',
    source=[
        'read_concern_args_test.cpp',
    ],
    LIBDEPS=[
        'replica_set_messages',
        '$BUILD_DIR/mongo/db/logical_time',
   ],
)

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

env.CppUnitTest(
    target='optime_extract_test',
    source=[
        'optime_extract_test.cpp'
    ],
    LIBDEPS=[
        'optime',
    ],
)

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

env.CppUnitTest(
    target='multiapplier_test',
    source='multiapplier_test.cpp',
    LIBDEPS=[
        'multiapplier',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/unittest/task_executor_proxy',
    ],
)

env.Library(
    target='data_replicator_external_state_impl',
    source=[
        'data_replicator_external_state_impl.cpp',
    ],
    LIBDEPS=[
        'oplog_application',
        'oplog_buffer_blocking_queue',
        'oplog_buffer_collection',
        'oplog_buffer_proxy',
        'optime',
        'repl_coordinator_interface',
        'storage_interface',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/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=[
        'oplog_buffer_blocking_queue',
        'oplog_entry',
        'optime',
        'replica_set_messages',
        '$BUILD_DIR/mongo/util/net/network',
    ],
)

env.Library(
    target='initial_syncer',
    source=[
        'initial_syncer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        'collection_cloner',
        'database_cloner',
        'databases_cloner',
        'multiapplier',
        'oplog_buffer_blocking_queue',
        'oplog_entry',
        'oplog_fetcher',
        'optime',
        'rollback_checker',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/feature_compatibility_parsers',
    ]
)

env.CppUnitTest(
    target='initial_syncer_test',
    source=[
        'initial_syncer_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/commands/feature_compatibility_parsers',
        '$BUILD_DIR/mongo/db/query/command_request_response',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/unittest/concurrency',
        'base_cloner_test_fixture',
        'data_replicator_external_state_mock',
        'initial_syncer',
        'replication_process',
        'replmocks',
        'sync_source_selector_mock',
        'task_executor_mock',
    ],
)

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

env.CppUnitTest(
    target='rollback_checker_test',
    source=[
        'rollback_checker_test.cpp',
    ],
    LIBDEPS=[
        'rollback_checker',
        '$BUILD_DIR/mongo/unittest/concurrency',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
    ],
)

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

env.CppUnitTest(
    target='roll_back_local_operations_test',
    source='roll_back_local_operations_test.cpp',
    LIBDEPS=[
        'oplog_interface_mock',
        'oplog_interface_remote',
        'roll_back_local_operations',
    ],
)

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/dbhelpers',
        '$BUILD_DIR/mongo/db/query_exec',
        'oplog',
        'oplogreader',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
        'split_horizon',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/server_status',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/transport/message_compressor',
    ],
)

env.Library(
    target="serveronly_repl",
    source=[
        'noop_writer.cpp',
        "replication_coordinator_external_state_impl.cpp",
        "sync_source_feedback.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/cloner',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/free_mon/free_mon_mongod',
        '$BUILD_DIR/mongo/db/index_d',
        '$BUILD_DIR/mongo/db/kill_sessions_local',
        '$BUILD_DIR/mongo/db/lasterror',
        '$BUILD_DIR/mongo/db/logical_clock',
        '$BUILD_DIR/mongo/db/logical_time',
        '$BUILD_DIR/mongo/db/op_observer',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/repair_database',
        '$BUILD_DIR/mongo/db/repl/oplog_buffer_proxy',
        '$BUILD_DIR/mongo/db/repl/replication_metrics',
        '$BUILD_DIR/mongo/db/s/balancer',
        '$BUILD_DIR/mongo/db/s/sharding_runtime_d',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/system_index',
        '$BUILD_DIR/mongo/rpc/client_metadata',
        '$BUILD_DIR/mongo/util/fail_point',
        'bgsync',
        'drop_pending_collection_reaper',
        'oplog_application',
        'oplog_buffer_collection',
        'oplog_interface_remote',
        'optime',
        'repl_coordinator_interface',
        'repl_settings',
        'replication_consistency_markers_impl',
        'replication_info',
        'replication_process',
        'replication_recovery',
        'reporter',
        'rollback_source_impl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/mongod_fcv',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
    ],
)

env.Library(
    target='mock_repl_coord_server_fixture',
    source=[
        'mock_repl_coord_server_fixture.cpp',
    ],
    LIBDEPS=[
        'oplog',
        'replmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ]
)

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

env.Library(
    target='election_reason_counter',
    source=[
        'election_reason_counter.cpp',
        env.Idlc('election_reason_counter.idl')[0],
    ],
    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',
    ],
)
