24 exit 2 |
24 exit 2 |
25 fi |
25 fi |
26 } |
26 } |
27 |
27 |
28 |
28 |
29 ## Poly/ML executable and database |
29 ## compiler executables and libraries |
30 |
|
31 ML_DBASE_PREFIX="" |
|
32 |
30 |
33 POLY="$ML_HOME/poly" |
31 POLY="$ML_HOME/poly" |
34 check_file "$POLY" |
32 check_file "$POLY" |
35 |
33 |
36 if [ -z "$ML_DBASE" ]; then |
34 if [ "$(basename "$ML_HOME")" = bin ]; then |
37 if [ ! -e "$ML_HOME/ML_dbase" -a "$(basename "$ML_HOME")" = bin ]; then |
35 POLYLIB="$(cd "$ML_HOME"; cd "$(pwd -P)"; cd ../lib; pwd)" |
38 ML_DBASE_HOME="$(cd "$ML_HOME"; cd "$(pwd -P)"; cd ../lib/poly; pwd)" |
|
39 else |
|
40 ML_DBASE_HOME="$ML_HOME" |
|
41 fi |
|
42 if [ -z "$COPYDB" ]; then |
|
43 ML_DBASE_PREFIX="$ML_DBASE_HOME/" |
|
44 ML_DBASE="ML_dbase" |
|
45 else |
|
46 ML_DBASE="$ML_DBASE_HOME/ML_dbase" |
|
47 fi |
|
48 export POLYPATH="$ML_DBASE_HOME" |
|
49 else |
36 else |
50 export POLYPATH="$(dirname "$ML_DBASE")" |
37 POLYLIB="$ML_HOME" |
51 fi |
38 fi |
52 |
39 |
53 DISCGARB_OPTIONS="-d -c" |
40 export LD_LIBRARY_PATH="$POLYLIB:$LD_LIBRARY_PATH" |
54 |
41 export DYLD_LIBRARY_PATH="$POLYLIB:$DYLD_LIBRARY_PATH" |
55 EXIT="fun exit 0 = (OS.Process.exit OS.Process.success): unit | exit _ = OS.Process.exit OS.Process.failure;" |
|
56 |
42 |
57 |
43 |
58 ## prepare databases |
44 ## prepare databases |
59 |
45 |
60 if [ -z "$INFILE" ]; then |
46 if [ -z "$INFILE" ]; then |
61 check_file "$ML_DBASE_PREFIX$ML_DBASE" |
47 INIT="" |
62 INFILE="$ML_DBASE" |
48 EXIT="fun exit 0 = (OS.Process.exit OS.Process.success): unit | exit _ = OS.Process.exit OS.Process.failure;" |
63 MLTEXT="val use = PolyML.use; $EXIT $MLTEXT" |
|
64 DISCGARB_OPTIONS="$DISCGARB_OPTIONS -S max" |
|
65 else |
49 else |
66 COPYDB=true |
50 check_file "$INFILE" |
|
51 INIT="(Signal.signal (2, Signal.SIG_HANDLE (fn _ => Process.interruptConsoleProcesses ())); PolyML.SaveState.loadState \"$INFILE\" handle Fail msg => (TextIO.output (TextIO.stdErr, msg ^ \"\\n\"); OS.Process.exit OS.Process.failure));" |
|
52 EXIT="" |
67 fi |
53 fi |
68 |
54 |
69 if [ -z "$OUTFILE" ]; then |
55 if [ -z "$OUTFILE" ]; then |
70 DB="$INFILE" |
56 COMMIT='fun commit () = (TextIO.output (TextIO.stdErr, "Error - Database is not opened for writing.\n"); false);' |
71 ML_OPTIONS="-r $ML_OPTIONS" |
|
72 elif [ "$INFILE" -ef "$OUTFILE" ]; then |
|
73 DB="$INFILE" |
|
74 elif [ -n "$COPYDB" ]; then |
|
75 [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; } |
|
76 cp "$INFILE" "$OUTFILE" || fail_out |
|
77 chmod +w "$OUTFILE" || fail_out |
|
78 DB="$OUTFILE" |
|
79 else |
57 else |
80 [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; } |
58 if [ -z "$COMPRESS" ]; then |
81 echo "PolyML.make_database \"$OUTFILE\"; PolyML.quit();" | "$POLY" -r "$INFILE" |
59 COMMIT="fun commit () = (TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.SaveState.saveState \"$OUTFILE\"; true);" |
82 [ -f "$OUTFILE" ] || fail_out |
60 else |
83 DB="$OUTFILE" |
61 COMMIT="fun commit () = (PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.SaveState.saveState \"$OUTFILE\"; true);" |
|
62 fi |
|
63 [ -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; } |
84 fi |
64 fi |
85 |
65 |
86 |
66 |
87 ## run it! |
67 ## run it! |
|
68 |
|
69 MLTEXT="$INIT $EXIT $COMMIT $MLTEXT" |
|
70 MLEXIT="commit();" |
88 |
71 |
89 if [ -z "$TERMINATE" ]; then |
72 if [ -z "$TERMINATE" ]; then |
90 FEEDER_OPTS="" |
73 FEEDER_OPTS="" |
91 else |
74 else |
92 FEEDER_OPTS="-q" |
75 FEEDER_OPTS="-q" |
93 fi |
76 fi |
94 |
77 |
95 DB_INFO="$(ls -l "$DB" 2>/dev/null)" |
78 "$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \ |
96 |
79 { read FPID; "$POLY" -q $ML_OPTIONS; RC="$?"; kill -HUP "$FPID"; exit "$RC"; } |
97 "$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" $FEEDER_OPTS | { |
|
98 read FPID; "$POLY" $ML_OPTIONS "$DB"; |
|
99 RC="$?"; kill -HUP "$FPID"; exit "$RC"; } |
|
100 RC="$?" |
80 RC="$?" |
101 |
81 |
102 NEW_DB_INFO="$(ls -l "$DB" 2>/dev/null)" |
|
103 [ -n "$OUTFILE" -a -n "$COMPRESS" -a "$DB_INFO" != "$NEW_DB_INFO" ] && \ |
|
104 "$POLY" $DISCGARB_OPTIONS "$OUTFILE" |
|
105 [ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE" |
82 [ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE" |
106 |
83 |
107 exit "$RC" |
84 exit "$RC" |