#!/bin/bash## $Id$## makedist -- make Isabelle distribution.## global settingsLOGICS="CCL CTT Cube FOL FOLP HOL HOLCF LCF Provers Pure Sequents TFL ZF"export CVSROOT=/usr/proj/isabelle-repository/archiveDISTPREFIX=~/tmp/isadistumask 022## diagnosticsPRG=$(basename "$0")THIS=$(cd $(dirname "$0"); echo "$PWD")function usage(){ echo "###" echo "### Usage: $PRG VERSION" echo "###" cat <<EOF Make Isabelle distribution from the master sources at TUM. VERSION may be either a tag like "Isabelle99-XX" that specifies the release to be exported from the repository, or "-" to checkout the current sources as an unofficial release, or "--" to produce a tentative release from the present copy of the Isabelle repository. Checklist for official releases (before running this script): * Check release name and date in NEWS! * Check that README files are up to date (should have Id: lines). * Check Admin/index.html.EOF #Wicked! We just won't tell other users ... if [ $LOGNAME = paulson -o $LOGNAME = nipkow -o $LOGNAME = wenzelm -o $LOGNAME = berghofe ]; then cat <<EOF * Tag the current repository version, e.g.: cvs -d $CVSROOT rtag Isabelle99-XX isabelle PLEASE DON'T DO THIS UNLESS YOU KNOW WHAT YOU'RE DOING!EOF fi cat <<EOF After the distribution has been created succesfully, you might want to run some makeall tests using different ML systems.EOF exit 1}function fail(){ echo "$1" >&2 exit 2}## process command line[ "$#" -ne 1 ] && usageVERSION="$1"shift## main# dist versionDATE=$(date "+%d-%b-%Y")DISTDATE=$(date "+%B %Y")if [ "$VERSION" = "--" ]; then DISTNAME="Isabelle_${DATE}_test" DISTVERSION="$DISTNAME" EXPORT="$THIS/cvs-copy $THIS/.. $DISTNAME" UNOFFICIAL=""elif [ "$VERSION" = "-" ]; then DISTNAME="Isabelle_$DATE" DISTVERSION="$DISTNAME" EXPORT="cvs -f -q checkout -P -d $DISTNAME isabelle" UNOFFICIAL=trueelse DISTNAME="$VERSION" DISTVERSION="$DISTNAME: $DISTDATE" EXPORT="cvs -f -q export -r $VERSION -d $DISTNAME isabelle" UNOFFICIAL=""fiDISTBASE="$DISTPREFIX/dist-$DISTNAME"mkdir -p "$DISTBASE" || fail "Unable to create distribution base dir $DISTBASE!"[ -e "$DISTBASE/$DISTNAME" ] && fail "$DISTBASE/$DISTNAME already exists!"[ -e "$DISTBASE/pdf/$DISTNAME" ] && fail "$DISTBASE/pdf/$DISTNAME already exists!"# export repositoryecho "###"echo "### Exporting $DISTNAME ..."echo "###"cd "$DISTBASE"$EXPORTfind . -name CVS -print | xargs rm -rffind . -type d -a -empty -print | xargs rm -rf# build docsecho "###"echo "### Building docs ..."echo "###"cd "$DISTBASE/$DISTNAME/Doc"PDFLATEX=$(type -path pdflatex)for DOC in $(cat Contents)do cd "$DOC" make dvi [ -n "$PDFLATEX" ] && make clean pdf cd ..done# make WWW pages#FIXME#export DISTNAME#( cd "$DISTBASE/$DISTNAME/Admin/page"; make clean; make dist; cd dist; cp * "$DISTBASE"; )# prepare dist dir for releasecd "$DISTBASE/$DISTNAME"MOVE=$(find Doc \( -type f -a \( -name \*.dvi -o -name \*.eps -o -name \*.ps -o -name \*.pdf \) -a -print \) | grep -v 'gfx/.*pdf')mv -f $MOVE Distribution/docrm Distribution/doc/Isa-logics.epsrm -rf Doc Toolsmkdir src contribmv $LOGICS srcmv Distribution/* .rmdir Distribution( cd lib/browser; make; )cp doc/isabelle*.eps lib/logoif [ -n "$UNOFFICIAL" ]; then { echo echo "IMPORTANT NOTE" echo "==============" echo echo "This is an unofficial release of Isabelle, created by $LOGNAME $DATE." echo } >UNOFFICIALfiperl -pi -e "s/{ISABELLE}/$DISTNAME/g;" lib/html/index.htmlperl -pi -e "s/Isabelle repository/$DISTVERSION/" src/Pure/ROOT.MLperl -pi -e "s/the internal repository version of Isabelle/$DISTVERSION/" README.htmllynx -dump README.html >README( cd src; ../Admin/maketags; )rm -rf Admin# create archiveecho "###"echo "### Creating archives ..."echo "###"cd "$DISTBASE"chown -R "$LOGNAME" "$DISTNAME"chgrp -R isabelle "$DISTNAME"chmod -R u+w "$DISTNAME"chmod -R g=o "$DISTNAME"TAR=tartype -path gtar >/dev/null && TAR=gtarmkdir -p "pdf/$DISTNAME/doc"mv "$DISTNAME/doc/"*.pdf "pdf/$DISTNAME/doc""$TAR" cf "$DISTNAME.tar" "$DISTNAME"( cd pdf; "$TAR" cf "../${DISTNAME}_pdf.tar" "$DISTNAME"; )mv "pdf/$DISTNAME/doc/"*.pdf "$DISTNAME/doc"rmdir "pdf/$DISTNAME/doc" "pdf/$DISTNAME" pdfgzip "$DISTNAME.tar"gzip "${DISTNAME}_pdf.tar"# cleanup distmv "$DISTNAME" "${DISTNAME}-old"mkdir "$DISTNAME"mv "${DISTNAME}-old/lib/logo/isabelle.gif" .mv "${DISTNAME}-old/README.html" "${DISTNAME}-old/INSTALL" "$DISTNAME"mkdir "$DISTNAME/doc"mv "${DISTNAME}-old/doc/"*.pdf "${DISTNAME}-old/doc/Contents" "$DISTNAME/doc"chgrp -R isabelle "$DISTNAME"rm -rf "${DISTNAME}-old"# prepare web pages#FIXME#$THIS/filesizes -norpm# final noteecho "###"echo "### Finished. You will find the distribution in $DISTBASE."echo "###"