# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
"""
Copyright (c) 2014-2018,  Regents of the University of California,
                          Arizona Board of Regents,
                          Colorado State University,
                          University Pierre & Marie Curie, Sorbonne University,
                          Washington University in St. Louis,
                          Beijing Institute of Technology,
                          The University of Memphis.

This file is part of NFD (Named Data Networking Forwarding Daemon).
See AUTHORS.md for complete list of NFD authors and contributors.

NFD 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.

NFD 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
NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
"""

top = '../..'

def build(bld):
    for module, name in {"cs-benchmark": "CS Benchmark",
                         "pit-fib-benchmark": "PIT & FIB Benchmark"}.items():
        # main
        bld.objects(target='other-tests-%s-main' % module,
                    source='../main.cpp',
                    use='BOOST',
                    defines=['BOOST_TEST_MODULE=%s' % name])
        # module
        bld.program(name=module,
                    target='../../%s' % module,
                    source=bld.path.ant_glob('%s*.cpp' % module),
                    use='daemon-objects rib-objects unit-tests-base other-tests-%s-main' % module,
                    defines=['UNIT_TEST_CONFIG_PATH="%s"' % bld.bldnode.make_node('tmp-files')],
                    install_path=None)

    # face-benchmark does not rely on Boost.Test
    bld.program(name='face-benchmark',
                target='../../face-benchmark',
                source=bld.path.ant_glob('face-benchmark*.cpp'),
                use='daemon-objects rib-objects',
                install_path=None)
