# -*- mode: python -*-

Import('env')

env = env.Clone()

env.Library(
    target='aggregation',
    source=[
        'aggregation.cpp',
    ],
    LIBDEPS=[
        'aggregation_request',
        'expression_context',
        'pipeline',
    ]
)

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

env.CppUnitTest(
    target='field_path_test',
    source='field_path_test.cpp',
    LIBDEPS=[
        'field_path',
        ],
    )

env.Library(
    target='document_value',
    source=[
        'document.cpp',
        'document_comparator.cpp',
        'document_path_support.cpp',
        'value.cpp',
        'value_comparator.cpp',
        ],
    LIBDEPS=[
        'field_path',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/query/datetime/date_time_support',
        '$BUILD_DIR/mongo/util/intrusive_counter',
        ]
    )

env.Library(
    target='document_value_test_util',
    source=[
        'document_value_test_util.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/unittest/unittest',
        'document_value',
    ],
)

env.CppUnitTest(
    target='document_value_test',
    source=[
        'document_comparator_test.cpp',
        'document_value_test.cpp',
        'document_path_support_test.cpp',
        'document_value_test_util_self_test.cpp',
        'value_comparator_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/collation/collator_interface_mock',
        'document_value',
        'document_value_test_util',
        ],
    )

env.Library(
    target='aggregation_request',
    source=[
        'aggregation_request.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/namespace_string',
        '$BUILD_DIR/mongo/db/query/command_request_response',
        '$BUILD_DIR/mongo/db/query/explain_options',
        '$BUILD_DIR/mongo/db/query/query_request',
        '$BUILD_DIR/mongo/db/repl/read_concern_args',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/write_concern_options',
        'document_sources_idl',
        'document_value',
    ]
)

env.CppUnitTest(
    target='aggregation_request_test',
    source='aggregation_request_test.cpp',
    LIBDEPS=[
        'aggregation_request',
        'document_value_test_util',
    ],
)

env.Library(
    target='expression_context',
    source=[
        'expression_context.cpp',
        'variables.cpp',
    ],
    LIBDEPS=[
        'aggregation_request',
        '$BUILD_DIR/mongo/db/query/collation/collator_factory_interface',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/intrusive_counter',
    ]
)

env.Library(
    target='dependencies',
    source=[
        'dependencies.cpp',
        ],
    LIBDEPS=[
        'document_value',
        'field_path',
    ]
)

env.Library(
    target='expression',
    source=[
        'expression.cpp',
        'expression_trigonometric.cpp',
        ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/datetime/date_time_support',
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/util/regex_util',
        '$BUILD_DIR/mongo/util/summation',
        'dependencies',
        'document_value',
        'expression_context',
    ]
)

env.Library(
    target='accumulator',
    source=[
        'accumulation_statement.cpp',
        'accumulator_add_to_set.cpp',
        'accumulator_avg.cpp',
        'accumulator_first.cpp',
        'accumulator_last.cpp',
        'accumulator_min_max.cpp',
        'accumulator_push.cpp',
        'accumulator_std_dev.cpp',
        'accumulator_sum.cpp',
        'accumulator_merge_objects.cpp'
        ],
    LIBDEPS=[
        'document_value',
        '$BUILD_DIR/mongo/db/query/query_knobs',
        '$BUILD_DIR/mongo/util/summation',
        'expression',
        'field_path',
    ]
)

env.Library(
    target='granularity_rounder',
    source=[
        'granularity_rounder.cpp',
        'granularity_rounder_powers_of_two.cpp',
        'granularity_rounder_preferred_numbers.cpp',
        ],
    LIBDEPS=[
        'document_value',
        'expression',
        'field_path',
    ]
)

env.Library(
    target='document_source_mock',
    source=[
        'document_source_mock.cpp',
        'stub_mongo_process_interface_lookup_single_document.cpp',
        ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'pipeline',
    ]
)

env.Library(
    target='sharded_agg_helpers',
    source=[
        'sharded_agg_helpers.cpp',
    ],
    LIBDEPS=[
        'aggregation',
        '$BUILD_DIR/mongo/s/async_requests_sender',
        '$BUILD_DIR/mongo/s/query/cluster_aggregation_planner',
        '$BUILD_DIR/mongo/s/commands/shared_cluster_commands',
    ],
)

env.CppUnitTest(
    target='document_source_test',
    source=[
        'document_source_add_fields_test.cpp',
        'document_source_bucket_auto_test.cpp',
        'document_source_bucket_test.cpp',
        'document_source_change_stream_test.cpp',
        'document_source_check_resume_token_test.cpp',
        'document_source_count_test.cpp',
        'document_source_current_op_test.cpp',
        'document_source_exchange_test.cpp',
        'document_source_geo_near_test.cpp',
        'document_source_graph_lookup_test.cpp',
        'document_source_group_test.cpp',
        'document_source_internal_split_pipeline_test.cpp',
        'document_source_limit_test.cpp',
        'document_source_lookup_change_post_image_test.cpp',
        'document_source_lookup_test.cpp',
        'document_source_match_test.cpp',
        'document_source_merge_cursors_test.cpp',
        'document_source_merge_test.cpp',
        'document_source_mock_test.cpp',
        'document_source_out_test.cpp',
        'document_source_plan_cache_stats_test.cpp',
        'document_source_project_test.cpp',
        'document_source_redact_test.cpp',
        'document_source_replace_root_test.cpp',
        'document_source_sample_test.cpp',
        'document_source_internal_shard_filter_test.cpp',
        'document_source_skip_test.cpp',
        'document_source_sort_by_count_test.cpp',
        'document_source_sort_test.cpp',
        'document_source_test.cpp',
        'document_source_unwind_test.cpp',
        'sequential_document_cache_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/catalog/catalog_impl',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/repl/oplog_entry',
        '$BUILD_DIR/mongo/db/repl/replmocks',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/devnull/storage_devnull_core',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/s/query/router_exec_stage',
        '$BUILD_DIR/mongo/s/sharding_router_test_fixture',
        '$BUILD_DIR/mongo/util/clock_source_mock',
        'document_source_mock',
        'document_value_test_util',
        'pipeline',
    ],
)

env.CppUnitTest(
    target='document_source_facet_test',
    source='document_source_facet_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/s/is_mongos',
        'pipeline',
        'document_source_mock',
        'document_value_test_util',
    ],
)

env.Library(
    target='lite_parsed_document_source',
    source=[
        'lite_parsed_document_source.cpp',
        'lite_parsed_pipeline.cpp',
        ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/commands/server_status_core',
        '$BUILD_DIR/mongo/db/stats/counters',
        'aggregation_request',
    ]
)

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

env.Library(
    target='mongo_process_common',
    source=[
        'mongo_process_common.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/generic_cursor',
        '$BUILD_DIR/mongo/s/sharding_router_api',
        'field_path',
    ]
)

env.Library(
    target='process_interface_standalone',
    source=[
        'process_interface_standalone.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/ops/write_ops_exec',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/repl/speculative_majority_read_info',
        'mongo_process_common',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/catalog/database_holder',
        '$BUILD_DIR/mongo/db/concurrency/flow_control_ticketholder',
        '$BUILD_DIR/mongo/db/session_catalog',
        '$BUILD_DIR/mongo/db/storage/backup_cursor_hooks',
        '$BUILD_DIR/mongo/db/transaction',
    ],
)

env.Library(
    target='process_interface_shardsvr',
    source=[
        'process_interface_shardsvr.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/transaction',
        '$BUILD_DIR/mongo/db/write_ops',
        '$BUILD_DIR/mongo/s/sharding_api',
        'process_interface_standalone',
        'sharded_agg_helpers',
    ],
)

env.Library(
    target='mongos_process_interface',
    source=[
        'mongos_process_interface.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/pipeline/pipeline',
        '$BUILD_DIR/mongo/s/query/async_results_merger',
        '$BUILD_DIR/mongo/s/query/cluster_aggregation_planner',
        '$BUILD_DIR/mongo/s/query/cluster_query',
        'mongo_process_common',
        'sharded_agg_helpers',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/session_catalog',
    ],
)

env.Library(
    target="process_interface_factory_mongod",
    source=[
        "process_interface_factory_mongod.cpp",
    ],
    LIBDEPS_PRIVATE=[
        'process_interface_shardsvr',
    ],
)

pipelineeEnv = env.Clone()
pipelineeEnv.InjectThirdParty(libraries=['snappy'])
pipelineeEnv.Library(
    target='pipeline',
    source=[
        'document_source.cpp',
        'document_source_add_fields.cpp',
        'document_source_bucket.cpp',
        'document_source_bucket_auto.cpp',
        'document_source_change_stream.cpp',
        'document_source_change_stream_close_cursor.cpp',
        'document_source_change_stream_transform.cpp',
        'document_source_check_invalidate.cpp',
        'document_source_check_resume_token.cpp',
        'document_source_coll_stats.cpp',
        'document_source_count.cpp',
        'document_source_current_op.cpp',
        'document_source_exchange.cpp',
        'document_source_facet.cpp',
        'document_source_geo_near.cpp',
        'document_source_graph_lookup.cpp',
        'document_source_group.cpp',
        'document_source_index_stats.cpp',
        'document_source_internal_inhibit_optimization.cpp',
        'document_source_internal_shard_filter.cpp',
        'document_source_internal_split_pipeline.cpp',
        'document_source_limit.cpp',
        'document_source_list_cached_and_active_users.cpp',
        'document_source_list_local_sessions.cpp',
        'document_source_list_sessions.cpp',
        'document_source_lookup.cpp',
        'document_source_lookup_change_post_image.cpp',
        'document_source_match.cpp',
        'document_source_merge.cpp',
        'document_source_out.cpp',
        'document_source_plan_cache_stats.cpp',
        'document_source_project.cpp',
        'document_source_queue.cpp',
        'document_source_redact.cpp',
        'document_source_replace_root.cpp',
        'document_source_sample.cpp',
        'document_source_sample_from_random_cursor.cpp',
        'document_source_sequential_document_cache.cpp',
        'document_source_single_document_transformation.cpp',
        'document_source_skip.cpp',
        'document_source_sort.cpp',
        'document_source_sort_by_count.cpp',
        'document_source_tee_consumer.cpp',
        'document_source_unwind.cpp',
        'pipeline.cpp',
        'sequential_document_cache.cpp',
        'stage_constraints.cpp',
        'tee_buffer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/clientdriver_minimal',
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/bson/dotted_path_support',
        '$BUILD_DIR/mongo/db/curop',
        '$BUILD_DIR/mongo/db/curop_failpoint_helpers',
        '$BUILD_DIR/mongo/db/generic_cursor',
        '$BUILD_DIR/mongo/db/index/key_generator',
        '$BUILD_DIR/mongo/db/logical_session_cache',
        '$BUILD_DIR/mongo/db/logical_session_id_helpers',
        '$BUILD_DIR/mongo/db/matcher/expressions',
        '$BUILD_DIR/mongo/db/pipeline/lite_parsed_document_source',
        '$BUILD_DIR/mongo/db/query/collation/collator_factory_interface',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface',
        '$BUILD_DIR/mongo/db/repl/oplog_entry',
        '$BUILD_DIR/mongo/db/repl/read_concern_args',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/repl/speculative_majority_read_info',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/sessions_collection',
        '$BUILD_DIR/mongo/db/storage/encryption_hooks',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/s/is_mongos',
        '$BUILD_DIR/third_party/shim_snappy',
        'accumulator',
        'dependencies',
        'document_sources_idl',
        'document_value',
        'expression',
        'expression_context',
        'granularity_rounder',
        'parsed_aggregation_projection',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/background',
        '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
        '$BUILD_DIR/mongo/rpc/command_status',
    ]
)

env.CppUnitTest(
    target='tee_buffer_test',
    source='tee_buffer_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/s/is_mongos',
        'document_source_mock',
        'document_value_test_util',
    ],
)

env.CppUnitTest(
    target='agg_expression_test',
    source=[
        'expression_convert_test.cpp',
        'expression_date_test.cpp',
        'expression_test.cpp',
        'expression_trigonometric_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        'accumulator',
        'document_value_test_util',
        'expression',
        ],
    )

env.CppUnitTest(
    target='accumulator_test',
    source='accumulator_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/collation/collator_interface_mock',
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'accumulator',
        'document_value_test_util',
        ],
    )

env.CppUnitTest(
    target='pipeline_test',
    source=[
        'dependencies_test.cpp',
        'pipeline_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface_mock',
        '$BUILD_DIR/mongo/db/repl/replmocks',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        '$BUILD_DIR/mongo/s/is_mongos',
        '$BUILD_DIR/mongo/s/query/cluster_aggregate',
        'document_source_mock',
        'document_value_test_util',
        'pipeline',
        ],
    )

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

env.Library(
    target='parsed_aggregation_projection',
    source=[
        'parsed_aggregation_projection.cpp',
        'parsed_aggregation_projection_node.cpp',
        'parsed_exclusion_projection.cpp',
        'parsed_inclusion_projection.cpp',
        'parsed_add_fields.cpp',
    ],
    LIBDEPS=[
        'expression',
        'field_path',
        '$BUILD_DIR/mongo/db/matcher/expressions',
    ]
)

env.CppUnitTest(
    target='parsed_exclusion_projection_test',
    source='parsed_exclusion_projection_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'document_value_test_util',
        'parsed_aggregation_projection',
    ],
)

env.CppUnitTest(
    target='parsed_aggregation_projection_test',
    source='parsed_aggregation_projection_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'parsed_aggregation_projection',
    ],
)

env.CppUnitTest(
    target='parsed_inclusion_projection_test',
    source='parsed_inclusion_projection_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'document_value_test_util',
        'parsed_aggregation_projection',
    ],
)

env.CppUnitTest(
    target='granularity_rounder_test',
    source=[
        'granularity_rounder_powers_of_two_test.cpp',
        'granularity_rounder_preferred_numbers_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'document_value_test_util',
        'granularity_rounder',
    ],
)

env.CppUnitTest(
    target='parsed_add_fields_test',
    source='parsed_add_fields_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        'document_value_test_util',
        'parsed_aggregation_projection',
    ],
)

env.Library(
    target='runtime_constants_idl',
    source=[
        env.Idlc('runtime_constants.idl')[0]
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/idl/idl_parser',
    ],
)

env.Library(
    target='document_sources_idl',
    source=[
        env.Idlc('document_source_change_stream.idl')[0],
        env.Idlc('document_source_list_sessions.idl')[0],
        env.Idlc('document_source_merge.idl')[0],
        env.Idlc('document_source_merge_modes.idl')[0],
        env.Idlc('document_source_replace_root.idl')[0],
        env.Idlc('exchange_spec.idl')[0],
        env.Idlc('value.idl')[0],
        'document_source_merge_spec.cpp',
        'resume_token.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/storage/key_string',
        '$BUILD_DIR/mongo/idl/idl_parser',
        '$BUILD_DIR/mongo/s/common_s',
        'document_value',
        'runtime_constants_idl',
    ],
)

env.CppUnitTest(
    target='resume_token_test',
    source='resume_token_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        'document_sources_idl',
    ],
)

env.CppUnitTest(
    target='pipeline_metadata_tree_test',
    source='pipeline_metadata_tree_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        'pipeline',
    ],
)

env.CppUnitTest(
    target='expression_walker_test',
    source='expression_walker_test.cpp',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        'expression',
    ],
)

env.CppUnitTest(
    target='process_interface_test',
    source=[
        'mongos_process_interface_test.cpp',
        'process_interface_standalone_test.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        'mongo_process_common',
        'mongo_process_interface',
        'mongos_process_interface',
        'process_interface_shardsvr',
        'process_interface_standalone',
    ]
)
