#!/bin/bash # Functions for the gendox script # # Gef, Aug 2001 #------------------------------------------------------------------------ # Set the doxygen output language from the system locale #------------------------------------------------------------------------ get_language() { if [ -n "$LANG" ] ; then local LANG=`locale | grep LANG | cut -d= -f2`; fi case "$LANG" in czech) OUPUTLANGUAGE="Czech"; ;; german) OUPUTLANGUAGE="German"; ;; spanish) OUPUTLANGUAGE="Spanish"; ;; finnish) OUPUTLANGUAGE="Finnish"; ;; french) OUPUTLANGUAGE="French"; ;; italian) OUPUTLANGUAGE="Italian"; ;; japanese*) OUPUTLANGUAGE="Japanese"; ;; dutch) OUPUTLANGUAGE="Dutch"; ;; swedish) OUPUTLANGUAGE="Swedish"; ;; *) OUPUTLANGUAGE="English"; ;; esac } #------------------------------------------------------------------------ # Output usage info & output help #------------------------------------------------------------------------ output_usage() { echo -e "Usage: $0 [] [-o ]"; return; } output_help() { output_usage; echo -e "\nOptions:"; echo -e " []"; echo -e " This is an optional parameter that specifies the directory, or multiple"; echo -e " directories from which to generate the documentation."; echo -e ""; echo -e " [-o ]"; echo -e " An optional parameter that specifies the output directory in which"; echo -e " to save the generated documentation."; echo -e ""; echo -e " -q or --quiet"; echo -e " Prevents the output of status information" echo -e "" echo -e " --help, or -h"; echo -e " Displays this information"; echo -e "" echo -e " -q or --quiet"; echo -e " Prevents the output of status information" echo -e "" echo -e " -k or --kill"; echo -e " kills running doxygen pids." echo -e "" echo -e "* Further information on using this script, can be found in README.doxygen"; echo -e "* in the current directory."; } #------------------------------------------------------------------------ # Set the target to what was passed on the command line #------------------------------------------------------------------------ parse_commandline() { # todo: # need to add the ability to check for an auto gen'd version # used for automatically generating new documentation for each commit # to the cvs server # funky bash shell array declare -a OPTLIST[$#]; if [ $OPTCOUNT == 0 ] ; then # No options on the command line so set the target list to the core TARGETCOUNT=0; OUTPUTDIR="../$(basename `pwd`)-doxygen"; else # put all the command line options into an array for f in $COMLINE ; do OPTLIST[$COUNTER]="$f"; let COUNTER++; done for (( COUNTER=0 ; $COUNTER < $OPTCOUNT; $[COUNTER++] )) ; do if [ "${OPTLIST[$COUNTER]}" == "--help" ] ; then # output usage information output_help; RETVAL=1; return; elif [ "${OPTLIST[$COUNTER]}" == "-h" ] ; then # output usage information output_help; RETVAL=1; return; fi case ${OPTLIST[$COUNTER]} in -q) QUIETMODE=1; ;; --quiet) QUIETMODE=1; ;; -k) KILLON=1; ;; --kill) KILLON=1; ;; -o) # look for the -o switch, and get the next command line option as the output dir if [ -z ${OPTLIST[$COUNTER + 1]} ] ; then [ $QUIETMODE -gt 0 ] || echo -e " ** Output switch used, but no output dir passed..."; [ $QUIETMODE -gt 0 ] || echo -e " ** Setting default output dir."; else let COUNTER++; OUTPUTDIR=${OPTLIST[$COUNTER]}; fi break; ;; **) # If the command line option is anything other that -o then assume it's a target # Check to make sure the target exists first... if [ -d ${OPTLIST[$COUNTER]} ] ; then TARGETLIST[$COUNTER]=${OPTLIST[$COUNTER]}; else output_usage; echo -e " ** Error: Non-existent directory specified as a target.\nExiting."; RETVAL=1; return; fi let TARGETCOUNT++; ;; esac done fi # if [ $OPTCOUNT == 0 ] ; if [ $TARGETCOUNT == 0 ] ; then TARGETCOUNT=4; TARGETLIST[0]="include"; TARGETLIST[1]="libs"; TARGETLIST[2]="radiant"; TARGETLIST[3]="plugins"; # Gef: outputdir for default core when no targets are passed on the command line # TTimo problem still there, if -o used on command line, don't override if [ -z $OUTPUTDIR ] ; then OUTPUTDIR="../$(basename `pwd`)-doxygen"; fi fi # Add trailing slash's to the lines that need them TARGETSTRING=`echo ${TARGETLIST[*]} | sed -e 's/" "/", "/'` [ $QUIETMODE -gt 0 ] || echo -ne " -> Set Input to: "; for (( COUNTER=0; COUNTER < $TARGETCOUNT ; $[COUNTER++] )) ; do if [ $COUNTER == $[TARGETCOUNT - 1] ] ; then [ $QUIETMODE -gt 0 ] || echo -ne "${TARGETLIST[$COUNTER]}\n"; TARGETLIST[$COUNTER]="${TARGETLIST[$COUNTER]}"; else [ $QUIETMODE -gt 0 ] || echo -ne "${TARGETLIST[$COUNTER]}, "; TARGETLIST[$COUNTER]="${TARGETLIST[$COUNTER]} \\"; fi done [ $QUIETMODE -gt 0 ] || echo -e " -> Set Output Dir to: $OUTPUTDIR"; return; } #------------------------------------------------------------------------ # Try to extract the version number # todo: find a better way to determine the version #------------------------------------------------------------------------ get_version() { VERSION=`grep PROJECT_NUMBER $DOXYCONFIG | grep -v \# | cut -d= -f2`; if [ -z $VERSION ] ; then if [ -f "./include/version.default" ] ; then # checks that we are in the right dir VERSION=`cat ./include/version.default`; else VERSION="(Unknown)"; fi fi return; } #------------------------------------------------------------------------ # Create a projectname from the tree name #------------------------------------------------------------------------ get_projectname() { PROJECTNAME=`grep PROJECT_NAME $DOXYCONFIG | grep -v \# | cut -d= -f2`; if [ -z $PROJECTNAME ] ; then # PROJECTNAME=`echo $TARGET | sed -e s/[^A-Za-z0-9]/!/ | cut -d! -f1`; PROJECTNAME="$(basename `pwd`)"; fi return; } #------------------------------------------------------------------------ # function to determine the path to the perl executable #------------------------------------------------------------------------ get_perlpath() { if [ -f "$DOXYCONFIG" ] ; then PERLPATH=`grep PERL_PATH $DOXYCONFIG | grep = | cut -d= -f2` fi if [ 'basename $PERLPATH &2>/dev/null' != "perl" ] ; then PERLPATH=`which perl 2>/dev/null | sed -e 's/perl//'`; elif [ 'basename $PERLPATH &2>/dev/null' != "perl" ] ; then PERLPATH=""; fi return; } #------------------------------------------------------------------------ # Function to determine the path to the dot executable #------------------------------------------------------------------------ get_dotpath() { if [ -f "$DOXYCONFIG" ] ; then DOTPATH=`grep DOT_PATH $DOXYCONFIG | grep = | cut -d= -f2` fi if [ -z $DOTPATH ] || [ `basename $DOTPATH 2>/dev/null` != "dot" ] ; then DOTPATH=`which dot 2>/dev/null`; fi if [ -z $DOTPATH ] || [ `basename $DOTPATH 2>/dev/null` != "dot" ] ; then DOTPATH=""; HAVEDOT="No"; echo -e "** Warning: dot not found."; [ $QUIETMODE -gt 0 ] || echo -e "** dot is part of the GraphVis package and is used to generate"; [ $QUIETMODE -gt 0 ] || echo -e "** dependancy/inheritance/include (etc) diagrams."; [ $QUIETMODE -gt 0 ] || echo -e "** It's suggested that you install the GraphVis package for those"; [ $QUIETMODE -gt 0 ] || echo -e "** features."; [ $QUIETMODE -gt 0 ] || echo -e "** GraphVis can be downloaded from www.graphvis.org"; else HAVEDOT="Yes"; DOTPATH=`echo $DOTPATH | sed -e 's/dot//'`; fi return; } #------------------------------------------------------------------------ # Function to move stuff around #------------------------------------------------------------------------ # eg: move the images into the output directory & the reference doc into the # html directory. # called after doxygen has finished generating documentation move_stuff() { [ $QUIETMODE -gt 0 ] || echo -ne " -> Move stuff.\n"; if [ ! -d $OUTPUTDIR ] ; then mkdir $OUTPUTDIR; fi if [ ! -d "$EXTRAS_PATH/images/" ] ; then [ $QUIETMODE -gt 0 ] || echo -e " - Looking for images."; [ $QUIETMODE -gt 0 ] || sleep 2; [ $QUIETMODE -gt 0 ] || echo -e " - I can't find the images..."; [ $QUIETMODE -gt 0 ] || sleep 1; [ $QUIETMODE -gt 0 ] || echo -e " - Where did you put the images!?"; [ $QUIETMODE -gt 0 ] || sleep 2; [ $QUIETMODE -gt 0 ] || echo -e " - They have to be here somewhere..."; [ $QUIETMODE -gt 0 ] || sleep 1; [ $QUIETMODE -gt 0 ] || echo -e " - Looking in /dev/null"; [ $QUIETMODE -gt 0 ] || sleep 3; [ $QUIETMODE -gt 0 ] || echo -e " - YOU FOOL, YOU DELETED THE IMAGES!!!"; [ $QUIETMODE -gt 0 ] || sleep 1; [ $QUIETMODE -gt 0 ] || echo -e " - I quit!"; RETVAL=666; else if [ ! -d $OUTPUTDIR/images ] ; then mkdir $OUTPUTDIR/images ; fi cp $EXTRAS_PATH/images/* $OUTPUTDIR/images/ ; RETVAL=0; fi return; } #------------------------------------------------------------------------ # clean_up() removes old versions of the documentation #------------------------------------------------------------------------ clean_up() { if [ -f $OUTPUTDIR/html/index.html ] ; then [ $QUIETMODE -gt 0 ] || echo -e " -> Trashing old dox."; rm -f $OUTPUTDIR/html/* fi return; } #------------------------------------------------------------------------ # Create a new genConf & Doxyfile #------------------------------------------------------------------------ gen_doxyconfig() { [ $QUIETMODE -gt 0 ] || echo -e " -> Generating DoxyConfig."; RETVAL=0; # first need to make sure there is a Doxyfile here if [ ! -f $DOXYFILE ] ; then # what now? (could generate one with 'doxygen -e Doxyfile') but it would be screwed. echo -e "No Doxyfile here..."; RETVAL=3; return; else # Create a new doxyfile with the @INCLUDE statement including the generated stuff echo "`cat $DOXYFILE | grep -v @INCLUDE`" > $NEWDOXYFILE echo "@INCLUDE = $CONFIG_OUTPUT" >> $NEWDOXYFILE fi # remove the old config file rm -f $CONFIG_OUTPUT # create a new one touch $CONFIG_OUTPUT echo "# Generated configuration - Do Not Edit." >> $CONFIG_OUTPUT; echo "# If you want to modify options, edit DoxyConfig and re-run genconf." >> $CONFIG_OUTPUT; echo -e "\n" >> $CONFIG_OUTPUT; echo -e "PROJECT_NAME=$PROJECTNAME" >> $CONFIG_OUTPUT; echo -e "PROJECT_NUMBER=$VERSION" >> $CONFIG_OUTPUT; echo -e "PERL_PATH=$PERLPATH" >> $CONFIG_OUTPUT; echo -e "HAVE_DOT=$HAVEDOT" >> $CONFIG_OUTPUT; echo -e "DOT_PATH=$DOTPATH" >> $CONFIG_OUTPUT; echo -e "OUTPUT_LANGUAGE=$OUTPUTLANGUAGE" >> $CONFIG_OUTPUT; echo -n "INPUT=" >> $CONFIG_OUTPUT; for (( COUNTER=0 ; COUNTER < $TARGETCOUNT; $[COUNTER++] )) ; do # echo -e "${TARGETLIST[$COUNTER]}"; echo -e "${TARGETLIST[$COUNTER]}" >> $CONFIG_OUTPUT done # echo -e "INPUT=$TARGET" >> $CONFIG_OUTPUT; echo -e "OUTPUT_DIRECTORY=$OUTPUTDIR" >> $CONFIG_OUTPUT; echo -e "\n" >> $CONFIG_OUTPUT; return; } #------------------------------------------------------------------------ # Build the reference page & index #------------------------------------------------------------------------ build_extra_html() { # file locations REF_OUT="$OUTPUTDIR/reference/index.html" INDEX_OUT="$OUTPUTDIR/index.html" # Make the output directory if it doesn't exist if [ ! -d $OUTPUTDIR/reference/ ] ; then [ $QUIETMODE -gt 0 ] || echo -e " -> Making reference directory"; mkdir $OUTPUTDIR/reference fi # cat the files together and output the result to each file [ $QUIETMODE -gt 0 ] || echo -e " -> Building reference document"; cat $EXTRAS_PATH/doxygen_reference_head.html $EXTRAS_PATH/reference1.html $EXTRAS_PATH/doxygen_reference_foot.html > $REF_OUT; if [ ! -d $OUTPUTDIR/example/ ] ; then [ $QUIETMODE -gt 0 ] || echo -e " -> Making example dir"; mkdir $OUTPUTDIR/example fi [ $QUIETMODE -gt 0 ] || echo -e " -> Moving example docs"; cp $EXTRAS_PATH/example/* $OUTPUTDIR/example/ cp $EXTRAS_PATH/doxygen_gtkradiant.css $OUTPUTDIR/example/ # Make a redirecting index.html cat $EXTRAS_PATH/doxygen_index.html > $INDEX_OUT; return; } #------------------------------------------------------------------------ # Execute doxygen #------------------------------------------------------------------------ run_doxygen() { # copy doxy_mainpage.h to the target directory # pipe it through sed to add generation time/date and username - $machine TEMPLOCATION=`echo $TARGETSTRING | cut -d' ' -f1`; if [ X"$USERNAME" == "X" ] ; then USERNAME=`whoami`; fi MACHINE=`uname -n`; # `uname -n` or `hostname` ?? cp $EXTRAS_PATH/doxy_mainpage.h temp.h cat temp.h | sed "s/+project+/$PROJECTNAME/" | sed "s|+target+|$TARGETSTRING|" | sed "s/+user+/$USERNAME/" | sed "s/+machine+/$MACHINE/" | sed "s/+date+/$(date '+%b %d %Y')/" > $TEMPLOCATION/doxy_mainpage.h ; rm -f temp.h # Start doxygen with the command "doxygen $DOXYFILE" [ $QUIETMODE -gt 0 ] || echo -e " -> Executing doxygen."; [ $QUIETMODE -gt 0 ] || echo -e "> doxygen $NEWDOXYFILE"; doxygen $NEWDOXYFILE RETVAL=$? # remove doxy_mainpage.h from the target directory rm -f $TEMPLOCATION/doxy_mainpage.h return; } #------------------------------------------------------------------------ # End.