# -*- mode: python; -*-

from functools import partial
import libdeps

Import("env")
Import("get_option")

env = env.Clone()

env.AutoInstall(
    '$PREFIX_DOCDIR/mongo_embedded',
    source=[
        '#/LICENSE-Community.txt',
        '../LICENSE-Embedded.txt',
    ],
    AIB_COMPONENT='embedded',
    AIB_ROLE='base',
)

mongoEmbeddedEnv = env.Clone()
mongoEmbeddedEnv.AppendUnique(
    CPPDEFINES=[
        'MONGO_EMBEDDED_COMPILING',
    ],
)

if get_option('link-model') == 'static':
    mongoEmbeddedEnv.AppendUnique(
        CPPDEFINES=[
            'MONGO_EMBEDDED_STATIC',
        ],
    )
elif get_option('link-model') == 'dynamic-sdk':
    # TODO(SERVER-59134): This fails to honor the libdeps-debug flag
    mongoEmbeddedEnv['LIBDEPS_SHLIBEMITTER'] = partial(
        libdeps.libdeps_emitter,
        builder='SharedArchive',
        visibility_map=libdeps.dependency_visibility_honored,
    )

mongoEmbeddedEnv.AppendUnique(
    SHLINKFLAGS=[
        '$MONGO_EXPORT_FILE_SHLINKFLAGS',
    ],
)

if mongoEmbeddedEnv.TargetOSIs('darwin'):
    # The current version and compatibility are the *minor* ABI
    # version metadata. If you extend (but do not break) the ABI, you
    # should increment current_version but leave compatibiity_version
    # at 1. If you break ABI, you should bump the entire library from
    # v1 to v2, in which case you would then reset both
    # current_version and compatibility_version to 1. You should never
    # need to set compatibility_version to anything but 1.
    mongoEmbeddedEnv.AppendUnique(
        SHLINKFLAGS=[
            '-Wl,-current_version,1',
            '-Wl,-compatibility_version,1',
        ],
    )


mongoEmbeddedTargets = mongoEmbeddedEnv.Library(
    target='mongo_embedded',
    source=[
        'mongo_embedded.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/embedded/embedded',
        '$BUILD_DIR/mongo/rpc/message',
        '$BUILD_DIR/mongo/transport/transport_layer_mock',
    ],
    AIB_COMPONENT='embedded',
)

env.AutoInstall(
    '$PREFIX_INCLUDEDIR/mongo_embedded/v1/mongo_embedded',
    source=['mongo_embedded.h'],
    AIB_COMPONENT='embedded',
    AIB_ROLE='dev',
)

yamlEnv = env.Clone()
yamlEnv.InjectThirdParty(libraries=['yaml'])

if get_option('link-model') != 'dynamic-sdk':
    mongoEmbeddedTest = yamlEnv.CppUnitTest(
        target='mongo_embedded_test',
        source=[
            'mongo_embedded_test.cpp',
            'mongo_embedded_test.idl',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/base',
            '$BUILD_DIR/mongo/bson/bson_validate',
            '$BUILD_DIR/mongo/db/commands/test_commands_enabled',
            '$BUILD_DIR/mongo/db/server_options_core',
            '$BUILD_DIR/mongo/rpc/message',
            '$BUILD_DIR/mongo/unittest/unittest',
            '$BUILD_DIR/mongo/util/net/network',
            '$BUILD_DIR/mongo/util/options_parser/options_parser',
            'mongo_embedded',
        ],
        UNITTEST_HAS_CUSTOM_MAINLINE=True,
        AIB_COMPONENT='embedded-test',
    )
