# -*- mode: python; -*-
Import([
    "endian",
    "env",
    'get_option',
])

env = env.Clone()

env['CCFLAGS_WERROR'] = []
env['CXXFLAGS_WERROR'] = []

env.InjectThirdParty(libraries=['libbson'])

env.InjectThirdParty(libraries=['intel_decimal128'])

env.Append(CPPDEFINES=[
    'KMS_MSG_STATIC',
    'MONGOCRYPT_STATIC_DEFINE',
    'MLIB_USER',
])

if endian == "little":
    env.Append(CPPDEFINES=[
        'MONGOCRYPT_LITTLE_ENDIAN',
        'KMS_MESSAGE_LITTLE_ENDIAN',
    ])
else:
    env.Append(CPPDEFINES=[
        'MONGOCRYPT_BIG_ENDIAN',
        'KMS_MESSAGE_BIG_ENDIAN',
    ])

env.Append(CPPPATH=[
    "src",
    "kms-message/src",
])


def removeIfPresent(lst, item):
    try:
        lst.remove(item)
    except ValueError:
        pass


for to_remove in [('_GNU_SOURCE', )]:
    removeIfPresent(env['CPPDEFINES'], to_remove)

additional_sources = []

if get_option('ssl') == 'off':
    env.Append(CPPDEFINES=['MONGOCRYPT_ENABLE_CRYPTO'])
    additional_sources.append([
        'dist/kms-message/src/kms_crypto_none.c',
        'dist/src/crypto/none.c',
    ])
elif env.TargetOSIs('windows'):
    env.Append(CPPDEFINES=['KMS_MESSAGE_ENABLE_CRYPTO_CNG'])
    additional_sources.append([
        'dist/kms-message/src/kms_crypto_windows.c',
        'dist/src/crypto/cng.c',
    ])
elif env.TargetOSIs('darwin'):
    env.Append(CPPDEFINES=['KMS_MESSAGE_ENABLE_CRYPTO_COMMON_CRYPTO'])
    additional_sources.append([
        'dist/kms-message/src/kms_crypto_apple.c',
        'dist/src/crypto/commoncrypto.c',
    ])
else:
    env.Append(CPPDEFINES=['KMS_MESSAGE_ENABLE_CRYPTO_LIBCRYPTO'])
    additional_sources.append([
        'dist/kms-message/src/kms_crypto_libcrypto.c',
        'dist/src/crypto/libcrypto.c',
    ])

if not env.TargetOSIs('windows'):
    env.Append(CPPDEFINES=['MLIB_HAVE_STRINGS_H'])

    additional_sources.append([
        'dist/src/os_posix/os_dll.c',
        'dist/src/os_posix/os_mutex.c',
    ])
else:
    additional_sources.append([
        'dist/src/os_win/os_dll.c',
        'dist/src/os_win/os_mutex.c',
    ])

    # Disable warnings about deprecated functions
    env.Append(CFLAGS=['/wd4996'])

env.Library(
    target="libmongocrypt",
    source=[
        'dist/kms-message/src/hexlify.c',
        'dist/kms-message/src/kms_azure_request.c',
        'dist/kms-message/src/kms_b64.c',
        'dist/kms-message/src/kms_caller_identity_request.c',
        'dist/kms-message/src/kms_decrypt_request.c',
        'dist/kms-message/src/kms_encrypt_request.c',
        'dist/kms-message/src/kms_gcp_request.c',
        'dist/kms-message/src/kms_kmip_reader_writer.c',
        'dist/kms-message/src/kms_kmip_request.c',
        'dist/kms-message/src/kms_kmip_response.c',
        'dist/kms-message/src/kms_kmip_response_parser.c',
        'dist/kms-message/src/kms_kv_list.c',
        'dist/kms-message/src/kms_message.c',
        'dist/kms-message/src/kms_port.c',
        'dist/kms-message/src/kms_request.c',
        'dist/kms-message/src/kms_request_opt.c',
        'dist/kms-message/src/kms_request_str.c',
        'dist/kms-message/src/kms_response.c',
        'dist/kms-message/src/kms_response_parser.c',
        'dist/kms-message/src/sort.c',
        'dist/src/mc-array.c',
        'dist/src/mc-efc.c',
        'dist/src/mc-fle2-encryption-placeholder.c',
        'dist/src/mc-fle2-find-equality-payload.c',
        'dist/src/mc-fle2-find-equality-payload-v2.c',
        'dist/src/mc-fle2-find-range-payload.c',
        'dist/src/mc-fle2-find-range-payload-v2.c',
        'dist/src/mc-fle2-insert-update-payload.c',
        'dist/src/mc-fle2-insert-update-payload-v2.c',
        'dist/src/mc-fle2-payload-iev.c',
        'dist/src/mc-fle2-payload-uev.c',
        'dist/src/mc-fle2-rfds.c',
        'dist/src/mc-range-edge-generation.c',
        'dist/src/mc-range-encoding.c',
        'dist/src/mc-range-mincover.c',
        'dist/src/mc-rangeopts.c',
        'dist/src/mc-reader.c',
        'dist/src/mc-tokens.c',
        'dist/src/mc-writer.c',
        'dist/src/mongocrypt-binary.c',
        'dist/src/mongocrypt-buffer.c',
        'dist/src/mongocrypt-cache-collinfo.c',
        'dist/src/mongocrypt-cache-key.c',
        'dist/src/mongocrypt-cache-oauth.c',
        'dist/src/mongocrypt-cache.c',
        'dist/src/mongocrypt-ciphertext.c',
        'dist/src/mongocrypt-crypto.c',
        'dist/src/mongocrypt-ctx-datakey.c',
        'dist/src/mongocrypt-ctx-decrypt.c',
        'dist/src/mongocrypt-ctx-encrypt.c',
        'dist/src/mongocrypt-ctx-rewrap-many-datakey.c',
        'dist/src/mongocrypt-ctx.c',
        'dist/src/mongocrypt-endpoint.c',
        'dist/src/mongocrypt-kek.c',
        'dist/src/mongocrypt-key-broker.c',
        'dist/src/mongocrypt-key.c',
        'dist/src/mongocrypt-kms-ctx.c',
        'dist/src/mongocrypt-log.c',
        'dist/src/mongocrypt-marking.c',
        'dist/src/mongocrypt-opts.c',
        'dist/src/mongocrypt-status.c',
        'dist/src/mongocrypt-traverse-util.c',
        'dist/src/mongocrypt-util.c',
        'dist/src/mongocrypt.c',
    ] + additional_sources,
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/third_party/shim_intel_decimal128',
        '$BUILD_DIR/third_party/shim_libbson',
    ],
    LIBDEPS_TAGS=[
        'init-no-global-side-effects',
    ],
)
