# -*- mode: python -*-

Import("env")

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

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

env.Library(
    target='network_interface_impl',
    source=[
        'network_interface_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base/base',
        '$BUILD_DIR/mongo/bson/bson',
        '$BUILD_DIR/mongo/client/remote_command_executor_impl',
        '$BUILD_DIR/mongo/db/coredb',
        '$BUILD_DIR/mongo/db/common',
        ])

env.Library(
    target='replication_executor',
    source=[
        'replication_executor.cpp',
        'scatter_gather_algorithm.cpp',
        'scatter_gather_runner.cpp',
    ],
    LIBDEPS=[
        'database_task',
        'task_runner',
        '$BUILD_DIR/mongo/client/remote_command_executor',
        '$BUILD_DIR/mongo/util/foundation',
        '$BUILD_DIR/mongo/util/net/hostandport',
    ],
)

env.Library(
    target='replication_executor_test_fixture',
    source=[
        'replication_executor_test_fixture.cpp',
    ],
    LIBDEPS=[
        'replication_executor',
        'replmocks',
    ],
)

env.CppUnitTest(
    target='replication_executor_test',
    source=[
        'replication_executor_test.cpp',
    ],
    LIBDEPS=[
        'replication_executor_test_fixture',
    ],
)

env.Library(
    target='data_replicator',
    source=[
        'data_replicator.cpp',
    ],
    LIBDEPS=[
        'fetcher',
        'repl_coordinator_interface',
    ],
)

env.Library('topology_coordinator',
            [
                'heartbeat_response_action.cpp',
                'topology_coordinator.cpp',
            ],
            LIBDEPS=[
                'repl_coordinator_interface',
            ])

env.Library('topology_coordinator_impl',
            [
                'member_heartbeat_data.cpp',
                'topology_coordinator_impl.cpp',
            ],
            LIBDEPS=[
                'replication_executor',
                'repl_settings',
                'rslog',
                'topology_coordinator',
            ])

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

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

env.Library('repl_coordinator_impl',
            [
                'check_quorum_for_config_change.cpp',
                'elect_cmd_runner.cpp',
                'election_winner_declarer.cpp',
                'freshness_checker.cpp',
                'repl_client_info.cpp',
                'replica_set_config_checks.cpp',
                'replication_coordinator_impl.cpp',
                'replication_coordinator_impl_elect.cpp',
                'replication_coordinator_impl_heartbeat.cpp',
                'vote_requester.cpp',
            ],
            LIBDEPS=[
                     '$BUILD_DIR/mongo/db/common',
                     '$BUILD_DIR/mongo/db/index/index_descriptor',
                     '$BUILD_DIR/mongo/util/fail_point',
                     '$BUILD_DIR/mongo/db/global_timestamp',
                     '$BUILD_DIR/mongo/rpc/command_status',
                     '$BUILD_DIR/mongo/db/server_options_core',
                     '$BUILD_DIR/mongo/db/service_context',
                     'data_replicator',
                     'repl_coordinator_interface',
                     'replica_set_messages',
                     'replication_executor',
                     'reporter',
                     'rslog',
                     'topology_coordinator',
                 ])

env.Library('repl_coordinator_test_fixture',
            [
                'replication_coordinator_test_fixture.cpp',
            ],
            LIBDEPS=[
                'repl_coordinator_impl',
                'replmocks',
                'topology_coordinator_impl',
            ])

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

env.CppUnitTest('replica_set_config_checks_test',
                'replica_set_config_checks_test.cpp',
                LIBDEPS=[
                    'repl_coordinator_impl',
                    'replmocks'
                ])

env.CppUnitTest(
    target='data_replicator_test',
    source=[
        'data_replicator_test.cpp',
    ],
    LIBDEPS=[
        'data_replicator',
        'replica_set_messages',
        'replication_executor_test_fixture',
        'repl_coordinator_test_fixture',
    ],
)

env.CppUnitTest('scatter_gather_test',
                'scatter_gather_test.cpp',
                LIBDEPS=['repl_coordinator_impl',
                         'replmocks'])

env.CppUnitTest('check_quorum_for_config_change_test',
                'check_quorum_for_config_change_test.cpp',
                LIBDEPS=[
                    'repl_coordinator_impl',
                    'replication_executor',
                    'replmocks',
                ])

env.CppUnitTest('freshness_checker_test',
                'freshness_checker_test.cpp',
                LIBDEPS=['repl_coordinator_impl',
                         'replica_set_messages',
                         'replmocks'])

env.CppUnitTest('vote_requester_test',
                'vote_requester_test.cpp',
                LIBDEPS=['repl_coordinator_impl',
                         'replica_set_messages',
                         'replmocks'])

env.CppUnitTest('election_winner_declarer_test',
                'election_winner_declarer_test.cpp',
                LIBDEPS=['repl_coordinator_impl',
                         'replica_set_messages',
                         'replmocks'])

env.CppUnitTest('elect_cmd_runner_test',
                'elect_cmd_runner_test.cpp',
                LIBDEPS=['repl_coordinator_impl',
                         'replica_set_messages',
                         'replmocks'])

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

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

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

env.Library('repl_coordinator_interface',
            ['replication_coordinator.cpp',
             'replication_coordinator_external_state.cpp'],
            LIBDEPS=[
                '$BUILD_DIR/mongo/util/net/hostandport',
                'optime',
                'reporter',
            ])

env.Library('repl_coordinator_global',
            'replication_coordinator_global.cpp',
            LIBDEPS=['repl_coordinator_interface'])

env.Library('replmocks',
            [
                'network_interface_mock.cpp',
                'operation_context_repl_mock.cpp',
                'replication_coordinator_external_state_mock.cpp',
                'replication_coordinator_mock.cpp',
            ],
            LIBDEPS=[
                '$BUILD_DIR/mongo/db/concurrency/lock_manager',
                'repl_coordinator_interface',
                'replica_set_messages',
                'replication_executor',
            ])

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

env.Library('replica_set_messages',
            [
                'handshake_args.cpp',
                'is_master_response.cpp',
                'member_config.cpp',
                'read_after_optime_response.cpp',
                'repl_set_declare_election_winner_args.cpp',
                'repl_set_heartbeat_args.cpp',
                'repl_set_heartbeat_args_v1.cpp',
                'repl_set_heartbeat_response.cpp',
                'repl_set_heartbeat_response_v1.cpp',
                'repl_set_html_summary.cpp',
                'repl_set_request_votes_args.cpp',
                'replica_set_config.cpp',
                'replica_set_tag.cpp',
                'update_position_args.cpp',
                'last_vote.cpp',
            ],
            LIBDEPS=[
                'read_after_optime_args',
                '$BUILD_DIR/mongo/bson/bson',
                '$BUILD_DIR/mongo/bson/util/bson_extract',
                '$BUILD_DIR/mongo/util/net/hostandport',
                '$BUILD_DIR/mongo/db/common',
                'optime',
            ])

env.CppUnitTest('replica_set_config_test',
                [
                    'member_config_test.cpp',
                    'replica_set_config_test.cpp',
                    'replica_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/serveronly',
                    '$BUILD_DIR/mongo/db/coredb',
                    "$BUILD_DIR/mongo/util/ntservice_mock",
                ],
                NO_CRUTCH = True)

env.Library(
    target='replset_commands',
    source=[
        'replset_commands.cpp',
        'repl_set_command.cpp',
        'repl_set_request_votes.cpp',
        'repl_set_declare_election_winner.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/logger/logger',
    ],
)

env.Library(
    target='reporter',
    source=[
        'reporter.cpp',
    ],
    LIBDEPS=[
        'replication_executor',
        '$BUILD_DIR/mongo/logger/logger',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/rpc/command_status',
    ],
)

env.Library(
    target='fetcher',
    source=[
        'fetcher.cpp',
    ],
    LIBDEPS=[
        'replication_executor',
        '$BUILD_DIR/mongo/logger/logger',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/rpc/command_status',
    ],
)

env.CppUnitTest(
    target='reporter_test',
    source='reporter_test.cpp',
    LIBDEPS=[
        'reporter',
        'replication_executor_test_fixture',
    ],
)

env.CppUnitTest(
    target='fetcher_test',
    source='fetcher_test.cpp',
    LIBDEPS=[
        'fetcher',
        'replication_executor_test_fixture',
    ],
)

env.Library(
    target='base_cloner_test_fixture',
    source=[
        'base_cloner_test_fixture.cpp',
    ],
    LIBDEPS=[
        'replication_executor_test_fixture',
    ],
)

env.Library(
    target='collection_cloner',
    source=[
        'collection_cloner.cpp',
    ],
    LIBDEPS=[
        'fetcher',
        'replication_executor',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/logger/logger',
    ],
)

env.CppUnitTest(
    target='collection_cloner_test',
    source='collection_cloner_test.cpp',
    LIBDEPS=[
        'collection_cloner',
        'base_cloner_test_fixture',
    ],
)

env.Library(
    target='database_cloner',
    source=[
        'database_cloner.cpp',
    ],
    LIBDEPS=[
        'collection_cloner',
    ],
)

env.CppUnitTest(
    target='database_cloner_test',
    source='database_cloner_test.cpp',
    LIBDEPS=[
        'database_cloner',
        'base_cloner_test_fixture',
    ],
)

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

env.Library(
    target='task_runner_test_fixture',
    source=[
        'task_runner_test_fixture.cpp',
    ],
    LIBDEPS=[
        'task_runner',
        '$BUILD_DIR/mongo/util/decorable',
    ],
)

env.CppUnitTest(
    target='task_runner_test',
    source='task_runner_test.cpp',
    LIBDEPS=[
        'task_runner_test_fixture',
    ],
)

env.Library(
    target='database_task',
    source=[
        'database_task.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
    ],
)

env.CppUnitTest(
    target='database_task_test',
    source='database_task_test.cpp',
    LIBDEPS=[
        'database_task',
        'replmocks',
        'task_runner_test_fixture',
    ],
)

env.CppUnitTest(
    target='read_after_optime_args_test',
    source=[
        'read_after_optime_args_test.cpp',
    ],
    LIBDEPS=['replica_set_messages']
)

env.CppUnitTest(
    target='read_after_optime_response_test',
    source=[
        'read_after_optime_response_test.cpp',
    ],
    LIBDEPS=['replica_set_messages']
)

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