lib/Tools/mkroot
author wenzelm
Sun, 05 Aug 2012 16:20:34 +0200
changeset 48682 162579d4ba15
child 48683 eeb4480b5877
permissions -rwxr-xr-x
added mkroot: prepare session root directory;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48682
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     1
#!/usr/bin/env bash
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     2
#
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     3
# Author: Makarius
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     4
#
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     5
# DESCRIPTION: prepare session root directory
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     6
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     7
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     8
## diagnostics
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
     9
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    10
PRG="$(basename "$0")"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    11
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    12
function usage()
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    13
{
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    14
  echo
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    15
  echo "Usage: isabelle $PRG NAME"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    16
  echo
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    17
  echo "  Prepare session root directory, adding session NAME with"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    18
  echo "  built-in document preparation."
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    19
  echo
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    20
  exit 1
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    21
}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    22
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    23
function fail()
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    24
{
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    25
  echo "$1" >&2
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    26
  exit 2
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    27
}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    28
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    29
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    30
## process command line
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    31
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    32
[ "$#" -ne 1 -o "$1" = "-?" ] && usage
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    33
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    34
DIR_NAME="$1"; shift
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    35
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    36
DIR="$(dirname "$DIR_NAME")"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    37
NAME="$(basename "$DIR_NAME")"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    38
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    39
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    40
## main
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    41
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    42
[ -e "$DIR_NAME" ] && fail "Cannot overwrite existing \"$DIR_NAME\""
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    43
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    44
echo
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    45
echo "Preparing session \"$NAME\" ..."
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    46
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    47
mkdir -p "$DIR_NAME" || fail "Bad directory: \"$DIR_NAME\""
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    48
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    49
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    50
# example theory
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    51
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    52
echo "creating $DIR_NAME/Ex.thy"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    53
cat > "$DIR_NAME/Ex.thy" <<EOF
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    54
header {* Some example theory *}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    55
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    56
theory Ex imports Main
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    57
begin
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    58
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    59
text {* Some text here. *}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    60
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    61
end
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    62
EOF
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    63
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    64
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    65
# document directory
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    66
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    67
echo "creating $DIR_NAME/document/root.tex"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    68
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    69
mkdir "$DIR_NAME/document" || fail "Bad directory: \"$DIR_NAME/document\""
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    70
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    71
TITLE=$(echo "$NAME" | tr _ - | tr -d '\\')
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    72
AUTHOR=$(echo "By $USER" | tr _ - | tr -d '\\')
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    73
cat > "$DIR_NAME/document/root.tex" <<EOF
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    74
\documentclass[11pt,a4paper]{article}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    75
\usepackage{isabelle,isabellesym}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    76
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    77
% further packages required for unusual symbols (see also
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    78
% isabellesym.sty), use only when needed
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    79
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    80
%\usepackage{amssymb}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    81
  %for \<leadsto>, \<box>, \<diamond>, \<sqsupset>, \<mho>, \<Join>,
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    82
  %\<lhd>, \<lesssim>, \<greatersim>, \<lessapprox>, \<greaterapprox>,
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    83
  %\<triangleq>, \<yen>, \<lozenge>
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    84
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    85
%\usepackage{eurosym}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    86
  %for \<euro>
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    87
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    88
%\usepackage[only,bigsqcap]{stmaryrd}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    89
  %for \<Sqinter>
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    90
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    91
%\usepackage{eufrak}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    92
  %for \<AA> ... \<ZZ>, \<aa> ... \<zz> (also included in amssymb)
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    93
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    94
%\usepackage{textcomp}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    95
  %for \<onequarter>, \<onehalf>, \<threequarters>, \<degree>, \<cent>,
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    96
  %\<currency>
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    97
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    98
% this should be the last package used
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
    99
\usepackage{pdfsetup}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   100
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   101
% urls in roman style, theory text in math-similar italics
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   102
\urlstyle{rm}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   103
\isabellestyle{it}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   104
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   105
% for uniform font size
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   106
%\renewcommand{\isastyle}{\isastyleminor}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   107
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   108
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   109
\begin{document}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   110
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   111
\title{$TITLE}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   112
\author{$AUTHOR}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   113
\maketitle
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   114
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   115
\tableofcontents
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   116
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   117
% sane default for proof documents
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   118
\parindent 0pt\parskip 0.5ex
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   119
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   120
% generated text of all theories
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   121
\input{session}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   122
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   123
% optional bibliography
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   124
%\bibliographystyle{abbrv}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   125
%\bibliography{root}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   126
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   127
\end{document}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   128
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   129
%%% Local Variables:
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   130
%%% mode: latex
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   131
%%% TeX-master: t
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   132
%%% End:
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   133
EOF
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   134
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   135
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   136
# ROOT
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   137
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   138
if [ -e "$DIR/ROOT" ]; then
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   139
  echo "appending to existing ROOT"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   140
  echo >> "$DIR/ROOT"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   141
else
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   142
  echo "creating ROOT"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   143
fi
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   144
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   145
cat >> "$DIR/ROOT" <<EOF
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   146
session "$NAME" = "$ISABELLE_LOGIC" +
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   147
  options [document = $ISABELLE_DOC_FORMAT]
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   148
  theories "Ex"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   149
  files "document/root.tex"
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   150
EOF
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   151
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   152
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   153
# notes
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   154
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   155
cat <<EOF
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   156
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   157
Notes:
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   158
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   159
  * $DIR_NAME/Ex.thy contains an example theory
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   160
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   161
  * $DIR_NAME/document/root.tex contains the LaTeX master document setup
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   162
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   163
  * $DIR/ROOT contains build options, theories and extra file dependencies
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   164
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   165
  * the following command line builds the session (with document):
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   166
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   167
      isabelle build -v -d $DIR ${ISABELLE_LOGIC}-${NAME}
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   168
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   169
EOF
162579d4ba15 added mkroot: prepare session root directory;
wenzelm
parents:
diff changeset
   170