# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-

VERSION='0.0.1'
APPNAME='sync'

def options(opt):
    opt.load('compiler_c')
    opt.load('compiler_cxx')
    opt.load('boost')
    opt.load('doxygen')
    opt.load('ccnx tinyxml', tooldir=["waf-tools"])

def configure(conf):
    conf.load("compiler_cxx")
    conf.check_cfg(atleast_pkgconfig_version='0.20')
    conf.check_cfg(package='openssl', args=['--cflags', '--libs'], uselib_store='SSL')
    # conf.check_cfg(package='libxml-2.0', args=['--cflags', '--libs'], uselib_store='XML')

    conf.load('boost')
    conf.check_boost(lib='system iostreams test thread')
    
    conf.load('doxygen')
    conf.load('ccnx tinyxml')
    conf.check_ccnx (path=conf.options.ccnx_dir)
    conf.check_tinyxml (path=conf.options.ccnx_dir)

    conf.define ('STANDALONE', 1)
    # conf.define ('DIGEST_BASE64', 1) # base64 is not working and probably will not work at all
	
def build (bld):
    bld.shlib (target=APPNAME, 
               features=['cxx', 'cxxshlib'],
               source = bld.path.ant_glob(['model/sync-*.cc',
                                           'helper/sync-*.cc']),
               uselib = 'BOOST BOOST_IOSTREAMS BOOST_THREAD SSL TINYXML CCNX'
               )

    # Unit tests
    bld.program (target="unit-tests",
                 source = bld.path.ant_glob(['test/**/*.cc']),
                 features=['cxx', 'cxxprogram'],
                 use = 'BOOST_TEST sync')


# doxygen docs
from waflib.Build import BuildContext
class doxy (BuildContext):
    cmd = "doxygen"
    fun = "doxygen"

def doxygen (bld):
    bld (features="doxygen",
         doxyfile='doc/doxygen.conf',
         output_dir = 'doc')
