Blame build-aux/gnu-web-doc-update

Packit Service fdd496
#!/bin/sh
Packit Service fdd496
# Run this after each non-alpha release, to update the web documentation at
Packit Service fdd496
# http://www.gnu.org/software/$pkg/manual/
Packit Service fdd496
Packit Service fdd496
VERSION=2016-01-12.23; # UTC
Packit Service fdd496
Packit Service fdd496
# Copyright (C) 2009-2017 Free Software Foundation, Inc.
Packit Service fdd496
Packit Service fdd496
# This program is free software: you can redistribute it and/or modify
Packit Service fdd496
# it under the terms of the GNU General Public License as published by
Packit Service fdd496
# the Free Software Foundation, either version 3 of the License, or
Packit Service fdd496
# (at your option) any later version.
Packit Service fdd496
Packit Service fdd496
# This program is distributed in the hope that it will be useful,
Packit Service fdd496
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fdd496
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service fdd496
# GNU General Public License for more details.
Packit Service fdd496
Packit Service fdd496
# You should have received a copy of the GNU General Public License
Packit Service fdd496
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service fdd496
Packit Service fdd496
ME=$(basename "$0")
Packit Service fdd496
warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
Packit Service fdd496
die() { warn "$*"; exit 1; }
Packit Service fdd496
Packit Service fdd496
help()
Packit Service fdd496
{
Packit Service fdd496
  cat <
Packit Service fdd496
Usage: $ME
Packit Service fdd496
Packit Service fdd496
Run this script from top_srcdir (no arguments) after each non-alpha
Packit Service fdd496
release, to update the web documentation at
Packit Service fdd496
http://www.gnu.org/software/\$pkg/manual/
Packit Service fdd496
Packit Service fdd496
This script assumes you're using git for revision control, and
Packit Service fdd496
requires a .prev-version file as well as a Makefile, from which it
Packit Service fdd496
extracts the version number and package name, respectively.  Also, it
Packit Service fdd496
assumes all documentation is in the doc/ sub-directory.
Packit Service fdd496
Packit Service fdd496
Options:
Packit Service fdd496
  -C, --builddir=DIR  location of (configured) Makefile (default: .)
Packit Service fdd496
  -n, --dry-run       don't actually commit anything
Packit Service fdd496
  -m, --mirror        remove out of date files from document server
Packit Service fdd496
  --help              print this help, then exit
Packit Service fdd496
  --version           print version number, then exit
Packit Service fdd496
Packit Service fdd496
Report bugs and patches to <bug-gnulib@gnu.org>.
Packit Service fdd496
EOF
Packit Service fdd496
  exit
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
version()
Packit Service fdd496
{
Packit Service fdd496
  year=$(echo "$VERSION" | sed 's/[^0-9].*//')
Packit Service fdd496
  cat <
Packit Service fdd496
$ME $VERSION
Packit Service fdd496
Copyright (C) $year Free Software Foundation, Inc,
Packit Service fdd496
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
Packit Service fdd496
This is free software: you are free to change and redistribute it.
Packit Service fdd496
There is NO WARRANTY, to the extent permitted by law.
Packit Service fdd496
EOF
Packit Service fdd496
  exit
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
# find_tool ENVVAR NAMES...
Packit Service fdd496
# -------------------------
Packit Service fdd496
# Search for a required program.  Use the value of ENVVAR, if set,
Packit Service fdd496
# otherwise find the first of the NAMES that can be run (i.e.,
Packit Service fdd496
# supports --version).  If found, set ENVVAR to the program name,
Packit Service fdd496
# die otherwise.
Packit Service fdd496
#
Packit Service fdd496
# FIXME: code duplication, see also bootstrap.
Packit Service fdd496
find_tool ()
Packit Service fdd496
{
Packit Service fdd496
  find_tool_envvar=$1
Packit Service fdd496
  shift
Packit Service fdd496
  find_tool_names=$@
Packit Service fdd496
  eval "find_tool_res=\$$find_tool_envvar"
Packit Service fdd496
  if test x"$find_tool_res" = x; then
Packit Service fdd496
    for i
Packit Service fdd496
    do
Packit Service fdd496
      if ($i --version </dev/null) >/dev/null 2>&1; then
Packit Service fdd496
       find_tool_res=$i
Packit Service fdd496
       break
Packit Service fdd496
      fi
Packit Service fdd496
    done
Packit Service fdd496
  else
Packit Service fdd496
    find_tool_error_prefix="\$$find_tool_envvar: "
Packit Service fdd496
  fi
Packit Service fdd496
  test x"$find_tool_res" != x \
Packit Service fdd496
    || die "one of these is required: $find_tool_names"
Packit Service fdd496
  ($find_tool_res --version </dev/null) >/dev/null 2>&1 \
Packit Service fdd496
    || die "${find_tool_error_prefix}cannot run $find_tool_res --version"
Packit Service fdd496
  eval "$find_tool_envvar=\$find_tool_res"
Packit Service fdd496
  eval "export $find_tool_envvar"
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
## ------ ##
Packit Service fdd496
## Main.  ##
Packit Service fdd496
## ------ ##
Packit Service fdd496
Packit Service fdd496
# Requirements: everything required to bootstrap your package, plus
Packit Service fdd496
# these.
Packit Service fdd496
find_tool CVS cvs
Packit Service fdd496
find_tool GIT git
Packit Service fdd496
find_tool RSYNC rsync
Packit Service fdd496
find_tool XARGS gxargs xargs
Packit Service fdd496
Packit Service fdd496
builddir=.
Packit Service fdd496
dryrun=
Packit Service fdd496
rm_stale='echo'
Packit Service fdd496
while test $# != 0
Packit Service fdd496
do
Packit Service fdd496
  # Handle --option=value by splitting apart and putting back on argv.
Packit Service fdd496
  case $1 in
Packit Service fdd496
    --*=*)
Packit Service fdd496
      opt=$(echo "$1" | sed -e 's/=.*//')
Packit Service fdd496
      val=$(echo "$1" | sed -e 's/[^=]*=//')
Packit Service fdd496
      shift
Packit Service fdd496
      set dummy "$opt" "$val" "$@"; shift
Packit Service fdd496
      ;;
Packit Service fdd496
  esac
Packit Service fdd496
Packit Service fdd496
  case $1 in
Packit Service fdd496
    --help|--version) ${1#--};;
Packit Service fdd496
    -C|--builddir) shift; builddir=$1; shift ;;
Packit Service fdd496
    -n|--dry-run) dryrun=echo; shift;;
Packit Service fdd496
    -m|--mirror) rm_stale=''; shift;;
Packit Service fdd496
    --*) die "unrecognized option: $1";;
Packit Service fdd496
    *) break;;
Packit Service fdd496
  esac
Packit Service fdd496
done
Packit Service fdd496
Packit Service fdd496
test $# = 0 \
Packit Service fdd496
  || die "too many arguments"
Packit Service fdd496
Packit Service fdd496
prev=.prev-version
Packit Service fdd496
version=$(cat $prev) || die "no $prev file?"
Packit Service fdd496
pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \
Packit Service fdd496
  || die "no Makefile?"
Packit Service fdd496
tmp_branch=web-doc-$version-$$
Packit Service fdd496
current_branch=$($GIT branch | sed -ne '/^\* /{s///;p;q;}')
Packit Service fdd496
Packit Service fdd496
cleanup()
Packit Service fdd496
{
Packit Service fdd496
  __st=$?
Packit Service fdd496
  $dryrun rm -rf "$tmp"
Packit Service fdd496
  $GIT checkout "$current_branch"
Packit Service fdd496
  $GIT submodule update --recursive
Packit Service fdd496
  $GIT branch -d $tmp_branch
Packit Service fdd496
  exit $__st
Packit Service fdd496
}
Packit Service fdd496
trap cleanup 0
Packit Service fdd496
trap 'exit $?' 1 2 13 15
Packit Service fdd496
Packit Service fdd496
# We must build using sources for which --version reports the
Packit Service fdd496
# just-released version number, not some string like 7.6.18-20761.
Packit Service fdd496
# That version string propagates into all documentation.
Packit Service fdd496
set -e
Packit Service fdd496
$GIT checkout -b $tmp_branch v$version
Packit Service fdd496
$GIT submodule update --recursive
Packit Service fdd496
./bootstrap
Packit Service fdd496
srcdir=$(pwd)
Packit Service fdd496
cd "$builddir"
Packit Service fdd496
builddir=$(pwd)
Packit Service fdd496
  ./config.status --recheck
Packit Service fdd496
  ./config.status
Packit Service fdd496
  make
Packit Service fdd496
  make web-manual
Packit Service fdd496
cd "$srcdir"
Packit Service fdd496
set +e
Packit Service fdd496
Packit Service fdd496
tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1
Packit Service fdd496
( cd $tmp \
Packit Service fdd496
    && $CVS -d $USER@cvs.sv.gnu.org:/webcvs/$pkg co $pkg )
Packit Service fdd496
$RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/manual
Packit Service fdd496
Packit Service fdd496
(
Packit Service fdd496
  cd $tmp/$pkg/manual
Packit Service fdd496
Packit Service fdd496
  # Add all the files.  This is simpler than trying to add only the
Packit Service fdd496
  # new ones because of new directories
Packit Service fdd496
  # First add non empty dirs individually
Packit Service fdd496
  find . -name CVS -prune -o -type d \! -empty -print             \
Packit Service fdd496
    | $XARGS -n1 --no-run-if-empty -- $dryrun $CVS add -ko
Packit Service fdd496
  # Now add all files
Packit Service fdd496
  find . -name CVS -prune -o -type f -print             \
Packit Service fdd496
    | $XARGS --no-run-if-empty -- $dryrun $CVS add -ko
Packit Service fdd496
Packit Service fdd496
  # Report/Remove stale files
Packit Service fdd496
  #   excluding doc server specific files like CVS/* and .symlinks
Packit Service fdd496
  if test -n "$rm_stale"; then
Packit Service fdd496
    echo 'Consider the --mirror option if all of the manual is generated,' >&2
Packit Service fdd496
    echo 'which will run `cvs remove` to remove stale files.' >&2
Packit Service fdd496
  fi
Packit Service fdd496
  { find . \( -name CVS -o -type f -name '.*' \) -prune -o -type f -print
Packit Service fdd496
    (cd "$builddir"/doc/manual/ && find . -type f -print | sed p)
Packit Service fdd496
  } | sort | uniq -u \
Packit Service fdd496
    | $XARGS --no-run-if-empty -- ${rm_stale:-$dryrun} $CVS remove -f
Packit Service fdd496
Packit Service fdd496
  $dryrun $CVS ci -m $version
Packit Service fdd496
)
Packit Service fdd496
Packit Service fdd496
# Local variables:
Packit Service fdd496
# eval: (add-hook 'write-file-hooks 'time-stamp)
Packit Service fdd496
# time-stamp-start: "VERSION="
Packit Service fdd496
# time-stamp-format: "%:y-%02m-%02d.%02H"
Packit Service fdd496
# time-stamp-time-zone: "UTC0"
Packit Service fdd496
# time-stamp-end: "; # UTC"
Packit Service fdd496
# End: