update_web_docs_svn 6.99 KB
Newer Older
1
#!/bin/sh
Daniel Berlin committed
2 3

# Generate HTML documentation from GCC Texinfo docs.
4 5 6 7
#
# If you want to run this on a machine different from gcc.gnu.org, you
# may need to adjust SVNROOT and WWWBASE below (or override them via the
# environment).
Daniel Berlin committed
8

9 10
set -e

Daniel Berlin committed
11 12 13 14 15 16
# Run this from /tmp.
SVNROOT=${SVNROOT:-"file:///svn/gcc"}
export SVNROOT

PATH=/usr/local/bin:$PATH

17 18 19 20
MANUALS="cpp
  cppinternals
  fastjar
  gcc
21
  gccgo
22 23 24 25
  gccint
  gcj
  gfortran
  gfc-internals
26
  gnat_ugn
27 28 29
  gnat-style
  gnat_rm
  libgomp
30
  libitm
31
  libquadmath
32 33 34
  libiberty
  porting"

35 36
CSS=/gcc.css

37
WWWBASE=${WWWBASE:-"/www/gcc/htdocs"}
Daniel Berlin committed
38 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 94 95
WWWBASE_PREFORMATTED=/www/gcc/htdocs-preformatted
WWWPREPROCESS='/www/gcc/bin/preprocess -r'

# Process options -rrelease and -ddirectory
RELEASE=""
SUBDIR=""

while [ $# -gt 0 ]; do
  case $1 in
    -r*)
      if [ -n "$RELEASE" ]; then
        echo "Multiple releases specified" >&2
	exit 1
      fi
      RELEASE="${1#-r}"
      if [ -z "$RELEASE" ]; then
	shift
	RELEASE="$1"
	if [ -z "$RELEASE" ]; then
	  echo "No release specified with -r" >&2
	  exit 1
	fi
      fi
      ;;
    -d*)
      if [ -n "$SUBDIR" ]; then
        echo "Multiple subdirectories specified" >&2
	exit 1
      fi
      SUBDIR="${1#-d}"
      if [ -z "$SUBDIR" ]; then
	shift
	SUBDIR="$1"
	if [ -z "$SUBDIR" ]; then
	  echo "No subdirectory specified with -d" >&2
	  exit 1
	fi
      fi
      ;;
    *)
      echo "Unknown argument \"$1\"" >&2
      exit 1
      ;;
  esac
  shift
done

if [ -n "$RELEASE" ] && [ -z "$SUBDIR" ]; then
  echo "Release specified without subdirectory" >&2
  exit 1
fi

if [ -z "$SUBDIR" ]; then
  DOCSDIR=$WWWBASE/onlinedocs
else
  DOCSDIR=$WWWBASE/onlinedocs/$SUBDIR
fi

96 97 98 99 100
if [ ! -d $WWWBASE ]; then
  echo "WWW base directory \"$WWWBASE\" does not exist." >&2
  exit 1
fi

Daniel Berlin committed
101 102
if [ ! -d $DOCSDIR ]; then
  mkdir $DOCSDIR
103
  chmod g+w $DOCSDIR
Daniel Berlin committed
104 105 106 107 108 109 110 111
fi

if [ -z "$RELEASE" ]; then
  RELEASE=trunk
fi

WORKDIR=/tmp/gcc-doc-update.$$

112 113
rm -rf $WORKDIR
mkdir $WORKDIR
Daniel Berlin committed
114 115
cd $WORKDIR
if [ "$RELEASE" = "trunk" ]; then
116
  svn -q export $SVNROOT/$RELEASE gcc
Daniel Berlin committed
117
else
118
  svn -q export $SVNROOT/tags/$RELEASE gcc
Daniel Berlin committed
119 120
fi

121 122
# Remove all unwanted files.  This is needed to avoid packaging all the
# sources instead of only documentation sources.
123 124 125 126
# Note that we have to preserve gcc/jit/docs since the jit docs are
# not .texi files (Makefile, .rst and .png), and the jit docs use
# include directives to pull in content from jit/jit-common.h and
# jit/notes.txt, so we have to preserve those also.
127 128 129 130 131
find gcc -type f \( -name '*.texi' \
  -o -path gcc/gcc/doc/install.texi2html \
  -o -path gcc/gcc/doc/include/texinfo.tex \
  -o -path gcc/gcc/BASE-VER \
  -o -path gcc/gcc/DEV-PHASE \
132
  -o -path "gcc/gcc/ada/doc/gnat_ugn/*.png" \
133 134 135
  -o -path "gcc/gcc/jit/docs/*" \
  -o -path "gcc/gcc/jit/jit-common.h" \
  -o -path "gcc/gcc/jit/notes.txt" \
136 137
  -o -print0 \) | xargs -0 rm -f

Daniel Berlin committed
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
# Build a tarball of the sources.
tar cf docs-sources.tar gcc

# The directory to pass to -I; this is the one with texinfo.tex
# and fdl.texi.
includedir=gcc/gcc/doc/include

# Generate gcc-vers.texi.
(
   echo "@set version-GCC $(cat gcc/gcc/BASE-VER)"
   if [ "$(cat gcc/gcc/DEV-PHASE)" = "experimental" ]; then
      echo "@set DEVELOPMENT"
   else
      echo "@clear DEVELOPMENT"
   fi
153
   echo "@set srcdir $WORKDIR/gcc/gcc"
154
   echo "@set VERSION_PACKAGE (GCC)"
155
   echo "@set BUGURL @uref{http://gcc.gnu.org/bugs/}"
Daniel Berlin committed
156 157
) > $includedir/gcc-vers.texi

158 159 160 161
# Generate libquadmath-vers.texi.
echo "@set BUGURL @uref{http://gcc.gnu.org/bugs/}" \
  > $includedir/libquadmath-vers.texi

Daniel Berlin committed
162 163 164 165
# Now convert the relevant files from texi to HTML, PDF and PostScript.
for file in $MANUALS; do
  filename=`find . -name ${file}.texi`
  if [ "${filename}" ]; then
166
    includes="-I ${includedir} -I `dirname ${filename}`"
167
    if [ "$file" = "gnat_ugn" ]; then
168
      includes="$includes -I gcc/gcc/ada -I gcc/gcc/ada/doc/gnat_ugn"
169
    fi
170
    makeinfo --html --css-ref $CSS $includes -o ${file} ${filename}
Daniel Berlin committed
171
    tar cf ${file}-html.tar ${file}/*.html
172 173
    texi2dvi $includes -o ${file}.dvi ${filename} </dev/null >/dev/null && dvips -o ${file}.ps ${file}.dvi
    texi2pdf $includes -o ${file}.pdf ${filename} </dev/null
Daniel Berlin committed
174 175 176 177
    mkdir -p $DOCSDIR/$file
  fi
done

178
# The jit is a special-case, using sphinx rather than texinfo.
179 180 181 182 183 184 185 186 187 188 189 190 191
# Specifically, the jit docs need sphinx 1.0 or later.
#
# The jit/docs Makefile uses the executable $(SPHINXBUILD),
# defaulting to "sphinx-build".
#
# sphinx is packaged in Fedora and EPEL 6 within "python-sphinx",
# and in openSUSE within "python-Sphinx".
#
# For EPEL6, python-sphinx is sphinx 0.6.6, which is missing various
# directives (e.g. ":c:macro:"), so we need the variant
# python-sphinx10 package.  The latter installs its executable as
#   /usr/bin/sphinx-1.0-build
# so we need to override SPHINXBUILD with this when invoking "make".
192
pushd gcc/gcc/jit/docs
193
make SPHINXBUILD=/usr/bin/sphinx-1.0-build html
194 195 196 197
popd
cp -a gcc/gcc/jit/docs/_build/html jit
mkdir -p $DOCSDIR/jit

198 199 200 201 202 203 204 205 206 207 208 209 210
# Work around makeinfo generated file names and references with
# "_002d" instead of "-".
find . -name '*.html' | while read f; do
  # Do this for the contents of each file.
  sed -i -e 's/_002d/-/g' "$f"
  # And rename files if necessary.
  ff=`echo $f | sed -e 's/_002d/-/g'`;
  if [ "$f" != "$ff" ]; then
    printf "Renaming %s to %s\n" "$f" "$ff" 
    mv "$f" "$ff"
  fi
done

Daniel Berlin committed
211 212 213 214 215 216 217 218 219 220 221
# Then build a gzipped copy of each of the resulting .html, .ps and .tar files
for file in */*.html *.ps *.pdf *.tar; do
  cat $file | gzip --best > $file.gz
done

# On the 15th of the month, wipe all the old files from the
# web server.
today=`date +%d`
if test $today = 15; then
  find $DOCSDIR -type f -maxdepth 1 -print | grep -v index.html | xargs rm
  for m in $MANUALS; do
222
    rm -f $DOCSDIR/$m/*.html $DOCSDIR/$m/*.html.gz
Daniel Berlin committed
223 224 225
  done
fi

226
# And copy the resulting files to the web server
Daniel Berlin committed
227
for file in */*.html *.ps *.pdf *.tar; do
228 229 230 231 232
  if [ -f $DOCSDIR/$file ]; then
    cat $DOCSDIR/$file | 
      sed -e '/^<meta name=generator/d' \
          -e '/^%DVIPSSource:/d' > file1
  fi
Daniel Berlin committed
233 234 235 236 237 238 239 240 241 242 243
  cat $file |
    sed -e '/^<meta name=generator/d' \
        -e '/^%DVIPSSource:/d' > file2
  if cmp -s file1 file2; then
    :
  else
    cp $file $DOCSDIR/$file
    cp $file.gz $DOCSDIR/$file.gz
  fi
done

244 245
# Again, the jit is a special case, with nested subdirectories
# below "jit", and with some non-HTML files (.png images from us,
246 247
# plus .css and .js supplied by sphinx, and source files, renamed
# from .rst to .txt).
248 249
find jit \
    -name "*.html" -o -name "*.png" \
250 251
    -o -name "*.css" -o -name "*.js" \
    -o -name "*.txt" |
252 253 254 255 256 257 258
  while read file ; do
    # Note that $file here will contain path fragments beginning
    # with "jit/", e.g. "jit/cp/topics/functions.html"
    mkdir -p $(dirname $DOCSDIR/$file)
    cp $file $DOCSDIR/$file
  done

Daniel Berlin committed
259 260
cd $DOCSDIR

261
# Finally, generate the installation documentation
Daniel Berlin committed
262 263 264 265 266 267 268
if [ "$RELEASE" = "trunk" ]; then
  SOURCEDIR=$WORKDIR/gcc/gcc/doc
  DESTDIR=$WWWBASE_PREFORMATTED/install
  export SOURCEDIR
  export DESTDIR
  $WORKDIR/gcc/gcc/doc/install.texi2html

269 270 271 272
  # Preprocess the entire web site, not just the install docs!
  echo "Invoking $WWWPREPROCESS"
  $WWWPREPROCESS |grep -v '^  Warning: Keeping'
fi
273

Daniel Berlin committed
274 275 276
# Clean up behind us.

rm -rf $WORKDIR