src/Tools/Metis/make_metis
author blanchet
Wed, 15 Sep 2010 18:51:48 +0200
changeset 39427 a28be69dcb68
parent 39415 8ebe8dbe16ba
child 39433 3e41c9d29769
permissions -rwxr-xr-x
update comment

#!/usr/bin/env bash
#
# make_metis - turn original Metis files into Isabelle ML source.
#
# Signatures, structures, and functors are renamed to have a "Metis_" prefix.
# A few other ad hoc transformations are performed to ensure that the sources
# compile within Isabelle on Poly/ML and SML/NJ.

THIS=$(cd "$(dirname "$0")"; echo $PWD)

(
  cat <<EOF
(*
   This file was generated by the "make_metis" script. The BSD License is used
   with Joe Hurd's kind permission. Extract from a September 13, 2010 email
   written by Joe Hurd:

       I hereby give permission to the Isabelle team to release Metis as part
       of Isabelle, with the Metis code covered under the Isabelle BSD
       license.
*)

(******************************************************************)
(* GENERATED FILE -- DO NOT EDIT -- GENERATED FILE -- DO NOT EDIT *)
(* GENERATED FILE -- DO NOT EDIT -- GENERATED FILE -- DO NOT EDIT *)
(* GENERATED FILE -- DO NOT EDIT -- GENERATED FILE -- DO NOT EDIT *)
(******************************************************************)

print_depth 0;

EOF

  for FILE in $(cat "$THIS/FILES")
  do
    echo
    echo "(**** Original file: $FILE ****)"
    echo
    echo -e "$FILE" >&2
    "$THIS/scripts/mlpp" -c polyml "src/$FILE" | \
    perl -p -e \
's/type name$/type name = string/;'\
's/\bref\b/Unsynchronized.ref/g;'\
's/\bPolyML.pointerEq\b/pointer_eq/g;'\
's/\bRL\b/Metis_RL/g;'\
"`grep "^\(signature\|structure\|functor\)" src/*.{sig,sml} | \
  sed "s/[^:]*:[a-z]* \([A-Za-z0-9_]*\).*/\1/" | \
  tr " " "\n" | \
  sort | \
  uniq | \
  sed 's/\(.*\)/s\/\\\\b\1\\\\b\/Metis_\1\/g;/'`"
  done

  cat <<EOF
;
print_depth 10;
EOF

) > metis.ML