Admin/makedist
author wenzelm
Wed, 21 Sep 2005 13:28:44 +0200
changeset 17554 d16abc8f4fb0
parent 16508 5e5945ae284c
child 17558 de236aeb867c
permissions -rwxr-xr-x
removed "--" argument;
updated for Isabelle2005;
tuned;
     1 #!/usr/bin/env bash
     2 #
     3 # $Id$
     4 #
     5 # makedist -- make Isabelle source distribution.
     6 
     7 
     8 ## global settings
     9 
    10 DISTPREFIX=${DISTPREFIX:-~/tmp/isadist}
    11 LOGICS="CCL CTT Cube FOL FOLP HOL HOLCF LCF Provers Pure Sequents TFL ZF"
    12 
    13 export CVSROOT=/usr/proj/isabelle-repository/archive
    14 [ ! -d "$CVSROOT" ] && CVSROOT="sunbroy2.informatik.tu-muenchen.de:$CVSROOT"
    15 
    16 umask 022
    17 
    18 TAR=tar
    19 type -path gtar >/dev/null && TAR=gtar
    20 
    21 FIND=find
    22 type -path gfind >/dev/null && FIND=gfind
    23 
    24 
    25 ## diagnostics
    26 
    27 PRG=$(basename "$0")
    28 THIS=$(cd $(dirname "$0"); echo "$PWD")
    29 
    30 function usage()
    31 {
    32   cat <<EOF
    33 
    34 Usage: $PRG VERSION [NAME]
    35 
    36   Make Isabelle distribution from the master sources at TUM.
    37 
    38   VERSION may be either a tag like "Isabelle2005" that specifies the
    39   release to be exported from the repository, or "-" to checkout the
    40   current sources as an unofficial release.
    41 
    42   NAME specifies an explicit distribution name, by default it is
    43   derived from VERSION.
    44 
    45   Checklist for official releases (before running this script):
    46 
    47     * Check Admin/website contents.
    48     * Check ANNOUNCE, README.html, INSTALL, NEWS, COPYRIGHT, CONTRIBUTORS.
    49     * Try "isatool makeall all" with Poly/ML, SML/NJ, etc.
    50     * Tag the current repository version, e.g.:
    51         cvs -d /usr/proj/isabelle-repository/archive rtag Isabelle2005 isabelle
    52       PLEASE DO NOT DO THIS UNLESS YOU KNOW WHAT YOU ARE DOING!
    53 
    54 EOF
    55   exit 1
    56 }
    57 
    58 function fail()
    59 {
    60   echo "$1" >&2
    61   exit 2
    62 }
    63 
    64 
    65 ## process command line
    66 
    67 [ "$#" -ne 1 -a "$#" -ne 2 ] && usage
    68 
    69 VERSION="$1"; shift
    70 
    71 if [ "$#" -eq 0 ]; then
    72   DISTNAME=""
    73 else
    74   DISTNAME="$1"; shift
    75 fi
    76 
    77 
    78 ## main
    79 
    80 # dist version
    81 
    82 DATE=$(date "+%d-%b-%Y")
    83 DISTDATE=$(date "+%B %Y")
    84 
    85 if [ "$VERSION" = "-" ]; then
    86   DISTIDENT="Isabelle_$DATE"
    87   [ -z "$DISTNAME" ] && DISTNAME="$DISTIDENT"
    88   DISTVERSION="$DISTNAME"
    89   EXPORT="cvs -f -q checkout -P -d $DISTNAME isabelle"
    90   UNOFFICIAL="unofficial"
    91 else
    92   DISTIDENT="$VERSION"
    93   [ -z "$DISTNAME" ] && DISTNAME="$DISTIDENT"
    94   DISTVERSION="$DISTNAME: $DISTDATE"
    95   EXPORT="cvs -f -q export -P -r $VERSION -d $DISTNAME isabelle"
    96   UNOFFICIAL=""
    97 fi
    98 
    99 DISTBASE="$DISTPREFIX/dist-$DISTNAME"
   100 mkdir -p "$DISTBASE" || fail "Unable to create distribution base dir $DISTBASE!"
   101 [ -e "$DISTBASE/$DISTNAME" ] && fail "$DISTBASE/$DISTNAME already exists!"
   102 [ -e "$DISTBASE/pdf/$DISTNAME" ] && fail "$DISTBASE/pdf/$DISTNAME already exists!"
   103 
   104 
   105 # export repository
   106 
   107 echo "###"
   108 echo "### Exporting $DISTIDENT ..."
   109 echo "###"
   110 
   111 cd "$DISTBASE"
   112 
   113 $EXPORT || fail "Export failed!"
   114 
   115 if [ -n "$CVS2CL" ]; then
   116   cd $DISTNAME
   117   $CVS2CL
   118   gzip ChangeLog
   119   mv ChangeLog.gz ..
   120   cd ..
   121 fi
   122 
   123 $FIND . -name CVS -print | xargs rm -rf
   124 $FIND . -name .cvsignore -print | xargs rm -rf
   125 $FIND . "(" -name \*.thy -o -name \*.ML ")" -perm +111 -print | xargs chmod -x
   126 
   127 
   128 # build docs
   129 
   130 echo "###"
   131 echo "### Building docs ..."
   132 echo "###"
   133 
   134 cd "$DISTBASE/$DISTNAME/Doc"
   135 PDFLATEX=$(type -path pdflatex)
   136 
   137 for DOC in $(cat Contents)
   138 do
   139   cd "$DOC"
   140   make dvi || fail "DVI document for $DOC failed!"
   141   { [ -n "$PDFLATEX" ] && make clean pdf; } || fail "PDF document for $DOC failed!"
   142   cd ..
   143 done
   144 
   145 
   146 # prepare dist dir for release
   147 
   148 echo "###"
   149 echo "### Preparing distribution ..."
   150 echo "###"
   151 
   152 cd "$DISTBASE/$DISTNAME" || fail "No dist directory: $DISTBASE/$DISTNAME"
   153 
   154 cp -R Admin/website ..
   155 mkdir -p ../website/conf
   156 cat > ../website/conf/distname.mak <<EOF
   157 # this is a generated file - do not edit!
   158 
   159 DISTNAME=$DISTNAME
   160 DISTIDENT=$DISTIDENT
   161 EOF
   162 
   163 MOVE=$($FIND Doc \( -type f -a -not -type l -a -not -name pghead.pdf -a \( -name \*.dvi -o -name \*.eps -o -name \*.ps -o -name \*.pdf \) -a -print \) | grep -v 'gfx/.*pdf')
   164 mv -f $MOVE Distribution/doc
   165 rm Distribution/doc/Isa-logics.eps
   166 rm -rf Doc Tools
   167 
   168 mkdir src contrib
   169 mv $LOGICS src
   170 
   171 mv Distribution/* .
   172 rmdir Distribution
   173 
   174 ( cd lib/browser; make; ) || fail "Graph browser build failed!"
   175 
   176 cp doc/isabelle*.eps lib/logo
   177 
   178 
   179 if [ -n "$UNOFFICIAL" ]; then
   180   {
   181     echo
   182     echo "IMPORTANT NOTE"
   183     echo "=============="
   184     echo
   185     echo "This is an unofficial release of Isabelle, created by $LOGNAME $DATE."
   186     echo
   187   } >ANNOUNCE
   188 fi
   189 
   190 perl -pi -e "s/{ISABELLE}/$DISTNAME/g;" lib/html/index.html
   191 perl -pi -e "s/Isabelle repository version/$DISTVERSION/" src/Pure/ROOT.ML lib/Tools/version
   192 perl -pi -e "s/the internal repository version of Isabelle/$DISTVERSION/" README.html
   193 lynx -dump README.html >README
   194 
   195 ( cd src; ../Admin/maketags; )
   196 
   197 rm -rf Admin
   198 rm -f TODO
   199 
   200 
   201 # create archive
   202 
   203 echo "###"
   204 echo "### Creating archives ..."
   205 echo "###"
   206 
   207 cd "$DISTBASE"
   208 
   209 echo "$DISTBASE/$DISTNAME.tar.gz" > ../ISABELLE_DIST
   210 
   211 rm -f Isabelle
   212 ln -s "$DISTNAME" Isabelle
   213 
   214 chown -R "$LOGNAME" "$DISTNAME"
   215 chmod -R u+w "$DISTNAME"
   216 chmod -R g=o "$DISTNAME"
   217 chgrp -R isabelle "$DISTNAME" Isabelle
   218 
   219 mkdir -p "pdf/$DISTNAME/doc"
   220 mv "$DISTNAME/doc/"*.pdf "pdf/$DISTNAME/doc"
   221 
   222 #~ page/bin/mkcontents "$DISTNAME/doc/Contents" "pdf/$DISTNAME/doc/index"
   223 #~ cat > "pdf/$DISTNAME/doc/index.html" <<EOF
   224 #~ <html>
   225 #~ <head>
   226 #~ <title>$DISTNAME Documentation</title>
   227 #~ </head>
   228 #~ <body>
   229 #~ <h1>$DISTNAME Documentation</h1>
   230 #~ $(cat "pdf/$DISTNAME/doc/index")
   231 #~ </body>
   232 #~ </html>
   233 #~ EOF
   234 #~ rm "pdf/$DISTNAME/doc/index"
   235 
   236 echo "$DISTNAME.tar.gz"
   237 "$TAR" cf "$DISTNAME.tar" Isabelle "$DISTNAME"
   238 gzip "$DISTNAME.tar"
   239 
   240 echo "${DISTNAME}_pdf.tar.gz"
   241 ( cd pdf; "$TAR" cf "../${DISTNAME}_pdf.tar" "$DISTNAME"; )
   242 gzip "${DISTNAME}_pdf.tar"
   243 
   244 mv "pdf/$DISTNAME/doc/"*.pdf "pdf/$DISTNAME/doc/index.html" "$DISTNAME/doc"
   245 rmdir "pdf/$DISTNAME/doc" "pdf/$DISTNAME" pdf
   246 
   247 
   248 # cleanup dist
   249 
   250 mv "$DISTNAME" "${DISTNAME}-old"
   251 mkdir "$DISTNAME"
   252 
   253 mv "${DISTNAME}-old/README.html" "${DISTNAME}-old/INSTALL" "${DISTNAME}-old/NEWS" \
   254   "${DISTNAME}-old/ANNOUNCE" "${DISTNAME}-old/COPYRIGHT" "${DISTNAME}-old/CONTRIBUTORS" \
   255   "$DISTNAME"
   256 mkdir "$DISTNAME/doc"
   257 mv "${DISTNAME}-old/doc/"*.pdf "${DISTNAME}-old/doc/index.html" "$DISTNAME/doc"
   258 
   259 chgrp -R isabelle "$DISTNAME"
   260 
   261 rm -rf "${DISTNAME}-old"
   262 
   263 
   264 # final note
   265 
   266 echo "###"
   267 echo "### Finished makedist."
   268 echo "###"