Admin/makedist
changeset 28942 043a42ba2a4d
parent 27647 ee452b218407
parent 28932 ccaa3355f7d3
child 29637 da018485b89d
equal deleted inserted replaced
28941:128459bd72d2 28942:043a42ba2a4d
     1 #!/usr/bin/env bash
     1 #!/usr/bin/env bash
     2 #
     2 #
     3 # $Id$
     3 # $Id$
     4 #
     4 #
     5 # makedist -- make Isabelle source distribution.
     5 # makedist -- make Isabelle source distribution
     6 
       
     7 
     6 
     8 ## global settings
     7 ## global settings
     9 
     8 
       
     9 REPOS="http://isabelle.in.tum.de/repos/isabelle"
       
    10 
    10 DISTPREFIX=${DISTPREFIX:-~/tmp/isadist}
    11 DISTPREFIX=${DISTPREFIX:-~/tmp/isadist}
    11 SRCS="CCL CTT Cube FOL FOLP HOL HOLCF LCF Provers Pure Sequents Tools ZF"
       
    12 
       
    13 export CVSROOT=/home/isabelle-repository/archive
       
    14 [ ! -d "$CVSROOT" ] && CVSROOT="${ISABELLE_USER:-$USER}@atbroy100.informatik.tu-muenchen.de:$CVSROOT"
       
    15 
       
    16 [ -z "$CVS2CL" ] && type -path cvs2cl >/dev/null && CVS2CL=cvs2cl
       
    17 
    12 
    18 umask 022
    13 umask 022
    19 
    14 
    20 
    15 
    21 ## diagnostics
    16 ## diagnostics
    25 
    20 
    26 function usage()
    21 function usage()
    27 {
    22 {
    28   cat <<EOF
    23   cat <<EOF
    29 
    24 
    30 Usage: $PRG VERSION [NAME]
    25 Usage: $PRG [OPTIONS] [VERSION]
    31 
    26 
    32   Make Isabelle distribution from the master sources at TUM.
    27   Options are:
    33 
    28     -r RELEASE         proper release with name"
    34   VERSION may be either a tag like "IsabelleXXXX" that specifies the
    29 
    35   release to be exported from the repository, or "-" to checkout the
    30   Make Isabelle distribution from the main Mercurial repository at TUM.
    36   current sources as an unofficial release.
    31 
    37 
    32   VERSION identifies the snapshot, using usual Mercurial terminology;
    38   NAME specifies an explicit distribution name, by default it is
    33   the default is RELEASE if given, otherwise "tip".
    39   derived from VERSION.
       
    40 
    34 
    41 EOF
    35 EOF
    42   exit 1
    36   exit 1
    43 }
    37 }
    44 
    38 
    49 }
    43 }
    50 
    44 
    51 
    45 
    52 ## process command line
    46 ## process command line
    53 
    47 
    54 [ "$#" -ne 1 -a "$#" -ne 2 ] && usage
    48 # options
    55 
    49 
    56 VERSION="$1"; shift
    50 RELEASE=""
    57 
    51 
    58 if [ "$#" -eq 0 ]; then
    52 while getopts "r:" OPT
    59   DISTNAME=""
    53 do
    60 else
    54   case "$OPT" in
    61   DISTNAME="$1"; shift
    55     r)
    62 fi
    56       RELEASE="$OPTARG"
       
    57       ;;
       
    58     \?)
       
    59       usage
       
    60       ;;
       
    61   esac
       
    62 done
       
    63 
       
    64 shift $(($OPTIND - 1))
       
    65 
       
    66 
       
    67 # args
       
    68 
       
    69 VERSION=""
       
    70 [ "$#" -gt 0 ] && { VERSION="$1"; shift; }
       
    71 [ -z "$VERSION" ] && VERSION="$RELEASE"
       
    72 [ -z "$VERSION" ] && VERSION="tip"
       
    73 
       
    74 [ "$#" -gt 0 ] && usage
    63 
    75 
    64 
    76 
    65 ## main
    77 ## main
    66 
    78 
    67 # dist version
    79 # tmp
       
    80 
       
    81 TMP="tmp-$USER$$"
       
    82 function purge_tmp () { rm -rf "$DISTPREFIX/$TMP"; }
       
    83 
       
    84 
       
    85 # retrieve archive and resolve version identifier
       
    86 
       
    87 mkdir "$DISTPREFIX/$TMP" || fail "Failed to create fresh directory"
       
    88 cd "$DISTPREFIX/$TMP"
       
    89 
       
    90 echo "###"
       
    91 echo "### Retrieving Mercurial repository $VERSION"
       
    92 echo "###"
       
    93 
       
    94 { wget -q "$REPOS/archive/${VERSION}.tar.gz" -O- | tar -xzf -; } || \
       
    95   fail "Failed to retrieve $VERSION"
       
    96 
       
    97 IDENT=$(echo * | sed 's/isabelle-//')
       
    98 
       
    99 rm -f "isabelle-$IDENT/.hg_archival.txt"
       
   100 rm -f "isabelle-$IDENT/.hgtags"
       
   101 rm -f "isabelle-$IDENT/.hgignore"
       
   102 rm -f "isabelle-$IDENT/README_REPOSITORY"
       
   103 
       
   104 
       
   105 # dist name
    68 
   106 
    69 DATE=$(env LC_ALL=C date "+%d-%b-%Y")
   107 DATE=$(env LC_ALL=C date "+%d-%b-%Y")
    70 DISTDATE=$(env LC_ALL=C date "+%B %Y")
   108 DISTDATE=$(env LC_ALL=C date "+%B %Y")
    71 
   109 
    72 if [ "$VERSION" = "-" ]; then
   110 if [ -z "$RELEASE" ]; then
    73   DISTIDENT="Isabelle_$DATE"
   111   DISTNAME="Isabelle_$DATE"
    74   [ -z "$DISTNAME" ] && DISTNAME="$DISTIDENT"
   112   DISTVERSION="Isabelle repository snapshot $IDENT ($DATE)"
    75   DISTVERSION="$DISTNAME"
       
    76   EXPORT="cvs -f -q checkout -P -d $DISTNAME isabelle"
       
    77   UNOFFICIAL=true
       
    78 else
   113 else
    79   DISTIDENT="$VERSION"
   114   DISTNAME="$RELEASE"
    80   [ -z "$DISTNAME" ] && DISTNAME="$DISTIDENT"
       
    81   DISTVERSION="$DISTNAME: $DISTDATE"
   115   DISTVERSION="$DISTNAME: $DISTDATE"
    82   EXPORT="cvs -f -q export -r $VERSION -d $DISTNAME isabelle"
       
    83   UNOFFICIAL=""
       
    84 fi
   116 fi
    85 
   117 
    86 DISTBASE="$DISTPREFIX/dist-$DISTNAME"
   118 DISTBASE="$DISTPREFIX/dist-$DISTNAME"
    87 mkdir -p "$DISTBASE" || fail "Unable to create distribution base dir $DISTBASE!"
   119 mkdir -p "$DISTBASE" || { purge_tmp; fail "Unable to create distribution base dir $DISTBASE!"; }
    88 [ -e "$DISTBASE/$DISTNAME" ] && fail "$DISTBASE/$DISTNAME already exists!"
   120 [ -e "$DISTBASE/$DISTNAME" ] && { purge_tmp; fail "$DISTBASE/$DISTNAME already exists!"; }
    89 [ -e "$DISTBASE/pdf/$DISTNAME" ] && fail "$DISTBASE/pdf/$DISTNAME already exists!"
   121 [ -e "$DISTBASE/pdf/$DISTNAME" ] && { purge_tmp; fail "$DISTBASE/pdf/$DISTNAME already exists!"; }
    90 
       
    91 
       
    92 # export repository
       
    93 
       
    94 echo "###"
       
    95 echo "### Exporting $DISTIDENT ..."
       
    96 echo "###"
       
    97 
   122 
    98 cd "$DISTBASE"
   123 cd "$DISTBASE"
    99 
   124 mv "$DISTPREFIX/$TMP/isabelle-$IDENT" "$DISTNAME"
   100 $EXPORT || fail "Export failed!"
   125 purge_tmp
   101 
   126 
   102 if [ -n "$CVS2CL" -a -n "$UNOFFICIAL" ]; then
   127 cd "$DISTNAME" || fail "No dist directory: $DISTBASE/$DISTNAME"
   103   cd $DISTNAME
   128 
   104   $CVS2CL
   129 
   105   gzip ChangeLog
   130 # website
   106   cp ChangeLog.gz ..
   131 
   107   cd ..
   132 mkdir -p ../website
   108 fi
   133 cat > ../website/distinfo.mak <<EOF
   109 
   134 # this is a generated file - do not edit unless you know what you are doing!
   110 find . -name CVS -print | xargs rm -rf
   135 DISTNAME=$DISTNAME
       
   136 DISTBASE=$DISTBASE
       
   137 EOF
       
   138 
       
   139 cp lib/html/library_index_content.template ../website/
       
   140 
       
   141 
       
   142 # prepare dist for release
       
   143 
       
   144 echo "###"
       
   145 echo "### Preparing distribution $DISTNAME"
       
   146 echo "###"
       
   147 
   111 find . -name .cvsignore -print | xargs rm -rf
   148 find . -name .cvsignore -print | xargs rm -rf
   112 find . "(" -name \*.thy -o -name \*.ML ")" -perm +111 -print | xargs chmod -x
   149 find . "(" -name \*.thy -o -name \*.ML ")" -perm +111 -print | xargs chmod -x
   113 find . -print | xargs chmod u+rw
   150 find . -print | xargs chmod u+rw
   114 
   151 
   115 
   152 ./Admin/build all || fail "Failed to build distribution"
   116 # build components
   153 rm -rf Admin
   117 
   154 
   118 "$DISTBASE/$DISTNAME/Admin/build" all || fail "Failed to build distribution"
   155 MOVE=$(find doc-src \( -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')
   119 
   156 mv -f $MOVE doc
   120 
   157 rm doc/Isa-logics.eps
   121 # prepare dist dir for release
   158 rm doc/codegen_process.pdf
   122 
   159 rm -rf doc-src
   123 echo "###"
   160 
   124 echo "### Preparing distribution ..."
   161 mkdir contrib
   125 echo "###"
       
   126 
       
   127 cd "$DISTBASE/$DISTNAME" || fail "No dist directory: $DISTBASE/$DISTNAME"
       
   128 
       
   129 mkdir -p ../website
       
   130 cat > ../website/distinfo.mak <<EOF
       
   131 # this is a generated file - do not edit unless you know what you are doing!
       
   132 
       
   133 DISTNAME=$DISTNAME
       
   134 DISTIDENT=$DISTIDENT
       
   135 DISTBASE=$DISTBASE
       
   136 EOF
       
   137 
       
   138 cp Distribution/lib/html/library_index_content.template ../website/
       
   139 
       
   140 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')
       
   141 mv -f $MOVE Distribution/doc
       
   142 rm Distribution/doc/Isa-logics.eps
       
   143 rm Distribution/doc/codegen_process.pdf
       
   144 rm -rf Doc
       
   145 
       
   146 mkdir src contrib
       
   147 mv $SRCS src
       
   148 
       
   149 mv Distribution/* .
       
   150 rmdir Distribution
       
   151 
       
   152 
   162 
   153 cp doc/isabelle*.eps lib/logo
   163 cp doc/isabelle*.eps lib/logo
   154 
   164 
   155 
   165 
   156 if [ -n "$UNOFFICIAL" ]; then
   166 if [ -z "$RELEASE" ]; then
   157   {
   167   {
   158     echo
   168     echo
   159     echo "IMPORTANT NOTE"
   169     echo "IMPORTANT NOTE"
   160     echo "=============="
   170     echo "=============="
   161     echo
   171     echo
   162     echo "This is an unofficial snapshot of Isabelle, created by $LOGNAME $DATE."
   172     echo "This is an unofficial snapshot of Isabelle, created by $LOGNAME $DATE."
       
   173     echo "See $REPOS/log/$IDENT for details."
   163     echo
   174     echo
   164   } >ANNOUNCE
   175   } >ANNOUNCE
   165 else
   176 else
   166   perl -pi -e "s/val is_official = false/val is_official = true/" src/Pure/ROOT.ML
   177   perl -pi -e "s,val is_official = false,val is_official = true,g" src/Pure/ROOT.ML
   167 fi
   178 fi
   168 
   179 
   169 perl -pi -e "s/ISABELLE_IDENTIFIER=\"\"/ISABELLE_IDENTIFIER=\"$DISTNAME\"/g;" lib/scripts/getsettings
   180 perl -pi -e "s,val changelog = \"\",val changelog = \"$REPOS/log/$IDENT\",g" src/Pure/ROOT.ML
   170 perl -pi -e "s/{ISABELLE}/$DISTNAME/g;" lib/html/library_index_header.template
   181 perl -pi -e "s,ISABELLE_IDENTIFIER=\"\",ISABELLE_IDENTIFIER=\"$DISTNAME\",g" lib/scripts/getsettings
   171 perl -pi -e "s/Isabelle repository version/$DISTVERSION/" src/Pure/ROOT.ML lib/Tools/version
   182 perl -pi -e "s,{ISABELLE},$DISTNAME,g" lib/html/library_index_header.template
   172 perl -pi -e "s/the internal repository version of Isabelle/$DISTVERSION/" README
   183 perl -pi -e "s,Isabelle repository version,$DISTVERSION,g" src/Pure/ROOT.ML lib/Tools/version
   173 
   184 perl -pi -e "s,the internal repository version of Isabelle,$DISTVERSION,g" README
   174 
   185 
   175 rm -rf Admin
   186 
   176 
   187 # create archives
   177 
       
   178 # create archive
       
   179 
   188 
   180 echo "###"
   189 echo "###"
   181 echo "### Creating archives ..."
   190 echo "### Creating archives ..."
   182 echo "###"
   191 echo "###"
   183 
   192 
   184 cd "$DISTBASE"
   193 cd "$DISTBASE"
   185 
   194 
   186 echo "$DISTBASE/$DISTNAME.tar.gz" > ../ISABELLE_DIST
   195 echo "$DISTBASE/$DISTNAME.tar.gz" > ../ISABELLE_DIST
       
   196 echo "$IDENT" >../ISABELLE_IDENT
   187 
   197 
   188 rm -f Isabelle
   198 rm -f Isabelle
   189 ln -s "$DISTNAME" Isabelle
   199 ln -s "$DISTNAME" Isabelle
   190 
   200 
   191 chown -R "$LOGNAME" "$DISTNAME"
   201 chown -R "$LOGNAME" "$DISTNAME"
   195 
   205 
   196 mkdir -p "pdf/$DISTNAME/doc"
   206 mkdir -p "pdf/$DISTNAME/doc"
   197 mv "$DISTNAME/doc/"*.pdf "pdf/$DISTNAME/doc"
   207 mv "$DISTNAME/doc/"*.pdf "pdf/$DISTNAME/doc"
   198 
   208 
   199 echo "$DISTNAME.tar.gz"
   209 echo "$DISTNAME.tar.gz"
   200 tar cf "$DISTNAME.tar" Isabelle "$DISTNAME"
   210 tar -czf "$DISTNAME.tar.gz" Isabelle "$DISTNAME"
   201 gzip "$DISTNAME.tar"
       
   202 
   211 
   203 echo "${DISTNAME}_pdf.tar.gz"
   212 echo "${DISTNAME}_pdf.tar.gz"
   204 ( cd pdf; tar cf "../${DISTNAME}_pdf.tar" "$DISTNAME"; )
   213 tar -C pdf -czf "${DISTNAME}_pdf.tar.gz" "$DISTNAME"
   205 gzip "${DISTNAME}_pdf.tar"
       
   206 
   214 
   207 mv "pdf/$DISTNAME/doc/"*.pdf "$DISTNAME/doc"
   215 mv "pdf/$DISTNAME/doc/"*.pdf "$DISTNAME/doc"
   208 rmdir "pdf/$DISTNAME/doc" "pdf/$DISTNAME" pdf
   216 rmdir "pdf/$DISTNAME/doc" "pdf/$DISTNAME" pdf
   209 
   217 
   210 
   218 
   221 
   229 
   222 chgrp -R isabelle "$DISTNAME"
   230 chgrp -R isabelle "$DISTNAME"
   223 
   231 
   224 rm -rf "${DISTNAME}-old"
   232 rm -rf "${DISTNAME}-old"
   225 
   233 
   226 
       
   227 echo "###"
       
   228 echo "### Finished makedist."
       
   229 echo "###"