| # -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- |
| |
| from waflib import Utils |
| |
| top = '..' |
| |
| def build(bld): |
| # Single object tools: |
| # tools/example-tool.cpp is a self-contained tool with a main() function |
| # and is built as build/bin/example-tool. |
| # These tools cannot be unit-tested. |
| for tool in bld.path.ant_glob('*.cpp'): |
| name = tool.change_ext('').path_from(bld.path.get_bld()) |
| bld.program(name='tool-%s' % name, |
| target='../bin/%s' % name, |
| source=[tool], |
| use='ndn-cxx') |
| |
| # Sub-directory tools: |
| # tools/example-tool/**/*.cpp is compiled and linked into build/bin/example-tool. |
| # tools/example-tool/main.cpp must exist and must contain the main() function. |
| # All other objects are collected into 'tools-objects' and can be unit-tested. |
| testableObjects = [] |
| for subdir in bld.path.ant_glob('*', dir=True, src=False): |
| mainFile = subdir.find_node('main.cpp') |
| if mainFile is None: |
| continue # not a C++ tool |
| |
| name = subdir.path_from(bld.path) |
| srcFiles = subdir.ant_glob('**/*.cpp', excl=['main.cpp']) |
| srcObjects = '' |
| if srcFiles: |
| srcObjects = 'tool-%s-objects' % name |
| bld.objects(target=srcObjects, |
| source=srcFiles, |
| use='ndn-cxx') |
| testableObjects.append(srcObjects) |
| |
| bld.program(name='tool-%s' % name, |
| target='../bin/%s' % name, |
| source=[mainFile], |
| use='ndn-cxx ' + srcObjects) |
| |
| bld.objects(target='tools-objects', |
| source=[], |
| use=testableObjects) |
| |
| # Tool wrappers |
| wrapperFiles = bld.path.ant_glob('wrapper/*.sh') |
| bld(name='tool-wrappers', |
| features='subst', |
| source=wrapperFiles, |
| target=['../bin/%s' % node.change_ext('', '.sh').path_from(bld.path.find_dir('wrapper').get_bld()) |
| for node in wrapperFiles], |
| install_path='${BINDIR}', |
| chmod=Utils.O755) |