# -*- 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', 'tlv/*.cpp', 'publisher/*.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,
          )
