# -*- mode: python -*-

Import('env')

env = env.Clone()

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

env.Library(
    target='common_process_interface',
    source=[
        'common_process_interface.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/generic_cursor',
        '$BUILD_DIR/mongo/db/pipeline/field_path',
        '$BUILD_DIR/mongo/s/sharding_router_api',
    ],
)

# This library is the basic mongod functionality, depended on by embedded so designed to exclude
# large components like sharding and networking.
env.Library(
    target='mongod_process_interfaces',
    source=[
        'common_mongod_process_interface.cpp',
        'non_shardsvr_process_interface.cpp',
        'replica_set_node_process_interface.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/ops/write_ops_exec',
        '$BUILD_DIR/mongo/db/pipeline/pipeline',
        '$BUILD_DIR/mongo/db/transaction',
        '$BUILD_DIR/mongo/db/write_ops',
        'common_process_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/concurrency/flow_control_ticketholder',
        '$BUILD_DIR/mongo/db/index_builds_coordinator_mongod',
        '$BUILD_DIR/mongo/db/repl/primary_only_service',
        '$BUILD_DIR/mongo/db/session_catalog',
        '$BUILD_DIR/mongo/db/stats/fill_locker_info',
        '$BUILD_DIR/mongo/db/storage/backup_cursor_hooks',
        '$BUILD_DIR/mongo/scripting/scripting_common',
    ],
)

env.Library(
    target="shardsvr_process_interface",
    source=[
        'shardsvr_process_interface.cpp',
    ],
    LIBDEPS=[
        'mongod_process_interfaces',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/s/sharding_api',
    ],
)

env.Library(
    target='mongos_process_interface_factory',
    source=[
        'mongos_process_interface_factory.cpp',
    ],
    LIBDEPS=[
        'mongos_process_interface',
    ],
)

env.Library(
    target='mongod_process_interface_factory',
    source=[
        'mongod_process_interface_factory.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/s/sharding_router_api',
        'mongod_process_interfaces',
        'shardsvr_process_interface',
    ],
)

env.Library(
    target='mongos_process_interface',
    source=[
        'mongos_process_interface.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/pipeline/pipeline',
        '$BUILD_DIR/mongo/db/pipeline/sharded_agg_helpers',
        '$BUILD_DIR/mongo/s/query/async_results_merger',
        '$BUILD_DIR/mongo/s/query/cluster_query',
        'common_process_interface',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/session_catalog',
    ],
)

env.CppUnitTest(
    target='process_interface_test',
    source=[
        'mongos_process_interface_test.cpp',
        'shardsvr_process_interface_test.cpp',
        'standalone_process_interface_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/db/vector_clock_mongod',
        '$BUILD_DIR/mongo/s/sharding_router_test_fixture',
        'mongos_process_interface',
        'shardsvr_process_interface',
    ]
)
