# -*- mode: python -*-

Import('env')

env = env.Clone()

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

env.Library(
    target='ldap_manager_init',
    source=[
        'ldap_manager_init.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/service_context',
        'ldap_manager_impl',
    ],
    LIBDEPS_PRIVATE=[
        'ldap_parameters',
    ],
    PROGDEPS_DEPENDENTS=[
        '$BUILD_DIR/mongo/mongod',
        '$BUILD_DIR/mongo/mongos',
    ]
)

env.Library(
    target='ldap_manager',
    source=[
        'ldap_manager.cpp',
        'ldap_options.idl',
        'ldap_options.cpp',
    ],
    LIBDEPS_PRIVATE=[
        'ldap_query',
        '$BUILD_DIR/mongo/base/secure_allocator',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/util/options_parser/options_parser',
    ],
)

env.Library(
    target='ldap_manager_impl',
    source=[
        'ldap_manager_impl.cpp',
        'ldap_runtime_parameters.cpp',
        'ldap_runner_impl.cpp',
        'ldap_runtime_parameters.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/auth',
        'ldap_connection',
        'ldap_manager',
        'ldap_name_map',
        'ldap_query',
    ],
)

env.Library(
    target='ldap_options_mongod',
    source=[
        'ldap_options_mongod.idl',
    ],
    LIBDEPS=[
        'ldap_manager_impl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/util/options_parser/options_parser',
    ],
    PROGDEPS_DEPENDENTS=[
        '$BUILD_DIR/mongo/mongod',
    ],
)

env.Library(
    target='ldap_query',
    source=[
        'ldap_connection_options.cpp',
        'ldap_query.cpp',
        'ldap_query_config.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/base/secure_allocator',
        '$BUILD_DIR/mongo/util/net/network',
        '$BUILD_DIR/mongo/util/options_parser/options_parser',
        '$BUILD_DIR/third_party/shim_pcrecpp',
    ],
)

ldap_connection_sources = [
    'connections/ldap_connection_factory.cpp',
    'connections/ldap_connection_helpers.cpp',
    'connections/ldap_connection_reaper.cpp',
]

if env.TargetOSIs('windows'):
    ldap_connection_sources.append('connections/windows_ldap_connection.cpp')
else:
    ldap_connection_sources.append('connections/openldap_connection.cpp')

env.Library(
    target='ldap_connection',
    source=ldap_connection_sources,
    LIBDEPS=[
        'ldap_query',
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        'ldap_manager',
        'ldap_parameters',
        '$BUILD_DIR/mongo/db/commands/server_status',
        '$BUILD_DIR/mongo/executor/connection_pool_executor',
        '$BUILD_DIR/mongo/util/alarm',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/mongo/util/net/network',
    ],
    SYSLIBDEPS=env.get("MONGO_LDAP_LIB", [])
)

env.Library(
    target='mongo_ldap',
    source=[
        'authz_manager_external_state_ldap.cpp',
        'ldap_user_cache_invalidator_job.cpp',
        'ldap_user_cache_invalidator_job.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/bson/mutable/mutable_bson',
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/auth/authmongod',
        '$BUILD_DIR/mongo/db/initialize_server_security_state',
        '$BUILD_DIR/mongo/util/background_job',
        'ldap_manager_impl',
        'ldap_name_map',
        'ldap_query',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
    PROGDEPS_DEPENDENTS=[
        '$BUILD_DIR/mongo/mongod',
    ],
)

env.Library(
    target='ldap_name_map',
    source=[
        'name_mapping/internal_to_ldap_user_name_mapper.cpp',
        'name_mapping/rewrite_rule.cpp',
        'name_mapping/ldap_rewrite_rule.cpp',
        'name_mapping/regex_rewrite_rule.cpp',
    ],
    LIBDEPS=[
        'ldap_parameters',
        'ldap_query',
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/third_party/shim_pcrecpp',
    ],
)

env.Library(
    target='ldap_health_observer',
    source=[
        'ldap_health_observer.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/process_health/fault_manager',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        'ldap_connection',
        'ldap_manager',
        'ldap_manager_impl',
        'ldap_query',    
    ],
    PROGDEPS_DEPENDENTS=[
        '$BUILD_DIR/mongo/mongos',
    ],
    LIBDEPS_TAGS=[
        # To link the enterprise_ldap_test only.
        'lint-allow-bidirectional-edges',
    ],
)

env.CppUnitTest(
    target='enterprise_ldap_test',
    source=[
        'ldap_connection_options_test.cpp',
        'ldap_health_observer_test.cpp',
        'ldap_query_test.cpp',
        'name_mapping/rewrite_rule_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/auth',
        '$BUILD_DIR/mongo/db/process_health/fault_manager',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/executor/task_executor_test_fixture',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/util/clock_source_mock',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '../util/core_options_stub',
        'ldap_health_observer',
        'ldap_manager_impl',
        'ldap_name_map',
        'ldap_query',
    ],
)
