# Copyright 2016 Julian Ospald <hasufell@posteo.de>
# Distributed under the terms of the GNU General Public License v2


require github [ user=ARMmbed tag=mbedtls-${PV} ]
WORK="${WORKBASE}/${PNV}" # because github.exlib is broken
require cmake [ api=2 ]


SUMMARY="Cryptographic library for embedded systems"
HOMEPAGE="https://tls.mbed.org/"
DOWNLOADS="https://tls.mbed.org/download/${PNV}-gpl.tgz"

LICENCES="|| ( Apache-2.0 GPL-2 )"
SLOT="0"
PLATFORMS="~amd64 ~x86"

MYOPTIONS="
    doc
    havege [[ description = [ Enable the HAVEGE random generator,
                              not suitable for virtualized environments! ] ]]
    threads [[ description = [ Enables the threading abstraction layer
                               via pthread. This is used if you do intend
                               to use contexts between threads. ] ]]
    x86_cpu_features:
        sse2
"

DEPENDENCIES="
    build:
        doc? (
            app-doc/doxygen[>=1.8.4]
            media-gfx/graphviz
        )
    build+run:
        sys-libs/zlib
    test:
        dev-lang/perl:*
        dev-lang/python[>=3]
"

CMAKE_SRC_CONFIGURE_PARAMS=(
    -DENABLE_PROGRAMS=OFF
    -DUSE_SHARED_MBEDTLS_LIBRARY=ON
    -DINSTALL_MBEDTLS_HEADERS=ON
    -DLIB_INSTALL_DIR="/usr/$(exhost --target)/lib"
    -DUSE_STATIC_MBEDTLS_LIBRARY=OFF
    -DENABLE_ZLIB_SUPPORT=ON
)

CMAKE_SRC_CONFIGURE_TESTS=(
    '-DENABLE_TESTING=ON'
)

enable_mbedtls_option() {
    local myopt="$@"
    # check that config.h syntax is the same at version bump
    edo sed -i \
        -e "s://#define ${myopt}:#define ${myopt}:" \
        "${CMAKE_SOURCE}"/include/mbedtls/config.h
}

src_prepare() {
    option x86_cpu_features:sse2 && enable_mbedtls_option MBEDTLS_HAVE_SSE2
    enable_mbedtls_option MBEDTLS_ZLIB_SUPPORT
    option havege && enable_mbedtls_option MBEDTLS_HAVEGE_C
    option threads && enable_mbedtls_option MBEDTLS_THREADING_C
    option threads && enable_mbedtls_option MBEDTLS_THREADING_PTHREAD
    enable_mbedtls_option MBEDTLS_MD4_C
    cmake_src_prepare
}

src_compile() {
    default

    if option doc ; then
        emake apidoc
    fi
}

src_test() {
    LD_LIBRARY_PATH="${ECMAKE_BUILD_DIR}/library" \
        emake test
}

src_install() {
    cmake_src_install

    if option doc ; then
        docinto html
        dodoc -r "${CMAKE_SOURCE}"/apidoc/*
    fi
}