# -*- mode: python -*-

Import("env")

env.Library(
    target='update_common',
    source=[
        'field_checker.cpp',
        'log_builder.cpp',
        'path_support.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/matcher/expressions',
    ],
)

env.CppUnitTest(
    target='field_checker_test',
    source=[
        'field_checker_test.cpp',
    ],
    LIBDEPS=[
        'update_common',
    ],
)

env.CppUnitTest(
    target='log_builder_test',
    source=[
        'log_builder_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update_common',
    ],
)

env.CppUnitTest(
    target='path_support_test',
    source=[
        'path_support_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        '$BUILD_DIR/mongo/db/matcher/expressions',
        'update_common',
    ],
)

env.Library(
    target='update',
    source=[
        'modifier_add_to_set.cpp',
        'modifier_bit.cpp',
        'modifier_compare.cpp',
        'modifier_current_date.cpp',
        'modifier_inc.cpp',
        'modifier_object_replace.cpp',
        'modifier_pop.cpp',
        'modifier_pull.cpp',
        'modifier_pull_all.cpp',
        'modifier_push.cpp',
        'modifier_rename.cpp',
        'modifier_set.cpp',
        'modifier_unset.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/bson/dotted_path_support',
        '$BUILD_DIR/mongo/db/matcher/expressions',
        '$BUILD_DIR/mongo/db/global_timestamp',
        'update_common',
    ],
)

env.CppUnitTest(
    target='modifier_add_to_set_test',
    source='modifier_add_to_set_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_bit_test',
    source='modifier_bit_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_compare_test',
    source='modifier_compare_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_current_date_test',
    source='modifier_current_date_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        '$BUILD_DIR/mongo/db/service_context_noop_init',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_inc_test',
    source='modifier_inc_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_object_replace_test',
    source='modifier_object_replace_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        '$BUILD_DIR/mongo/db/service_context_noop_init',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_pop_test',
    source='modifier_pop_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_push_sorter_test',
    source='modifier_push_sorter_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/collation/collator_interface_mock',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_pull_all_test',
    source='modifier_pull_all_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_pull_test',
    source='modifier_pull_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface_mock',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_push_test',
    source='modifier_push_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_rename_test',
    source='modifier_rename_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_set_test',
    source='modifier_set_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_unset_test',
    source='modifier_unset_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        'update',
    ],
)

env.Library(
    target='update_driver',
    source=[
        'modifier_table.cpp',
        'update_driver.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/common',
        '$BUILD_DIR/mongo/db/query/query_planner',
        '$BUILD_DIR/mongo/db/update_index_data',
        'update',
    ],
)

env.CppUnitTest(
    target='modifier_table_test',
    source='modifier_table_test.cpp',
    LIBDEPS=[
        'update_driver',
    ],
)

env.CppUnitTest(
    target='update_driver_test',
    source='update_driver_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson_test_utils',
        '$BUILD_DIR/mongo/db/query/query_planner',
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'update_driver',
    ],
)

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

env.CppUnitTest(
    target='write_ops_parsers_test',
    source='write_ops_parsers_test.cpp',
    LIBDEPS=[
        'write_ops_parsers',
        '$BUILD_DIR/mongo/client/clientdriver',
    ],
)

env.Library(
    target="write_ops",
    source=[
        "delete.cpp",
        "insert.cpp",
        "parsed_delete.cpp",
        "parsed_update.cpp",
        "update.cpp",
        "update_lifecycle_impl.cpp",
        "update_result.cpp",
        "write_ops_exec.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/catalog',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/matcher/expressions_mongod_only',
        '$BUILD_DIR/mongo/db/query/query',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_impl',
        '$BUILD_DIR/mongo/db/service_context',
        'update_driver',
    ],
    LIBDEPS_TAGS=[
        # Deep circularity with catalog
        'incomplete'
    ],
)
