1#!/bin/bash 2# Functions for the gendox script 3# 4# Gef, Aug 2001 5 6#------------------------------------------------------------------------ 7# Set the doxygen output language from the system locale 8#------------------------------------------------------------------------ 9get_language() { 10 if [ -n "$LANG" ] ; then 11 local LANG=`locale | grep LANG | cut -d= -f2`; 12 fi 13 case "$LANG" in 14 czech) 15 OUPUTLANGUAGE="Czech"; 16 ;; 17 german) 18 OUPUTLANGUAGE="German"; 19 ;; 20 spanish) 21 OUPUTLANGUAGE="Spanish"; 22 ;; 23 finnish) 24 OUPUTLANGUAGE="Finnish"; 25 ;; 26 french) 27 OUPUTLANGUAGE="French"; 28 ;; 29 italian) 30 OUPUTLANGUAGE="Italian"; 31 ;; 32 japanese*) 33 OUPUTLANGUAGE="Japanese"; 34 ;; 35 dutch) 36 OUPUTLANGUAGE="Dutch"; 37 ;; 38 swedish) 39 OUPUTLANGUAGE="Swedish"; 40 ;; 41 *) 42 OUPUTLANGUAGE="English"; 43 ;; 44 esac 45} 46 47#------------------------------------------------------------------------ 48# Output usage info & output help 49#------------------------------------------------------------------------ 50output_usage() { 51 echo -e "Usage: $0 [<target(s)>] [-o <output_directory>]"; 52 return; 53} 54 55output_help() { 56 output_usage; 57 echo -e "\nOptions:"; 58 echo -e " [<target(s)>]"; 59 echo -e " This is an optional parameter that specifies the directory, or multiple"; 60 echo -e " directories from which to generate the documentation."; 61 echo -e ""; 62 echo -e " [-o <output_directory>]"; 63 echo -e " An optional parameter that specifies the output directory in which"; 64 echo -e " to save the generated documentation."; 65 echo -e ""; 66 echo -e " -q or --quiet"; 67 echo -e " Prevents the output of status information" 68 echo -e "" 69 echo -e " --help, or -h"; 70 echo -e " Displays this information"; 71 echo -e "" 72 echo -e " -q or --quiet"; 73 echo -e " Prevents the output of status information" 74 echo -e "" 75 echo -e " -k or --kill"; 76 echo -e " kills running doxygen pids." 77 echo -e "" 78 echo -e "* Further information on using this script, can be found in README.doxygen"; 79 echo -e "* in the current directory."; 80 81} 82 83#------------------------------------------------------------------------ 84# Set the target to what was passed on the command line 85#------------------------------------------------------------------------ 86parse_commandline() { 87 # todo: 88 # need to add the ability to check for an auto gen'd version 89 # used for automatically generating new documentation for each commit 90 # to the cvs server 91 92 # funky bash shell array 93 declare -a OPTLIST[$#]; 94 95 if [ $OPTCOUNT == 0 ] ; then 96 # No options on the command line so set the target list to the core 97 TARGETCOUNT=0; 98 OUTPUTDIR="../$(basename `pwd`)-doxygen"; 99 else 100 # put all the command line options into an array 101 for f in $COMLINE ; do 102 OPTLIST[$COUNTER]="$f"; 103 let COUNTER++; 104 done 105 106 for (( COUNTER=0 ; $COUNTER < $OPTCOUNT; $[COUNTER++] )) ; do 107 if [ "${OPTLIST[$COUNTER]}" == "--help" ] ; then 108 # output usage information 109 output_help; 110 RETVAL=1; 111 return; 112 elif [ "${OPTLIST[$COUNTER]}" == "-h" ] ; then 113 # output usage information 114 output_help; 115 RETVAL=1; 116 return; 117 fi 118 119 case ${OPTLIST[$COUNTER]} in 120 -q) 121 QUIETMODE=1; 122 ;; 123 --quiet) 124 QUIETMODE=1; 125 ;; 126 -k) 127 KILLON=1; 128 ;; 129 --kill) 130 KILLON=1; 131 ;; 132 -o) 133 # look for the -o switch, and get the next command line option as the output dir 134 if [ -z ${OPTLIST[$COUNTER + 1]} ] ; then 135 [ $QUIETMODE -gt 0 ] || echo -e " ** Output switch used, but no output dir passed..."; 136 [ $QUIETMODE -gt 0 ] || echo -e " ** Setting default output dir."; 137 else 138 let COUNTER++; 139 OUTPUTDIR=${OPTLIST[$COUNTER]}; 140 fi 141 break; 142 ;; 143 **) 144 # If the command line option is anything other that -o then assume it's a target 145 # Check to make sure the target exists first... 146 if [ -d ${OPTLIST[$COUNTER]} ] ; then 147 TARGETLIST[$COUNTER]=${OPTLIST[$COUNTER]}; 148 else 149 output_usage; 150 echo -e " ** Error: Non-existent directory specified as a target.\nExiting."; 151 RETVAL=1; 152 return; 153 fi 154 let TARGETCOUNT++; 155 ;; 156 esac 157 done 158 159 fi # if [ $OPTCOUNT == 0 ] ; 160 161 if [ $TARGETCOUNT == 0 ] ; then 162 TARGETCOUNT=4; 163 TARGETLIST[0]="include"; 164 TARGETLIST[1]="libs"; 165 TARGETLIST[2]="radiant"; 166 TARGETLIST[3]="plugins"; 167 # Gef: outputdir for default core when no targets are passed on the command line 168 # TTimo problem still there, if -o used on command line, don't override 169 if [ -z $OUTPUTDIR ] ; then 170 OUTPUTDIR="../$(basename `pwd`)-doxygen"; 171 fi 172 fi 173 174 # Add trailing slash's to the lines that need them 175 TARGETSTRING=`echo ${TARGETLIST[*]} | sed -e 's/" "/", "/'` 176 [ $QUIETMODE -gt 0 ] || echo -ne " -> Set Input to: "; 177 for (( COUNTER=0; COUNTER < $TARGETCOUNT ; $[COUNTER++] )) ; do 178 if [ $COUNTER == $[TARGETCOUNT - 1] ] ; then 179 [ $QUIETMODE -gt 0 ] || echo -ne "${TARGETLIST[$COUNTER]}\n"; 180 TARGETLIST[$COUNTER]="${TARGETLIST[$COUNTER]}"; 181 else 182 [ $QUIETMODE -gt 0 ] || echo -ne "${TARGETLIST[$COUNTER]}, "; 183 TARGETLIST[$COUNTER]="${TARGETLIST[$COUNTER]} \\"; 184 fi 185 done 186 [ $QUIETMODE -gt 0 ] || echo -e " -> Set Output Dir to: $OUTPUTDIR"; 187 return; 188} 189 190#------------------------------------------------------------------------ 191# Try to extract the version number 192# todo: find a better way to determine the version 193#------------------------------------------------------------------------ 194get_version() { 195 VERSION=`grep PROJECT_NUMBER $DOXYCONFIG | grep -v \# | cut -d= -f2`; 196 if [ -z $VERSION ] ; then 197 if [ -f "./include/version.default" ] ; then # checks that we are in the right dir 198 VERSION=`cat ./include/version.default`; 199 else 200 VERSION="(Unknown)"; 201 fi 202 fi 203 return; 204} 205 206#------------------------------------------------------------------------ 207# Create a projectname from the tree name 208#------------------------------------------------------------------------ 209get_projectname() { 210 PROJECTNAME=`grep PROJECT_NAME $DOXYCONFIG | grep -v \# | cut -d= -f2`; 211 if [ -z $PROJECTNAME ] ; then 212 # PROJECTNAME=`echo $TARGET | sed -e s/[^A-Za-z0-9]/!/ | cut -d! -f1`; 213 PROJECTNAME="$(basename `pwd`)"; 214 fi 215 return; 216} 217 218#------------------------------------------------------------------------ 219# function to determine the path to the perl executable 220#------------------------------------------------------------------------ 221get_perlpath() { 222 if [ -f "$DOXYCONFIG" ] ; then 223 PERLPATH=`grep PERL_PATH $DOXYCONFIG | grep = | cut -d= -f2` 224 fi 225 226 if [ 'basename $PERLPATH &2>/dev/null' != "perl" ] ; then 227 PERLPATH=`which perl 2>/dev/null | sed -e 's/perl//'`; 228 elif [ 'basename $PERLPATH &2>/dev/null' != "perl" ] ; then 229 PERLPATH=""; 230 fi 231 return; 232} 233 234#------------------------------------------------------------------------ 235# Function to determine the path to the dot executable 236#------------------------------------------------------------------------ 237get_dotpath() { 238 if [ -f "$DOXYCONFIG" ] ; then 239 DOTPATH=`grep DOT_PATH $DOXYCONFIG | grep = | cut -d= -f2` 240 fi 241 242 if [ -z $DOTPATH ] || [ `basename $DOTPATH 2>/dev/null` != "dot" ] ; then 243 DOTPATH=`which dot 2>/dev/null`; 244 fi 245 246 if [ -z $DOTPATH ] || [ `basename $DOTPATH 2>/dev/null` != "dot" ] ; then 247 DOTPATH=""; 248 HAVEDOT="No"; 249 echo -e "** Warning: dot not found."; 250 [ $QUIETMODE -gt 0 ] || echo -e "** dot is part of the GraphVis package and is used to generate"; 251 [ $QUIETMODE -gt 0 ] || echo -e "** dependancy/inheritance/include (etc) diagrams."; 252 [ $QUIETMODE -gt 0 ] || echo -e "** It's suggested that you install the GraphVis package for those"; 253 [ $QUIETMODE -gt 0 ] || echo -e "** features."; 254 [ $QUIETMODE -gt 0 ] || echo -e "** GraphVis can be downloaded from www.graphvis.org"; 255 else 256 HAVEDOT="Yes"; 257 DOTPATH=`echo $DOTPATH | sed -e 's/dot//'`; 258 fi 259 260 return; 261} 262 263#------------------------------------------------------------------------ 264# Function to move stuff around 265#------------------------------------------------------------------------ 266# eg: move the images into the output directory & the reference doc into the 267# html directory. 268# called after doxygen has finished generating documentation 269move_stuff() { 270 [ $QUIETMODE -gt 0 ] || echo -ne " -> Move stuff.\n"; 271 if [ ! -d $OUTPUTDIR ] ; then 272 mkdir $OUTPUTDIR; 273 fi 274 275 if [ ! -d "$EXTRAS_PATH/images/" ] ; then 276 [ $QUIETMODE -gt 0 ] || echo -e " - Looking for images."; 277 [ $QUIETMODE -gt 0 ] || sleep 2; 278 [ $QUIETMODE -gt 0 ] || echo -e " - I can't find the images..."; 279 [ $QUIETMODE -gt 0 ] || sleep 1; 280 [ $QUIETMODE -gt 0 ] || echo -e " - Where did you put the images!?"; 281 [ $QUIETMODE -gt 0 ] || sleep 2; 282 [ $QUIETMODE -gt 0 ] || echo -e " - They have to be here somewhere..."; 283 [ $QUIETMODE -gt 0 ] || sleep 1; 284 [ $QUIETMODE -gt 0 ] || echo -e " - Looking in /dev/null"; 285 [ $QUIETMODE -gt 0 ] || sleep 3; 286 [ $QUIETMODE -gt 0 ] || echo -e " - YOU FOOL, YOU DELETED THE IMAGES!!!"; 287 [ $QUIETMODE -gt 0 ] || sleep 1; 288 [ $QUIETMODE -gt 0 ] || echo -e " - I quit!"; 289 RETVAL=666; 290 else 291 if [ ! -d $OUTPUTDIR/images ] ; then 292 mkdir $OUTPUTDIR/images ; 293 fi 294 cp $EXTRAS_PATH/images/* $OUTPUTDIR/images/ ; 295 RETVAL=0; 296 fi 297 return; 298} 299 300#------------------------------------------------------------------------ 301# clean_up() removes old versions of the documentation 302#------------------------------------------------------------------------ 303clean_up() { 304 if [ -f $OUTPUTDIR/html/index.html ] ; then 305 [ $QUIETMODE -gt 0 ] || echo -e " -> Trashing old dox."; 306 rm -f $OUTPUTDIR/html/* 307 fi 308 return; 309} 310 311#------------------------------------------------------------------------ 312# Create a new genConf & Doxyfile 313#------------------------------------------------------------------------ 314gen_doxyconfig() { 315 [ $QUIETMODE -gt 0 ] || echo -e " -> Generating DoxyConfig."; 316 RETVAL=0; 317 # first need to make sure there is a Doxyfile here 318 if [ ! -f $DOXYFILE ] ; then 319 # what now? (could generate one with 'doxygen -e Doxyfile') but it would be screwed. 320 echo -e "No Doxyfile here..."; 321 RETVAL=3; 322 return; 323 else 324 # Create a new doxyfile with the @INCLUDE statement including the generated stuff 325 echo "`cat $DOXYFILE | grep -v @INCLUDE`" > $NEWDOXYFILE 326 echo "@INCLUDE = $CONFIG_OUTPUT" >> $NEWDOXYFILE 327 fi 328 329 # remove the old config file 330 rm -f $CONFIG_OUTPUT 331 332 # create a new one 333 touch $CONFIG_OUTPUT 334 echo "# Generated configuration - Do Not Edit." >> $CONFIG_OUTPUT; 335 echo "# If you want to modify options, edit DoxyConfig and re-run genconf." >> $CONFIG_OUTPUT; 336 echo -e "\n" >> $CONFIG_OUTPUT; 337 echo -e "PROJECT_NAME=$PROJECTNAME" >> $CONFIG_OUTPUT; 338 echo -e "PROJECT_NUMBER=$VERSION" >> $CONFIG_OUTPUT; 339 echo -e "PERL_PATH=$PERLPATH" >> $CONFIG_OUTPUT; 340 echo -e "HAVE_DOT=$HAVEDOT" >> $CONFIG_OUTPUT; 341 echo -e "DOT_PATH=$DOTPATH" >> $CONFIG_OUTPUT; 342 echo -e "OUTPUT_LANGUAGE=$OUTPUTLANGUAGE" >> $CONFIG_OUTPUT; 343 344 echo -n "INPUT=" >> $CONFIG_OUTPUT; 345 for (( COUNTER=0 ; COUNTER < $TARGETCOUNT; $[COUNTER++] )) ; do 346 # echo -e "${TARGETLIST[$COUNTER]}"; 347 echo -e "${TARGETLIST[$COUNTER]}" >> $CONFIG_OUTPUT 348 done 349 # echo -e "INPUT=$TARGET" >> $CONFIG_OUTPUT; 350 351 echo -e "OUTPUT_DIRECTORY=$OUTPUTDIR" >> $CONFIG_OUTPUT; 352 echo -e "\n" >> $CONFIG_OUTPUT; 353 return; 354} 355 356#------------------------------------------------------------------------ 357# Build the reference page & index 358#------------------------------------------------------------------------ 359build_extra_html() { 360 # file locations 361 REF_OUT="$OUTPUTDIR/reference/index.html" 362 INDEX_OUT="$OUTPUTDIR/index.html" 363 364 # Make the output directory if it doesn't exist 365 if [ ! -d $OUTPUTDIR/reference/ ] ; then 366 [ $QUIETMODE -gt 0 ] || echo -e " -> Making reference directory"; 367 mkdir $OUTPUTDIR/reference 368 fi 369 370 # cat the files together and output the result to each file 371 [ $QUIETMODE -gt 0 ] || echo -e " -> Building reference document"; 372 cat $EXTRAS_PATH/doxygen_reference_head.html $EXTRAS_PATH/reference1.html $EXTRAS_PATH/doxygen_reference_foot.html > $REF_OUT; 373 374 if [ ! -d $OUTPUTDIR/example/ ] ; then 375 [ $QUIETMODE -gt 0 ] || echo -e " -> Making example dir"; 376 mkdir $OUTPUTDIR/example 377 fi 378 [ $QUIETMODE -gt 0 ] || echo -e " -> Moving example docs"; 379 cp $EXTRAS_PATH/example/* $OUTPUTDIR/example/ 380 cp $EXTRAS_PATH/doxygen_gtkradiant.css $OUTPUTDIR/example/ 381 382 # Make a redirecting index.html 383 cat $EXTRAS_PATH/doxygen_index.html > $INDEX_OUT; 384 return; 385} 386 387#------------------------------------------------------------------------ 388# Execute doxygen 389#------------------------------------------------------------------------ 390run_doxygen() { 391 # copy doxy_mainpage.h to the target directory 392 # pipe it through sed to add generation time/date and username - $machine 393 TEMPLOCATION=`echo $TARGETSTRING | cut -d' ' -f1`; 394 if [ X"$USERNAME" == "X" ] ; then 395 USERNAME=`whoami`; 396 fi 397 MACHINE=`uname -n`; # `uname -n` or `hostname` ?? 398 cp $EXTRAS_PATH/doxy_mainpage.h temp.h 399 cat temp.h | 400 sed "s/+project+/$PROJECTNAME/" | 401 sed "s|+target+|$TARGETSTRING|" | 402 sed "s/+user+/$USERNAME/" | 403 sed "s/+machine+/$MACHINE/" | 404 sed "s/+date+/$(date '+%b %d %Y')/" > $TEMPLOCATION/doxy_mainpage.h ; 405 406 rm -f temp.h 407 408 # Start doxygen with the command "doxygen $DOXYFILE" 409 [ $QUIETMODE -gt 0 ] || echo -e " -> Executing doxygen."; 410 [ $QUIETMODE -gt 0 ] || echo -e "> doxygen $NEWDOXYFILE"; 411 doxygen $NEWDOXYFILE 412 RETVAL=$? 413 414 # remove doxy_mainpage.h from the target directory 415 rm -f $TEMPLOCATION/doxy_mainpage.h 416 return; 417} 418 419#------------------------------------------------------------------------ 420# End. 421 422