# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-

import os.path

top = '..'

def build(bld):
    for app in bld.path.ant_glob('**/*', dir=True):
        if os.path.isdir(app.abspath()):
            bld(features=['cxx', 'cxxprogram'],
                target = '../bin/%s' % (str(app)),
                source = app.ant_glob(['**/*.cpp']),
                use = 'ndns-objects',
                )

    for app in bld.path.ant_glob('**/*.cpp'):
        bld(features=['cxx', 'cxxprogram'],
            target = '../bin/%s' % (str(app.change_ext('','.cpp'))),
            source = app,
            use = 'ndns-objects',
            )
