Wolfgang Thallergcc16 merge934c3885 months agoHistory
344 lines · 8.9 KB · Text
RawDownload
#!/bin/sh # Generate HTML documentation from GCC Texinfo docs.## If you want to run this on a machine different from gcc.gnu.org, you# may need to adjust GITROOT and WWWBASE below (or override them via the# environment). set -e # Run this from /tmp.GITROOT=${GITROOT:-"/git/gcc.git"}export GITROOT PATH=/usr/local/bin:$PATH # We use a copy of Sphinx installed in a virtual environment so that# we don't depend on a system package.SPHINX_VENV=${SPHINX_VENV:-"/home/gccadmin/venv"} makeinfo_git=/home/gccadmin/texinfo/install-git/bin/if [ -x "${makeinfo_git}"/makeinfo ]; then    : "${MAKEINFO:=${makeinfo_git}/makeinfo}"    : "${TEXI2DVI:=${makeinfo_git}/texi2dvi}"    : "${TEXI2PDF:=${makeinfo_git}/texi2pdf}"else    : "${MAKEINFO:=makeinfo}"    : "${TEXI2DVI:=texi2dvi}"    : "${TEXI2PDF:=texi2pdf}"fi MANUALS="cpp  cppinternals  fastjar  ga68  ga68-coding-guidelines  ga68-internals  gcc  gccgo  gccint  gcj  gdc  gfortran  gfc-internals  gm2  gnat_ugn  gnat-style  gnat_rm  libgomp  libitm  libquadmath  libiberty  porting" BUGURL="https://gcc.gnu.org/bugs/"CSS=/texinfo-manuals.css WWWBASE=${WWWBASE:-"/www/gcc/htdocs"}WWWBASE_PREFORMATTED=/www/gcc/htdocs-preformattedWWWPREPROCESS='/www/gcc/bin/preprocess -r' # Process options -rrelease and -ddirectoryRELEASE=""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  shiftdone if [ -n "$RELEASE" ] && [ -z "$SUBDIR" ]; then  echo "Release specified without subdirectory" >&2  exit 1fi if [ -z "$SUBDIR" ]; then  DOCSDIR=$WWWBASE/onlinedocselse  DOCSDIR=$WWWBASE/onlinedocs/$SUBDIRfi if [ ! -d $WWWBASE ]; then  echo "WWW base directory \"$WWWBASE\" does not exist." >&2  exit 1fi if [ ! -d $DOCSDIR ]; then  mkdir $DOCSDIR  chmod g+w $DOCSDIRfi if [ -z "$RELEASE" ]; then  RELEASE=masterfi WORKDIR=/tmp/gcc-doc-update.$$ rm -rf $WORKDIRmkdir $WORKDIRcd $WORKDIRif [ "$RELEASE" = "master" ]; then  git clone -q $GITROOT gccelse  git clone -q -b releases/gcc-$RELEASE $GITROOT gccfirm -rf gcc/.git # Remove all unwanted files.  This is needed to avoid packaging all the# sources instead of only documentation sources.# 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# Similar considerations apply for libgdiagnostics.# Preserve the cobol man pages, which are converted to HTML and PDF.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 \  -o -path "gcc/gcc/ada/doc/gnat_ugn/*.png" \  -o -path "gcc/gcc/jit/docs/*" \  -o -path "gcc/gcc/jit/jit-common.h" \  -o -path "gcc/gcc/jit/notes.txt" \  -o -path "gcc/gcc/testsuite/jit.dg/*" \  -o -path "gcc/gcc/doc/libgdiagnostics/*" \  -o -path "gcc/gcc/testsuite/libgdiagnostics.dg/*" \  -o -path "gcc/gcc/cobol/gcobol*[13]" \  -o -print0 \) | xargs -0 rm -f # 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   echo "@set srcdir $WORKDIR/gcc/gcc"   echo "@set VERSION_PACKAGE (GCC)"   echo "@set BUGURL @uref{$BUGURL}") > $includedir/gcc-vers.texi # Generate libquadmath-vers.texi.echo "@set BUGURL @uref{$BUGURL}" \  > $includedir/libquadmath-vers.texi # 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    includes="-I ${includedir} -I `dirname ${filename}`"    if [ "$file" = "gm2" ]; then      includes="$includes -I gcc/gcc/m2/target-independent"      includes="$includes -I gcc/gcc/m2/target-independent/m2"    elif [ "$file" = "gnat_ugn" ]; then      includes="$includes -I gcc/gcc/ada -I gcc/gcc/ada/doc/gnat_ugn"    fi    "${MAKEINFO}" --html -c CONTENTS_OUTPUT_LOCATION=inline --css-ref $CSS $includes -o ${file} ${filename}    tar cf ${file}-html.tar ${file}/*.html    "${TEXI2DVI}" $includes -o ${file}.dvi ${filename} </dev/null >/dev/null && dvips -o ${file}.ps ${file}.dvi    "${TEXI2PDF}" $includes -o ${file}.pdf ${filename} </dev/null    mkdir -p $DOCSDIR/$file  fidone ## The COBOL FE maintains man pages.  Convert them to HTML and PDF.#cobol_mdoc2pdf_html() {    mkdir -p $DOCSDIR/gcobol gcobol    input="$1"    d="${input%/*}"    pdf="$2"    html="gcobol/$3"    groff -mdoc -T pdf "$input" > "${pdf}~"    mv "${pdf}~" "${pdf}"    mandoc -T html "$filename" > "${html}~"    mv "${html}~" "${html}"} find . -name gcobol.[13] |    while read filename    do        case ${filename##*.} in            1)                cobol_mdoc2pdf_html "$filename" gcobol.pdf gcobol.html                ;;            3)                cobol_mdoc2pdf_html "$filename" gcobol_io.pdf gcobol_io.html                ;;        esac    done # jit and libgdiagnostics are a special-case, using Sphinx rather than texinfo.# Specifically, they need Sphinx 3.0 or later.## Use the Sphinx installed in a virtual environment so that# we don't depend on a system package. pushd gcc/gcc/jit/docsmake html SPHINXBUILD=$SPHINX_VENV/bin/sphinx-build || truepopdcp -a gcc/gcc/jit/docs/_build/html jitmkdir -p $DOCSDIR/jit LIBGDIAGNOSTICS=if test -d gcc/gcc/doc/libgdiagnostics; then  pushd gcc/gcc/doc/libgdiagnostics  make html SPHINXBUILD=$SPHINX_VENV/bin/sphinx-build || true  popd  cp -a gcc/gcc/doc/libgdiagnostics/_build/html libgdiagnostics  mkdir -p $DOCSDIR/libgdiagnostics  LIBGDIAGNOSTICS=libgdiagnosticsfi # 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"  fidone # Then build a gzipped copy of each of the resulting .html, .ps and .tar filesfor file in */*.html *.ps *.pdf *.tar; do  cat $file | gzip --best > $file.gzdone # 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    rm -f $DOCSDIR/$m/*.html $DOCSDIR/$m/*.html.gz  donefi # And copy the resulting files to the web serverfor file in */*.html *.ps *.pdf *.tar; do  if [ -f $DOCSDIR/$file ]; then    cat $DOCSDIR/$file |       sed -e '/^<meta name=generator/d' \          -e '/^%DVIPSSource:/d' > file1  fi  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  fidone # Again, jit and libgdignostics are special cases, with nested subdirectories# below them, and with some non-HTML files (.png images from us,# plus .css and .js supplied by sphinx, and source files, renamed# from .rst to .txt).find jit $LIBGDIAGNOSTICS \    -name "*.html" -o -name "*.png" \    -o -name "*.css" -o -name "*.js" \    -o -name "*.txt" |  while read file ; do    # Avoid bogus redirects stemming from Sphinx stylesheets.    case $file in      *.html)        sed -e 's#<a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>#Alabaster#' \            -e 's#<a href="http://sphinx-doc.org/">Sphinx 5.3.0</a>#Sphinx#' \            -i $file	;;    esac    # 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 cd $DOCSDIR # Finally, generate the installation documentationif [ "$RELEASE" = "master" ]; then  SOURCEDIR=$WORKDIR/gcc/gcc/doc  DESTDIR=$WWWBASE_PREFORMATTED/install  export SOURCEDIR  export DESTDIR  $WORKDIR/gcc/gcc/doc/install.texi2html   # Preprocess the entire web site, not just the install docs!  echo "Invoking $WWWPREPROCESS"  $WWWPREPROCESS |grep -v '^  Warning: Keeping'fi # Clean up behind us. rm -rf $WORKDIR

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t