run_doxygen 4.85 KB
Newer Older
1 2
#!/bin/sh

Phil Edwards committed
3
# Runs doxygen and massages the output files.
4 5 6 7
#
# Synopsis:  run_doxygen --mode=[user|maint]  v3srcdir  v3builddir
#
# Originally hacked together by Phil Edwards <pme@sources.redhat.com>
8

9

10
# We can check now that the version of doxygen is >= this variable.
11
DOXYVER=1.2.6
12 13 14
doxygen=

find_doxygen() {
15 16
    v_required=`echo $DOXYVER |  \
                awk -F. '{if(NF<3)$3=0;print ($1*100+$2)*100+$3}'`
17 18 19 20 21 22 23 24
    testing_version=
    # thank you goat book
    set `IFS=:; X="$PATH:/usr/local/bin:/bin:/usr/bin"; echo $X`
    for dir
    do
      # AC_EXEEXT could come in useful here
      maybedoxy="$dir/doxygen"
      test -f "$maybedoxy" && testing_version=`$maybedoxy --version`
25 26 27 28 29 30 31
      if test -n "$testing_version"; then
       v_found=`echo $testing_version |  \
                awk -F. '{if(NF<3)$3=0;print ($1*100+$2)*100+$3}'`
       if test $v_found -ge $v_required; then
         doxygen="$maybedoxy"
         break
       fi
32 33 34 35 36 37 38
      fi
    done
    if test -z "$doxygen"; then
        echo run_doxygen error:  Could not find Doxygen $DOXYVER in path. 1>&2
        print_usage
    fi
}
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

print_usage() {
    cat 1>&2 <<EOF
Usage:  run_doxygen --mode=MODE [<options>] <src-dir> <output-dir>
      MODE is one of:
          maint          Generate maintainers' documentation (lots more;
                             exposes non-public members, etc).
          user           Generate user-level library documentation.

      more options when i think of them

Note:  Requires Doxygen ${DOXYVER} or later; get it at
       ftp://ftp.stack.nl/pub/users/dimitri/doxygen-${DOXYVER}.src.tar.gz

EOF
    exit 1
}

parse_options() {
  for o
  do
    # Blatantly ripped from autoconf, er, I mean, "gratefully standing
    # on the shoulders of those giants who have gone before us."
    case "$o" in
      -*=*) arg=`echo "$o" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
      *) arg= ;;
    esac

    case "$o" in
      --mode=*)
        mode=$arg ;;
      --mode | --help | -h)
        print_usage ;;
      *)
        # this turned out to be a mess, maybe change to --srcdir=, etc
        if test $srcdir = unset; then
          srcdir=$o
        elif test $outdir = unset; then
          outdir=${o}/docs/doxygen
        else
          echo run_doxygen error:  Too many arguments 1>&2
          exit 1
        fi
        ;;
      esac
  done
}


# script begins here
mode=unset
srcdir=unset
outdir=unset

parse_options $*
94
find_doxygen
95 96 97 98 99 100 101 102 103 104 105 106 107 108

if test $srcdir = unset || test $outdir = unset || test $mode = unset; then
    # this could be better
    echo run_doxygen error:  You have not given enough information...! 1>&2
    print_usage
fi

case x"$mode" in
    xuser | xmaint)  ;;  # ochen khorosho
    *)
      echo run_doxygen error:  $mode is an invalid mode 1>&2
      exit 1 ;;
esac

109 110 111
rm -rf $outdir
mkdir -p $outdir
chmod u+w $outdir
112 113 114
(
  set -e
  cd $srcdir
115 116 117
  sed -e "s=@outdir@=${outdir}=" \
      -e "s=@srcdir@=${srcdir}=" \
      docs/doxygen/${mode}.cfg.in > ${outdir}/${mode}.cfg
118
  echo :: NOTE that this may take some time...
119 120
  echo $doxygen ${outdir}/${mode}.cfg
  $doxygen ${outdir}/${mode}.cfg
121
  echo :: Finished, exit code was $?
122 123
)

Phil Edwards committed
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
# Mess with the man pages.  We don't need documentation of the internal
# headers, since the man pages for those contain nothing useful anyhow.  The
# man pages for doxygen modules need to be renamed (or deleted).  And the
# generated #include lines need to be changed from the internal names to the
# standard ones (e.g., "#include <stl_tempbuf.h>" -> "#include <memory>").
#
# File names with embedded spaces (EVIL!) need to be....?  renamed or removed?
cd $outdir/man/man3 && {
echo :: Fixing up the man pages...

# requires GNU tools
find . -name "* *" -print0 | xargs -0 rm
rm *.h.3

# can leave SGIextensions.3 alone, it's an okay name
mv s20_3_1_base.3           Intro_functors.3
mv s20_3_2_arithmetic.3     Arithmetic_functors.3
mv s20_3_3_comparisons.3    Comparison_functors.3
mv s20_3_4_logical.3        Logical_functors.3
mv s20_3_5_negators.3       Negation_functors.3
mv s20_3_6_binder.3         Binder_functors.3
mv s20_3_7_adaptors.3       Func_ptr_functors.3
mv s20_3_8_memadaptors.3    Member_ptr_functors.3

# Standardize the displayed header names.  If anyone who knows perl cares
# enough to rewrite all this, feel free.  This only gets run once a century,
# and I'm off getting coffee then anyhow, so I didn't care enough to make
# this super-fast.
g++ ${srcdir}/docs/doxygen/stdheader.cc -o ./stdheader
problematic=`egrep -l '#include <.*_.*>' [a-z]*.3`
for f in $problematic; do
    # this is also slow, but safe and easy to debug
    oldh=`sed -n '/#include </s/.*<\(.*\)>.*/\1/p' $f`
    newh=`echo $oldh | ./stdheader`
    sed "s=${oldh}=${newh}=" $f > TEMP
    mv TEMP $f
done
rm stdheader

cp ${srcdir}/docs/doxygen/Intro.3 .
164

Phil Edwards committed
165 166 167
}

# all done
168 169 170 171
echo ::
echo :: Doxygen output begins with
echo :: ${outdir}/html_${mode}/index.html
echo ::
Phil Edwards committed
172 173
echo :: Man pages in ${outdir}/man
echo ::
174 175

exit 0
176

177 178
# vim:ts=4:et: