# -*- mode: python; -*-

Import('env')
Import("has_option")
Import("get_option")
Import('ssl_provider')

env = env.Clone()

env.Library(
    target='network',
    source=[
        "cidr.cpp",
        "hostandport.cpp",
        "hostname_canonicalization.cpp",
        "sockaddr.cpp",
        "socket_exception.cpp",
        "socket_utils.cpp",
        env.Idlc('hostandport.idl')[0],
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/util/concurrency/spin_lock',
        '$BUILD_DIR/mongo/util/winutil',
    ],
)

env.Library(
    target='ssl_options',
    source=[
        "ssl_options.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_options_core',
        '$BUILD_DIR/mongo/util/options_parser/options_parser',
    ]
)

env.Library(
    target='socket',
    source=[
        "private/socket_poll.cpp",
        "sock.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/util/fail_point',
        'network',
    ]
)

env.Library(
    target='ssl_types',
    source=[
        "ssl_types.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/transport/transport_layer_common',
        'ssl_options',
    ]
)

if not get_option('ssl') == 'off':
    env.Library(
        target='ssl_manager',
        source=[
            "private/ssl_expiration.cpp",
            "ssl_manager.cpp",
            "ssl_parameters.cpp",
            "ssl_manager_%s.cpp" % (ssl_provider),
            "ssl_stream.cpp",
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/base',
            '$BUILD_DIR/mongo/db/auth/auth_rolename',
            '$BUILD_DIR/third_party/shim_asio',
            'network',
            'socket',
            'ssl_options',
            'ssl_types',
        ],
        LIBDEPS_PRIVATE=[
            '$BUILD_DIR/mongo/crypto/sha_block_${MONGO_CRYPTO}',
            '$BUILD_DIR/mongo/db/auth/internal_user_auth',
            '$BUILD_DIR/mongo/db/commands/server_status',
            '$BUILD_DIR/mongo/db/server_options_core',
            '$BUILD_DIR/mongo/db/server_parameters',
            '$BUILD_DIR/mongo/db/service_context',
            '$BUILD_DIR/mongo/util/background_job',
            '$BUILD_DIR/mongo/util/winutil',
        ]
    )
else:
    env.Library(
        target='ssl_manager',
        source=[
            "ssl_manager_none.cpp",
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/base',
            'ssl_options',
        ],
    )

env.CppUnitTest(
    target='network_test',
    source=[
        'cidr_test.cpp',
        'hostandport_test.cpp',
    ],
    LIBDEPS=[
        'network',
    ],
)

if has_option('ssl'):
    env.CppUnitTest(
        target='ssl_manager_test',
        source=[
            'ssl_manager_test.cpp',
            'ssl_options_test.cpp',
            'sock_test.cpp',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/db/server_options_servers',
            '$BUILD_DIR/mongo/util/fail_point',
            'network',
            'socket',
            'ssl_manager',
        ],
    )
