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

from waflib import Utils

top = '..'

def build(bld):
    # core objects that can be shared between unit and integrated tests
    bld.objects(target='tests-base',
                features='pch',
                source=bld.path.ant_glob('*.cpp', excl=['main.cpp']),
                headers=['../src/common-pch.hpp', 'boost-test.hpp'],
                includes='.',
                export_includes='.',
                use='ndn-cxx BOOST')

    config_path = 'UNIT_TEST_CONFIG_PATH="%s"' % bld.bldnode.make_node('tmp-files')

    # unit test objects
    src = bld.path.ant_glob(['unit-tests/**/*.cpp'],
                            excl=['**/*-osx.t.cpp', '**/*-sqlite3.t.cpp'])
    if bld.env['HAVE_OSX_FRAMEWORKS']:
        src += bld.path.ant_glob('unit-tests/**/*-osx.t.cpp')

    # In case we want to make it optional later
    src += bld.path.ant_glob('unit-tests/**/*-sqlite3.t.cpp')

    bld.objects(target='unit-test-objects',
                source=src,
                use='tests-base',
                defines=[config_path])

    # unit test app
    bld.program(target='../unit-tests',
                name='unit-tests',
                source='main.cpp',
                use='unit-test-objects',
                install_path=None)

    bld.recurse('integrated')
