| 11391 |      1 | #!/usr/bin/env bash
 | 
| 2339 |      2 | #
 | 
|  |      3 | # $Id$
 | 
| 9789 |      4 | # Author: Markus Wenzel, TU Muenchen
 | 
|  |      5 | # License: GPL (GNU GENERAL PUBLIC LICENSE)
 | 
| 2339 |      6 | #
 | 
|  |      7 | # mk - build Pure Isabelle.
 | 
|  |      8 | #
 | 
| 10102 |      9 | # Requires proper Isabelle settings environment (cf. IsaMakefile).
 | 
| 2339 |     10 | 
 | 
|  |     11 | 
 | 
|  |     12 | ## diagnostics
 | 
|  |     13 | 
 | 
| 3774 |     14 | function usage()
 | 
|  |     15 | {
 | 
|  |     16 |   echo
 | 
|  |     17 |   echo "Usage: $PRG [OPTIONS]"
 | 
|  |     18 |   echo
 | 
|  |     19 |   echo "  Make Pure Isabelle."
 | 
|  |     20 |   echo
 | 
| 10102 |     21 |   echo "    -C           tell ML system to copy output image"
 | 
|  |     22 |   echo "    -r           prepare RAW image only"
 | 
| 3774 |     23 |   echo
 | 
|  |     24 |   exit 1
 | 
|  |     25 | }
 | 
|  |     26 | 
 | 
| 2339 |     27 | function fail()
 | 
|  |     28 | {
 | 
|  |     29 |   echo "$1" >&2
 | 
|  |     30 |   exit 2
 | 
|  |     31 | }
 | 
|  |     32 | 
 | 
|  |     33 | 
 | 
| 3774 |     34 | ## process command line
 | 
|  |     35 | 
 | 
|  |     36 | # options
 | 
|  |     37 | 
 | 
| 10102 |     38 | COPY=""
 | 
| 3774 |     39 | RAW=""
 | 
|  |     40 | 
 | 
| 10102 |     41 | while getopts "Cr" OPT
 | 
| 3774 |     42 | do
 | 
|  |     43 |   case "$OPT" in
 | 
| 10102 |     44 |     C)
 | 
|  |     45 |       COPY="-C"
 | 
|  |     46 |       ;;
 | 
| 3774 |     47 |     r)
 | 
|  |     48 |       RAW=true
 | 
|  |     49 |       ;;
 | 
|  |     50 |     \?)
 | 
|  |     51 |       usage
 | 
|  |     52 |       ;;
 | 
|  |     53 |   esac
 | 
|  |     54 | done
 | 
|  |     55 | 
 | 
|  |     56 | shift $(($OPTIND - 1))
 | 
|  |     57 | 
 | 
|  |     58 | 
 | 
|  |     59 | # args
 | 
|  |     60 | 
 | 
| 9789 |     61 | [ "$#" -ne 0 ] && usage
 | 
| 3774 |     62 | 
 | 
|  |     63 | 
 | 
| 2339 |     64 | ## main
 | 
|  |     65 | 
 | 
| 4442 |     66 | # get compatibility file
 | 
|  |     67 | 
 | 
| 9789 |     68 | ML_SYSTEM_BASE=$(echo "$ML_SYSTEM" | cut -f1 -d-)
 | 
| 3056 |     69 | [ -z "$ML_SYSTEM" ] && \
 | 
| 6186 |     70 |   fail "Missing ML system settings! Probably not run via 'isatool make'."
 | 
| 2339 |     71 | 
 | 
|  |     72 | COMPAT=""
 | 
|  |     73 | [ -f "ML-Systems/$ML_SYSTEM_BASE.ML" ] && COMPAT="ML-Systems/$ML_SYSTEM_BASE.ML"
 | 
|  |     74 | [ -f "ML-Systems/$ML_SYSTEM.ML" ] && COMPAT="ML-Systems/$ML_SYSTEM.ML"
 | 
|  |     75 | [ -z "$COMPAT" ] && fail "Missing compatibility file for ML system \"$ML_SYSTEM\"!"
 | 
|  |     76 | 
 | 
| 4442 |     77 | 
 | 
|  |     78 | # prepare log dir
 | 
|  |     79 | 
 | 
|  |     80 | LOGDIR="$ISABELLE_OUTPUT/log"
 | 
|  |     81 | mkdir -p "$LOGDIR"
 | 
|  |     82 | 
 | 
|  |     83 | 
 | 
|  |     84 | # run isabelle
 | 
|  |     85 | 
 | 
|  |     86 | SECONDS=0
 | 
|  |     87 | 
 | 
| 3774 |     88 | if [ -z "$RAW" ]; then
 | 
| 4442 |     89 |   ITEM="Pure"
 | 
| 7277 |     90 |   echo "Building $ITEM ..."
 | 
| 4442 |     91 |   LOG="$LOGDIR/$ITEM"
 | 
|  |     92 | 
 | 
| 10102 |     93 |   "$ISABELLE" $COPY \
 | 
| 3774 |     94 |     -e "val ml_system = \"$ML_SYSTEM\";" \
 | 
| 4495 |     95 |     -e "(use\"$COMPAT\"; use\"ROOT.ML\") handle _ => exit 1;" \
 | 
| 10900 |     96 |     -f -c -q -w RAW_ML_SYSTEM Pure > "$LOG" 2>&1
 | 
| 9789 |     97 |   RC="$?"
 | 
| 3774 |     98 | else
 | 
| 4442 |     99 |   ITEM="RAW"
 | 
| 7277 |    100 |   echo "Building $ITEM ..."
 | 
| 4442 |    101 |   LOG="$LOGDIR/$ITEM"
 | 
|  |    102 | 
 | 
| 10102 |    103 |   "$ISABELLE" $COPY \
 | 
| 3774 |    104 |     -e "val ml_system = \"$ML_SYSTEM\";" \
 | 
| 10900 |    105 |     -e "use\"$COMPAT\" handle _ => exit 1;" \
 | 
| 9789 |    106 |     -q -w RAW_ML_SYSTEM RAW > "$LOG" 2>&1
 | 
|  |    107 |   RC="$?"
 | 
| 3774 |    108 | fi
 | 
| 4442 |    109 | 
 | 
| 9789 |    110 | ELAPSED=$("$ISABELLE_HOME/lib/scripts/showtime" "$SECONDS")
 | 
| 4442 |    111 | 
 | 
|  |    112 | 
 | 
|  |    113 | # exit status
 | 
|  |    114 | 
 | 
| 9789 |    115 | if [ "$RC" -eq 0 ]; then
 | 
| 7277 |    116 |   echo "Finished $ITEM ($ELAPSED elapsed time)"
 | 
| 4442 |    117 |   gzip --force "$LOG"
 | 
|  |    118 | else
 | 
| 7263 |    119 |   echo "$ITEM FAILED"
 | 
| 4442 |    120 |   echo "(see also $LOG)"
 | 
| 9789 |    121 |   echo; tail "$LOG"; echo
 | 
| 4442 |    122 | fi
 | 
|  |    123 | 
 | 
| 9789 |    124 | exit "$RC"
 |