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

env = env.Clone()

env.Command(
    target=[
        'feature_flag_test.idl',
    ],
    source=[
        '#buildscripts/cheetah_source_generator.py',
        'feature_flag_test.idl.tpl',
        '$BUILD_DIR/mongo/util/version/releases.yml',
    ],
    action=[
        '$PYTHON ${SOURCES[0]} -o ${TARGETS[0]} ${SOURCES[1]} ${SOURCES[2]} ${MONGO_VERSION}',
    ],
    # Ensure that that SCons is used to produce this file rather than Ninja, to avoid spurious
    # dependency cycles due to how we manage generated sources with Ninja.
    NINJA_TEMPLATE=True,
)

env.Library(
    target="idl_parser",
    source=[
        'command_generic_argument.cpp',
        'generic_argument.idl',
        'idl_parser.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/commands/server_status_core',
    ]
)

env.Library(
    target='server_parameter',
    source=[
        'server_parameter.cpp',
        'server_parameter.idl',
        'server_parameter_with_storage.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        'idl_parser',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/util/options_parser/options_parser',
    ],
)

env.Library(
    target='cluster_server_parameter',
    source=[
        'cluster_server_parameter.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/logical_time',
        'feature_flag',
    ],
    LIBDEPS_PRIVATE=[
        'idl_parser',
    ],
)

env.Library(
    target='cluster_server_parameter_initializer',
    source=[
        'cluster_server_parameter_initializer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/repl/replica_set_aware_service',
        'cluster_parameter_synchronization_helpers',
    ],
)

env.Library(
    target='cluster_parameter_synchronization_helpers',
    source=[
        'cluster_parameter_synchronization_helpers.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/audit',
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/logical_time',
    ],
)

env.Library(
    target='cluster_server_parameter_op_observer',
    source=[
        'cluster_server_parameter_op_observer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/dbdirectclient',
        '$BUILD_DIR/mongo/db/op_observer',
        'cluster_parameter_synchronization_helpers',
        'cluster_server_parameter_initializer',
    ],
)

env.Library(
    target='cluster_server_parameter_test_parameter',
    source=[
        'cluster_server_parameter_test.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        'cluster_server_parameter',
    ]
)

env.CppUnitTest(
    target='cluster_server_parameter_op_observer_test',
    source=[
        'cluster_server_parameter_op_observer_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/change_stream_options_manager',
        '$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/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/util/signal_handlers',
        'cluster_server_parameter_op_observer',
        'cluster_server_parameter_test_parameter',
    ],
)

env.CppUnitTest(
    target='cluster_server_parameter_initializer_test',
    source=[
        'cluster_server_parameter_initializer_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/change_stream_options_manager',
        '$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/service_context_d_test_fixture',
        '$BUILD_DIR/mongo/util/signal_handlers',
        'cluster_parameter_synchronization_helpers',
        'cluster_server_parameter_initializer',
        'cluster_server_parameter_test_parameter',
    ],
)

env.Library(
    target='feature_flag',
    source=[
        'feature_flag.cpp',
        'feature_flag_test.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        'server_parameter',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/commands/feature_compatibility_parsers',
        '$BUILD_DIR/mongo/util/options_parser/options_parser',
    ],
)

env.Library(
    target='basic_types',
    source=[
        'basic_types.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        'idl_parser',
    ],
)

env.CppUnitTest(
    target='idl_test',
    source=[
        'config_option_test.cpp',
        'command_generic_argument_test.cpp',
        'feature_flag_test.cpp',
        'idl_test.cpp',
        'server_parameter_specialized_test.cpp',
        'server_parameter_with_storage_test.cpp',
        'config_option_no_init_test.idl',
        'config_option_test.idl',
        'server_parameter_specialized_test.idl',
        'server_parameter_with_storage_test.idl',
        'server_parameter_with_storage_test_structs.idl',
        'unittest.idl',
        'unittest_import.idl',
    ],

    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/auth/authprivilege',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/idl/idl_parser',
        '$BUILD_DIR/mongo/util/cmdline_utils/cmdline_utils',
        '$BUILD_DIR/mongo/util/options_parser/options_parser',
        'basic_types',
        'cluster_server_parameter',
        'feature_flag',
        'server_parameter',
    ],
)
