# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
"""
Copyright (c) 2014-2023,  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=f'other-tests-{module}-main',
                    source='../main.cpp',
                    use='BOOST_TESTS',
                    defines=[f'BOOST_TEST_MODULE={name}'])
        # module
        bld.program(name=module,
                    target=f'{top}/{module}',
                    source=bld.path.ant_glob(f'{module}*.cpp'),
                    use=f'daemon-objects other-tests-{module}-main',
                    install_path=None)

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