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

"""
Copyright (c) 2014  University of Memphis
                    Regents of the University of California,

This file is part of NLSR (Named-data Link State Routing).
See AUTHORS.md for complete list of NLSR authors and contributors.

NLSR is free software: you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.

NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
"""

top = '..'

def build(bld):
    # Unit tests
    if bld.env['WITH_TESTS']:
        unit_test_main = bld(
            target='unit-tests-main',
            name='unit-tests-main',
            features='cxx',
            source=bld.path.ant_glob(['*.cpp', 'utility/*.cpp']),
            use='nlsr-objects',
          )

        # nsync tests
        unit_tests_nsync = bld.program(
            target='../unit-tests-nsync',
            features='cxx cxxprogram',
            source=bld.path.ant_glob(['nsync/**/*.cc']),
            use='nsync-objects unit-tests-main',
            includes='.',
            install_prefix=None,
          )

        # nlsr tests
        unit_tests_nlsr = bld.program(
            target='../unit-tests-nlsr',
            features='cxx cxxprogram',
            source=bld.path.ant_glob(['nlsr/**/*.cpp']),
            use='nlsr-objects unit-tests-main',
            includes='.',
            install_prefix=None,
          )
