- rewrote doxygen documentation generation integration with Scons (still need some clean-up): list of sources is explicitly passed to a doxyfile builder which is used as input of a doxygen builder. Hence, the doxyfile depends on all the sources.
- documentation is now correctly generated once when source are changed on the first scons run.
diff --git a/scons-tools/glob.py b/scons-tools/glob.py
new file mode 100644
index 0000000..8ee3cbb
--- /dev/null
+++ b/scons-tools/glob.py
@@ -0,0 +1,53 @@
+import fnmatch

+import os

+

+def generate( env ): 

+   def Glob( env, includes = None, excludes = None, dir = '.' ):

+      """Adds Glob( includes = Split( '*' ), excludes = None, dir = '.')

+       helper function to environment.

+

+       Glob both the file-system files.

+

+       includes: list of file name pattern included in the return list when matched.

+       excludes: list of file name pattern exluced from the return list.

+

+       Example:

+       sources = env.Glob( ("*.cpp", '*.h'), "~*.cpp", "#src" )

+      """

+      def filterFilename(path):

+         abs_path = os.path.join( dir, path )

+         if not os.path.isfile(abs_path):

+            return 0

+         fn = os.path.basename(path)

+         match = 0

+         for include in includes:

+            if fnmatch.fnmatchcase( fn, include ):

+               match = 1

+               break

+         if match == 1 and not excludes is None:

+            for exclude in excludes:

+               if fnmatch.fnmatchcase( fn, exclude ):

+                  match = 0

+                  break

+         return match

+      if includes is None:

+         includes = ('*',)

+      elif type(includes) in ( type(''), type(u'') ):

+         includes = (includes,)

+      if type(excludes) in ( type(''), type(u'') ):

+         excludes = (excludes,)

+      dir = env.Dir(dir).abspath

+      paths = os.listdir( dir )

+      def makeAbsFileNode( path ):

+         return env.File( os.path.join( dir, path ) )

+      nodes = filter( filterFilename, paths )

+      return map( makeAbsFileNode, nodes )

+

+   from SCons.Script import Environment

+   Environment.Glob = Glob
+

+def exists(env):

+    """

+    Tool always exists.

+    """

+    return True