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

env = env.Clone()

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

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

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

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

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',
        '$BUILD_DIR/mongo/db/storage/kv/kv_prefix',
        ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_options',
        ],
    )

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

env.Library(
    target='oplog_cap_maintainer_thread',
    source=[
        'oplog_cap_maintainer_thread.cpp',
    ],
    LIBDEPS=[
    	'$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/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/service_context',
    ],
)

env.Library(
    target='storage_options',
    source=[
        'storage_options.cpp',
        env.Idlc('storage_parameters.idl')[0],
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$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'],
    PROGDEPS_DEPENDENTS=[
        '$BUILD_DIR/mongo/mongod',
        '$BUILD_DIR/mongo/mongos',
        ],
    )

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

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_rollback.cpp',
        'sorted_data_interface_test_spaceused.cpp',
        'sorted_data_interface_test_unindex.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/unittest/unittest',
        'index_entry_comparison',
        'key_string',
    ],
)

env.Library(
    target='record_store_test_harness',
    source=[
        'record_store_test_capped_delete.cpp',
        'record_store_test_capped_visibility.cpp',
        '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/service_context',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/unittest/unittest',
    ],
)


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

env.Library(
    target='storage_debug_util',
    source=[
        'storage_debug_util.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/db_raii',
    ],
)

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_engine_common',
    source=[
        'storage_engine_init.cpp'
    ],
    LIBDEPS=[
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        'storage_engine_lock_file',
        'storage_repair_observer',
        'storage_engine_metadata',
        'storage_options',
    ],
)

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="write_unit_of_work",
    source=[
        "write_unit_of_work.cpp",
    ],
    LIBDEPS_PRIVATE=[
        "$BUILD_DIR/mongo/base",
        "$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/db/server_options_core',
        '$BUILD_DIR/mongo/db/bson/dotted_path_support',
    ],
)

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/service_context',
        '$BUILD_DIR/mongo/db/repl/replica_set_messages',
        'storage_file_util',
    ],
)

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

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

env.Library(
    target='flow_control_parameters',
    source=[
        env.Idlc('flow_control_parameters.idl')[0],
    ],
    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=[
        'flow_control_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/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/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/service_context_test_fixture',
        '$BUILD_DIR/mongo/db/storage/devnull/storage_devnull_core',
        '$BUILD_DIR/mongo/db/storage/durable_catalog_impl',
        '$BUILD_DIR/mongo/db/storage/ephemeral_for_test/ephemeral_for_test_record_store',
        '$BUILD_DIR/mongo/db/storage/ephemeral_for_test/storage_ephemeral_for_test_core',
        '$BUILD_DIR/mongo/db/storage/storage_engine_impl',
        '$BUILD_DIR/mongo/db/storage/storage_repair_observer',
        '$BUILD_DIR/mongo/db/storage/ephemeral_for_test/storage_ephemeral_for_test_core',
        '$BUILD_DIR/mongo/executor/network_interface_factory',
        '$BUILD_DIR/mongo/executor/network_interface_mock',
        'flow_control',
        'flow_control_parameters',
        'key_string',
        'kv/kv_drop_pending_ident_reaper',
        'storage_engine_lock_file',
        'storage_engine_metadata',
        'storage_repair_observer',
    ],
)

env.Library(
    target='durable_catalog_impl',
    source=[
        'durable_catalog_impl.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/util/bson_extract',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/index/index_descriptor',
        '$BUILD_DIR/mongo/db/index_names',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/storage/bson_collection_catalog_entry',
        '$BUILD_DIR/mongo/db/storage/kv/kv_drop_pending_ident_reaper',
        '$BUILD_DIR/mongo/db/storage/kv/kv_prefix',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/index_timestamp_helper',
        '$BUILD_DIR/mongo/db/concurrency/write_conflict_exception',
        '$BUILD_DIR/mongo/db/server_options_core',
    ],
)
env.Library(
    target='two_phase_index_build_knobs_idl',
    source=[
        env.Idlc('two_phase_index_build_knobs.idl')[0],
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
)

env.Library(
    target='storage_engine_impl',
    source=[
        'storage_engine_impl.cpp',
        'kv/temporary_kv_record_store.cpp', # TODO: SERVER-41892 Avoid source under kv sub-directory
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/catalog_control',
        '$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/logical_clock',
        '$BUILD_DIR/mongo/db/storage/storage_repair_observer',
        '$BUILD_DIR/mongo/db/catalog/collection_catalog_helper',
        '$BUILD_DIR/mongo/idl/server_parameter',
        'two_phase_index_build_knobs_idl',
    ],
)

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