5 # makedist -- make Isabelle source distribution.
10 DISTPREFIX=${DISTPREFIX:-~/tmp/isadist}
11 SRCS="CCL CTT Cube FOL FOLP HOL HOLCF LCF Provers Pure Sequents Tools ZF"
13 export CVSROOT=/usr/proj/isabelle-repository/archive
14 [ ! -d "$CVSROOT" ] && CVSROOT="${ISABELLE_USER:-$USER}@atbroy100.informatik.tu-muenchen.de:$CVSROOT"
22 type -path gtar >/dev/null && TAR=gtar
25 type -path gfind >/dev/null && FIND=gfind
27 [ -z "$CVS2CL" ] && type -path cvs2cl && CVS2CL=cvs2cl
29 #paranoia setting for sunbroy
30 PATH="/usr/local/dist/DIR/j2sdk1.5.0/bin:$PATH"
32 PATH="/home/scala/bin:$PATH"
38 THIS=$(cd $(dirname "$0"); echo "$PWD")
44 Usage: $PRG VERSION [NAME]
46 Make Isabelle distribution from the master sources at TUM.
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.
52 NAME specifies an explicit distribution name, by default it is
55 Checklist for official releases (before running this script):
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!
63 After running this script:
65 * Symlink generated files in website/ directory to their appropriate
66 places in the isabelle website sources.
79 ## process command line
81 [ "$#" -ne 1 -a "$#" -ne 2 ] && usage
85 if [ "$#" -eq 0 ]; then
96 DATE=$(env LC_ALL=C date "+%d-%b-%Y")
97 DISTDATE=$(env LC_ALL=C date "+%B %Y")
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"
107 [ -z "$DISTNAME" ] && DISTNAME="$DISTIDENT"
108 DISTVERSION="$DISTNAME: $DISTDATE"
109 EXPORT="cvs -f -q export -r $VERSION -d $DISTNAME isabelle"
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!"
122 echo "### Exporting $DISTIDENT ..."
127 $EXPORT || fail "Export failed!"
129 if [ -n "$CVS2CL" ]; then
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
146 echo "### Building docs ..."
149 cd "$DISTBASE/$DISTNAME/Doc"
150 PDFLATEX=$(type -path pdflatex)
152 for DOC in $(cat Contents)
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!"
161 # prepare dist dir for release
164 echo "### Preparing distribution ..."
167 cd "$DISTBASE/$DISTNAME" || fail "No dist directory: $DISTBASE/$DISTNAME"
170 cat > ../website/distinfo.mak <<EOF
171 # this is a generated file - do not edit unless you know what you are doing!
178 cp Distribution/lib/html/library_index_content.template ../website/
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
192 ( cd lib/browser; make; ) || fail "Failed to build graph browser!"
194 ( cd lib/classes; ./mk; )
195 [ -f lib/classes/isabelle.jar ] || fail "Failed to build Isabelle process wrapper!"
197 if type -p scalac >/dev/null
199 ( cd lib/jedit/plugin; ./mk; )
200 [ -f lib/jedit/isabelle.jar ] || fail "Failed to build jEdit plugin!"
202 echo "Warning: Scala unavailable -- skipping jEdit plugin"
206 cp doc/isabelle*.eps lib/logo
209 if [ -n "$UNOFFICIAL" ]; then
212 echo "IMPORTANT NOTE"
213 echo "=============="
215 echo "This is an unofficial release of Isabelle, created by $LOGNAME $DATE."
218 perl -pi -e "s/val is_official = true/val is_official = false/" src/Pure/ROOT.ML
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
226 ( cd src; ../Admin/maketags; )
235 echo "### Creating archives ..."
240 echo "$DISTBASE/$DISTNAME.tar.gz" > ../ISABELLE_DIST
243 ln -s "$DISTNAME" Isabelle
245 chown -R "$LOGNAME" "$DISTNAME"
246 chmod -R u+w "$DISTNAME"
247 chmod -R g=o "$DISTNAME"
248 chgrp -R isabelle "$DISTNAME" Isabelle
250 mkdir -p "pdf/$DISTNAME/doc"
251 mv "$DISTNAME/doc/"*.pdf "pdf/$DISTNAME/doc"
255 echo "$DISTNAME.tar.gz"
256 "$TAR" cf "$DISTNAME.tar" Isabelle "$DISTNAME"
259 echo "${DISTNAME}_pdf.tar.gz"
260 ( cd pdf; "$TAR" cf "../${DISTNAME}_pdf.tar" "$DISTNAME"; )
261 gzip "${DISTNAME}_pdf.tar"
263 mv "pdf/$DISTNAME/doc/"*.pdf "$DISTNAME/doc"
264 rmdir "pdf/$DISTNAME/doc" "pdf/$DISTNAME" pdf
269 mv "$DISTNAME" "${DISTNAME}-old"
272 mv "${DISTNAME}-old/README" "${DISTNAME}-old/INSTALL" "${DISTNAME}-old/NEWS" \
273 "${DISTNAME}-old/ANNOUNCE" "${DISTNAME}-old/COPYRIGHT" "${DISTNAME}-old/CONTRIBUTORS" \
275 mkdir "$DISTNAME/doc"
276 mv "${DISTNAME}-old/doc/"*.pdf "${DISTNAME}-old/doc/Contents" "$DISTNAME/doc"
278 chgrp -R isabelle "$DISTNAME"
280 rm -rf "${DISTNAME}-old"
286 echo "### Finished makedist."