- 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/doc/roadmap.dox b/doc/roadmap.dox
index 2a0dcc6..84648b9 100644
--- a/doc/roadmap.dox
+++ b/doc/roadmap.dox
@@ -21,6 +21,8 @@
 	- look into iconv, icu and windows API
   \section ms_strict Adds a strict mode to reader/parser
 	Strict JSON support as specific in RFC 4627 (http://www.ietf.org/rfc/rfc4627.txt?number=4627).
+	- Enforce only object or array as root element
+	- Disable comment support
   \section ms_separation Expose json reader/writer API that do not impose using Json::Value.
 	Some typical use-case involve an application specific structure to/from a JSON document.
 	- Performance oriented parser/writer:
diff --git a/doc/sconscript b/doc/sconscript
index 3e4205c..62b481e 100644
--- a/doc/sconscript
+++ b/doc/sconscript
@@ -1,26 +1,60 @@
 Import( 'env' )
 import os.path
 
-if 'doxygen' in env['TOOLS']:
-    doc_topdir = env['ROOTBUILD_DIR']
-    doxyfile = env.SubstInFile( '#doc/doxyfile', 'doxyfile.in',
-                                SUBST_DICT = {
-                                    '%JSONCPP_VERSION%' : env['JSONCPP_VERSION'],
-                                    '%TOPDIR%' : env.Dir('#').abspath,
-                                    '%DOC_TOPDIR%' : str(doc_topdir) } )
-    doc_cmd = env.Doxygen( doxyfile )
-    alias_doc_cmd = env.Alias('doc', doc_cmd )
-    env.AlwaysBuild(alias_doc_cmd)
+if 'doxygen' in env['TOOLS']:    
+    doc_topdir = str(env['ROOTBUILD_DIR'])
+    html_dir = 'jsoncpp-api-doc'
 
-    for dir in doc_cmd:
-        env.Alias('doc', env.Install( '#' + dir.path, '#README.txt' ) )
-        filename = os.path.split(dir.path)[1]
-        targz_path = os.path.join( env['DIST_DIR'], '%s.tar.gz' % filename )
-        zip_doc_cmd = env.TarGz( targz_path, [env.Dir(dir)],
-                                 TARGZ_BASEDIR = doc_topdir )
-        env.Depends( zip_doc_cmd, alias_doc_cmd )
-        env.Alias( 'doc-dist', zip_doc_cmd )
+    doxygen_inputs = env.Glob( includes = '*.dox', dir = '#doc' ) \
+                     + env.Glob( includes = '*.h', dir = '#include/json/' ) \
+                     + env.Glob( includes = ('*.dox','*.h','*.inl','*.cpp'),
+                                 dir = '#src/lib_json' )
+##    for p in doxygen_inputs:
+##        print p.abspath
 
-    # When doxyfile gets updated, I get errors on the first pass.
-    # I have to run scons twice.  Something is wrong with the dependencies
-    # here, but I avoid it by running "scons doc/doxyfile" first.
+    top_dir = env.Dir('#').abspath
+    include_top_dir = env.Dir('#include').abspath
+    env['DOXYFILE_DICT'] = { 'PROJECT_NAME': 'JsonCpp',
+                             'PROJECT_NUMBER': env['JSONCPP_VERSION'],
+                             'STRIP_FROM_PATH': top_dir,
+                             'STRIP_FROM_INC_PATH': include_top_dir,
+                             'HTML_OUTPUT': html_dir,
+                             'HTML_HEADER': env.File('#doc/header.html').abspath,
+                             'HTML_FOOTER': env.File('#doc/footer.html').abspath,
+                             'INCLUDE_PATH': include_top_dir,
+                             'PREDEFINED': 'JSONCPP_DOC_EXCLUDE_IMPLEMENTATION JSON_VALUE_USE_INTERNAL_MAP'
+                             }
+    env['DOXYFILE_FILE'] = 'doxyfile.in'
+    doxfile_nodes = env.Doxyfile( os.path.join( doc_topdir, 'doxyfile' ), doxygen_inputs )
+    html_doc_path = os.path.join( doc_topdir, html_dir )
+    doc_nodes = env.Doxygen( source = doxfile_nodes,
+                             target = os.path.join( html_doc_path, 'index.html' ) )
+    alias_doc_cmd = env.Alias('doc', doc_nodes )
+    env.Alias('doc', env.Install( html_doc_path, '#README.txt' ) )
+    targz_path = os.path.join( env['DIST_DIR'], '%s.tar.gz' % html_dir )
+    zip_doc_cmd = env.TarGz( targz_path, [env.Dir(html_doc_path)],
+                             TARGZ_BASEDIR = env['ROOTBUILD_DIR'] )
+    env.Depends( zip_doc_cmd, alias_doc_cmd )
+    env.Alias( 'doc-dist', zip_doc_cmd )
+##    
+##    doxyfile = env.SubstInFile( '#doc/doxyfile', 'doxyfile.in',
+##                                SUBST_DICT = {
+##                                    '%JSONCPP_VERSION%' : env['JSONCPP_VERSION'],
+##                                    '%TOPDIR%' : env.Dir('#').abspath,
+##                                    '%DOC_TOPDIR%' : str(doc_topdir) } )
+##    doc_cmd = env.Doxygen( doxyfile )
+##    alias_doc_cmd = env.Alias('doc', doc_cmd )
+##    env.AlwaysBuild(alias_doc_cmd)
+##
+##    for dir in doc_cmd:
+##        env.Alias('doc', env.Install( '#' + dir.path, '#README.txt' ) )
+##        filename = os.path.split(dir.path)[1]
+##        targz_path = os.path.join( env['DIST_DIR'], '%s.tar.gz' % filename )
+##        zip_doc_cmd = env.TarGz( targz_path, [env.Dir(dir)],
+##                                 TARGZ_BASEDIR = doc_topdir )
+##        env.Depends( zip_doc_cmd, alias_doc_cmd )
+##        env.Alias( 'doc-dist', zip_doc_cmd )
+##
+##    # When doxyfile gets updated, I get errors on the first pass.
+##    # I have to run scons twice.  Something is wrong with the dependencies
+##    # here, but I avoid it by running "scons doc/doxyfile" first.