#
# Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff 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)
#

import os ;
import feature ;

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

local USE_SELECT =
  <define>BOOST_ASIO_DISABLE_EPOLL
  <define>BOOST_ASIO_DISABLE_KQUEUE
  <define>BOOST_ASIO_DISABLE_IOCP
  ;

project
  : requirements
    <library>/boost/date_time//boost_date_time
    <library>/boost/system//boost_system
    <library>/boost/chrono//boost_chrono
    <define>BOOST_ALL_NO_LIB=1
    <threading>multi
    <target-os>solaris:<library>socket
    <target-os>solaris:<library>nsl
    <target-os>windows:<define>_WIN32_WINNT=0x0501
    <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>haiku:<library>network
  ;

test-suite "asio-experimental" :
  [ run awaitable_operators.cpp ]
  [ run awaitable_operators.cpp : : : $(USE_SELECT) : awaitable_operators_select ]
  [ run basic_channel.cpp ]
  [ run basic_channel.cpp : : : $(USE_SELECT) : basic_channel_select ]
  [ run basic_concurrent_channel.cpp ]
  [ run basic_concurrent_channel.cpp : : : $(USE_SELECT) : basic_concurrent_channel_select ]
  [ run channel.cpp ]
  [ run channel.cpp : : : $(USE_SELECT) : channel_select ]
  [ run channel_traits.cpp ]
  [ run channel_traits.cpp : : : $(USE_SELECT) : channel_traits_select ]
  [ run co_composed.cpp ]
  [ run co_composed.cpp : : : $(USE_SELECT) : co_composed_select ]
  [ run concurrent_channel.cpp ]
  [ run concurrent_channel.cpp : : : $(USE_SELECT) : concurrent_channel_select ]
  [ run parallel_group.cpp ]
  [ run parallel_group.cpp : : : $(USE_SELECT) : parallel_group_select ]
  [ run promise.cpp ]
  [ run promise.cpp : : : $(USE_SELECT) : promise_select ]
  ;