# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
"""
Copyright (c) 2014-2019,  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 other-tests-%s-main' % module,
                    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',
                install_path=None)
