# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

include(ExternalProject)
include(GNUInstallDirs)

function(paimon_add_s2n_project)
    if(DEFINED ENV{PAIMON_AWS_S2N_URL})
        set(S2N_URL "$ENV{PAIMON_AWS_S2N_URL}")
    elseif(EXISTS "${THIRDPARTY_DIR}/${PAIMON_AWS_S2N_PKG_NAME}")
        set(S2N_URL "${THIRDPARTY_DIR}/${PAIMON_AWS_S2N_PKG_NAME}")
    else()
        set(S2N_URL
            "${THIRDPARTY_MIRROR_URL}https://github.com/aws/s2n-tls/archive/refs/tags/${PAIMON_AWS_S2N_BUILD_VERSION}.zip"
        )
    endif()
    set(S2N_C_FLAGS "${EP_C_FLAGS}")
    set(S2N_CXX_FLAGS "${EP_CXX_FLAGS}")
    string(REPLACE "-Wdocumentation" "" S2N_C_FLAGS "${S2N_C_FLAGS}")
    string(REPLACE "-Wdocumentation" "" S2N_CXX_FLAGS "${S2N_CXX_FLAGS}")
    externalproject_add(s2n_ep
                        URL ${S2N_URL}
                        URL_HASH SHA256=${PAIMON_AWS_S2N_BUILD_SHA256_CHECKSUM}
                        CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
                                   -DCMAKE_C_FLAGS=${S2N_C_FLAGS}
                                   -DCMAKE_CXX_FLAGS=${S2N_CXX_FLAGS}
                                   -DCMAKE_INSTALL_PREFIX=${AWS_AUTH_PREFIX}
                                   -DCMAKE_INSTALL_LIBDIR=${AWS_AUTH_INSTALL_LIBDIR}
                                   -DCMAKE_PREFIX_PATH=${AWS_AUTH_PREFIX}
                                   -Dcrypto_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
                                   -Dcrypto_LIBRARY=${OPENSSL_CRYPTO_LIBRARY}
                                   -DCMAKE_POSITION_INDEPENDENT_CODE=ON
                                   -DS2N_INTERN_LIBCRYPTO=OFF
                        BUILD_BYPRODUCTS ${AWS_AUTH_LIB_DIR}/libs2n.a
                                         ${THIRDPARTY_LOG_OPTIONS})
endfunction()

function(paimon_add_aws_c_project
         NAME
         VERSION
         CHECKSUM
         DEPENDS)
    string(REPLACE "aws-c-" "AWS_C_" URL_NAME "${NAME}")
    string(TOUPPER "${URL_NAME}" URL_NAME)
    set(URL_VAR "PAIMON_${URL_NAME}_URL")
    set(PKG_NAME_VAR "PAIMON_${URL_NAME}_PKG_NAME")
    if(DEFINED ENV{${URL_VAR}})
        set(URL "$ENV{${URL_VAR}}")
    elseif(EXISTS "${THIRDPARTY_DIR}/${${PKG_NAME_VAR}}")
        set(URL "${THIRDPARTY_DIR}/${${PKG_NAME_VAR}}")
    else()
        set(URL
            "${THIRDPARTY_MIRROR_URL}https://github.com/awslabs/${NAME}/archive/refs/tags/${VERSION}.tar.gz"
        )
    endif()
    set(AWS_PLATFORM_CMAKE_ARGS)
    list(APPEND
         AWS_PLATFORM_CMAKE_ARGS
         -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
         -DOPENSSL_SSL_LIBRARY=${OPENSSL_SSL_LIBRARY}
         -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_CRYPTO_LIBRARY}
         -Dcrypto_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
         -Dcrypto_LIBRARY=${OPENSSL_CRYPTO_LIBRARY})
    if(NAME STREQUAL "aws-c-cal")
        list(APPEND AWS_PLATFORM_CMAKE_ARGS -DUSE_OPENSSL=ON)
    endif()
    if(APPLE)
        list(APPEND AWS_PLATFORM_CMAKE_ARGS -DAWS_USE_SECITEM=ON)
    endif()
    # aws-c-io's installed package unconditionally looks for s2n on Unix even
    # when it was built with Apple's native TLS backend.
    if(APPLE AND (NAME STREQUAL "aws-c-http" OR NAME STREQUAL "aws-c-auth"))
        list(APPEND AWS_PLATFORM_CMAKE_ARGS -DBYO_CRYPTO=ON)
    endif()
    externalproject_add(${NAME}_ep
                        URL ${URL}
                        URL_HASH SHA256=${CHECKSUM}
                        CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS}
                                   -DCMAKE_INSTALL_PREFIX=${AWS_AUTH_PREFIX}
                                   -DCMAKE_INSTALL_LIBDIR=${AWS_AUTH_INSTALL_LIBDIR}
                                   -DCMAKE_PREFIX_PATH=${AWS_AUTH_PREFIX}
                                   -DCMAKE_POSITION_INDEPENDENT_CODE=ON
                                   -DENABLE_TESTING=OFF
                                   ${AWS_PLATFORM_CMAKE_ARGS}
                        DEPENDS ${DEPENDS}
                        BUILD_BYPRODUCTS ${AWS_AUTH_LIB_DIR}/lib${NAME}.a
                                         ${THIRDPARTY_LOG_OPTIONS})
endfunction()

function(build_aws_auth)
    set(AWS_AUTH_PREFIX
        "${CMAKE_CURRENT_BINARY_DIR}/aws-auth_ep-install"
        PARENT_SCOPE)
    set(AWS_AUTH_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/aws-auth_ep-install")
    set(AWS_AUTH_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}")
    set(AWS_AUTH_LIB_DIR "${AWS_AUTH_PREFIX}/${AWS_AUTH_INSTALL_LIBDIR}")
    file(MAKE_DIRECTORY "${AWS_AUTH_PREFIX}/include")
    file(MAKE_DIRECTORY "${AWS_AUTH_LIB_DIR}")

    find_package(OpenSSL REQUIRED)

    set(AWS_IO_DEPENDS "aws-c-common_ep;aws-c-cal_ep")
    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
        paimon_add_s2n_project()
        list(APPEND AWS_IO_DEPENDS s2n_ep)
    endif()

    paimon_add_aws_c_project(aws-c-common ${PAIMON_AWS_C_COMMON_BUILD_VERSION}
                             ${PAIMON_AWS_C_COMMON_BUILD_SHA256_CHECKSUM} "")
    paimon_add_aws_c_project(aws-c-sdkutils ${PAIMON_AWS_C_SDKUTILS_BUILD_VERSION}
                             ${PAIMON_AWS_C_SDKUTILS_BUILD_SHA256_CHECKSUM}
                             aws-c-common_ep)
    paimon_add_aws_c_project(aws-c-cal ${PAIMON_AWS_C_CAL_BUILD_VERSION}
                             ${PAIMON_AWS_C_CAL_BUILD_SHA256_CHECKSUM} aws-c-common_ep)
    paimon_add_aws_c_project(aws-c-compression ${PAIMON_AWS_C_COMPRESSION_BUILD_VERSION}
                             ${PAIMON_AWS_C_COMPRESSION_BUILD_SHA256_CHECKSUM}
                             aws-c-common_ep)
    paimon_add_aws_c_project(aws-c-io ${PAIMON_AWS_C_IO_BUILD_VERSION}
                             ${PAIMON_AWS_C_IO_BUILD_SHA256_CHECKSUM} "${AWS_IO_DEPENDS}")
    paimon_add_aws_c_project(aws-c-http ${PAIMON_AWS_C_HTTP_BUILD_VERSION}
                             ${PAIMON_AWS_C_HTTP_BUILD_SHA256_CHECKSUM}
                             "aws-c-common_ep;aws-c-io_ep;aws-c-compression_ep")
    paimon_add_aws_c_project(aws-c-auth
                             ${PAIMON_AWS_C_AUTH_BUILD_VERSION}
                             ${PAIMON_AWS_C_AUTH_BUILD_SHA256_CHECKSUM}
                             "aws-c-common_ep;aws-c-sdkutils_ep;aws-c-cal_ep;aws-c-io_ep;aws-c-http_ep"
    )

    find_package(Threads REQUIRED)
    set(AWS_AUTH_PLATFORM_LIBS Threads::Threads ${CMAKE_DL_LIBS})
    if(APPLE)
        list(APPEND
             AWS_AUTH_PLATFORM_LIBS
             "-framework Security"
             "-framework CoreFoundation"
             "-framework Network")
    endif()
    set(AWS_AUTH_TLS_LIBS)
    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
        list(APPEND AWS_AUTH_TLS_LIBS "${AWS_AUTH_LIB_DIR}/libs2n.a")
    endif()
    set(AWS_AUTH_RUNTIME_LIBS
        "${AWS_AUTH_LIB_DIR}/libaws-c-http.a"
        "${AWS_AUTH_LIB_DIR}/libaws-c-io.a"
        "${AWS_AUTH_LIB_DIR}/libaws-c-compression.a"
        "${AWS_AUTH_LIB_DIR}/libaws-c-cal.a"
        "${AWS_AUTH_LIB_DIR}/libaws-c-sdkutils.a"
        "${AWS_AUTH_LIB_DIR}/libaws-c-common.a"
        ${AWS_AUTH_TLS_LIBS})
    if(NOT APPLE)
        list(PREPEND AWS_AUTH_RUNTIME_LIBS "-Wl,--start-group")
        list(APPEND AWS_AUTH_RUNTIME_LIBS "-Wl,--end-group")
    endif()
    # Keep OpenSSL after the static AWS archives. In embedded builds CMake can
    # resolve these targets to static archives, where link order matters.
    list(APPEND AWS_AUTH_RUNTIME_LIBS "${OPENSSL_SSL_LIBRARY}"
         "${OPENSSL_CRYPTO_LIBRARY}")
    add_library(aws_auth_minimal STATIC IMPORTED GLOBAL)
    set_target_properties(aws_auth_minimal
                          PROPERTIES IMPORTED_LOCATION
                                     "${AWS_AUTH_LIB_DIR}/libaws-c-auth.a"
                                     INTERFACE_INCLUDE_DIRECTORIES
                                     "${AWS_AUTH_PREFIX}/include"
                                     INTERFACE_LINK_LIBRARIES
                                     "${AWS_AUTH_RUNTIME_LIBS};${AWS_AUTH_PLATFORM_LIBS}")
    add_dependencies(aws_auth_minimal aws-c-auth_ep)

    set(AWS_AUTH_INCLUDE_DIR
        "${AWS_AUTH_PREFIX}/include"
        PARENT_SCOPE)
    set(AWS_AUTH_LIB_DIR
        "${AWS_AUTH_LIB_DIR}"
        PARENT_SCOPE)
endfunction()
