doc-src/System/Thy/Sessions.thy
author wenzelm
Sat, 28 Jul 2012 19:48:19 +0200
changeset 48582 c6bed330fc07
parent 48580 9df76dd45900
child 48584 8026c852cc10
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48578
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     1
theory Sessions
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     2
imports Base
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     3
begin
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     4
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     5
chapter {* Isabelle sessions and build management *}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     6
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     7
text {* FIXME *}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     8
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
     9
section {* Session ROOT specifications \label{sec:session-root} *}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
    10
48579
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    11
text {* Session specifications reside in files called @{verbatim ROOT}
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    12
  within certain directories, such as the home locations of registered
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    13
  Isabelle components or additional project directories given by the
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    14
  user.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    15
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    16
  The ROOT file format follows the lexical conventions of the
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    17
  \emph{outer syntax} of Isabelle/Isar, see also
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    18
  \cite{isabelle-isar-ref}.  This defines common forms like
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    19
  identifiers, names, quoted strings, verbatim text, nested comments
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    20
  etc.  The grammar for a single @{syntax session_entry} is given as
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    21
  syntax diagram below; each ROOT file may contain multiple session
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    22
  specifications like this.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    23
48582
wenzelm
parents: 48580
diff changeset
    24
  Isabelle/jEdit (\secref{sec:tool-jedit}) includes a simple editing
wenzelm
parents: 48580
diff changeset
    25
  mode @{verbatim "isabelle-root"} for session ROOT files.
48579
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    26
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    27
  @{rail "
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    28
    @{syntax_def session_entry}: @'session' spec '=' (@{syntax name} '+')? body
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    29
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    30
    body: description? options? ( theories * ) files?
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    31
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    32
    spec: @{syntax name} '!'? groups? dir?
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    33
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    34
    groups: '(' (@{syntax name} +) ')'
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    35
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    36
    dir: @'in' @{syntax name}
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    37
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    38
    description: @'description' @{syntax text}
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    39
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    40
    options: @'options' opts
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    41
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    42
    opts: '[' ( (@{syntax name} '=' @{syntax name} | @{syntax name}) + ',' ) ']'
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    43
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    44
    theories: @'theories' opts? ( @{syntax name} + )
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    45
    ;
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    46
    files: @'files' ( @{syntax name} + )
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    47
    "}
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    48
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    49
  \begin{description}
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    50
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    51
  \item \isakeyword{session}~@{text "A = B + body"} defines a new
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    52
  session @{text "A"} based on parent session @{text "B"}, with its
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    53
  content given in @{text body} (theories and auxiliary source files).
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    54
  Note that a parent (like @{text "HOL"}) is mandatory in practical
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    55
  applications: only Isabelle/Pure can bootstrap itself from nothing.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    56
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    57
  All such session specifications together describe a hierarchy (tree)
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    58
  of sessions, with globally unique names.  By default, names are
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    59
  derived from parent ones by concatenation, i.e.\ @{text "B\<dash>A"}
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    60
  above.  Cumulatively, this leads to session paths of the form @{text
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    61
  "X\<dash>Y\<dash>Z\<dash>W"}.  Note that in the specification,
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    62
  @{text B} is already such a fully-qualified name, while @{text "A"}
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    63
  is the new base name.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    64
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    65
  \item \isakeyword{session}~@{text "A! = B"} indicates a fresh start
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    66
  in the naming scheme: the session is called just @{text "A"} instead
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    67
  of @{text "B\<dash>A"}.  Here the name @{text "A"} should be
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    68
  sufficiently long to stand on its own in a potentially large
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    69
  library.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    70
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    71
  \item \isakeyword{session}~@{text "A (groups)"} indicates a
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    72
  collection of groups where the new session is a member.  Group names
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    73
  are uninterpreted and merely follow certain conventions.  For
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    74
  example, the Isabelle distribution tags some important sessions by
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    75
  the group name @{text "main"}.  Other projects may invent their own
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    76
  conventions, which requires some care to avoid clashes within this
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    77
  unchecked name space.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    78
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    79
  \item \isakeyword{session}~@{text "A"}~\isakeyword{in}~@{text "dir"}
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    80
  specifies an explicit directory for this session.  By default,
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    81
  \isakeyword{session}~@{text "A"} abbreviates
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    82
  \isakeyword{session}~@{text "A"}~\isakeyword{in}~@{text "A"}.  This
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    83
  accommodates the common scheme where some base directory contains
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    84
  several sessions in sub-directories of corresponding names.  Another
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    85
  common scheme is \isakeyword{session}~@{text
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    86
  "A"}~\isakeyword{in}~@{verbatim "\".\""} to refer to the current
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    87
  directory of the ROOT file.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    88
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    89
  All theories and auxiliary source files are located relatively to
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    90
  the session directory.  The prover process is run within the same as
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    91
  its current working directory.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    92
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    93
  \item \isakeyword{description}~@{text "text"} is a free-form
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    94
  annotation for this session.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    95
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    96
  \item \isakeyword{options}~@{text "[x = a, y = b, z]"} defines
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    97
  separate options that are used when processing this session, but
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    98
  \emph{without} propagation to child sessions; see also
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
    99
  \secref{sec:system-options}.  Note that @{text "z"} abbreviates
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   100
  @{text "z = true"} for Boolean options.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   101
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   102
  \item \isakeyword{theories}~@{text "options names"} specifies a
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   103
  block of theories that are processed within an environment that is
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   104
  augmented further by the given options, in addition to the global
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   105
  session options given before.  Any number of blocks of
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   106
  \isakeyword{theories} may be given.  Options are only active for
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   107
  each \isakeyword{theories} block separately.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   108
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   109
  \item \isakeyword{files}~@{text "files"} lists additional source
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   110
  files that are somehow involved in the processing of this session.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   111
  This should cover anything outside the formal content of the theory
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   112
  sources, say some auxiliary {\TeX} files that are required for
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   113
  document processing.  In contrast, files that are specified in
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   114
  formal theory headers as @{keyword "uses"} need not be declared
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   115
  again.
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   116
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   117
  \end{description}
48580
9df76dd45900 some description of main build options;
wenzelm
parents: 48579
diff changeset
   118
*}
48579
0b95a13ed90a more on "Session ROOT specifications";
wenzelm
parents: 48578
diff changeset
   119
48580
9df76dd45900 some description of main build options;
wenzelm
parents: 48579
diff changeset
   120
subsubsection {* Examples *}
9df76dd45900 some description of main build options;
wenzelm
parents: 48579
diff changeset
   121
9df76dd45900 some description of main build options;
wenzelm
parents: 48579
diff changeset
   122
text {* See @{file "~~/src/HOL/ROOT"} for a diversity of practically
9df76dd45900 some description of main build options;
wenzelm
parents: 48579
diff changeset
   123
  relevant situations. *}
48578
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   124
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   125
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   126
section {* System build options \label{sec:system-options} *}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   127
48580
9df76dd45900 some description of main build options;
wenzelm
parents: 48579
diff changeset
   128
text {* See @{file "~~/etc/options"} for the main defaults provided by
48582
wenzelm
parents: 48580
diff changeset
   129
  the Isabelle distribution.  Isabelle/jEdit (\secref{sec:tool-jedit})
wenzelm
parents: 48580
diff changeset
   130
  includes a simple editing mode @{verbatim "isabelle-options"} for
wenzelm
parents: 48580
diff changeset
   131
  this file-format.
48580
9df76dd45900 some description of main build options;
wenzelm
parents: 48579
diff changeset
   132
*}
48578
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   133
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   134
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   135
section {* Invoking the build process \label{sec:tool-build} *}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   136
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   137
text {* The @{tool_def build} utility invokes the build process for
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   138
  Isabelle sessions.  It manages dependencies between sessions,
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   139
  related sources of theories and auxiliary files, and target heap
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   140
  images.  Accordingly, it runs instances of the prover process with
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   141
  optional document preparation.  Its command-line usage
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   142
  is:\footnote{Isabelle/Scala provides the same functionality via
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   143
  \texttt{isabelle.Build.build}.}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   144
\begin{ttbox} Usage: isabelle build [OPTIONS] [SESSIONS ...]
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   145
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   146
  Options are:
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   147
    -a           select all sessions
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   148
    -b           build heap images
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   149
    -d DIR       include session directory with ROOT file
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   150
    -g NAME      select session group NAME
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   151
    -j INT       maximum number of parallel jobs (default 1)
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   152
    -n           no build -- test dependencies only
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   153
    -o OPTION    override session configuration OPTION
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   154
                 (via NAME=VAL or NAME)
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   155
    -s           system build mode: produce output in ISABELLE_HOME
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   156
    -v           verbose
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   157
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   158
  Build and manage Isabelle sessions, depending on implicit
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   159
  ISABELLE_BUILD_OPTIONS="..."
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   160
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   161
  ML_PLATFORM="..."
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   162
  ML_HOME="..."
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   163
  ML_SYSTEM="..."
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   164
  ML_OPTIONS="..."
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   165
\end{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   166
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   167
  \medskip Isabelle sessions are defined via session ROOT files as
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   168
  described in (\secref{sec:session-root}).  The totality of sessions
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   169
  is determined by collecting such specifications from all Isabelle
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   170
  component directories (\secref{sec:components}), augmented by more
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   171
  directories given via options @{verbatim "-d"}~@{text "DIR"} on the
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   172
  command line.  Each such directory may contain a session
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   173
  \texttt{ROOT} file and an additional catalog file @{verbatim
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   174
  "etc/sessions"} with further sub-directories (list of lines).  Note
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   175
  that a single \texttt{ROOT} file usually defines many sessions;
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   176
  catalogs are are only required for extra scalability and modularity
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   177
  of large libraries.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   178
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   179
  \medskip The subset of sessions to be managed is selected via
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   180
  individual @{text "SESSIONS"} given as command-line arguments, or
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   181
  session groups that are specified via one or more options @{verbatim
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   182
  "-g"}~@{text "NAME"}.  Option @{verbatim "-a"} selects all sessions.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   183
  The build tool takes the hierarchy of sessions into account: the
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   184
  selected set of sessions is completed by including all ancestors
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   185
  according to the dependency structure.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   186
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   187
  \medskip The build process depends on additional options that are
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   188
  passed to the prover session eventually, see also
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   189
  (\secref{sec:system-options}).  The settings variable @{setting_ref
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   190
  ISABELLE_BUILD_OPTIONS} allows to provide additional defaults.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   191
  Moreover, the environment of system build options may be augmented
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   192
  on the command line via @{verbatim "-o"}~@{text "NAME=VALUE"} or
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   193
  @{verbatim "-o"}~@{text "NAME"}, which abbreviates @{verbatim
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   194
  "-o"}~@{text "NAME=true"} for Boolean options.  Multiple occurrences
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   195
  of @{verbatim "-o"} on the command-line are applied in the given
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   196
  order.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   197
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   198
  \medskip Option @{verbatim "-b"} ensures that heap images are
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   199
  produced for all selected sessions.  By default, images are only
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   200
  saved for inner nodes of the hierarchy of sessions, as required for
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   201
  other sessions to continue later on.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   202
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   203
  \medskip Option @{verbatim "-j"} specifies the maximum number of
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   204
  parallel build jobs (prover processes).  Note that each process is
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   205
  subject to a separate limit of parallel threads, cf.\ system option
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   206
  @{system_option_ref threads}.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   207
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   208
  \medskip Option @{verbatim "-s"} enables \emph{system mode}, which
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   209
  means that resulting heap images and log files are stored in
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   210
  @{verbatim "$ISABELLE_HOME/heaps"} instead of the default location
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   211
  @{setting ISABELLE_OUTPUT} (which is normally in @{setting
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   212
  ISABELLE_HOME_USER}, i.e.\ the user's home directory).
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   213
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   214
  \medskip Option @{verbatim "-n"} omits the actual build process
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   215
  after performing all dependency checks.  The return code indicates
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   216
  the status of the set of selected sessions.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   217
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   218
  \medskip Option @{verbatim "-v"} enables verbose mode.
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   219
*}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   220
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   221
subsubsection {* Examples *}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   222
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   223
text {*
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   224
  Build a specific logic image:
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   225
\begin{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   226
isabelle build -b HOLCF
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   227
\end{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   228
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   229
  Build the main group of logic images (as determined by the session
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   230
  ROOT specifications of the Isabelle distribution):
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   231
\begin{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   232
isabelle build -b -g main
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   233
\end{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   234
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   235
  Provide a general overview of the status of all Isabelle sessions,
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   236
  without building anything:
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   237
\begin{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   238
isabelle build -a -n -v
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   239
\end{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   240
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   241
  Build all sessions with HTML browser info and PDF document
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   242
  preparation:
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   243
\begin{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   244
isabelle build -a -o browser_info -o document=pdf
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   245
\end{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   246
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   247
  Build all sessions with a maximum of 8 prover processes and 4
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   248
  threads each (on a machine with many cores):
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   249
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   250
\begin{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   251
isabelle build -a -j8 -o threads=4
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   252
\end{ttbox}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   253
*}
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   254
21361b6189a6 some description of isabelle build;
wenzelm
parents:
diff changeset
   255
end