# -*- 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' % app.path_from(bld.path),
                source = app.ant_glob(['**/*.cpp']),
                use = 'ndns-objects',
                )

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