doxygen.sh
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:22k
源码类别:

OpenGL

开发平台:

Visual C++

  1. #! /bin/sh
  2. #
  3. # doxygen.sh Copyright (C) 2005 by Adriaan de Groot
  4. #            Based on some code from Doxyfile.am, among other things.
  5. # License:   GPL version 2.
  6. #            See file COPYING in kdelibs for details.
  7. echo "*** doxygen.sh"
  8. # Recurse handling is a little complicated, since normally
  9. # subdir (given on the command-line) processing doesn't recurse
  10. # but you can force it to do so.
  11. recurse=1
  12. recurse_given=NO
  13. use_modulename=1
  14. cleanup=YES
  15. while test -n "$1" ; do
  16. case "x$1" in
  17. "x--no-cleanup" )
  18. cleanup=NO
  19. ;;
  20. "x--no-recurse" )
  21. recurse=0
  22. recurse_given=YES
  23. ;;
  24. "x--recurse" )
  25. recurse=1
  26. recurse_given=YES
  27. ;;
  28. "x--no-modulename" )
  29. use_modulename=0
  30. ;;
  31. "x--modulename" )
  32. use_modulename=1
  33. ;;
  34. "x--help" )
  35. echo "doxygen.sh usage:"
  36. echo "doxygen.sh [--no-recurse] [--no-modulename] <srcdir> [<subdir>]"
  37. exit 2
  38. ;;
  39. x--doxdatadir=* )
  40. DOXDATA=`echo $1 | sed -e 's+--doxdatadir=++'`
  41. ;;
  42. x--installdir=*)
  43. PREFIX=`echo $1 | sed -e 's+--installdir=++'`
  44. ;;
  45. x--* )
  46. echo "Unknown option: $1"
  47. exit 1
  48. ;;
  49. * )
  50. top_srcdir="$1"
  51. break
  52. ;;
  53. esac
  54. shift
  55. done
  56. ### Sanity check the mandatory "top srcdir" argument.
  57. if test -z "$top_srcdir" ; then
  58. echo "Usage: doxygen.sh <top_srcdir>"
  59. exit 1
  60. fi
  61. if test ! -d "$top_srcdir" ; then
  62. echo "top_srcdir ($top_srcdir) is not a directory."
  63. exit 1
  64. fi
  65. ### Normalize top_srcdir so it is an absolute path.
  66. if expr "x$top_srcdir" : "x/" > /dev/null ; then
  67. # top_srcdir is absolute already
  68. :
  69. else
  70. top_srcdir=`cd "$top_srcdir" 2> /dev/null && pwd`
  71. if test ! -d "$top_srcdir" ; then
  72. echo "top_srcdir ($top_srcdir) is not a directory."
  73. exit 1
  74. fi
  75. fi
  76. ### Sanity check and guess QTDOCDIR.
  77. if test -z "$QTDOCDIR" ; then
  78. if test -z "$QTDIR" ; then
  79. for i in /usr/X11R6/share/doc/qt/html
  80. do
  81. QTDOCDIR="$i"
  82. test -d "$QTDOCDIR" && break
  83. done
  84. else
  85. for i in share/doc/qt/html doc/html
  86. do
  87. QTDOCDIR="$QTDIR/$i"
  88. test -d "$QTDOCDIR" && break
  89. done
  90. fi
  91. fi
  92. if test -z "$QTDOCDIR"  || test ! -d "$QTDOCDIR" ; then
  93. if test -z "$QTDOCDIR" ; then
  94. echo "* QTDOCDIR could not be guessed."
  95. else
  96. echo "* QTDOCDIR does not name a directory."
  97. fi
  98. if test -z "$QTDOCTAG" ; then
  99. echo "* QTDOCDIR set to """
  100. QTDOCDIR=""
  101. else
  102. echo "* But I'll use $QTDOCDIR anyway because of QTDOCTAG."
  103. fi
  104. fi
  105. ### Get the "top srcdir", also its name, and handle the case that subdir "."
  106. ### is given (which would be top_srcdir then, so it's equal to none-given
  107. ### but no recursion either).
  108. ###
  109. # top_srcdir="$1" # Already set by options processing
  110. module_name=`basename "$top_srcdir"`
  111. subdir="$2"
  112. if test "x." = "x$subdir" ; then
  113. subdir=""
  114. if test "x$recurse_given" = "xNO" ; then
  115. recurse=0
  116. fi
  117. fi
  118. if test "x" != "x$subdir" ; then
  119. # If no recurse option given explicitly, default to
  120. # no recurse when processing subdirs given on the command-line.
  121. if test "x$recurse_given" = "xNO" ; then
  122. recurse=0
  123. fi
  124. fi
  125. if test -z "$DOXDATA" || test ! -d "$DOXDATA" ; then
  126. if test -n "$DOXDATA" ; then
  127. echo "* $DOXDATA is '$DOXDATA' which does not name a directory"
  128. fi
  129. DOXDATA="$top_srcdir/doc/common"
  130. fi
  131. if test ! -d "$DOXDATA" ; then
  132. echo "* $DOXDATA does not name a directory ( or is unset ), tried "$DOXDATA""
  133. exit 1
  134. fi
  135. if test -n "$PREFIX" && test ! -d "$PREFIX" ; then
  136. echo "* $PREFIX does not name a directory, tried "$PREFIX""
  137. echo "* $PREFIX is disabled."
  138. PREFIX=""
  139. fi
  140. ### We need some values from top-level files, which
  141. ### are not preserved between invocations of this
  142. ### script, so factor it out for easy use.
  143. create_doxyfile_in() 
  144. {
  145. eval `grep 'VERSION="' "$top_srcdir/admin/cvs.sh"`
  146. echo "PROJECT_NUMBER = $VERSION" > Doxyfile.in
  147. grep '^KDE_INIT_DOXYGEN' "$top_srcdir/configure.in.in" | 
  148. sed -e 's+[^[]*[([^]]*)+PROJECT_NAME = "1"+' 
  149. -e 's+].*++' >> Doxyfile.in
  150. }
  151. apidoxdir="$module_name"-apidocs
  152. test "x$use_modulename" = "x0" && apidoxdir="apidocs"
  153. ### If we're making the top subdir, create the structure
  154. ### for the apidox and initialize it. Otherwise, just use the
  155. ### structure assumed to be there.
  156. if test -z "$subdir" ; then
  157. if test ! -d "$apidoxdir" ; then
  158. mkdir "$apidoxdir" > /dev/null 2>&1
  159. fi
  160. cd "$apidoxdir" > /dev/null 2>&1 || { 
  161. echo "Cannot create and cd into $apidoxdir"
  162. exit 1
  163. }
  164. test -f "Doxyfile.in" || create_doxyfile_in
  165. # Copy in logos and the like
  166. for i in "favicon.ico" "kde_gear_64.png"
  167. do
  168. cp "$DOXDATA/$i" . > /dev/null 2> /dev/null
  169. done
  170. for i in "$top_srcdir/doc/api/Dox-"*.png
  171. do
  172. T=`basename "$i" | sed -e 's+Dox-++'`
  173. test -f "$i" && cp "$i" "./$T" > /dev/null 2> /dev/null
  174. done
  175. top_builddir="."
  176. srcdir="$1"
  177. subdir="."
  178. else
  179. cd "$apidoxdir" > /dev/null 2>&1 || {
  180. echo "Cannot cd into $apidoxdir -- maybe you need to"
  181. echo "build the top-level dox first."
  182. exit 1
  183. }
  184. if test "x1" = "x$recurse" ; then
  185. # OK, so --recurse was requested
  186. if test ! -f "subdirs.top" ; then
  187. echo "* No subdirs.top available in the $apidoxdir."
  188. echo "* The --recurse option will be ignored."
  189. recurse=0
  190. fi
  191. fi
  192. fi
  193. ### Read a single line (TODO: support  continuations) from the Makefile.am.
  194. ### Used to extract variable assignments from it.
  195. extract_line()
  196. {
  197. file="$2" ; test -z "$file" && file="$srcdir/Makefile.am"
  198. pattern=`echo "$1" | tr + .`
  199. grep "^$1" "$file" | 
  200. sed -e "s+$pattern.*=s*++"
  201. }
  202. ### Handle the COMPILE_{FIRST,LAST,BEFORE,AFTER} part of Makefile.am
  203. ### in the toplevel. Copied from admin/cvs.sh. Licence presumed LGPL).
  204. create_subdirs()
  205. {
  206. echo "* Sorting top-level subdirs"
  207. dirs=
  208. idirs=
  209. if test -f "$top_srcdir/inst-apps"; then
  210.    idirs=`cat "$top_srcdir/"inst-apps`
  211. else
  212.    idirs=`cd "$top_srcdir" && ls -1 | sort`
  213. fi
  214. compilefirst=""
  215. compilelast=""
  216. if test -f "$top_srcdir/"Makefile.am.in ; then
  217. compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' "$top_srcdir/"Makefile.am.in | head -n 1`
  218. compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' "$top_srcdir/"Makefile.am.in | head -n 1`
  219. fi
  220. for i in $idirs; do
  221.     if test -f "$top_srcdir/$i"/Makefile.am; then
  222.        case " $compilefirst $compilelast " in
  223.          *" $i "*) ;;
  224.          *) dirs="$dirs $i"
  225.        esac
  226.     fi
  227. done
  228. : > ./_SUBDIRS
  229. for d in $compilefirst; do
  230.    echo $d >> ./_SUBDIRS
  231. done
  232. (for d in $dirs; do
  233.    list=""
  234.    if test -f "$top_srcdir/"Makefile.am.in ; then
  235.    list=`sed -ne "s#^COMPILE_BEFORE_$d""[ ]*=[ ]*##p" "$top_srcdir/"Makefile.am.in | head -n 1`
  236.    fi
  237.    for s in $list; do
  238.       echo $s $d
  239.    done
  240.    list=""
  241.    if test -f "$top_srcdir/"Makefile.am.in ; then
  242.    list=`sed -ne "s#^COMPILE_AFTER_$d""[ ]*=[ ]*##p" "$top_srcdir/"Makefile.am.in | head -n 1`
  243.    fi
  244.    for s in $list; do
  245.       echo $d $s
  246.    done
  247.    echo $d $d
  248. done ) | tsort >> ./_SUBDIRS
  249. for d in $compilelast; do
  250.    echo $d >> ./_SUBDIRS
  251. done
  252. test -r _SUBDIRS && mv _SUBDIRS subdirs.top || true
  253. }
  254. ### Add HTML header, footer, CSS tags to Doxyfile.
  255. ### Assumes $subdir is set. Argument is a string
  256. ### to stick in front of the file if needed.
  257. apidox_htmlfiles()
  258. {
  259. dox_header="$top_srcdir/doc/api/$1header.html"
  260. dox_footer="$top_srcdir/doc/api/$1footer.html"
  261. dox_css="$top_srcdir/doc/api/doxygen.css"
  262. test -f "$dox_header" || dox_header="$DOXDATA/$1header.html"
  263. test -f "$dox_footer" || dox_footer="$DOXDATA/$1footer.html"
  264. test -f "$dox_css" || dox_css="$DOXDATA/doxygen.css"
  265. echo "HTML_HEADER            = $dox_header" >> "$subdir/Doxyfile" ; 
  266. echo "HTML_FOOTER            = $dox_footer" >> "$subdir/Doxyfile" ; 
  267. echo "HTML_STYLESHEET        = $dox_css" >> "$subdir/Doxyfile"
  268. }
  269. apidox_specials()
  270. {
  271. line=`extract_line DOXYGEN_PROJECTNAME "$1"`
  272. test -n "$line" && echo "PROJECT_NAME = "$line"" >> "$2"
  273. }
  274. apidox_local()
  275. {
  276. for i in "$top_srcdir/doc/api/Doxyfile.local"
  277. do
  278. if test -f "$i" ; then
  279. cat "$i" >> "$subdir/Doxyfile"
  280. break
  281. fi
  282. done
  283. }
  284. ### Post-process HTML files by substituting in the menu files
  285. #
  286. # In non-top directories, both <!-- menu --> and <!-- gmenu -->
  287. # are calculated and replaced. Top directories get an empty <!-- menu -->
  288. # if any.
  289. doxyndex()
  290. {
  291. # Special case top-level to have an empty MENU.
  292. if test "x$subdir" = "x." ; then
  293. MENU=""
  294. htmldir="."
  295. htmltop="$top_builddir" # Just ., presumably
  296. echo "* Post-processing top-level files"
  297. else
  298. MENU="<ul>"
  299. htmldir="$subdir/html"
  300. htmltop="$top_builddir.." # top_builddir ends with /
  301. echo "* Post-processing files in $htmldir"
  302. # Build a little PHP file that maps class names to file
  303. # names, for the quick-class-picker functionality.
  304. # (The quick-class-picker is disabled due to styling
  305. # problems in IE & FF).
  306. (
  307. echo "<?php $map = array(";  
  308. for htmlfile in `find $htmldir/ -type f -name "class[A-Z]*.html" | grep -v "-members.html$"`; do
  309. classname=`echo $htmlfile | sed -e "s,.*/class\(.*\).html,1," -e "s,_1_1,::,g" -e "s,_01, ,g" -e "s,_4,>,g" -e "s+_00+,+g" -e "s+_3+<+g" | tr "[A-Z]" "[a-z]"`
  310. echo "  "$classname" => "$htmlfile","
  311. done | sort ; 
  312. echo ") ?>"
  313. ) > "$subdir/classmap.inc"
  314. # This is a list of pairs, with / separators so we can use
  315. # basename and dirname (a crude shell hack) to split them
  316. # into parts. For each, if the file part exists (as a html
  317. # file) tack it onto the MENU variable as a <li> with link.
  318. for i in "Main Page/index" 
  319. "Modules/modules" 
  320. "Namespace List/namespaces" 
  321. "Class Hierarchy/hierarchy" 
  322. "Alphabetical List/classes" 
  323. "Class List/annotated" 
  324. "File List/files" 
  325. "Directories/dirs" 
  326. "Namespace Members/namespacemembers" 
  327. "Class Members/functions" 
  328. "Related Pages/pages"
  329. do
  330. NAME=`dirname "$i"`
  331. FILE=`basename "$i"`
  332. test -f "$htmldir/$FILE.html" && MENU="$MENU<li><a href="$FILE.html">$NAME</a></li>"
  333. done
  334. MENU="$MENU</ul>"
  335. fi
  336. # Get the list of global Menu entries.
  337. GMENU=`cat subdirs | tr -d 'n'`
  338. PMENU=`grep '<!-- pmenu' "$htmldir/index.html" | sed -e 's+.*pmenu *++' -e 's+ *-->++' | awk '{ c=split($0,a,"/"); for (j=1; j<=c; j++) { printf " / <a href=""; if (j==c) { printf("."); } for (k=j; k<c; k++) { printf "../"; } if (j<c) { printf("../html/index.html"); } printf "">%s</a>n" , a[j]; } }' | tr -d 'n'`
  339. # Map the PHP file into HTML options so that
  340. # it can be substituted in for the quick-class-picker.
  341. CMENU=""
  342. # For now, leave the CMENU disabled
  343. CMENUBEGIN="<!--"
  344. CMENUEND="-->"
  345. if test "x$subdir" = "x." ; then
  346. # Disable CMENU on toplevel anyway
  347. CMENUBEGIN="<!--"
  348. CMENUEND="-->"
  349. else
  350. test -f "$subdir/classmap.inc" && 
  351. CMENU=`grep '=>' "$subdir/classmap.inc" | sed -e 's+"([^"]*)" => "'"$subdir/html/"'([^"]*)"+<option value="2">1</option>+' | tr -d 'n'`
  352. if test -f "$subdir/classmap.inc" && grep "=>" "$subdir/classmap.inc" > /dev/null 2>&1 ; then
  353. # Keep the menu, it's useful
  354. :
  355. else
  356. CMENUBEGIN="<!--"
  357. CMENUEND="-->"
  358. fi
  359. fi
  360. # Now substitute in the MENU in every file. This depends
  361. # on HTML_HEADER (ie. header.html) containing the
  362. # <!-- menu --> comment.
  363. for i in "$htmldir"/*.html
  364. do
  365. if test -f "$i" ; then
  366. sed -e "s+<!-- menu -->+$MENU+" 
  367. -e "s+<!-- gmenu -->+$GMENU+" 
  368. -e "s+<!-- pmenu.*-->+$PMENU+" 
  369. -e "s+<!-- cmenu.begin -->+$CMENUBEGIN+" 
  370. -e "s+<!-- cmenu.end -->+$CMENUEND+" 
  371. < "$i"  | sed -e "s+@topdir@+$htmltop+g" > "$i.new" && mv "$i.new" "$i"
  372. sed -e "s+<!-- cmenu -->+$CMENU+" < "$i" > "$i.new"
  373. test -s "$i.new" && mv "$i.new" "$i"
  374. fi
  375. done
  376. }
  377. ### Handle the Doxygen processing of a toplevel directory.
  378. apidox_toplevel()
  379. {
  380. echo ""
  381. echo "*** Creating API documentation main page for $module_name"
  382. echo "*"
  383. rm -f "Doxyfile"
  384. for i in "$top_srcdir/doc/api/Doxyfile.global" 
  385. "$top_srcdir/admin/Doxyfile.global" 
  386. "$DOXDATA/Doxyfile.global"
  387. do
  388. if test -f "$i" ; then
  389. cp "$i" Doxyfile
  390. break
  391. fi
  392. done
  393. if test ! -f "Doxyfile" ; then
  394. echo "* Cannot create Doxyfile."
  395. exit 1
  396. fi
  397. cat "$top_builddir/Doxyfile.in" >> Doxyfile
  398. echo "INPUT                  = $top_srcdir" >> Doxyfile
  399. echo "OUTPUT_DIRECTORY       = $top_builddir" >> Doxyfile ; 
  400. echo "FILE_PATTERNS          = *.dox" >> Doxyfile ; 
  401. echo "RECURSIVE              = NO" >> Doxyfile ; 
  402. echo "ALPHABETICAL_INDEX     = NO" >> Doxyfile ; 
  403. echo "HTML_OUTPUT            = ." >> Doxyfile ; 
  404. apidox_htmlfiles "main"
  405. # KDevelop has a top-level Makefile.am with settings.
  406. for i in "$top_srcdir/Makefile.am.in" "$top_srcdir/Makefile.am"
  407. do
  408. if test -f "$i" ; then
  409. grep '^DOXYGEN_SET_' "$i" | 
  410. sed -e 's+DOXYGEN_SET_++' -e "s+@topdir@+$top_srcdir+" >> Doxyfile
  411. apidox_specials "$srcdir/Makefile.am" "$subdir/Doxyfile"
  412. break
  413. fi
  414. done
  415. apidox_local
  416. doxygen Doxyfile
  417. ( cd "$top_srcdir" && grep -l '^include.*Doxyfile.am' `find . -name Makefile.am` ) | sed -e 's+/Makefile.am$++' -e 's+^./++' | sort > subdirs.in
  418. for i in `cat subdirs.in`
  419. do
  420. test "x." = "x$i" && continue;
  421. dir=`dirname "$i"`
  422. file=`basename "$i"`
  423. if test "x." = "x$dir" ; then
  424. dir=""
  425. else
  426. dir="$dir/"
  427. fi
  428. indent=`echo "$dir" | sed -e 's+[^/]*/+&nbsp;&nbsp;+g' | sed -e 's+&+\&+g'`
  429. entryname=`extract_line DOXYGEN_SET_PROJECT_NAME "$top_srcdir/$dir/$file/Makefile.am"`
  430. test -z "$entryname" && entryname="$file"
  431. if grep DOXYGEN_EMPTY "$top_srcdir/$dir/$file/Makefile.am" > /dev/null 2>&1 ; then
  432. echo "<li>$indent$file</li>"
  433. else
  434. echo "<li>$indent<a href="@topdir@/$dir$file/html/index.html">$entryname</a></li>"
  435. fi
  436. done > subdirs
  437. doxyndex
  438. }
  439. ### Handle the Doxygen processing of a non-toplevel directory.
  440. apidox_subdir()
  441. {
  442. echo ""
  443. echo "*** Creating apidox in $subdir"
  444. echo "*"
  445. rm -f "$subdir/Doxyfile"
  446. if test ! -d "$top_srcdir/$subdir" ; then
  447. echo "* No source (sub)directory $subdir"
  448. return
  449. fi
  450. for i in "$top_srcdir/doc/api/Doxyfile.global" 
  451. "$top_srcdir/admin/Doxyfile.global" 
  452. "$DOXDATA/Doxyfile.global"
  453. do
  454. if test -f "$i" ; then
  455. cp "$i" "$subdir/Doxyfile"
  456. break
  457. fi
  458. done
  459. test -f "Doxyfile.in" || create_doxyfile_in
  460. cat "Doxyfile.in" >> "$subdir/Doxyfile"
  461. echo "PROJECT_NAME           = "$subdir"" >> "$subdir/Doxyfile"
  462. echo "INPUT                  = $srcdir" >> "$subdir/Doxyfile"
  463. echo "OUTPUT_DIRECTORY       = ." >> "$subdir/Doxyfile"
  464. if grep -l "$subdir/" subdirs.in > /dev/null 2>&1 ; then
  465. echo "RECURSIVE              = NO" >> "$subdir/Doxyfile"
  466. fi
  467. echo "HTML_OUTPUT            = $subdir/html" >> "$subdir/Doxyfile"
  468. echo "GENERATE_TAGFILE       = $subdir/$subdirname.tag" >> "$subdir/Doxyfile"
  469. test -d "$top_srcdir/doc/api" && 
  470. echo "IMAGE_PATH             = $top_srcdir/doc/api" >> "$subdir/Doxyfile"
  471. apidox_htmlfiles ""
  472. # Makefile.ams may contain overrides to our settings,
  473. # so copy them in.
  474. grep '^DOXYGEN_SET_' "$srcdir/Makefile.am" | 
  475. sed -e 's+DOXYGEN_SET_++' >> "$subdir/Doxyfile"
  476. apidox_specials "$srcdir/Makefile.am" "$subdir/Doxyfile"
  477. excludes=`extract_line DOXYGEN_EXCLUDE`
  478. if test -n "$excludes"; then
  479. patterns=""
  480. dirs=""
  481. for item in `echo "$excludes"`; do
  482. if test -d "$top_srcdir/$subdir/$item"; then
  483. dirs="$dirs $top_srcdir/$subdir/$item/"
  484. else
  485. patterns="$patterns $item"
  486. fi
  487. done
  488. echo "EXCLUDE_PATTERNS      += $patterns" >> "$subdir/Doxyfile"
  489. echo "EXCLUDE               += $dirs" >> "$subdir/Doxyfile"
  490. fi
  491. echo "TAGFILES = \" >> "$subdir/Doxyfile"
  492. ## For now, don't support  continued references lines
  493. tags=`extract_line DOXYGEN_REFERENCES`
  494. for i in $tags qt ; do
  495. tagsubdir=`dirname $i` ; tag=`basename $i`
  496. tagpath=""
  497. not_found=""
  498. if test "x$tagsubdir" = "x." ; then
  499. tagsubdir=""
  500. else
  501. tagsubdir="$tagsubdir/"
  502. fi
  503. # Find location of tag file
  504. if test -f "$tagsubdir$tag/$tag.tag" ; then
  505. file="$tagsubdir$tag/$tag.tag"
  506. loc="$tagsubdir$tag/html"
  507. else
  508. # This checks for dox built with_out_ --no-modulename
  509. # in the same build dir as this dox run was started in.
  510. file=`ls -1 ../*-apidocs/"$tagsubdir$tag/$tag.tag" 2> /dev/null`
  511. if test -n "$file" ; then
  512. loc=`echo "$file" | sed -e "s/$tag.tag$/html/"`
  513. else
  514. # If the tag file doesn't exist yet, but should
  515. # because we have the right dirs here, queue
  516. # this directory for re-processing later.
  517. if test -d "$top_srcdir/$tagsubdir$tag" ; then
  518. echo "* Need to re-process $subdir for tag $i"
  519. echo "$subdir" >> "subdirs.later"
  520. else
  521. # Re-check in $PREFIX if needed.
  522. test -n "$PREFIX" && 
  523. file=`cd "$PREFIX" && 
  524. ls -1 *-apidocs/"$tagsubdir$tag/$tag.tag" 2> /dev/null`
  525. # If something is found, patch it up. The location must be
  526. # relative to the installed location of the dox and the
  527. # file must be absolute.
  528. if test -n "$file" ; then
  529. loc=`echo "../$file" | sed -e "s/$tag.tag$/html/"`
  530. file="$PREFIX/$file"
  531. echo "* Tags for $tagsubdir$tag will only work when installed."
  532. not_found="YES"
  533. fi
  534. fi
  535. fi
  536. fi
  537. if test "$tag" = "qt" ; then
  538. if test -z "$QTDOCDIR" ; then
  539. echo "  $file" >> "$subdir/Doxyfile"
  540. else
  541. if test -z "$file" ; then
  542. # Really no Qt tags
  543. echo "" >> "$subdir/Doxyfile"
  544. else
  545. echo "  $file=$QTDOCDIR" >> "$subdir/Doxyfile"
  546. fi
  547. fi
  548. else
  549. if test -n "$file"  ; then
  550. test -z "$not_found" && echo "* Found tag $file"
  551. echo "  $file=../$top_builddir$loc \" >> "$subdir/Doxyfile"
  552. fi
  553. fi
  554. done
  555. apidox_local
  556. if grep '^DOXYGEN_EMPTY' "$srcdir/Makefile.am" > /dev/null 2>&1 ; then
  557. # This directory is empty, so don't process it, but
  558. # *do* handle subdirs that might have dox.
  559. :
  560. else
  561. # Regular processing
  562. doxygen "$subdir/Doxyfile"
  563. doxyndex
  564. fi
  565. }
  566. ### Run a given subdir by setting up global variables first.
  567. do_subdir()
  568. {
  569. subdir=`echo "$1" | sed -e 's+/$++'`
  570. srcdir="$top_srcdir/$subdir"
  571. subdirname=`basename "$subdir"`
  572. mkdir -p "$subdir" 2> /dev/null
  573. if test ! -d "$subdir" ; then
  574. echo "Can't create dox subdirectory $subdir"
  575. return
  576. fi
  577. top_builddir=`echo "/$subdir" | sed -e 's+/[^/]*+../+g'`
  578. apidox_subdir
  579. }
  580. ### Create installdox-slow in the toplevel
  581. create_installdox()
  582. {
  583. # Fix up the installdox script so it accepts empty args
  584. #
  585. # This code is copied from the installdox generated by Doxygen,
  586. # copyright by Dimitri van Heesch and released under the GPL.
  587. # This does a _slow_ update of the dox, because it loops
  588. # over the given substitutions instead of assuming all the
  589. # needed ones are given.
  590. #
  591. cat <<EOF
  592. #! /usr/bin/env perl
  593. %subst = () ;
  594. $quiet   = 0;
  595. if (open(F,"search.cfg"))
  596. {
  597.   $_=<F> ; s/[ tn]*$//g ; $subst{"_doc"} = $_;
  598.   $_=<F> ; s/[ tn]*$//g ; $subst{"_cgi"} = $_;
  599. }
  600. while ( @ARGV ) {
  601.   $_ = shift @ARGV;
  602.   if ( s/^-// ) {
  603.     if ( /^l(.*)/ ) {
  604.       $v = ($1 eq "") ? shift @ARGV : $1;
  605.       ($v =~ //$/) || ($v .= "/");
  606.       $_ = $v;
  607.       if ( /(.+)@(.+)/ ) {
  608.           $subst{$1} = $2;
  609.       } else {
  610.         print STDERR "Argument $_ is invalid for option -ln";
  611.         &usage();
  612.       }
  613.     }
  614.     elsif ( /^q/ ) {
  615.       $quiet = 1;
  616.     }
  617.     elsif ( /^?|^h/ ) {
  618.       &usage();
  619.     }
  620.     else {
  621.       print STDERR "Illegal option -$_n";
  622.       &usage();
  623.     }
  624.   }
  625.   else {
  626.     push (@files, $_ );
  627.   }
  628. }
  629. if ( ! @files ) {
  630.   if (opendir(D,".")) {
  631.     foreach $file ( readdir(D) ) {
  632.       $match = ".html";
  633.       next if ( $file =~ /^..?$/ );
  634.       ($file =~ /$match/) && (push @files, $file);
  635.       ($file =~ "tree.js") && (push @files, $file);
  636.     }
  637.     closedir(D);
  638.   }
  639. }
  640. if ( ! @files ) {
  641.   print STDERR "Warning: No input files given and none found!n";
  642. }
  643. foreach $f (@files)
  644. {
  645.   if ( ! $quiet ) {
  646.     print "Editing: $f...n";
  647.   }
  648.   $oldf = $f;
  649.   $f   .= ".bak";
  650.   unless (rename $oldf,$f) {
  651.     print STDERR "Error: cannot rename file $oldfn";
  652.     exit 1;
  653.   }
  654.   if (open(F,"<$f")) {
  655.     unless (open(G,">$oldf")) {
  656.       print STDERR "Error: opening file $oldf for writingn";
  657.       exit 1;
  658.     }
  659.     if ($oldf ne "tree.js") {
  660.       while (<F>) {
  661. foreach $sub (keys %subst) {
  662.           s/doxygen="$sub:([^ "t><]*)" (href|src)="1/doxygen="$sub:$subst{$sub}" 2="$subst{$sub}/g;
  663.           print G "$_";
  664. }
  665.       }
  666.     }
  667.     else {
  668.       while (<F>) {
  669. foreach $sub (keys %subst) {
  670.           s/"$sub:([^ "t><]*)", "1/"$sub:$subst{$sub}" ,"$subst{$sub}/g;
  671.           print G "$_";
  672. }
  673.       }
  674.     }
  675.   }
  676.   else {
  677.     print STDERR "Warning file $f does not existn";
  678.   }
  679.   unlink $f;
  680. }
  681. sub usage {
  682.   print STDERR "Usage: installdox [options] [html-file [html-file ...]]n";
  683.   print STDERR "Options:n";
  684.   print STDERR "     -l tagfile@linkName   tag file + URL or directory n";
  685.   print STDERR "     -q                    Quiet modenn";
  686.   exit 1;
  687. }
  688. EOF
  689. }
  690. # Do only the subdirs that match the RE passed in as $1
  691. do_subdirs_re()
  692. {
  693. RE=`echo "$1" | sed -e 's+/$++'`
  694. # Here's a queue of dirs to re-process later when
  695. # all the rest have been done already.
  696. > subdirs.later
  697. # subdirs.top lists _all_ subdirs of top in the order they
  698. # should be handled; subdirs.in lists those dirs that contain
  699. # dox. So the intersection of the two is the ordered list
  700. # of top-level subdirs that contain dox.
  701. #
  702. # subdirs.top also doesn't contain ".", so that special
  703. # case can be ignored in the loop.
  704. (
  705. for i in `grep "^$RE" subdirs.top`
  706. do
  707. if test "x$i" = "x." ; then
  708. continue
  709. fi
  710. # Calculate intersection of this element and the
  711. # set of dox dirs.
  712. if grep "^$i$" subdirs.in > /dev/null 2>&1 ; then
  713. echo "$i"
  714. mkdir -p "$i" 2> /dev/null
  715. # Handle the subdirs of this one
  716. for j in `grep "$i/" subdirs.in`
  717. do
  718. echo "$j"
  719. mkdir -p "$j" 2> /dev/null
  720. done
  721. fi
  722. done
  723. # Now we still need to handle whatever is left
  724. for i in `cat subdirs.in`
  725. do
  726. test -d "$i" || echo "$i"
  727. mkdir -p "$i" 2> /dev/null
  728. done
  729. ) > subdirs.sort
  730. for i in `cat subdirs.sort`
  731. do
  732. do_subdir "$i"
  733. done
  734. if test -s "subdirs.later" ; then
  735. sort subdirs.later | uniq > subdirs.sort
  736. for i in `cat subdirs.sort`
  737. do
  738. : > subdirs.later
  739. echo "*** Reprocessing $i"
  740. do_subdir "$i"
  741. test -s "subdirs.later" && echo "* Some tag files were still not found."
  742. done
  743. fi
  744. }
  745. if test "x." = "x$top_builddir" ; then
  746. apidox_toplevel
  747. create_subdirs
  748. create_installdox > installdox-slow
  749. if test "x$recurse" = "x1" ; then
  750. if test "x$module_name" = "xkdelibs" ; then
  751. if test -z "$QTDOCTAG" && test -d "$QTDOCDIR" && 
  752. test ! -f "qt/qt.tag" ; then
  753. # Special case: create a qt tag file.
  754. echo "*** Creating a tag file for the Qt library:"
  755. mkdir qt
  756. doxytag -t qt/qt.tag "$QTDOCDIR" > /dev/null 2>&1
  757. fi
  758. fi
  759. if test -n "$QTDOCTAG" && test -r "$QTDOCTAG" ; then
  760. echo "*** Copying tag file for the Qt library:"
  761. mkdir qt
  762. cp "$QTDOCTAG" qt/qt.tag
  763. fi
  764. do_subdirs_re "."
  765. fi
  766. else
  767. if test "x$recurse" = "x1" ; then
  768. do_subdirs_re "$subdir"
  769. else
  770. do_subdir "$subdir"
  771. fi
  772. fi
  773. # At the end of a run, clean up stuff.
  774. if test "YES" = "$cleanup" ; then
  775. rm -f subdirs.in  subdirs.later subdirs.sort subdirs.top Doxyfile.in
  776. rm -f `find . -name Doxyfile`
  777. rm -f qt/qt.tag
  778. rmdir qt > /dev/null 2>&1
  779. fi
  780. exit 0