#
# Copyright (c) 2019 Vinnie Falco (vinnie dot falco at gmail dot com)
#
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
# Official repository: https://github.com/boostorg/beast
#

import ac ;
import os ;
import path ;
import feature ;
import boost ;
import modules ;
import testing ;
import ../config/checks/config : requires ;

using openssl ;
boost.use-project ;

lib socket ; # SOLARIS, QNXNTO
lib nsl ; # SOLARIS
lib ws2_32 ; # NT
lib mswsock ; # NT
lib ipv6 ; # HPUX
lib network ; # HAIKU

feature.feature boost.beast.allow-deprecated : on off : propagated composite ;
feature.compose <boost.beast.allow-deprecated>on : <define>BOOST_BEAST_ALLOW_DEPRECATED ;

feature.feature boost.beast.separate-compilation : on off : propagated composite ;
feature.compose <boost.beast.separate-compilation>on : <define>BOOST_BEAST_SEPARATE_COMPILATION ;

variant beast_coverage
  : debug
  : <cxxflags>"-msse4.2 --coverage"
    <linkflags>"--coverage"
  ;

feature.feature boost.beast.valgrind : on : optional propagated composite ;
feature.compose <boost.beast.valgrind>on : <define>BOOST_USE_VALGRIND ;

variant beast_valgrind
  : release
  : <boost.beast.valgrind>on
  ;

variant beast_ubasan
  : release
  : <cxxflags>"-msse4.2 -funsigned-char -fno-omit-frame-pointer -fsanitize=address,undefined -fno-sanitize-recover=address,undefined -fsanitize-blacklist=libs/beast/tools/blacklist.supp"
    <linkflags>"-fsanitize=address,undefined"
    <define>BOOST_USE_ASAN=1
  ;

project /boost/beast ;

local defines =
    [ requires
    cxx11_constexpr
    cxx11_decltype
    cxx11_hdr_tuple
    cxx11_template_aliases
    cxx11_variadic_templates
    ]
    <implicit-dependency>/boost//headers
    <include>.
    <define>BOOST_ALL_NO_LIB=1
    <define>BOOST_ASIO_SEPARATE_COMPILATION
    <define>BOOST_ASIO_NO_DEPRECATED=1
    <define>BOOST_ASIO_DISABLE_BOOST_ARRAY=1
    <define>BOOST_ASIO_DISABLE_BOOST_BIND=1
    <define>BOOST_ASIO_DISABLE_BOOST_DATE_TIME=1
    <define>BOOST_ASIO_DISABLE_BOOST_REGEX=1
    <define>BOOST_COROUTINES_NO_DEPRECATION_WARNING=1
    <toolset>msvc:<cxxflags>"/bigobj"
    <toolset>msvc-14.1:<cxxflags>"/permissive-"
    <toolset>msvc-14.2:<cxxflags>"/permissive-"
    <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS=1
    <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS=1
    <toolset>msvc:<define>_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING
    <toolset>msvc:<define>_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING
    <toolset>msvc,<variant>release:<cxxflags>"/Ob2 /Oi /Ot"
    <target-os>linux:<define>_XOPEN_SOURCE=600
    <target-os>linux:<define>_GNU_SOURCE=1
    <target-os>solaris:<define>_XOPEN_SOURCE=500
    <target-os>solaris:<define>__EXTENSIONS__
    <target-os>solaris:<library>socket
    <target-os>solaris:<library>nsl
    <target-os>windows:<define>_WIN32_WINNT=0x0601
    <target-os>windows,<toolset>gcc:<library>ws2_32
    <target-os>windows,<toolset>gcc:<library>mswsock
    <target-os>windows,<toolset>gcc-cygwin:<define>__USE_W32_SOCKETS
    <target-os>hpux,<toolset>gcc:<define>_XOPEN_SOURCE_EXTENDED
    <target-os>hpux:<library>ipv6
    <target-os>qnxnto:<library>socket
    <target-os>haiku:<library>network
    ;

lib lib-asio
    : test/lib_asio.cpp
    : requirements
        <link>static
        $(defines)
    : usage-requirements
        $(defines)
    ;

if [ os.name ] = LINUX
{
  lib dl ;
}

lib lib-asio-ssl
    : test/lib_asio_ssl.cpp
    : requirements
        <link>static
        $(defines)
        [ ac.check-library /openssl//ssl    : <library>/openssl//ssl/<link>shared : <build>no ]
        [ ac.check-library /openssl//crypto : <library>/openssl//crypto/<link>shared : <build>no ]
    : usage-requirements
        $(defines)
        <library>/openssl//ssl/<link>shared
        <library>/openssl//crypto/<link>shared
        <target-os>linux:<library>dl
    ;


lib lib-beast
    : test/lib_beast.cpp
    : requirements
    <link>static
    $(defines)
    : usage-requirements
    $(defines)
    ;
