#
# Copyright (c) 2003-2010 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)
#

using quickbook ;

########################################################################
# Standalone HTML documentation

xml standalone_doc
  :
    asio.qbk
  ;

install images
  :
    overview/proactor.png
    overview/sync_op.png
    overview/async_op1.png
    overview/async_op2.png
  :
    <location>html/boost_asio
  ;

local example-names = allocation buffers chat echo http/client http/server
  http/server2 http/server3 http/server4 icmp invocation iostreams local
  multicast nonblocking porthopper serialization services socks4 ssl timeouts
  timers windows ;

for local l in $(example-names)
{
  install ex_$(l) : [ glob ../example/$(l)/*.*pp ] : <location>html/boost_asio/example/$(l) ;
}

boostbook standalone
  :
    standalone_doc
  :
    <xsl:param>boost.root=../../../..
    <xsl:param>chapter.autolabel=0
    <xsl:param>chunk.section.depth=8
    <xsl:param>chunk.first.sections=1
    <xsl:param>toc.section.depth=2
    <xsl:param>toc.max.depth=1
    <xsl:param>generate.section.toc.level=1
    <xsl:param>generate.toc="chapter nop section nop"
    <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/asio/doc/html
  ;

########################################################################
# HTML documentation for $(BOOST_ROOT)/doc/html

xml asio_doc
  :
    asio.qbk
  ;

explicit asio_doc ;

install asio_doc_images
  :
    overview/proactor.png
    overview/sync_op.png
    overview/async_op1.png
    overview/async_op2.png
  :
    <location>$(BOOST_ROOT)/doc/html/boost_asio
  ;

explicit asio_doc_images ;

for local l in $(example-names)
{
  install asio_ex_$(l) : [ glob ../example/$(l)/*.*pp ] : <location>$(BOOST_ROOT)/doc/html/boost_asio/example/$(l) ;
  explicit asio_ex_$(l) ;
}

alias asio_examples : asio_ex_$(example-names) ;

explicit asio_examples ;

path-constant images_location : ../../../doc/html ;

boostbook asio
  :
    asio_doc
  :
    <xsl:param>chapter.autolabel=0
    <xsl:param>chunk.section.depth=8
    <xsl:param>chunk.first.sections=1
    <xsl:param>toc.section.depth=2
    <xsl:param>toc.max.depth=1
    <xsl:param>generate.section.toc.level=1
    <xsl:param>generate.toc="chapter nop section nop"
    <xsl:param>root.filename=boost_asio
    <format>pdf:<xsl:param>img.src.path=$(images_location)/
  :
    <dependency>asio_doc_images
    <dependency>asio_examples
  ;

explicit asio ;
