#!/usr/bin/perl
##########################################################################
#   orxonox - the future of 3D-vertical-scrollers                        #
#                                                                        #
#   Copyright (C) 2004 orx                                               #
#                                                                        #
#   This program is free software; you can redistribute it and/or modify #
#   it under the terms of the GNU General Public License as published by #
#   the Free Software Foundation; either version 2, or (at your option)  #
#   any later version.                                                   #
#                                                                        #
#   ### File Specific:                                                   #
#   main-programmer: Benjamin Grauer                                     #
#   co-programmer: ...                                                   #
#                                                                        #
#   This Script is for parsing single or multiple files for their        #
#   doxygeb-tags, and outputs the warnings and errors, but prehibits     #
#   the progress from being displayed.                                   #
#   Usage: ./orxodox.checkFiles.pl [fileName1 [fileName2 [...]]]         #
#   This script ignores file-extensions, and assumes that either         #
#   .h, .cc or both may exist, and searches for them.                    #
##########################################################################

$inputFiles = @ARGV[0];
$tempDoxFile = "TMPorxodox";

unless (open (DOXfile, ">$tempDoxFile"))
 {
   die("cannot open file\n");
 }

$processFiles = "";
$numberOfFiles = 0;
foreach $inputFile (@ARGV)
  {
    $tmpNumber = $numberOfFiles;

    $inputFile =~ s/\.cc$//;
    $inputFile =~ s/\.h$//;

    print "checking file $inputFile: ";

    $inputFile =~ s/$/\.h/;
    if (-e $inputFile)
      {
        $processFiles = "$processFiles $inputFile";
        $numberOfFiles++;
        print "found .h ";
      }
    $inputFile =~ s/\.h$/\.cc/;
    if (-e $inputFile)
      {
        $processFiles = "$processFiles $inputFile";
        $numberOfFiles++;
        print "...found .cc ";
      }
    if ($tmpNumber == $numberOfFiles) {print "no matching files found";}
    print "\n";
  }

if ($numberOfFiles == 0 && @ARGV !=0){
  die("no Files have been found\n");}

print "==================================================================\n";
print "Generating temporary Documentation File\n";
print "==================================================================\n";

print DOXfile "# THIS IS A DEFAULT FILE FOR DOXYGEN DOCUMENTATION";

printf DOXfile "# Doxyfile 1.3.7 \
## SAMPLE FILE (to be executed from orxonox/trunk/) \
 \
#--------------------------------------------------------------------------- \
# Project related configuration options \
#--------------------------------------------------------------------------- \
PROJECT_NAME           = orxonox \
PROJECT_NUMBER         = 1 \
OUTPUT_DIRECTORY       = doxygen/ \
CREATE_SUBDIRS         = YES \
OUTPUT_LANGUAGE        = English \
USE_WINDOWS_ENCODING   = YES \
BRIEF_MEMBER_DESC      = YES \
REPEAT_BRIEF           = YES \
ABBREVIATE_BRIEF       =  \
ALWAYS_DETAILED_SEC    = NO \
INLINE_INHERITED_MEMB  = NO \
FULL_PATH_NAMES        = NO \
STRIP_FROM_PATH        =  \
STRIP_FROM_INC_PATH    =  \
SHORT_NAMES            = NO \
JAVADOC_AUTOBRIEF      = NO \
MULTILINE_CPP_IS_BRIEF = NO \
DETAILS_AT_TOP         = NO \
INHERIT_DOCS           = YES \
DISTRIBUTE_GROUP_DOC   = NO \
TAB_SIZE               = 8 \
ALIASES                =  \
OPTIMIZE_OUTPUT_FOR_C  = NO \
OPTIMIZE_OUTPUT_JAVA   = NO \
SUBGROUPING            = YES \
#--------------------------------------------------------------------------- \
# Build related configuration options \
#--------------------------------------------------------------------------- \
EXTRACT_ALL            = NO \
EXTRACT_PRIVATE        = YES \
EXTRACT_STATIC         = YES \
EXTRACT_LOCAL_CLASSES  = YES \
EXTRACT_LOCAL_METHODS  = NO \
HIDE_UNDOC_MEMBERS     = NO \
HIDE_UNDOC_CLASSES     = NO \
HIDE_FRIEND_COMPOUNDS  = NO \
HIDE_IN_BODY_DOCS      = NO \
INTERNAL_DOCS          = NO \
CASE_SENSE_NAMES       = YES \
HIDE_SCOPE_NAMES       = NO \
SHOW_INCLUDE_FILES     = YES \
INLINE_INFO            = YES \
SORT_MEMBER_DOCS       = YES \
SORT_BRIEF_DOCS        = NO \
SORT_BY_SCOPE_NAME     = NO \
GENERATE_TODOLIST      = YES \
GENERATE_TESTLIST      = YES \
GENERATE_BUGLIST       = YES \
GENERATE_DEPRECATEDLIST= YES \
ENABLED_SECTIONS       =  \
MAX_INITIALIZER_LINES  = 30 \
SHOW_USED_FILES        = YES \
#--------------------------------------------------------------------------- \
# configuration options related to warning and progress messages \
#--------------------------------------------------------------------------- \
QUIET                  = YES \
WARNINGS               = YES \
WARN_IF_UNDOCUMENTED   = YES \
WARN_IF_DOC_ERROR      = YES \
WARN_FORMAT            = \"\$file:\$line: \$text\" \
WARN_LOGFILE           =  \
#--------------------------------------------------------------------------- \
# configuration options related to the input files \
#--------------------------------------------------------------------------- \
INPUT                  = $processFiles \
FILE_PATTERNS          =  \
RECURSIVE              = NO \
EXCLUDE                =  \
EXCLUDE_SYMLINKS       = NO \
EXCLUDE_PATTERNS       =  \
EXAMPLE_PATH           =  \
EXAMPLE_PATTERNS       =  \
EXAMPLE_RECURSIVE      = NO \
IMAGE_PATH             =  \
INPUT_FILTER           =  \
FILTER_SOURCE_FILES    = NO \
#--------------------------------------------------------------------------- \
# configuration options related to source browsing \
#--------------------------------------------------------------------------- \
SOURCE_BROWSER         = NO \
INLINE_SOURCES         = NO \
STRIP_CODE_COMMENTS    = YES \
REFERENCED_BY_RELATION = YES \
REFERENCES_RELATION    = YES \
VERBATIM_HEADERS       = YES \
#--------------------------------------------------------------------------- \
# configuration options related to the alphabetical class index \
#--------------------------------------------------------------------------- \
ALPHABETICAL_INDEX     = NO \
COLS_IN_ALPHA_INDEX    = 5 \
IGNORE_PREFIX          =  \
#--------------------------------------------------------------------------- \
# configuration options related to the HTML output \
#--------------------------------------------------------------------------- \
GENERATE_HTML          = YES \
HTML_OUTPUT            = html \
HTML_FILE_EXTENSION    = .html \
HTML_HEADER            =  \
HTML_FOOTER            =  \
HTML_STYLESHEET        =  \
HTML_ALIGN_MEMBERS     = YES \
GENERATE_HTMLHELP      = NO \
CHM_FILE               =  \
HHC_LOCATION           =  \
GENERATE_CHI           = NO \
BINARY_TOC             = NO \
TOC_EXPAND             = NO \
DISABLE_INDEX          = NO \
ENUM_VALUES_PER_LINE   = 4 \
GENERATE_TREEVIEW      = NO \
TREEVIEW_WIDTH         = 250 \
#--------------------------------------------------------------------------- \
# configuration options related to the LaTeX output \
#--------------------------------------------------------------------------- \
GENERATE_LATEX         = NO \
LATEX_OUTPUT           = latex \
LATEX_CMD_NAME         = latex \
MAKEINDEX_CMD_NAME     = makeindex \
COMPACT_LATEX          = NO \
PAPER_TYPE             = a4wide \
EXTRA_PACKAGES         =  \
LATEX_HEADER           =  \
PDF_HYPERLINKS         = NO \
USE_PDFLATEX           = NO \
LATEX_BATCHMODE        = NO \
LATEX_HIDE_INDICES     = NO \
#--------------------------------------------------------------------------- \
# configuration options related to the RTF output \
#--------------------------------------------------------------------------- \
GENERATE_RTF           = NO \
RTF_OUTPUT             = rtf \
COMPACT_RTF            = NO \
RTF_HYPERLINKS         = NO \
RTF_STYLESHEET_FILE    =  \
RTF_EXTENSIONS_FILE    =  \
#--------------------------------------------------------------------------- \
# configuration options related to the man page output \
#--------------------------------------------------------------------------- \
GENERATE_MAN           = NO \
MAN_OUTPUT             = man \
MAN_EXTENSION          = .3 \
MAN_LINKS              = NO \
#--------------------------------------------------------------------------- \
# configuration options related to the XML output \
#--------------------------------------------------------------------------- \
GENERATE_XML           = NO \
XML_OUTPUT             = xml \
XML_SCHEMA             =  \
XML_DTD                =  \
XML_PROGRAMLISTING     = YES \
#--------------------------------------------------------------------------- \
# configuration options for the AutoGen Definitions output \
#--------------------------------------------------------------------------- \
GENERATE_AUTOGEN_DEF   = NO \
#--------------------------------------------------------------------------- \
# configuration options related to the Perl module output \
#--------------------------------------------------------------------------- \
GENERATE_PERLMOD       = NO \
PERLMOD_LATEX          = NO \
PERLMOD_PRETTY         = YES \
PERLMOD_MAKEVAR_PREFIX =  \
#--------------------------------------------------------------------------- \
# Configuration options related to the preprocessor    \
#--------------------------------------------------------------------------- \
ENABLE_PREPROCESSING   = YES \
MACRO_EXPANSION        = NO \
EXPAND_ONLY_PREDEF     = NO \
SEARCH_INCLUDES        = YES \
INCLUDE_PATH           =  \
INCLUDE_FILE_PATTERNS  =  \
PREDEFINED             =  \
EXPAND_AS_DEFINED      =  \
SKIP_FUNCTION_MACROS   = YES \
#--------------------------------------------------------------------------- \
# Configuration::additions related to external references    \
#--------------------------------------------------------------------------- \
TAGFILES               =  \
GENERATE_TAGFILE       =  \
ALLEXTERNALS           = NO \
EXTERNAL_GROUPS        = YES \
PERL_PATH              = /usr/bin/perl \
#--------------------------------------------------------------------------- \
# Configuration options related to the dot tool    \
#--------------------------------------------------------------------------- \
CLASS_DIAGRAMS         = YES \
HIDE_UNDOC_RELATIONS   = YES \
HAVE_DOT               = NO \
CLASS_GRAPH            = YES \
COLLABORATION_GRAPH    = YES \
UML_LOOK               = NO \
TEMPLATE_RELATIONS     = NO \
INCLUDE_GRAPH          = YES \
INCLUDED_BY_GRAPH      = YES \
CALL_GRAPH             = NO \
GRAPHICAL_HIERARCHY    = YES \
DOT_IMAGE_FORMAT       = png \
DOT_PATH               =  \
DOTFILE_DIRS           =  \
MAX_DOT_GRAPH_WIDTH    = 1024 \
MAX_DOT_GRAPH_HEIGHT   = 1024 \
MAX_DOT_GRAPH_DEPTH    = 0 \
GENERATE_LEGEND        = YES \
DOT_CLEANUP            = YES \
#--------------------------------------------------------------------------- \
# Configuration::additions related to the search engine    \
#--------------------------------------------------------------------------- \
SEARCHENGINE           = NO \
 \
";

close DOXfile;

print "==================================================================\n";
print "Generating Documentation of $processFiles\n";
print "==================================================================\n";
exec("doxygen $tempDoxFile");


unlink $tmpDoxFile;
