# -*- mode: python -*-

Import("env")

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/idl/server_parameter',
    ]
)

env.Library(
    target='local_oplog_info',
    source=[
        'local_oplog_info.cpp',
    ],
    LIBDEPS_PRIVATE=[
        'optime',
        'repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/logical_clock',
        '$BUILD_DIR/mongo/db/logical_time',
        '$BUILD_DIR/mongo/db/mongod_options',
        '$BUILD_DIR/mongo/db/storage/flow_control',
    ],
)

env.Library(
    target='oplog',
    source=[
        'apply_ops.cpp',
        'oplog.cpp',
        'oplog_entry_or_grouped_inserts.cpp',
        'transaction_oplog_application.cpp',
        'apply_ops.idl',
    ],
    LIBDEPS_PRIVATE=[
        'dbcheck',
        'image_collection_entry',
        'local_oplog_info',
        'repl_coordinator_interface',
        'repl_settings',
        'timestamp_block',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/background',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/catalog/index_build_oplog_entry',
        '$BUILD_DIR/mongo/db/catalog/multi_index_block',
        '$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/op_observer',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/stats/server_read_concern_write_concern_metrics',
        '$BUILD_DIR/mongo/db/transaction',
        '$BUILD_DIR/mongo/idl/idl_parser',
        '$BUILD_DIR/mongo/rpc/command_status',
    ],
)

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

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=[
        'oplog',
        'oplog_interface_remote',
        'repl_coordinator_interface',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/background',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/index/index_descriptor',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/util/fail_point',
    ],
    LIBDEPS_PRIVATE=[
        'replication_auth',
    ]
)

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/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
    ],
    LIBDEPS_PRIVATE=[
        'repl_server_parameters',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor',
    ],
)

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

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

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


env.Library(
    target='rollback_idl',
    source=[
        'rollback.idl',
    ],
    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/catalog/multi_index_block',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/query_exec',
    ],
    LIBDEPS_PRIVATE=[
        'repl_server_parameters',
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/storage/oplog_cap_maintainer_thread',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        '$BUILD_DIR/mongo/db/logical_clock',
    ],
)

env.Library(
    target='replication_consistency_markers_idl',
    source=[
        'replication_consistency_markers.idl',
    ],
    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',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog_raii',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
    ],
)

env.Library(
    target='replication_recovery',
    source=[
        'replication_recovery.cpp',
    ],
    LIBDEPS=[
    ],
    LIBDEPS_PRIVATE=[
        'oplog',
        'oplog_application',
        'oplog_interface_local',
        'repl_server_parameters',
        '$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_options',
    ],
)

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.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.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.Library(
    target='oplog_interface_local',
    source=[
        'oplog_interface_local.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/transaction',
    ],
)

env.Library(
    target='oplog_interface_mock',
    source=[
        'oplog_interface_mock.cpp',
    ],
    LIBDEPS=[
        'oplog_entry',
        '$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',
        '$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/db/storage/remove_saver',
        '$BUILD_DIR/mongo/util/fail_point',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/query_exec',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/index_build_oplog_entry',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
    ],
)

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',
    ],
)

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',
        'replication_recovery',
        'replmocks',
        'rs_rollback',
        'storage_interface_impl',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/read_write_concern_defaults_mock',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

env.Library(
    target='rollback_impl',
    source=[
        'rollback_impl.cpp',
        'rollback_impl.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/kill_sessions_local',
        '$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',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
)

env.Library(
    target='oplog_entry',
    source=[
        'oplog_entry.cpp',
        'oplog_entry.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/logical_session_id',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/idl/idl_parser',
        'optime',
        'optime_base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/namespace_string',
    ],
)

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

env.Library(
    target='oplog_application_interface',
    source=[
        'oplog_applier.cpp',
        'oplog_batcher.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/mongo/util/processinfo',
        'oplog_entry',
    ],
    LIBDEPS_PRIVATE=[
        'repl_server_parameters',
    ],
)

env.Library(
    target='oplog_application',
    source=[
        'insert_group.cpp',
        'oplog_applier_impl.cpp',
        'session_update_tracker.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/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_application_interface',
        'oplog_entry',
        'repl_coordinator_interface',
        'repl_settings',
        'storage_interface',
        'replication_metrics',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/mongod_fsync',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        'replication_auth',
    ],
)

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

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

env.Library(
    target='oplog_applier_impl_test_fixture',
    source=[
        'oplog_applier_impl_test_fixture.cpp',
    ],
    LIBDEPS=[
        'drop_pending_collection_reaper',
        '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',
        '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger',
    ],
)

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/exec/document_value/document_value'
    ],
)

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.Library('member_data',
    [
        'member_data.cpp',
    ],
    LIBDEPS=[
        'replica_set_messages',
    ])

env.Library('topology_coordinator',
    [
        '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',
        'replica_set_messages',
        'repl_settings',
        'repl_coordinator_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/commit_quorum_options',
        '$BUILD_DIR/mongo/idl/server_parameter',
        '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/common',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/index/index_descriptor',
        '$BUILD_DIR/mongo/db/kill_sessions_local',
        '$BUILD_DIR/mongo/db/mongod_options',
        '$BUILD_DIR/mongo/db/prepare_conflict_tracker',
        '$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',
        'initial_syncer',
        'data_replicator_external_state_initial_sync',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
        'replication_process',
        'reporter',
        'scatter_gather',
        'topology_coordinator',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
        '$BUILD_DIR/mongo/idl/server_parameter',
        'local_oplog_info',
        'split_horizon',
        'repl_server_parameters',
    ],
)

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.Library(
    target='repl_coordinator_interface',
    source=[
        'always_allow_non_local_writes.cpp',
        'repl_client_info.cpp',
        'replication_coordinator.cpp',
        'replication_coordinator_noop.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=[
        'isself',
        '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',
                '$BUILD_DIR/mongo/db/read_write_concern_provenance',
                'optime',
            ])

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

env.Library('replica_set_messages',
    [
        'is_master_response.cpp',
        'member_config.cpp',
        'repl_set_config.cpp',
        'repl_set_heartbeat_args_v1.cpp',
        'repl_set_heartbeat_response.cpp',
        'repl_set_request_votes_args.cpp',
        'repl_set_tag.cpp',
        'update_position_args.cpp',
        'last_vote.cpp',
        'repl_set_config.idl',
    ],
    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',
        '$BUILD_DIR/mongo/rpc/metadata',
        'optime',
        'read_concern_args',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/idl/server_parameter',
        'split_horizon',
    ])

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_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=[
        'abstract_async_component',
        'repl_coordinator_interface',
        'replica_set_messages',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/db/logical_time_metadata_hook',
        '$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=[
        'repl_server_parameters',
        'replication_auth',
        '$BUILD_DIR/mongo/db/matcher/expressions',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
    ],
)

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.Library(
    target='sync_source_resolver',
    source=[
        'sync_source_resolver.cpp',
    ],
    LIBDEPS=[
        'oplog_entry',
        'optime',
        'read_concern_args',
        '$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.Library(
    target='initial_sync_cloners',
    source=[
        'all_database_cloner.cpp',
        'base_cloner.cpp',
        'collection_cloner.cpp',
        'database_cloner.cpp',
        'database_cloner.idl'
    ],
    LIBDEPS = [
        'task_runner',
        'initial_sync_shared_data',
        'member_data',
        'replication_consistency_markers_impl',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/mongo/util/net/network',
    ],
    LIBDEPS_PRIVATE=[
        'repl_server_parameters',
        'replication_auth',
        '$BUILD_DIR/mongo/idl/idl_parser',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/commands/list_collections_filter',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/index_build_entry_helpers',
        '$BUILD_DIR/mongo/util/progress_meter',
    ]
)

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

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

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

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',
    ],
    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=[
        'oplog_application_interface',
        'oplog_buffer_blocking_queue',
        'oplog_entry',
        'optime',
        'replica_set_messages',
        '$BUILD_DIR/mongo/util/net/network',
    ],
)

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

env.Library(
    target='initial_syncer',
    source=[
        'initial_syncer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/fetcher',
        '$BUILD_DIR/mongo/db/transaction',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$BUILD_DIR/mongo/client/clientdriver_network',
        'initial_sync_cloners',
        'initial_sync_shared_data',
        'multiapplier',
        'oplog',
        'oplog_application_interface',
        'oplog_buffer_blocking_queue',
        'oplog_entry',
        'oplog_fetcher',
        'optime',
        'rollback_checker',
        'storage_interface',
    ],
    LIBDEPS_PRIVATE=[
        'repl_server_parameters',
        '$BUILD_DIR/mongo/db/commands/feature_compatibility_parsers',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/executor/scoped_task_executor',
        '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=[
        'oplog_entry',
        'optime',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/util/fail_point',
    ],
)

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',
        "$BUILD_DIR/mongo/util/fail_point",
        'oplog',
        'repl_coordinator_interface',
        'repl_settings',
        'replica_set_messages',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/server_status',
        '$BUILD_DIR/mongo/db/repl/local_oplog_info',
        '$BUILD_DIR/mongo/db/repl/speculative_authenticate',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/transport/message_compressor',
        'replication_auth',
        'split_horizon',
    ],
)

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/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/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/index_builds_coordinator_interface',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        'local_oplog_info',
        'repl_server_parameters',
    ],
)

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

env.CppUnitTest(
    target='db_repl_test',
    source=[
        'abstract_async_component_test.cpp',
        'apply_ops_test.cpp',
        'check_quorum_for_config_change_test.cpp',
        'drop_pending_collection_reaper_test.cpp',
        'idempotency_document_structure_test.cpp',
        'idempotency_test.cpp',
        'idempotency_update_sequence_test.cpp',
        'initial_syncer_test.cpp',
        'isself_test.cpp',
        'member_config_test.cpp',
        'multiapplier_test.cpp',
        'oplog_applier_impl_test.cpp',
        'oplog_applier_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',
        'optime_extract_test.cpp',
        'read_concern_args_test.cpp',
        'repl_set_config_checks_test.cpp',
        'repl_set_config_test.cpp',
        'repl_set_heartbeat_response_test.cpp',
        'repl_set_tag_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',
        'rs_rollback_test.cpp',
        'scatter_gather_test.cpp',
        'speculative_majority_read_info_test.cpp',
        'split_horizon_test.cpp',
        'storage_interface_impl_test.cpp',
        'sync_source_resolver_test.cpp',
        'task_runner_test.cpp',
        'task_runner_test_fixture.cpp',
        'vote_requester_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/auth/authorization_manager_global',
        '$BUILD_DIR/mongo/db/catalog_raii',
        '$BUILD_DIR/mongo/db/commands/feature_compatibility_parsers',
        '$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_builds_coordinator_mongod',
        '$BUILD_DIR/mongo/db/index/index_access_methods',
        '$BUILD_DIR/mongo/db/logical_session_id_helpers',
        '$BUILD_DIR/mongo/db/logical_time',
        '$BUILD_DIR/mongo/db/op_observer',
        '$BUILD_DIR/mongo/db/query/command_request_response',
        '$BUILD_DIR/mongo/db/s/op_observer_sharding_impl',
        '$BUILD_DIR/mongo/db/service_context_d',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/transaction',
        '$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',
        'drop_pending_collection_reaper',
        'idempotency_test_fixture',
        'idempotency_test_util',
        'initial_syncer',
        'isself',
        'multiapplier',
        'oplog',
        'oplog_application_interface',
        'oplog_applier_impl_test_fixture',
        'oplog_buffer_collection',
        'oplog_buffer_proxy',
        'oplog_entry',
        'oplog_entry_test_helpers',
        'oplog_fetcher',
        'oplog_interface_local',
        'oplog_interface_mock',
        'oplog_interface_remote',
        'optime',
        'repl_coordinator_impl',
        'repl_server_parameters',
        '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',
        'speculative_majority_read_info',
        'split_horizon',
        'storage_interface_impl',
        'sync_source_resolver',
        'sync_source_selector_mock',
        'task_executor_mock',
        'task_runner',
    ],
)

# 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=[
        'isself',
        'repl_coordinator_impl',
        'repl_coordinator_test_fixture',
        '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.CppUnitTest(
    target='db_repl_cloners_test',
    source=[
        'all_database_cloner_test.cpp',
        'cloner_test_fixture.cpp',
        'database_cloner_test.cpp',
        'collection_cloner_test.cpp',
        'initial_sync_shared_data_test.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',  # Required for service context test fixture
        '$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',
        'replmocks',
        'initial_sync_cloners',
        'initial_sync_shared_data'
    ],
)

env.Library(
    target='replication_metrics',
    source=[
        'replication_metrics.cpp',
        'replication_metrics.idl',
    ],
    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',
        '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/base',
        '$BUILD_DIR/mongo/db/service_context',
        'repl_coordinator_interface',
        'replica_set_messages',
    ],
)

env.Library(
    target='speculative_authenticate',
    source=[
        'speculative_auth.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/auth/authservercommon',
        '$BUILD_DIR/mongo/db/commands/authentication_commands',
    ],
)

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