xref: /netbsd-src/external/gpl3/gcc.old/dist/maintainer-scripts/update_web_docs_svn (revision 1debfc3d3fad8af6f31804271c18e67f77b4d718)
1*1debfc3dSmrg#!/bin/sh
2*1debfc3dSmrg
3*1debfc3dSmrg# Generate HTML documentation from GCC Texinfo docs.
4*1debfc3dSmrg#
5*1debfc3dSmrg# If you want to run this on a machine different from gcc.gnu.org, you
6*1debfc3dSmrg# may need to adjust SVNROOT and WWWBASE below (or override them via the
7*1debfc3dSmrg# environment).
8*1debfc3dSmrg
9*1debfc3dSmrgset -e
10*1debfc3dSmrg
11*1debfc3dSmrg# Run this from /tmp.
12*1debfc3dSmrgSVNROOT=${SVNROOT:-"file:///svn/gcc"}
13*1debfc3dSmrgexport SVNROOT
14*1debfc3dSmrg
15*1debfc3dSmrgPATH=/usr/local/bin:$PATH
16*1debfc3dSmrg
17*1debfc3dSmrgMANUALS="cpp
18*1debfc3dSmrg  cppinternals
19*1debfc3dSmrg  fastjar
20*1debfc3dSmrg  gcc
21*1debfc3dSmrg  gccgo
22*1debfc3dSmrg  gccint
23*1debfc3dSmrg  gcj
24*1debfc3dSmrg  gfortran
25*1debfc3dSmrg  gfc-internals
26*1debfc3dSmrg  gnat_ugn
27*1debfc3dSmrg  gnat-style
28*1debfc3dSmrg  gnat_rm
29*1debfc3dSmrg  libgomp
30*1debfc3dSmrg  libitm
31*1debfc3dSmrg  libquadmath
32*1debfc3dSmrg  libiberty
33*1debfc3dSmrg  porting"
34*1debfc3dSmrg
35*1debfc3dSmrgCSS=/gcc.css
36*1debfc3dSmrg
37*1debfc3dSmrgWWWBASE=${WWWBASE:-"/www/gcc/htdocs"}
38*1debfc3dSmrgWWWBASE_PREFORMATTED=/www/gcc/htdocs-preformatted
39*1debfc3dSmrgWWWPREPROCESS='/www/gcc/bin/preprocess -r'
40*1debfc3dSmrg
41*1debfc3dSmrg# Process options -rrelease and -ddirectory
42*1debfc3dSmrgRELEASE=""
43*1debfc3dSmrgSUBDIR=""
44*1debfc3dSmrg
45*1debfc3dSmrgwhile [ $# -gt 0 ]; do
46*1debfc3dSmrg  case $1 in
47*1debfc3dSmrg    -r*)
48*1debfc3dSmrg      if [ -n "$RELEASE" ]; then
49*1debfc3dSmrg        echo "Multiple releases specified" >&2
50*1debfc3dSmrg	exit 1
51*1debfc3dSmrg      fi
52*1debfc3dSmrg      RELEASE="${1#-r}"
53*1debfc3dSmrg      if [ -z "$RELEASE" ]; then
54*1debfc3dSmrg	shift
55*1debfc3dSmrg	RELEASE="$1"
56*1debfc3dSmrg	if [ -z "$RELEASE" ]; then
57*1debfc3dSmrg	  echo "No release specified with -r" >&2
58*1debfc3dSmrg	  exit 1
59*1debfc3dSmrg	fi
60*1debfc3dSmrg      fi
61*1debfc3dSmrg      ;;
62*1debfc3dSmrg    -d*)
63*1debfc3dSmrg      if [ -n "$SUBDIR" ]; then
64*1debfc3dSmrg        echo "Multiple subdirectories specified" >&2
65*1debfc3dSmrg	exit 1
66*1debfc3dSmrg      fi
67*1debfc3dSmrg      SUBDIR="${1#-d}"
68*1debfc3dSmrg      if [ -z "$SUBDIR" ]; then
69*1debfc3dSmrg	shift
70*1debfc3dSmrg	SUBDIR="$1"
71*1debfc3dSmrg	if [ -z "$SUBDIR" ]; then
72*1debfc3dSmrg	  echo "No subdirectory specified with -d" >&2
73*1debfc3dSmrg	  exit 1
74*1debfc3dSmrg	fi
75*1debfc3dSmrg      fi
76*1debfc3dSmrg      ;;
77*1debfc3dSmrg    *)
78*1debfc3dSmrg      echo "Unknown argument \"$1\"" >&2
79*1debfc3dSmrg      exit 1
80*1debfc3dSmrg      ;;
81*1debfc3dSmrg  esac
82*1debfc3dSmrg  shift
83*1debfc3dSmrgdone
84*1debfc3dSmrg
85*1debfc3dSmrgif [ -n "$RELEASE" ] && [ -z "$SUBDIR" ]; then
86*1debfc3dSmrg  echo "Release specified without subdirectory" >&2
87*1debfc3dSmrg  exit 1
88*1debfc3dSmrgfi
89*1debfc3dSmrg
90*1debfc3dSmrgif [ -z "$SUBDIR" ]; then
91*1debfc3dSmrg  DOCSDIR=$WWWBASE/onlinedocs
92*1debfc3dSmrgelse
93*1debfc3dSmrg  DOCSDIR=$WWWBASE/onlinedocs/$SUBDIR
94*1debfc3dSmrgfi
95*1debfc3dSmrg
96*1debfc3dSmrgif [ ! -d $WWWBASE ]; then
97*1debfc3dSmrg  echo "WWW base directory \"$WWWBASE\" does not exist." >&2
98*1debfc3dSmrg  exit 1
99*1debfc3dSmrgfi
100*1debfc3dSmrg
101*1debfc3dSmrgif [ ! -d $DOCSDIR ]; then
102*1debfc3dSmrg  mkdir $DOCSDIR
103*1debfc3dSmrg  chmod g+w $DOCSDIR
104*1debfc3dSmrgfi
105*1debfc3dSmrg
106*1debfc3dSmrgif [ -z "$RELEASE" ]; then
107*1debfc3dSmrg  RELEASE=trunk
108*1debfc3dSmrgfi
109*1debfc3dSmrg
110*1debfc3dSmrgWORKDIR=/tmp/gcc-doc-update.$$
111*1debfc3dSmrg
112*1debfc3dSmrgrm -rf $WORKDIR
113*1debfc3dSmrgmkdir $WORKDIR
114*1debfc3dSmrgcd $WORKDIR
115*1debfc3dSmrgif [ "$RELEASE" = "trunk" ]; then
116*1debfc3dSmrg  svn -q export $SVNROOT/$RELEASE gcc
117*1debfc3dSmrgelse
118*1debfc3dSmrg  svn -q export $SVNROOT/tags/$RELEASE gcc
119*1debfc3dSmrgfi
120*1debfc3dSmrg
121*1debfc3dSmrg# Remove all unwanted files.  This is needed to avoid packaging all the
122*1debfc3dSmrg# sources instead of only documentation sources.
123*1debfc3dSmrg# Note that we have to preserve gcc/jit/docs since the jit docs are
124*1debfc3dSmrg# not .texi files (Makefile, .rst and .png), and the jit docs use
125*1debfc3dSmrg# include directives to pull in content from jit/jit-common.h and
126*1debfc3dSmrg# jit/notes.txt, so we have to preserve those also.
127*1debfc3dSmrgfind gcc -type f \( -name '*.texi' \
128*1debfc3dSmrg  -o -path gcc/gcc/doc/install.texi2html \
129*1debfc3dSmrg  -o -path gcc/gcc/doc/include/texinfo.tex \
130*1debfc3dSmrg  -o -path gcc/gcc/BASE-VER \
131*1debfc3dSmrg  -o -path gcc/gcc/DEV-PHASE \
132*1debfc3dSmrg  -o -path "gcc/gcc/ada/doc/gnat_ugn/*.png" \
133*1debfc3dSmrg  -o -path "gcc/gcc/jit/docs/*" \
134*1debfc3dSmrg  -o -path "gcc/gcc/jit/jit-common.h" \
135*1debfc3dSmrg  -o -path "gcc/gcc/jit/notes.txt" \
136*1debfc3dSmrg  -o -print0 \) | xargs -0 rm -f
137*1debfc3dSmrg
138*1debfc3dSmrg# Build a tarball of the sources.
139*1debfc3dSmrgtar cf docs-sources.tar gcc
140*1debfc3dSmrg
141*1debfc3dSmrg# The directory to pass to -I; this is the one with texinfo.tex
142*1debfc3dSmrg# and fdl.texi.
143*1debfc3dSmrgincludedir=gcc/gcc/doc/include
144*1debfc3dSmrg
145*1debfc3dSmrg# Generate gcc-vers.texi.
146*1debfc3dSmrg(
147*1debfc3dSmrg   echo "@set version-GCC $(cat gcc/gcc/BASE-VER)"
148*1debfc3dSmrg   if [ "$(cat gcc/gcc/DEV-PHASE)" = "experimental" ]; then
149*1debfc3dSmrg      echo "@set DEVELOPMENT"
150*1debfc3dSmrg   else
151*1debfc3dSmrg      echo "@clear DEVELOPMENT"
152*1debfc3dSmrg   fi
153*1debfc3dSmrg   echo "@set srcdir $WORKDIR/gcc/gcc"
154*1debfc3dSmrg   echo "@set VERSION_PACKAGE (GCC)"
155*1debfc3dSmrg   echo "@set BUGURL @uref{http://gcc.gnu.org/bugs/}"
156*1debfc3dSmrg) > $includedir/gcc-vers.texi
157*1debfc3dSmrg
158*1debfc3dSmrg# Generate libquadmath-vers.texi.
159*1debfc3dSmrgecho "@set BUGURL @uref{http://gcc.gnu.org/bugs/}" \
160*1debfc3dSmrg  > $includedir/libquadmath-vers.texi
161*1debfc3dSmrg
162*1debfc3dSmrg# Now convert the relevant files from texi to HTML, PDF and PostScript.
163*1debfc3dSmrgfor file in $MANUALS; do
164*1debfc3dSmrg  filename=`find . -name ${file}.texi`
165*1debfc3dSmrg  if [ "${filename}" ]; then
166*1debfc3dSmrg    includes="-I ${includedir} -I `dirname ${filename}`"
167*1debfc3dSmrg    if [ "$file" = "gnat_ugn" ]; then
168*1debfc3dSmrg      includes="$includes -I gcc/gcc/ada -I gcc/gcc/ada/doc/gnat_ugn"
169*1debfc3dSmrg    fi
170*1debfc3dSmrg    makeinfo --html --css-ref $CSS $includes -o ${file} ${filename}
171*1debfc3dSmrg    tar cf ${file}-html.tar ${file}/*.html
172*1debfc3dSmrg    texi2dvi $includes -o ${file}.dvi ${filename} </dev/null >/dev/null && dvips -o ${file}.ps ${file}.dvi
173*1debfc3dSmrg    texi2pdf $includes -o ${file}.pdf ${filename} </dev/null
174*1debfc3dSmrg    mkdir -p $DOCSDIR/$file
175*1debfc3dSmrg  fi
176*1debfc3dSmrgdone
177*1debfc3dSmrg
178*1debfc3dSmrg# The jit is a special-case, using sphinx rather than texinfo.
179*1debfc3dSmrg# Specifically, the jit docs need sphinx 1.0 or later.
180*1debfc3dSmrg#
181*1debfc3dSmrg# The jit/docs Makefile uses the executable $(SPHINXBUILD),
182*1debfc3dSmrg# defaulting to "sphinx-build".
183*1debfc3dSmrg#
184*1debfc3dSmrg# sphinx is packaged in Fedora and EPEL 6 within "python-sphinx",
185*1debfc3dSmrg# and in openSUSE within "python-Sphinx".
186*1debfc3dSmrg#
187*1debfc3dSmrg# For EPEL6, python-sphinx is sphinx 0.6.6, which is missing various
188*1debfc3dSmrg# directives (e.g. ":c:macro:"), so we need the variant
189*1debfc3dSmrg# python-sphinx10 package.  The latter installs its executable as
190*1debfc3dSmrg#   /usr/bin/sphinx-1.0-build
191*1debfc3dSmrg# so we need to override SPHINXBUILD with this when invoking "make".
192*1debfc3dSmrgpushd gcc/gcc/jit/docs
193*1debfc3dSmrgmake SPHINXBUILD=/usr/bin/sphinx-1.0-build html
194*1debfc3dSmrgpopd
195*1debfc3dSmrgcp -a gcc/gcc/jit/docs/_build/html jit
196*1debfc3dSmrgmkdir -p $DOCSDIR/jit
197*1debfc3dSmrg
198*1debfc3dSmrg# Work around makeinfo generated file names and references with
199*1debfc3dSmrg# "_002d" instead of "-".
200*1debfc3dSmrgfind . -name '*.html' | while read f; do
201*1debfc3dSmrg  # Do this for the contents of each file.
202*1debfc3dSmrg  sed -i -e 's/_002d/-/g' "$f"
203*1debfc3dSmrg  # And rename files if necessary.
204*1debfc3dSmrg  ff=`echo $f | sed -e 's/_002d/-/g'`;
205*1debfc3dSmrg  if [ "$f" != "$ff" ]; then
206*1debfc3dSmrg    printf "Renaming %s to %s\n" "$f" "$ff"
207*1debfc3dSmrg    mv "$f" "$ff"
208*1debfc3dSmrg  fi
209*1debfc3dSmrgdone
210*1debfc3dSmrg
211*1debfc3dSmrg# Then build a gzipped copy of each of the resulting .html, .ps and .tar files
212*1debfc3dSmrgfor file in */*.html *.ps *.pdf *.tar; do
213*1debfc3dSmrg  cat $file | gzip --best > $file.gz
214*1debfc3dSmrgdone
215*1debfc3dSmrg
216*1debfc3dSmrg# On the 15th of the month, wipe all the old files from the
217*1debfc3dSmrg# web server.
218*1debfc3dSmrgtoday=`date +%d`
219*1debfc3dSmrgif test $today = 15; then
220*1debfc3dSmrg  find $DOCSDIR -type f -maxdepth 1 -print | grep -v index.html | xargs rm
221*1debfc3dSmrg  for m in $MANUALS; do
222*1debfc3dSmrg    rm -f $DOCSDIR/$m/*.html $DOCSDIR/$m/*.html.gz
223*1debfc3dSmrg  done
224*1debfc3dSmrgfi
225*1debfc3dSmrg
226*1debfc3dSmrg# And copy the resulting files to the web server
227*1debfc3dSmrgfor file in */*.html *.ps *.pdf *.tar; do
228*1debfc3dSmrg  if [ -f $DOCSDIR/$file ]; then
229*1debfc3dSmrg    cat $DOCSDIR/$file |
230*1debfc3dSmrg      sed -e '/^<meta name=generator/d' \
231*1debfc3dSmrg          -e '/^%DVIPSSource:/d' > file1
232*1debfc3dSmrg  fi
233*1debfc3dSmrg  cat $file |
234*1debfc3dSmrg    sed -e '/^<meta name=generator/d' \
235*1debfc3dSmrg        -e '/^%DVIPSSource:/d' > file2
236*1debfc3dSmrg  if cmp -s file1 file2; then
237*1debfc3dSmrg    :
238*1debfc3dSmrg  else
239*1debfc3dSmrg    cp $file $DOCSDIR/$file
240*1debfc3dSmrg    cp $file.gz $DOCSDIR/$file.gz
241*1debfc3dSmrg  fi
242*1debfc3dSmrgdone
243*1debfc3dSmrg
244*1debfc3dSmrg# Again, the jit is a special case, with nested subdirectories
245*1debfc3dSmrg# below "jit", and with some non-HTML files (.png images from us,
246*1debfc3dSmrg# plus .css and .js supplied by sphinx, and source files, renamed
247*1debfc3dSmrg# from .rst to .txt).
248*1debfc3dSmrgfind jit \
249*1debfc3dSmrg    -name "*.html" -o -name "*.png" \
250*1debfc3dSmrg    -o -name "*.css" -o -name "*.js" \
251*1debfc3dSmrg    -o -name "*.txt" |
252*1debfc3dSmrg  while read file ; do
253*1debfc3dSmrg    # Note that $file here will contain path fragments beginning
254*1debfc3dSmrg    # with "jit/", e.g. "jit/cp/topics/functions.html"
255*1debfc3dSmrg    mkdir -p $(dirname $DOCSDIR/$file)
256*1debfc3dSmrg    cp $file $DOCSDIR/$file
257*1debfc3dSmrg  done
258*1debfc3dSmrg
259*1debfc3dSmrgcd $DOCSDIR
260*1debfc3dSmrg
261*1debfc3dSmrg# Finally, generate the installation documentation
262*1debfc3dSmrgif [ "$RELEASE" = "trunk" ]; then
263*1debfc3dSmrg  SOURCEDIR=$WORKDIR/gcc/gcc/doc
264*1debfc3dSmrg  DESTDIR=$WWWBASE_PREFORMATTED/install
265*1debfc3dSmrg  export SOURCEDIR
266*1debfc3dSmrg  export DESTDIR
267*1debfc3dSmrg  $WORKDIR/gcc/gcc/doc/install.texi2html
268*1debfc3dSmrg
269*1debfc3dSmrg  # Preprocess the entire web site, not just the install docs!
270*1debfc3dSmrg  echo "Invoking $WWWPREPROCESS"
271*1debfc3dSmrg  $WWWPREPROCESS |grep -v '^  Warning: Keeping'
272*1debfc3dSmrgfi
273*1debfc3dSmrg
274*1debfc3dSmrg# Clean up behind us.
275*1debfc3dSmrg
276*1debfc3dSmrgrm -rf $WORKDIR
277