Add doclib/fix-links.py to temporarily fix/remove bad doxygen links
[senf.git] / SConstruct
index ed68a67..bf5b3eb 100644 (file)
@@ -33,7 +33,7 @@ def nonemptyFile(f):
     except OSError: return False
 
 def checkLocalConf(target, source, env):
-    if nonemptyFile('SConfig') or nonemptyFile('Doxyfile.local'):
+    if [ True for f in env['CONFIG_FILES'] if nonemptyFile(f) ]:
         print
         print "You have made local modifications to 'SConfig' and/or 'Doxyfile.local'."
         print "Building a debian package would remove those files."
@@ -62,6 +62,7 @@ install_all  Install SENF into $PREFIX
 deb          Build debian source and binary package
 debsrc       Build debian source package
 debbin       Build debian binary package
+linklint     Check links of doxygen documentation with 'linklint'
 """)
 
 if os.environ.get('debian_build'):
@@ -73,8 +74,11 @@ logname = os.environ.get('LOGNAME')
 if not logname:
     logname = pwd.getpwuid(os.getuid()).pw_name
 
+def configFilesOpts(target, source, env, for_signature):
+    return [ '-I%s' % os.path.split(f)[1] for f in env['CONFIG_FILES'] ]
+
 env.Append(
-   CPPPATH = [ ],
+   CPPPATH = [ '#/include' ],
    LIBS = [ 'iberty', '$BOOSTREGEXLIB' ],
    DOXY_XREF_TYPES = [ 'bug', 'fixme', 'todo', 'idea' ],
    DOXY_HTML_XSL = '#/doclib/html-munge.xsl',
@@ -83,8 +87,12 @@ env.Append(
            'LOGNAME' : logname, # needed by the debian build scripts
            'CONCURRENCY_LEVEL' : env.GetOption('num_jobs') or "1"
            },
+   CONFIG_FILES = [ 'Doxyfile.local', 'SConfig', 'local_config.hh' ],
+   CONFIG_FILES_OPTS = configFilesOpts,
    CLEAN_PATTERNS = [ '*.pyc', 'semantic.cache', '.sconsign', '.sconsign.dblite' ],
-   BUILDPACKAGE_COMMAND = "dpkg-buildpackage -us -uc -rfakeroot -I.svn -IDoxyfile.local -ISConfig",
+   BUILDPACKAGE_COMMAND = "dpkg-buildpackage -us -uc -rfakeroot -I.svn $CONFIG_FILES_OPTS",
+   TOP_INCLUDES = [ 'Packets', 'PPI', 'Scheduler', 'Socket', 'Utils',
+                    'config.hh', 'local_config.hh' ]
 )
 
 Export('env')
@@ -94,15 +102,9 @@ Export('env')
 if not env.GetOption('clean') and not os.path.exists("Doxyfile.local"):
     Execute(Touch("Doxyfile.local"))
 
-# Create config.h
-file("config.h","w").write(
-"""#ifndef H_config_
-#define H_config_ 1
-// This looks stupid. However, we need this since the debian packaged Version
-// of SENF is installed in a 'senf' subdirectory which the source Version is not
-#define SENF_ABSOLUTE_INCLUDE_PATH(senf_relative_include_file_path) <%s/senf_relative_include_file_path>
-#endif
-""" % env.Dir('#').abspath)
+# Create local_config.h
+if not env.GetOption('clean') and not os.path.exists("local_config.hh"):
+    Execute(Touch("local_config.hh"))
 
 ###########################################################################
 # Define build targets
@@ -116,6 +118,8 @@ SENFSCons.DoxyXRef(env,
                    HTML_HEADER = '#/doclib/doxy-header-overview.html',
                    HTML_FOOTER = '#/doclib/doxy-footer.html')
 
+SENFSCons.InstallIncludeFiles(env, [ 'config.hh' ])
+
 # Build combined library 'libsenf'
 libsenf = env.Library(
     SENFSCons.LibPath('senf'),
@@ -123,23 +127,38 @@ libsenf = env.Library(
 env.Default(libsenf)
 env.Alias('install_all', env.Install('$LIBINSTALLDIR', libsenf))
 
-env.AlwaysBuild(
-    env.Alias('deb', [], [ checkLocalConf,
-                           updateRevision,
-                           "$BUILDPACKAGE_COMMAND" ]))
-
-env.AlwaysBuild(
-    env.Alias('debsrc', [], [ updateRevision,
-                              "$BUILDPACKAGE_COMMAND -S" ]))
-
-env.AlwaysBuild(
-    env.Alias('debbin', [], [ checkLocalConf,
-                              updateRevision,
-                              "$BUILDPACKAGE_COMMAND -nc" ]))
-
 env.Clean('all', [ os.path.join(path,f)
                    for path, subdirs, files in os.walk('.')
                    for pattern in env['CLEAN_PATTERNS']
                    for f in fnmatch.filter(files,pattern) ])
 
-env.Clean('all', 'config.h')
+env.AlwaysBuild(env.Alias('deb', [], [
+    checkLocalConf,
+    updateRevision,
+    "$BUILDPACKAGE_COMMAND" ]))
+
+env.AlwaysBuild(env.Alias('debsrc', [], [
+    updateRevision,
+    "$BUILDPACKAGE_COMMAND -S" ]))
+
+env.AlwaysBuild(env.Alias('debbin', [], [
+    checkLocalConf,
+    updateRevision,
+    "$BUILDPACKAGE_COMMAND -nc" ]))
+
+env.AlwaysBuild(env.Alias('linklint', [], [
+    'rm -rf linklint',
+    'linklint -doc linklint -net -limit 99999999 `find -type d -name html -printf "/%P/@ "`',
+    '[ ! -r linklint/errorX.html ] || python linklint_addnames.py <linklint/errorX.html >linklint/errorX.html.new',
+    '[ ! -r linklint/errorX.html.new ] || mv linklint/errorX.html.new linklint/errorX.html',
+    '[ ! -r linklint/errorAX.html ] || python linklint_addnames.py <linklint/errorAX.html >linklint/errorAX.html.new',
+    '[ ! -r linklint/errorAX.html.new ] || mv linklint/errorAX.html.new linklint/errorAX.html',
+    '@echo -e "\\nLokal link check results: linklint/index.html"',
+    '@echo -e "Remote link check results: linklint/urlindex.html\\n"'
+]))
+
+env.AlwaysBuild(env.Alias('fixlinks', [ 'linklint' ], [
+    '[ ! -r linklint/errorX.txt -o ! -r linklint/errorAX.txt ] || python doclib/fix-links.py -s .svn -s linklint -s debian linklint/errorX.txt linklint/errorAX.txt',
+]))    
+
+env.Clean('all', env.Dir('linklint'))