# -*- mode: python -*-

Import("env")

env = env.Clone()

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

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

env.Library(
    target='op_observer_util',
    source=[
        'op_observer_util.cpp',
        'batched_write_context.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/bson/dotted_path_support',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/shard_role_api',
        '$BUILD_DIR/mongo/db/transaction/transaction_operations',
    ],
)

env.Library(
    target='operation_logger_impl',
    source=[
        'operation_logger_impl.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/repl/oplog',
    ],
)

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

env.Library(
    target='op_observer_impl',
    source=[
        'op_observer_impl.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/catalog/commit_quorum_options',
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/catalog/import_collection_oplog_entry',
        '$BUILD_DIR/mongo/db/change_stream_serverless_helpers',
        '$BUILD_DIR/mongo/db/commands/txn_cmd_request',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/internal_transactions_feature_flag',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/read_write_concern_defaults',
        '$BUILD_DIR/mongo/db/repl/repl_server_parameters',
        '$BUILD_DIR/mongo/db/repl/tenant_migration_access_blocker',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/server_feature_flags',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        '$BUILD_DIR/mongo/db/transaction/transaction_operations',
        '$BUILD_DIR/mongo/s/grid',
        'op_observer',
        'op_observer_util',
    ],
)

env.Library(
    target='change_stream_pre_images_op_observer',
    source=[
        'change_stream_pre_images_op_observer.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/change_stream_pre_images_collection_manager',
        '$BUILD_DIR/mongo/db/pipeline/change_stream_preimage',
        '$BUILD_DIR/mongo/db/repl/optime',
        '$BUILD_DIR/mongo/db/repl/tenant_migration_decoration',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/transaction/transaction_operations',
        'op_observer',
    ],
)

env.Library(
    target='find_and_modify_images_op_observer',
    source=[
        'find_and_modify_images_op_observer.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/document_validation',
        '$BUILD_DIR/mongo/db/commands',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/repl/image_collection_entry',
        '$BUILD_DIR/mongo/db/shard_role',
    ],
)

env.Library(
    target='fcv_op_observer',
    source=[
        'fcv_op_observer.cpp',
    ],
    LIBDEPS=[
        'op_observer',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/commands/mongod_fcv',
        '$BUILD_DIR/mongo/db/session/kill_sessions_local',
        '$BUILD_DIR/mongo/executor/egress_connection_closer_manager',
        'op_observer_util',
    ],
)

env.Library(
    target='user_write_block_mode_op_observer',
    source=[
        'user_write_block_mode_op_observer.cpp',
    ],
    LIBDEPS=[
        'op_observer',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/s/user_writes_recoverable_critical_section',
        '$BUILD_DIR/mongo/db/shard_role_api',
    ],
)

env.CppUnitTest(
    target='db_op_observer_test',
    source=[
        'batched_write_context_test.cpp',
        'batched_write_policy_test.cpp',
        'op_observer_impl_test.cpp',
        'op_observer_registry_test.cpp',
        'user_write_block_mode_op_observer_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/import_collection_oplog_entry',
        '$BUILD_DIR/mongo/db/catalog/local_oplog_info',
        '$BUILD_DIR/mongo/db/change_stream_pre_images_collection_manager',
        '$BUILD_DIR/mongo/db/commands/create_command',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/read_write_concern_defaults',
        '$BUILD_DIR/mongo/db/read_write_concern_defaults_mock',
        '$BUILD_DIR/mongo/db/repl/image_collection_entry',
        '$BUILD_DIR/mongo/db/repl/oplog',
        '$BUILD_DIR/mongo/db/repl/oplog_interface_local',
        '$BUILD_DIR/mongo/db/repl/replmocks',
        '$BUILD_DIR/mongo/db/repl/storage_interface_impl',
        '$BUILD_DIR/mongo/db/repl/tenant_migration_access_blocker',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/storage/recovery_unit_base',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        '$BUILD_DIR/mongo/db/transaction/transaction_operations',
        '$BUILD_DIR/mongo/db/write_block_bypass',
        'change_stream_pre_images_op_observer',
        'find_and_modify_images_op_observer',
        'op_observer',
        'op_observer_impl',
        'op_observer_util',
        'operation_logger_impl',
        'user_write_block_mode_op_observer',
    ],
)

env.Library(
    target='fallback_op_observer',
    source=[
        'fallback_op_observer.cpp',
    ],
    LIBDEPS=[
        'op_observer',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/read_write_concern_defaults',
        '$BUILD_DIR/mongo/db/session/session_catalog_mongod',
        '$BUILD_DIR/mongo/db/shard_role_api',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        '$BUILD_DIR/mongo/db/vector_clock',
        '$BUILD_DIR/mongo/db/views/view_catalog_helpers',
        'op_observer_util',
    ],
)
