Admin/makedist
author wenzelm
Mon, 24 Mar 2008 15:59:16 +0100
changeset 26370 2a4f0d0621f1
parent 26133 8ea867ad9a48
child 26372 f882403f0d56
permissions -rwxr-xr-x
remote CVSROOT: default to atbroy100 instead of sunbroy2;
adapted some paths;
     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 SRCS="CCL CTT Cube FOL FOLP HOL HOLCF LCF Provers Pure Sequents Tools ZF"
    12 
    13 export CVSROOT=/usr/proj/isabelle-repository/archive
    14 [ ! -d "$CVSROOT" ] && CVSROOT="${ISABELLE_USER:-$USER}@atbroy100.informatik.tu-muenchen.de:$CVSROOT"
    15 
    16 umask 022
    17 
    18 
    19 ## executables
    20 
    21 TAR=tar
    22 type -path gtar >/dev/null && TAR=gtar
    23 
    24 FIND=find
    25 type -path gfind >/dev/null && FIND=gfind
    26 
    27 [ -z "$CVS2CL" ] && type -path cvs2cl && CVS2CL=cvs2cl
    28 
    29 #paranoia setting for sunbroy
    30 PATH="/usr/local/dist/DIR/j2sdk1.5.0/bin:$PATH"
    31 
    32 PATH="/home/scala/bin:$PATH"
    33 
    34 
    35 ## diagnostics
    36 
    37 PRG=$(basename "$0")
    38 THIS=$(cd $(dirname "$0"); echo "$PWD")
    39 
    40 function usage()
    41 {
    42   cat <<EOF
    43 
    44 Usage: $PRG VERSION [NAME]
    45 
    46   Make Isabelle distribution from the master sources at TUM.
    47 
    48   VERSION may be either a tag like "IsabelleXXXX" that specifies the
    49   release to be exported from the repository, or "-" to checkout the
    50   current sources as an unofficial release.
    51 
    52   NAME specifies an explicit distribution name, by default it is
    53   derived from VERSION.
    54 
    55   Checklist for official releases (before running this script):
    56 
    57     * Check ANNOUNCE, README, INSTALL, NEWS, COPYRIGHT, CONTRIBUTORS.
    58     * Try "isatool makeall all" with Poly/ML, SML/NJ, etc.
    59     * Tag the current repository version, e.g.:
    60         cvs -d /home/isabelle-repository/archive rtag IsabelleXXXX isabelle
    61       PLEASE DO NOT DO THIS UNLESS YOU KNOW WHAT YOU ARE DOING!
    62 
    63    After running this script:
    64 
    65     * Symlink generated files in website/ directory to their appropriate
    66       places in the isabelle website sources.
    67 
    68 EOF
    69   exit 1
    70 }
    71 
    72 function fail()
    73 {
    74   echo "$1" >&2
    75   exit 2
    76 }
    77 
    78 
    79 ## process command line
    80 
    81 [ "$#" -ne 1 -a "$#" -ne 2 ] && usage
    82 
    83 VERSION="$1"; shift
    84 
    85 if [ "$#" -eq 0 ]; then
    86   DISTNAME=""
    87 else
    88   DISTNAME="$1"; shift
    89 fi
    90 
    91 
    92 ## main
    93 
    94 # dist version
    95 
    96 DATE=$(env LC_ALL=C date "+%d-%b-%Y")
    97 DISTDATE=$(env LC_ALL=C date "+%B %Y")
    98 
    99 if [ "$VERSION" = "-" ]; then
   100   DISTIDENT="Isabelle_$DATE"
   101   [ -z "$DISTNAME" ] && DISTNAME="$DISTIDENT"
   102   DISTVERSION="$DISTNAME"
   103   EXPORT="cvs -f -q checkout -P -d $DISTNAME isabelle"
   104   UNOFFICIAL=true
   105 else
   106   DISTIDENT="$VERSION"
   107   [ -z "$DISTNAME" ] && DISTNAME="$DISTIDENT"
   108   DISTVERSION="$DISTNAME: $DISTDATE"
   109   EXPORT="cvs -f -q export -r $VERSION -d $DISTNAME isabelle"
   110   UNOFFICIAL=""
   111 fi
   112 
   113 DISTBASE="$DISTPREFIX/dist-$DISTNAME"
   114 mkdir -p "$DISTBASE" || fail "Unable to create distribution base dir $DISTBASE!"
   115 [ -e "$DISTBASE/$DISTNAME" ] && fail "$DISTBASE/$DISTNAME already exists!"
   116 [ -e "$DISTBASE/pdf/$DISTNAME" ] && fail "$DISTBASE/pdf/$DISTNAME already exists!"
   117 
   118 
   119 # export repository
   120 
   121 echo "###"
   122 echo "### Exporting $DISTIDENT ..."
   123 echo "###"
   124 
   125 cd "$DISTBASE"
   126 
   127 $EXPORT || fail "Export failed!"
   128 
   129 if [ -n "$CVS2CL" ]; then
   130   cd $DISTNAME
   131   $CVS2CL
   132   gzip ChangeLog
   133   cp ChangeLog.gz ..
   134   cd ..
   135 fi
   136 
   137 $FIND . -name CVS -print | xargs rm -rf
   138 $FIND . -name .cvsignore -print | xargs rm -rf
   139 $FIND . "(" -name \*.thy -o -name \*.ML ")" -perm +111 -print | xargs chmod -x
   140 $FIND . -print | xargs chmod u+rw
   141 
   142 
   143 # build docs
   144 
   145 echo "###"
   146 echo "### Building docs ..."
   147 echo "###"
   148 
   149 cd "$DISTBASE/$DISTNAME/Doc"
   150 PDFLATEX=$(type -path pdflatex)
   151 
   152 for DOC in $(cat Contents)
   153 do
   154   pushd "$DOC" > /dev/null
   155   make dvi || fail "DVI document for $DOC failed!"
   156   { [ -n "$PDFLATEX" ] && make clean pdf; } || fail "PDF document for $DOC failed!"
   157   popd
   158 done
   159 
   160 
   161 # prepare dist dir for release
   162 
   163 echo "###"
   164 echo "### Preparing distribution ..."
   165 echo "###"
   166 
   167 cd "$DISTBASE/$DISTNAME" || fail "No dist directory: $DISTBASE/$DISTNAME"
   168 
   169 mkdir -p ../website
   170 cat > ../website/distinfo.mak <<EOF
   171 # this is a generated file - do not edit unless you know what you are doing!
   172 
   173 DISTNAME=$DISTNAME
   174 DISTIDENT=$DISTIDENT
   175 DISTBASE=$DISTBASE
   176 EOF
   177 
   178 cp Distribution/lib/html/library_index_content.template ../website/
   179 
   180 MOVE=$($FIND Doc \( -type f -a -not -type l -a -not -name isabelle_isar.pdf -a -not -name pghead.pdf -a \( -name \*.dvi -o -name \*.eps -o -name \*.ps -o -name \*.pdf \) -a -print \) | grep -v 'gfx/.*pdf')
   181 mv -f $MOVE Distribution/doc
   182 rm Distribution/doc/Isa-logics.eps
   183 rm -rf Doc
   184 
   185 mkdir src contrib
   186 mv $SRCS src
   187 
   188 mv Distribution/* .
   189 rmdir Distribution
   190 
   191 
   192 ( cd lib/browser; make; ) || fail "Failed to build graph browser!"
   193 
   194 ( cd lib/classes; ./mk; )
   195 [ -f lib/classes/isabelle.jar ] || fail "Failed to build Isabelle process wrapper!"
   196 
   197 if type -p scalac >/dev/null
   198 then
   199   ( cd lib/jedit/plugin; ./mk; )
   200   [ -f lib/jedit/isabelle.jar ] || fail "Failed to build jEdit plugin!"
   201 else
   202   echo "Warning: Scala unavailable -- skipping jEdit plugin"
   203 fi
   204 
   205 
   206 cp doc/isabelle*.eps lib/logo
   207 
   208 
   209 if [ -n "$UNOFFICIAL" ]; then
   210   {
   211     echo
   212     echo "IMPORTANT NOTE"
   213     echo "=============="
   214     echo
   215     echo "This is an unofficial release of Isabelle, created by $LOGNAME $DATE."
   216     echo
   217   } >ANNOUNCE
   218   perl -pi -e "s/val is_official = true/val is_official = false/" src/Pure/ROOT.ML
   219 fi
   220 
   221 perl -pi -e "s/ISABELLE_IDENTIFIER=\"\"/ISABELLE_IDENTIFIER=\"$DISTNAME\"/g;" lib/scripts/getsettings
   222 perl -pi -e "s/{ISABELLE}/$DISTNAME/g;" lib/html/library_index_header.template
   223 perl -pi -e "s/Isabelle repository version/$DISTVERSION/" src/Pure/ROOT.ML lib/Tools/version
   224 perl -pi -e "s/the internal repository version of Isabelle/$DISTVERSION/" README
   225 
   226 ( cd src; ../Admin/maketags; )
   227 
   228 rm -rf Admin
   229 rm -f TODO
   230 
   231 
   232 # create archive
   233 
   234 echo "###"
   235 echo "### Creating archives ..."
   236 echo "###"
   237 
   238 cd "$DISTBASE"
   239 
   240 echo "$DISTBASE/$DISTNAME.tar.gz" > ../ISABELLE_DIST
   241 
   242 rm -f Isabelle
   243 ln -s "$DISTNAME" Isabelle
   244 
   245 chown -R "$LOGNAME" "$DISTNAME"
   246 chmod -R u+w "$DISTNAME"
   247 chmod -R g=o "$DISTNAME"
   248 chgrp -R isabelle "$DISTNAME" Isabelle
   249 
   250 mkdir -p "pdf/$DISTNAME/doc"
   251 mv "$DISTNAME/doc/"*.pdf "pdf/$DISTNAME/doc"
   252 
   253 sync; sleep 3
   254 
   255 echo "$DISTNAME.tar.gz"
   256 "$TAR" cf "$DISTNAME.tar" Isabelle "$DISTNAME"
   257 gzip "$DISTNAME.tar"
   258 
   259 echo "${DISTNAME}_pdf.tar.gz"
   260 ( cd pdf; "$TAR" cf "../${DISTNAME}_pdf.tar" "$DISTNAME"; )
   261 gzip "${DISTNAME}_pdf.tar"
   262 
   263 mv "pdf/$DISTNAME/doc/"*.pdf "$DISTNAME/doc"
   264 rmdir "pdf/$DISTNAME/doc" "pdf/$DISTNAME" pdf
   265 
   266 
   267 # cleanup dist
   268 
   269 mv "$DISTNAME" "${DISTNAME}-old"
   270 mkdir "$DISTNAME"
   271 
   272 mv "${DISTNAME}-old/README" "${DISTNAME}-old/INSTALL" "${DISTNAME}-old/NEWS" \
   273   "${DISTNAME}-old/ANNOUNCE" "${DISTNAME}-old/COPYRIGHT" "${DISTNAME}-old/CONTRIBUTORS" \
   274   "$DISTNAME"
   275 mkdir "$DISTNAME/doc"
   276 mv "${DISTNAME}-old/doc/"*.pdf "${DISTNAME}-old/doc/Contents" "$DISTNAME/doc"
   277 
   278 chgrp -R isabelle "$DISTNAME"
   279 
   280 rm -rf "${DISTNAME}-old"
   281 
   282 
   283 # final note
   284 
   285 echo "###"
   286 echo "### Finished makedist."
   287 echo "###"