File indexing completed on 2024-05-19 16:01:25

0001 #!/usr/bin/perl
0002 # Copyright (C) 2006 Thomas Zander <zander@kde.org>
0003 # this script generates dox based on the availability of a Mainpage.dox file.
0004 # whereever there is one, doxygen is started.
0005 
0006 #set basedir relative to ours.
0007 $rootdir=`pwd`;
0008 chomp($rootdir);
0009 $basedir = $rootdir."/doc/api/";
0010 if(! -d $basedir) {
0011     print "Please start this script from the root of the checkout and make sure that there is a doc/api/ dir\n";
0012     exit 1;
0013 }
0014 
0015 # used in the tag decleration
0016 $remoteDocs_kdelibs="$rootdir/../kdelibs/doc/api";
0017 $remoteDocs_qt="$rootdir/../qt-copy/doc/api";
0018 
0019 $doxygenconftmp=".doxygen.conf.tmp";
0020 
0021 #init
0022 if($#ARGV >= 0) {
0023     my $ok=0;
0024     for($i=0; $i <= $#ARGV; $i++) {
0025         if( -f "$rootdir/$ARGV[$i]/Mainpage.dox") {
0026             push @sections, $ARGV[$i];
0027             $ok=1;
0028         }
0029         elsif($ARGV[$i] eq "--remote") {
0030             print "Using remote url for browing\n";
0031             $remoteDocs_kdelibs="http://www.calligra.org/developer/kdelibs-api/";
0032             $remoteDocs_qt="http://www.calligra.org/developer/qt-api/";
0033             $ok=1;
0034         } else {
0035             print "No Mainpage.dox found at '$rootdir/$ARGV[$i]' skipping..\n";
0036         }
0037     }
0038     if($ok == 0) {
0039         print "Nothing to do!\n";
0040         exit;
0041     }
0042 }
0043 if($#sections == -1) {
0044     print "Finding all sections...";
0045     @output=`find . -name Mainpage.dox -type f | grep -v _darcs`;
0046     foreach $section (@output) {
0047         chomp($section);
0048         $section=~s/^\.\///;
0049         $section=~s/\/Mainpage.dox//;
0050         # skip root dir while there are so little Mainpage.dox files
0051         if($section eq "Mainpage.dox") {
0052             next;
0053         }
0054         push @sections,$section;
0055     }
0056     @output="";
0057 }
0058 
0059 # for each section
0060 print $#sections+1 ." found";
0061 $i=1;
0062 $totalSteps=$#sections*3 + 4;
0063 foreach $section (@sections) {
0064     print "\n". $i++ ."/$totalSteps) Indexing section: '$section' ";
0065 
0066     chdir $section;
0067     @dirs=`find . -type d | grep -v .svn | grep -v _darcs | grep -v '/old\\b' | grep -v '/obsolete\\b'`;
0068     print "\n". $i++ ."/$totalSteps) Creating tags ";
0069     &createConf($section, @dirs);
0070     system "mkdir -p \"$basedir$section\"";
0071     system "doxygen $doxygenconftmp >/dev/null 2>/dev/null";
0072     chdir $rootdir;
0073 }
0074 
0075 foreach $section (@sections) {
0076     print "\n". $i++ ."/$totalSteps) Creating docs for section: '$section' ";
0077     chdir $section;
0078     &alterConf();
0079     $sect=$section;
0080     $sect=~s/\//-/g;
0081     system "doxygen $doxygenconftmp.2 >/dev/null 2>$basedir$sect/err.log";
0082     unlink "$doxygenconftmp";
0083     unlink "$doxygenconftmp.2";
0084     chdir $rootdir;
0085 }
0086 
0087 #Create linking page
0088 print "\n". $i ."/$totalSteps) Creating wrapper pages";
0089 my %classes;
0090 my %packages;
0091 
0092 chdir "$rootdir/doc/api";
0093 foreach $section (@sections) {
0094     $sect=$section;
0095     $sect=~s/\//-/g;
0096     $sect=~s/-$//;
0097     # read from TAGS
0098     $tagfile="$section\_TAGS";
0099     $tagfile=~s/\//_/g;
0100     open(INPUT, "$sect/$tagfile");
0101     $class="";
0102     foreach $line (<INPUT>) {
0103         if($line=~/compound kind=\"class\"/) { $class="Class"; }
0104         elsif($line=~/compound kind=\"struct\"/) { $class="Struct"; }
0105         elsif($line=~/compound kind=\"namespace\"/) { $class="Namespace"; }
0106         elsif($class ne "" && $line=~/name\>(.*)\<\/name/) {
0107             $className=$1;
0108         }
0109         elsif($class ne "" && $line=~/filename\>(.*)\<\/filename/) {
0110             my $file = $1;
0111             $file=~s/^$rootdir/$project/;
0112             &addClass($file, $section, $className, $class);
0113         }
0114     }
0115     close INPUT;
0116 
0117     # read undocumented from err.log
0118     &parseErrorLog("$sect", "err.log", $section);
0119 }
0120 chdir $rootdir;
0121 
0122 $browsingHtml = "<html><body>\n"
0123   . "<style>.FrameItemFont { font-size:  90%; font-family: Helvetica, Arial, sans-serif }</style>\n"
0124   . "<table border=\"0\" width=\"100%\"><tr><td nowrap><font class=\"FrameItemFont\">\n";
0125 $browsingHtmlClose = "</font></td></tr></body></html>\n";
0126 
0127 # generate packages.html
0128 open(FILE, ">$rootdir/doc/api/packages.html");
0129 print FILE "$browsingHtml";
0130 foreach $section (@sections) {
0131     my $sect=$section;
0132     $sect=~s/\//-/g;
0133     $sect=~s/-$//;
0134     $packages{$sect}= "<a href=\"$sect/annotated.html\" target=\"main\">$section</a><br>\n";
0135 }
0136 foreach $key (sort {uc($a) cmp uc($b)} keys %packages) {
0137     print FILE $packages{$key};
0138 }
0139 print FILE $browsingHtmlClose;
0140 close FILE;
0141 
0142 # sort and print
0143 open(FILE, ">$rootdir/doc/api/allClasses.html");
0144 print FILE "$browsingHtml";
0145 print FILE "<b><a href=\"allClasses.html\">All Classes</a> / <a href=\"allClasses-light.html\">Most Classes</a></b><br/><br/>\n";
0146 foreach $key (sort {uc($a) cmp uc($b)} keys %classes) {
0147     print FILE $classes{$key};
0148 }
0149 print FILE $browsingHtmlClose;
0150 close FILE;
0151 system "grep -v '/undocumented.html' $rootdir/doc/api/allClasses.html > $rootdir/doc/api/allClasses-light.html";
0152 
0153 # generate simple static index.html
0154 open (FILE,">$rootdir/doc/api/index.html");
0155 if($rootdir=~/.*\/(.*)$/) {
0156     $project=$1;
0157 }
0158 print FILE "<html><head><title>$project API docs</title><frameset cols=\"20%,80%\">";
0159 
0160 if ($#sections == 0) { # remove 'packages' frameset when there is only one section
0161     print FILE "<frame src=\"allClasses-light.html\">";
0162     my $section = $sections[0];
0163     $section=~s/\//-/g;
0164     $section=~s/-$//;
0165     print FILE "<frame src=\"$section/index.html\" name=\"main\">";
0166 } else {
0167     print FILE "<frameset rows=\"30%,70%\"><frame src=\"packages.html\">";
0168     print FILE "<frame src=\"allClasses-light.html\">";
0169     print FILE "</frameset>";
0170     print FILE "<frame src=\"sections.html\" name=\"main\">";
0171 }
0172 print FILE "</frameset>\n</head></html>";
0173 
0174 close (FILE);
0175 
0176 # generate sections.html
0177 open (FILE,">$rootdir/doc/api/sections.html");
0178 print FILE "<html><body><ul>\n";
0179 foreach $section (@sections) {
0180     $sect=$section;
0181     $sect=~s/\//-/g;
0182     $sect=~s/-$//;
0183     # find out errorcount;
0184     &parseErrorLog("$rootdir/doc/api/$sect", "err.log", $section);
0185     print FILE "<li><a href=\"$sect/annotated.html\">$section</a>&nbsp;&nbsp;<font size=\"-2\">(<a href=\"$sect/annotated.html\" target=\"_top\">NoFrames</a>)  ";
0186     if($error > 0) {
0187         print FILE "[<a href=\"$sect/errors.html\">$error errors</a>] ";
0188     }
0189     if($undocumented > 0) {
0190         print FILE "[<a href=\"$sect/undocumented.html\">$undocumented undocumented</a>]";
0191     }
0192     print FILE "</font></li>\n";
0193 }
0194 print FILE "</ul></body></html>\n";
0195 close (FILE);
0196 print "\n";
0197 
0198 
0199 ##############
0200 sub alterConf() {
0201     open(INPUT, "$doxygenconftmp") || die "internal error: $doxygenconftmp missing!";
0202     open(FILE, ">$doxygenconftmp.2");
0203     foreach $line (<INPUT>) {
0204         if($line=~/^GENERATE_HTML/) {
0205             print FILE "GENERATE_HTML=YES\n";
0206         }
0207         elsif(! ($line=~/^GENERATE_TAGFILE/)) {
0208             print FILE $line;
0209         }
0210     }
0211     close INPUT;
0212     close FILE;
0213 }
0214 
0215 sub createConf() {
0216     my $name = shift(@_);
0217     open FILE, ">$doxygenconftmp";
0218 
0219     print FILE "INPUT=";
0220     dirs: foreach $dir (@_) {
0221         chomp($dir);
0222         $dir=~s/^\.\///;
0223         if($dir=~/tests$/) { next; }
0224         foreach $sect (@sections) {
0225             # if another section is a subdir of this one; don't include its dirs.
0226             $target="$name/$dir";
0227             #print "name: '$name', target: '$target', sect: '$sect'\n";
0228             if($sect ne $name && $target=~m/$sect/ && !($name=~m/^$sect/)) {
0229                 #print "  skipping, '$sect' is in the start of '$target'\n";
0230                 next dirs;
0231             }
0232         }
0233         #print "USING '$dir'\n";
0234         print FILE "$dir ";
0235     }
0236     print FILE "\n";
0237     print FILE "PROJECT_NAME=$name\n";
0238     #print FILE "PROJECT_NUMBER=\n";
0239     my $output="$name";
0240     $output=~s/\//-/g;
0241     print FILE "OUTPUT_DIRECTORY=$basedir$output\n";
0242     #print FILE "CREATE_SUBDIRS=YES\n";
0243     #print FILE "OUTPUT_LANGUAGE=English\n";
0244     #print FILE "USE_WINDOWS_ENCODING=NO\n";
0245     print FILE "BRIEF_MEMBER_DESC=YES\n";
0246     print FILE "REPEAT_BRIEF=YES\n";
0247     #print FILE "ABBREVIATE_BRIEF=\n";
0248     #print FILE "ALWAYS_DETAILED_SEC=NO\n";
0249     #print FILE "INLINE_INHERITED_MEMB=NO\n";
0250     print FILE "FULL_PATH_NAMES=YES\n";
0251     print FILE "STRIP_FROM_PATH=$rootdir\n";
0252     #print FILE "STRIP_FROM_INC_PATH=\n";
0253     #print FILE "SHORT_NAMES=NO\n";
0254     print FILE "JAVADOC_AUTOBRIEF=YES\n";
0255     #print FILE "MULTILINE_CPP_IS_BRIEF=NO\n";
0256     #print FILE "DETAILS_AT_TOP=NO\n";
0257     #print FILE "INHERIT_DOCS=NO\n";
0258     #print FILE "SEPARATE_MEMBER_PAGES=NO\n";
0259     #print FILE "TAB_SIZE=4\n";
0260     #print FILE "ALIASES=\n";
0261     #print FILE "OPTIMIZE_OUTPUT_FOR_C=NO\n";
0262     #print FILE "OPTIMIZE_OUTPUT_JAVA=NO\n";
0263     #print FILE "BUILTIN_STL_SUPPORT=NO\n";
0264     #print FILE "DISTRIBUTE_GROUP_DOC=NO\n";
0265     #print FILE "SUBGROUPING=YES\n";
0266     #print FILE "EXTRACT_ALL=NO\n";
0267     #print FILE "EXTRACT_PRIVATE=NO\n";
0268     #print FILE "EXTRACT_STATIC=NO\n";
0269     print FILE "EXTRACT_LOCAL_CLASSES=NO\n";
0270     #print FILE "EXTRACT_LOCAL_METHODS=NO\n";
0271     #print FILE "HIDE_UNDOC_MEMBERS=NO\n";
0272     #print FILE "HIDE_UNDOC_CLASSES=NO\n";
0273     #print FILE "HIDE_FRIEND_COMPOUNDS=NO\n";
0274     #print FILE "HIDE_IN_BODY_DOCS=NO\n";
0275     #print FILE "INTERNAL_DOCS=NO\n";
0276     #print FILE "CASE_SENSE_NAMES=YES\n";
0277     #print FILE "HIDE_SCOPE_NAMES=NO\n";
0278     #print FILE "SHOW_INCLUDE_FILES=YES\n";
0279     #print FILE "INLINE_INFO=YES\n";
0280     #print FILE "SORT_MEMBER_DOCS=YES\n";
0281     #print FILE "SORT_BRIEF_DOCS=NO\n";
0282     #print FILE "SORT_BY_SCOPE_NAME=NO\n";
0283     #print FILE "GENERATE_TODOLIST=YES\n";
0284     #print FILE "GENERATE_TESTLIST=YES\n";
0285     #print FILE "GENERATE_BUGLIST=YES\n";
0286     #print FILE "GENERATE_DEPRECATEDLIST=YES\n";
0287     #print FILE "ENABLED_SECTIONS= \n";
0288     #print FILE "MAX_INITIALIZER_LINES=30\n";
0289     #print FILE "SHOW_USED_FILES=YES\n";
0290     #print FILE "SHOW_DIRECTORIES=NO\n";
0291     #print FILE "FILE_VERSION_FILTER=\n";
0292     #print FILE "QUIET=YES\n";
0293     #print FILE "WARNINGS=YES\n";
0294     #print FILE "WARN_IF_UNDOCUMENTED=YES\n";
0295     #print FILE "WARN_IF_DOC_ERROR=YES\n";
0296     #print FILE "WARN_NO_PARAMDOC=NO\n";
0297     #print FILE "WARN_FORMAT=\"\$file:\$line: \$text\"\n";
0298     #print FILE "WARN_LOGFILE=\n";
0299     #print FILE "FILE_PATTERNS=*.h\n";
0300     #print FILE "RECURSIVE=NO\n";
0301     #print FILE "EXCLUDE=\n";
0302     #print FILE "EXCLUDE_SYMLINKS=NO\n";
0303     print FILE "EXCLUDE_PATTERNS=*_p.*\n";
0304     #print FILE "EXAMPLE_PATH=$rootdir\n";
0305     #print FILE "EXAMPLE_PATTERNS=\n";
0306     #print FILE "EXAMPLE_RECURSIVE=YES\n";
0307     print FILE "IMAGE_PATH=$basedir\n";
0308     #print FILE "INPUT_FILTER=\n";
0309     #print FILE "FILTER_PATTERNS=\n";
0310     #print FILE "FILTER_SOURCE_FILES=NO\n";
0311     print FILE "SOURCE_BROWSER=YES\n";
0312     #print FILE "INLINE_SOURCES=NO\n";
0313     #print FILE "STRIP_CODE_COMMENTS=YES\n";
0314     #print FILE "REFERENCED_BY_RELATION=YES\n";
0315     #print FILE "REFERENCES_RELATION=YES\n";
0316     #print FILE "USE_HTAGS=NO\n";
0317     print FILE "VERBATIM_HEADERS=NO\n";
0318     #print FILE "ALPHABETICAL_INDEX=NO\n";
0319     #print FILE "COLS_IN_ALPHA_INDEX=5\n";
0320     #print FILE "IGNORE_PREFIX=\n";
0321     print FILE "GENERATE_HTML=NO\n"; # no since we enabled this in the alterConf()
0322     print FILE "HTML_OUTPUT=.\n";
0323     #print FILE "HTML_FILE_EXTENSION=.html\n";
0324     #print FILE "HTML_HEADER=\n";
0325     #print FILE "HTML_FOOTER=\n";
0326     #print FILE "HTML_STYLESHEET=\n";
0327     #print FILE "HTML_ALIGN_MEMBERS=YES\n";
0328     #print FILE "GENERATE_HTMLHELP=NO\n";
0329     #print FILE "CHM_FILE=\n";
0330     #print FILE "HHC_LOCATION=\n";
0331     #print FILE "GENERATE_CHI=NO\n";
0332     #print FILE "BINARY_TOC=YES\n";
0333     #print FILE "TOC_EXPAND=NO\n";
0334     #print FILE "DISABLE_INDEX=NO\n";
0335     #print FILE "ENUM_VALUES_PER_LINE=4\n";
0336     #print FILE "GENERATE_TREEVIEW=NO\n";
0337     #print FILE "TREEVIEW_WIDTH=250\n";
0338     print FILE "GENERATE_LATEX=NO\n";
0339     #print FILE "GENERATE_RTF=NO\n";
0340     #print FILE "GENERATE_MAN=NO\n";
0341     #print FILE "GENERATE_XML=NO\n";
0342     #print FILE "GENERATE_AUTOGEN_DEF=NO\n";
0343     #print FILE "GENERATE_PERLMOD=NO\n";
0344     #print FILE "ENABLE_PREPROCESSING=YES\n";
0345     #print FILE "MACRO_EXPANSION=NO\n";
0346     #print FILE "EXPAND_ONLY_PREDEF=NO\n";
0347     #print FILE "SEARCH_INCLUDES=YES\n";
0348     #print FILE "INCLUDE_PATH=\n";
0349     #print FILE "INCLUDE_FILE_PATTERNS=\n";
0350     #print FILE "PREDEFINED=\n";
0351     #print FILE "EXPAND_AS_DEFINED=\n";
0352     #print FILE "SKIP_FUNCTION_MACROS=YES\n";
0353     print FILE "TAGFILES=";
0354     foreach $sect (@sections) {
0355         # one tag for each section
0356         my $tagfile="$sect\_TAGS";
0357         my $section=$sect;
0358         $section=~s/\//-/g;
0359         $section=~s/-$//;
0360         $tagfile=~s/\//_/g;
0361         if($sect ne $name) {
0362             print FILE "\"$basedir$section/$tagfile=../$section\" ";
0363         }
0364     }
0365     if($rootdir=~/kdelibs/) { } elsif(-d "$rootdir/../kdelibs") {
0366         print FILE "$rootdir/../kdelibs/doc/api/kio/kio_TAGS=$remoteDocs_kdelibs/kio $rootdir/../kdelibs/doc/api/kjs-api/kjs_api_TAGS=$remoteDocs_kdelibs/kjs-api $rootdir/../kdelibs/doc/api/kjs-wtf/kjs_wtf_TAGS=$remoteDocs_kdelibs/kjs-wtf $rootdir/../kdelibs/doc/api/kjs/kjs_TAGS=$remoteDocs_kdelibs/kjs $rootdir/../kdelibs/doc/api/interfaces/interfaces_TAGS=$remoteDocs_kdelibs/interfaces $rootdir/../kdelibs/doc/api/interfaces-khexedit/interfaces_khexedit_TAGS=$remoteDocs_kdelibs/interfaces-khexedit $rootdir/../kdelibs/doc/api/interfaces-ktexteditor/interfaces_ktexteditor_TAGS=$remoteDocs_kdelibs/interfaces-ktexteditor $rootdir/../kdelibs/doc/api/interfaces-kspeech/interfaces_kspeech_TAGS=$remoteDocs_kdelibs/interfaces-kspeech $rootdir/../kdelibs/doc/api/interfaces-kmediaplayer/interfaces_kmediaplayer_TAGS=$remoteDocs_kdelibs/interfaces-kmediaplayer $rootdir/../kdelibs/doc/api/kate/kate_TAGS=$remoteDocs_kdelibs/kate $rootdir/../kdelibs/doc/api/kded/kded_TAGS=$remoteDocs_kdelibs/kded $rootdir/../kdelibs/doc/api/kdecore/kdecore_TAGS=$remoteDocs_kdelibs/kdecore $rootdir/../kdelibs/doc/api/knewstuff/knewstuff_TAGS=$remoteDocs_kdelibs/knewstuff $rootdir/../kdelibs/doc/api/dnssd/dnssd_TAGS=$remoteDocs_kdelibs/dnssd $rootdir/../kdelibs/doc/api/kdesu/kdesu_TAGS=$remoteDocs_kdelibs/kdesu $rootdir/../kdelibs/doc/api/kdeui/kdeui_TAGS=$remoteDocs_kdelibs/kdeui $rootdir/../kdelibs/doc/api/kfile/kfile_TAGS=$remoteDocs_kdelibs/kfile $rootdir/../kdelibs/doc/api/khtml/khtml_TAGS=$remoteDocs_kdelibs/khtml $rootdir/../kdelibs/doc/api/kinit/kinit_TAGS=$remoteDocs_kdelibs/kinit $rootdir/../kdelibs/doc/api/kross/kross_TAGS=$remoteDocs_kdelibs/kross $rootdir/../kdelibs/doc/api/solid/solid_TAGS=$remoteDocs_kdelibs/solid $rootdir/../kdelibs/doc/api/kconf_update/kconf_update_TAGS=$remoteDocs_kdelibs/kconf_update $rootdir/../kdelibs/doc/api/kdoctools/kdoctools_TAGS=$remoteDocs_kdelibs/kdoctools $rootdir/../kdelibs/doc/api/kioslave/kioslave_TAGS=$remoteDocs_kdelibs/kioslave $rootdir/../kdelibs/doc/api/nepomuk/nepomuk_TAGS=$remoteDocs_kdelibs/nepomuk $rootdir/../kdelibs/doc/api/kimgio/kimgio_TAGS=$remoteDocs_kdelibs/kimgio $rootdir/../kdelibs/doc/api/kparts/kparts_TAGS=$remoteDocs_kdelibs/kparts $rootdir/../kdelibs/doc/api/kutils/kutils_TAGS=$remoteDocs_kdelibs/kutils $rootdir/../kdelibs/doc/api/kjsembed/kjsembed_TAGS=$remoteDocs_kdelibs/kjsembed $rootdir/../kdelibs/doc/api/kde3support/kde3support_TAGS=$remoteDocs_kdelibs/kde3support $rootdir/../kdelibs/doc/api/kde3support-kunittest/kde3support_kunittest_TAGS=$remoteDocs_kdelibs/kde3support-kunittest $rootdir/../kdelibs/doc/api/sonnet/sonnet_TAGS=$remoteDocs_kdelibs/sonnet $rootdir/../kdelibs/doc/api/threadweaver/threadweaver_TAGS=$remoteDocs_kdelibs/threadweaver";
0367     }
0368     if($rootdir=~/qt-copy/) { } elsif(-d "$rootdir/../qt-copy") {
0369         print FILE " $rootdir/../qt-copy/doc/api/gui/gui_TAGS=$remoteDocs_qt/gui/ $rootdir/../qt-copy/doc/api/corelib/corelib_TAGS=$remoteDocs_qt/corelib/ $rootdir/../qt-copy/doc/api/network/network_TAGS=$remoteDocs_qt/network/ $rootdir/../qt-copy/doc/api/opengl/opengl_TAGS=$remoteDocs_qt/opengl/ $rootdir/../qt-copy/doc/api/plugins/plugins_TAGS=$remoteDocs_qt/plugins/ $rootdir/../qt-copy/doc/api/sql/sql_TAGS=$remoteDocs_qt/sql/ $rootdir/../qt-copy/doc/api/svg/svg_TAGS=$remoteDocs_qt/svg/ $rootdir/../qt-copy/doc/api/xml/xml_TAGS=$remoteDocs_qt/xml/";
0370     }
0371     print FILE "\n";
0372     $tagfile="$name\_TAGS";
0373     $tagfile=~s/\//_/g;
0374     print FILE "GENERATE_TAGFILE=$basedir$output/$tagfile\n";
0375     #print FILE "ALLEXTERNALS=NO\n";
0376     #print FILE "EXTERNAL_GROUPS=YES\n";
0377     #print FILE "PERL_PATH=/usr/bin/perl\n";
0378     #print FILE "CLASS_DIAGRAMS=YES\n";
0379     #print FILE "HIDE_UNDOC_RELATIONS=YES\n";
0380     #print FILE "HAVE_DOT=NO\n";
0381     #print FILE "CLASS_GRAPH=YES\n";
0382     #print FILE "COLLABORATION_GRAPH=YES\n";
0383     #print FILE "GROUP_GRAPHS=YES\n";
0384     #print FILE "UML_LOOK=NO\n";
0385     #print FILE "TEMPLATE_RELATIONS=NO\n";
0386     #print FILE "INCLUDE_GRAPH=YES\n";
0387     #print FILE "INCLUDED_BY_GRAPH=YES\n";
0388     #print FILE "CALL_GRAPH=NO\n";
0389     #print FILE "GRAPHICAL_HIERARCHY=YES\n";
0390     #print FILE "DIRECTORY_GRAPH=YES\n";
0391     #print FILE "DOT_IMAGE_FORMAT=png\n";
0392     #print FILE "DOT_PATH=\n";
0393     #print FILE "DOTFILE_DIRS=\n";
0394     #print FILE "MAX_DOT_GRAPH_WIDTH=1024\n";
0395     #print FILE "MAX_DOT_GRAPH_HEIGHT=1024\n";
0396     #print FILE "MAX_DOT_GRAPH_DEPTH=0\n";
0397     #print FILE "DOT_TRANSPARENT=NO\n";
0398     #print FILE "DOT_MULTI_TARGETS=NO\n";
0399     #print FILE "GENERATE_LEGEND=YES\n";
0400     #print FILE "DOT_CLEANUP=YES\n";
0401     #print FILE "SEARCHENGINE=NO\n";
0402 
0403     # copy arguments from Mainpage.dox
0404     open INPUT, "Mainpage.dox";
0405     my $comment=0;
0406     foreach $in (<INPUT>) {
0407         if($in=~/\/\*/) { $comment=1; }
0408         if($in=~/\*\//) {$comment=0; next; }
0409         if($comment == 1) { next; }
0410         $in=~s/^\/\/\s*//;
0411         print FILE $in;
0412     }
0413 
0414     close FILE;
0415 }
0416 
0417 # writes the undocumented and error pages
0418 sub parseErrorLog() {
0419     my $dir = shift(@_);
0420     my $logfile = shift(@_);
0421     my $section = shift(@_);
0422     $undocumented=0;
0423     $error=0;
0424     open INPUT,"$dir/$logfile" || die "Can't read logfile '$dir/$logfile'\n";
0425     open UNDOC, ">$dir/undocumented.html";
0426     print UNDOC "<html><body><h2>$section: undocumented constructs found</h2><ul>Please consider typing some docs, or adding a \\internal tag to the headerfile as soon as you find out what these items do or mean. Thanks!\n";
0427     open ERRORS, ">$dir/errors.html";
0428     $inParameters=0;
0429     foreach $line (<INPUT>) {
0430         if($line=~/^\S*$/) {
0431             if($inParameters == 1) {
0432                 print UNDOC "</ul></li>\n";
0433                 $inParameters = 0;
0434             }
0435             next;
0436         }
0437         chomp($line);
0438         if($inParameters == 1) {
0439             print UNDOC "<li>$line</li>\n";
0440             next;
0441         }
0442         if($line=~m/^(.*):(\d+): (.*)$/) {
0443             my $file=$1;
0444             my $lineNumber=$2;
0445             my $message=$3;
0446             $file=~s/^$rootdir/$project/;
0447             if($message=~m/Warning: (Compound|Member) (.*) is not documented/) {
0448                 $undocumented++;
0449                 print UNDOC &printFile(1, $file);
0450                 print UNDOC "<li>$lineNumber: $1 $2</li>\n";
0451                 if($1 eq "Compound") {
0452                     &addClass("", $dir, $2, "Class");
0453                 }
0454                 next;
0455             }
0456             if($message=~m/Warning: The following parameters of (.*) are not documented:/) {
0457                 $inParameters = 1;
0458                 $undocumented++;
0459                 print UNDOC "<li>$lineNumber: parameters of $1<ul>\n";
0460                 next;
0461             }
0462             if($message=~m/Warning: argument `(.*)' of command \@param is not found in the argument list of /) {
0463                 $error++;
0464                 print ERRORS &printFile(2, $file);
0465                 print ERRORS "<li>$lineNumber: argument $1 is not present in argument list</li>\n";
0466                 next;
0467             }
0468             if($message=~m/Warning: Internal inconsistency: /) {
0469                 # ignore.
0470                 next;
0471             }
0472             if($message=~m/Duplicate anchor .* found/) {
0473                 # ignore.
0474                 next;
0475             }
0476             $error++;
0477             print ERRORS &printFile(2, $file);
0478             print ERRORS "<li>$lineNumber: $message\n";
0479             next;
0480         }
0481         $error++;
0482         print ERRORS "$line<br>\n";
0483     }
0484     close ERRORS;
0485     if($error == 0) {
0486         unlink "$dir/errors.html";
0487     }
0488     close UNDOC;
0489     if($undocumented == 0) {
0490         unlink "$dir/undocumented.html";
0491     }
0492     close INPUT;
0493 }
0494 
0495 sub printFile() {
0496     my $type = shift(@_);
0497     my $filename = shift(@_);
0498     if($filename eq ($type==1?$lastfile:$lasterrorfile)) {
0499         return "";
0500     }
0501     if($type==1) {
0502         $lastfile = $filename;
0503     } else {
0504         $lasterrorfile = $filename;
0505     }
0506     return $string."</ul><b>$filename</b><ul>";
0507 }
0508 
0509 sub addClass() {
0510     my $filename=shift(@_);
0511     my $section=shift(@_);
0512     my $className=shift(@_);
0513     my $classType = shift(@_);
0514 
0515     my $subsection=$section;
0516     $section=~s/\//-/g;
0517 
0518     if($classType eq "Class" && $className=~/^(.*)::/) {
0519         $subsection.="/$1";
0520         $className=~s/^.*:://;
0521     }
0522     my $string;
0523     my $target;
0524     if($filename eq "") {
0525         $string = "<a href=\"$section/undocumented.html\" title=\"$classType in $subsection\" target=\"main\"><font color=\"red\" target=\"main\">"
0526     } else {
0527         $string = "<a href=\"$section/$filename\" title=\"$classType in $subsection\" target=\"main\">";
0528     }
0529     if($classType eq "Namespace") { $string .="<i>"; }
0530     $string .= $className;
0531     if($classType eq "Namespace") { $string .= "</i>"; }
0532     if($filename eq "") {
0533         $string .="</font>"
0534     }
0535     $string .= "</a><br>\n";
0536 
0537     if($classType eq "Namespace") { $packages{$className} = $string; }
0538     $classes{$className}=$string;
0539 }