build: Support tools with multiple translation units

Change-Id: I95c7ec4c0923e59b2652c6bba4ed2c0f00aa71da
Refs: #2344
diff --git a/tools/wscript b/tools/wscript
new file mode 100644
index 0000000..1f99ef6
--- /dev/null
+++ b/tools/wscript
@@ -0,0 +1,38 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+from waflib import Utils, Context
+
+top = '..'
+
+def build(bld):
+    # List all .cpp files (whole tool should be in one .cpp)
+    for i in bld.path.ant_glob(['*.cpp']):
+        name = str(i)[:-len(".cpp")]
+        bld(features=['cxx', 'cxxprogram'],
+            target="../bin/%s" % name,
+            source=[i] + bld.path.ant_glob(['%s/**/*.cpp' % name]),
+            use='ndn-cxx core-objects LIBRESOLV BOOST'
+            )
+
+    # List all directories files (tool can has multiple .cpp in the directory)
+    for name in bld.path.ant_glob(['*'], dir=True, src=False):
+        srcFiles = bld.path.ant_glob(['%s/**/*.cpp' % name])
+        if len(srcFiles) > 0:
+            bld(features=['cxx', 'cxxprogram'],
+                target="../bin/%s" % name,
+                source=srcFiles,
+                use='ndn-cxx core-objects LIBRESOLV BOOST',
+                includes='%s' % name,
+                )
+
+    bld(features="subst",
+        source=bld.path.ant_glob(['*.sh', '*.py']),
+        target=['../bin/%s' % node.change_ext('')
+                for node in bld.path.ant_glob(['*.sh', '*.py'])],
+        install_path="${BINDIR}",
+        chmod=Utils.O755,
+        VERSION=Context.g_module.VERSION
+       )
+
+    bld.install_files("${DATAROOTDIR}/ndn",
+                      bld.path.ant_glob('nfd-status-http-server-files/*'))
diff --git a/wscript b/wscript
index 34de382..a12985d 100644
--- a/wscript
+++ b/wscript
@@ -198,13 +198,7 @@
         use='rib-objects',
         )
 
-    for app in bld.path.ant_glob('tools/*.cpp'):
-        bld(features=['cxx', 'cxxprogram'],
-            target='bin/%s' % (str(app.change_ext(''))),
-            source=['tools/%s' % (str(app))],
-            use='core-objects LIBRESOLV',
-            )
-
+    bld.recurse("tools")
     bld.recurse("tests")
 
     bld(features="subst",
@@ -223,17 +217,6 @@
             install_path="${MANDIR}/",
             VERSION=VERSION)
 
-    for script in bld.path.ant_glob(['tools/*.sh', 'tools/*.py']):
-        bld(features='subst',
-            source='tools/%s' % (str(script)),
-            target='bin/%s' % (str(script.change_ext(''))),
-            install_path="${BINDIR}",
-            chmod=Utils.O755,
-            VERSION=VERSION)
-
-    bld.install_files("${DATAROOTDIR}/ndn",
-                      bld.path.ant_glob('tools/nfd-status-http-server-files/*'))
-
 def docs(bld):
     from waflib import Options
     Options.commands = ['doxygen', 'sphinx'] + Options.commands