# -*- mode: python -*-
Import("env")

env = env.Clone()

env.SConscript(
    dirs=[
        'devnull',
        'ephemeral_for_test',
        'kv',
        'wiredtiger',
    ],
    exports=[
        'env'
    ],
)

env.Library(
    target='index_entry_comparison',
    source=[
        'index_entry_comparison.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/namespace_string',
        'duplicate_key_error_info',
        'key_string',
    ],
)

env.Library(
    target='snapshot_helper',
    source=[
        'snapshot_helper.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/namespace_string',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager_defs',
        '$BUILD_DIR/mongo/db/repl/read_concern_args',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        'recovery_unit_base',
    ],
)

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

env.Library(
    target='recovery_unit_base',
    source=[
        'recovery_unit.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/util/fail_point',
        'storage_options',
    ],
)

env.Library(
    target='record_store_base',
    source=[
        'record_store.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/service_context',
        'storage_options',
    ],
)

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

env.Library(
    target='execution_context',
    source=[
        'execution_context.cpp',
    ],
    LIBDEPS=[
        'key_string',
        'storage_options',
    ],
)

env.Library(
    target='bson_collection_catalog_entry',
    source=[
        'bson_collection_catalog_entry.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/service_context',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/server_options',
    ],
)

env.Library(
    target='storage_control',
    source=[
        'control/storage_control.cpp',
        'durable_history_pin.cpp',
    ],
    LIBDEPS=[
        'checkpointer',
        'journal_flusher',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
        '$BUILD_DIR/mongo/db/service_context',
        'storage_options',
    ],
)

env.Library(
    target='oplog_cap_maintainer_thread',
    source=[
        'oplog_cap_maintainer_thread.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/util/background_job',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/collection',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/catalog_raii',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/service_context',
    ],
)

env.Library(
    target='journal_flusher',
    source=[
        'control/journal_flusher.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/util/background_job',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/service_context',
        'storage_options',
    ],
)

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

env.Library(
    target='storage_engine_parameters',
    source=[
        'ticketholders.cpp',
        'storage_engine_parameters.cpp',
        'storage_engine_parameters.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/idl/feature_flag',
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
)

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

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

env.Library(
    target='sorted_data_interface_test_harness',
    source=[
        'sorted_data_interface_test_bulkbuilder.cpp',
        'sorted_data_interface_test_cursor.cpp',
        'sorted_data_interface_test_cursor_advanceto.cpp',
        'sorted_data_interface_test_cursor_end_position.cpp',
        'sorted_data_interface_test_cursor_locate.cpp',
        'sorted_data_interface_test_cursor_saverestore.cpp',
        'sorted_data_interface_test_cursor_seek_exact.cpp',
        'sorted_data_interface_test_dupkeycheck.cpp',
        'sorted_data_interface_test_fullvalidate.cpp',
        'sorted_data_interface_test_harness.cpp',
        'sorted_data_interface_test_insert.cpp',
        'sorted_data_interface_test_isempty.cpp',
        'sorted_data_interface_test_keyformat_string.cpp',
        'sorted_data_interface_test_rollback.cpp',
        'sorted_data_interface_test_spaceused.cpp',
        'sorted_data_interface_test_unindex.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/record_id_helpers',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/unittest/unittest',
        'key_string',
    ],
    LIBDEPS_PRIVATE=[
        'index_entry_comparison',
    ],
)

env.Library(
    target='record_store_test_harness',
    source=[
        'record_store_test_datafor.cpp',
        'record_store_test_datasize.cpp',
        'record_store_test_deleterecord.cpp',
        'record_store_test_harness.cpp',
        'record_store_test_insertrecord.cpp',
        'record_store_test_oplog.cpp',
        'record_store_test_randomiter.cpp',
        'record_store_test_recorditer.cpp',
        'record_store_test_recordstore.cpp',
        'record_store_test_storagesize.cpp',
        'record_store_test_truncate.cpp',
        'record_store_test_updaterecord.cpp',
        'record_store_test_updatewithdamages.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/clustered_collection_options',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/record_id_helpers',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/record_store_base',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/update/update_document_diff',
        '$BUILD_DIR/mongo/unittest/unittest',
    ],
)


env.Library(
    target='recovery_unit_test_harness',
    source=[
        'recovery_unit_test_harness.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/unittest/unittest',
        'record_store_base',
    ],
)

env.Library(
    target='storage_engine_lock_file',
    source=[
        'storage_engine_lock_file.cpp',
        'storage_engine_lock_file_${TARGET_OS_FAMILY}.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/service_context',
    ],
)

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

env.Library(
    target='storage_engine_common',
    source=[
        'storage_engine_init.cpp',
        'storage_engine_change_context.cpp'
    ],
    LIBDEPS=[
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/exec/scoped_timer',
        '$BUILD_DIR/mongo/db/service_context',
        'storage_change_lock',
        'storage_control',
        'storage_engine_lock_file',
        'storage_engine_metadata',
        'storage_options',
        'storage_repair_observer',
    ],
)

env.Library(
    target="storage_init_d",
    source=[
        "storage_init.cpp",
    ],
    LIBDEPS=[
        "storage_options",
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/server_status',
        'backup_cursor_hooks'
    ]
)

env.Library(
    target="historical_ident_tracker",
    source=[
        "historical_ident_tracker.cpp",
    ],
    LIBDEPS_PRIVATE=[
        "$BUILD_DIR/mongo/base",
        '$BUILD_DIR/mongo/db/namespace_string',
    ]
)

env.Library(
    target="write_unit_of_work",
    source=[
        "write_unit_of_work.cpp",
    ],
    LIBDEPS_PRIVATE=[
        "$BUILD_DIR/mongo/base",
        '$BUILD_DIR/mongo/db/batched_write_context',
        "$BUILD_DIR/mongo/db/storage/storage_options",
        '$BUILD_DIR/mongo/util/fail_point',
        'recovery_unit_base',
    ],
)

env.Library(
    target='storage_engine_metadata',
    source=[
        'storage_engine_metadata.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/bson/bson_validate',
        '$BUILD_DIR/mongo/db/bson/dotted_path_support',
        '$BUILD_DIR/mongo/db/server_options_core',
    ],
)

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

env.Library(
    target='storage_repair_observer',
    source=[
        'storage_repair_observer.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/repl/replica_set_messages',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/journal_flusher',
        'storage_file_util',
    ],
)

env.Benchmark(
    target='storage_key_string_bm',
    source=[
        'key_string_bm.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        'key_string',
    ],
)

env.Benchmark(
    target='storage_record_id_bm',
    source=[
        'record_id_bm.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/record_id_helpers',
    ],
)

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

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

env.Library(
    target='flow_control',
    source=[
        'flow_control.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/commands/server_status',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/concurrency/flow_control_ticketholder',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/background_job',
        '$BUILD_DIR/mongo/util/fail_point',
        'flow_control_parameters',
    ],
)

env.CppUnitTest(
    target='db_storage_test',
    source=[
        'backup_block_test.cpp',
        'flow_control_test.cpp',
        'historical_ident_tracker_test.cpp',
        'index_entry_comparison_test.cpp',
        'key_string_test.cpp',
        'kv/durable_catalog_test.cpp',
        'kv/kv_drop_pending_ident_reaper_test.cpp',
        'kv/storage_engine_test.cpp',
        'storage_engine_lock_file_test.cpp',
        'storage_engine_metadata_test.cpp',
        'storage_repair_observer_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/catalog/catalog_impl',
        '$BUILD_DIR/mongo/db/catalog/catalog_test_fixture',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/catalog_raii',
        '$BUILD_DIR/mongo/db/concurrency/flow_control_ticketholder',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/repl/replmocks',
        '$BUILD_DIR/mongo/db/repl/topology_coordinator',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/db/storage/devnull/storage_devnull_core',
        '$BUILD_DIR/mongo/db/storage/durable_catalog_impl',
        '$BUILD_DIR/mongo/db/storage/storage_control',
        '$BUILD_DIR/mongo/db/storage/storage_engine_impl',
        '$BUILD_DIR/mongo/db/storage/storage_repair_observer',
        '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_options',
        '$BUILD_DIR/mongo/executor/network_interface_factory',
        '$BUILD_DIR/mongo/executor/network_interface_mock',
        '$BUILD_DIR/mongo/util/periodic_runner_factory',
        'backup_block',
        'flow_control',
        'flow_control_parameters',
        'historical_ident_tracker',
        'key_string',
        'kv/kv_drop_pending_ident_reaper',
        'storage_engine_common',
        'storage_engine_lock_file',
        'storage_engine_metadata',
    ],
)

env.Library(
    target='durable_catalog_impl',
    source=[
        'durable_catalog_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/util/bson_extract',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/index_names',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/storage/bson_collection_catalog_entry',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/collection',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'record_store_base',
    ],
)

env.Library(
    target='storage_util',
    source=[
        'storage_util.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/multitenancy',
        'durable_catalog_impl',
        'kv/kv_drop_pending_ident_reaper',
    ],
)

env.Library(
    target='checkpointer',
    source=[
        'checkpointer.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/background_job',
        'storage_options',
    ],
)

env.Library(
    target='two_phase_index_build_knobs_idl',
    source=[
        'two_phase_index_build_knobs.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
)

env.Library(
    target='backup_block',
    source=[
        'backup_block.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/namespace_string',
        'historical_ident_tracker',
        'storage_options',
    ],
)

env.Library(
    target='storage_engine_impl',
    source=[
        'deferred_drop_record_store.cpp',
        'storage_engine_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/catalog_control',
        '$BUILD_DIR/mongo/db/catalog_raii',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/db/storage/durable_catalog_impl',
        '$BUILD_DIR/mongo/db/storage/kv/kv_drop_pending_ident_reaper',
        '$BUILD_DIR/mongo/db/storage/storage_options',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/audit',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/clustered_collection_options',
        '$BUILD_DIR/mongo/db/catalog/index_catalog',
        '$BUILD_DIR/mongo/db/multitenancy',
        '$BUILD_DIR/mongo/db/resumable_index_builds_idl',
        '$BUILD_DIR/mongo/db/server_feature_flags',
        '$BUILD_DIR/mongo/db/storage/storage_repair_observer',
        '$BUILD_DIR/mongo/db/vector_clock',
        'backup_block',
        'historical_ident_tracker',
        'storage_control',
        'storage_util',
        'two_phase_index_build_knobs_idl',
    ],
)

env.CppLibfuzzerTest(
    target='key_string_to_bson_fuzzer',
    source=[
        'key_string_to_bson_fuzzer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/bson/bson_validate',
        'key_string',
    ],
)
