chiark / gitweb /
lib/keyword.c (kw_parseempty): Use correct variable scanning `kwval' list.
[sod] / doc / cmdline.tex
1 %%% -*-latex-*-
2 %%%
3 %%% Description of the internal class structure and protocol
4 %%%
5 %%% (c) 2009 Straylight/Edgeware
6 %%%
7
8 %%%----- Licensing notice ---------------------------------------------------
9 %%%
10 %%% This file is part of the Simple Object Definition system.
11 %%%
12 %%% SOD is free software; you can redistribute it and/or modify
13 %%% it under the terms of the GNU General Public License as published by
14 %%% the Free Software Foundation; either version 2 of the License, or
15 %%% (at your option) any later version.
16 %%%
17 %%% SOD is distributed in the hope that it will be useful,
18 %%% but WITHOUT ANY WARRANTY; without even the implied warranty of
19 %%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 %%% GNU General Public License for more details.
21 %%%
22 %%% You should have received a copy of the GNU General Public License
23 %%% along with SOD; if not, write to the Free Software Foundation,
24 %%% Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26 \chapter{Invoking the Sod translator}
27
28 %%%--------------------------------------------------------------------------
29 \section{Basic principles}
30
31 The Sod translator reads a number of source modules named on its command
32 line (together with other modules directly or indirectly imported by these),
33 and generates output files of the requested types.
34
35 %%%--------------------------------------------------------------------------
36 \section{Command-line syntax}
37
38 The translator is named @|sod|, and is invoked as
39 \begin{prog}
40   sod @[@-Mp@] @[@--backtrace@] @[@--builtins@]
41         @[@-I @<dir>@] @[@-d @<dir>@]
42         @[@-e @<lisp>@] @[@-l @<file>@]
43         @[@-t @<out-type>@]
44         @<source> \ldots
45 \end{prog}
46
47 Options follow the standard POSIX/GNU conventions:
48 \begin{itemize}
49
50 \item Single-letter options without arguments can be grouped together, so
51   @|@-Mp| means the same as @|@-M @-p|.
52
53 \item The argument for a single-letter option can be given either in the
54   following argument word, or, if it is nonempty, in the same argument word
55   immediately following the option letter.  The argument for a GNU-style long
56   option can be given either in the following argument word, or in the same
57   argument word following a @|=|.
58
59 \item If the environment variable @|POSIXLY_CORRECT| is set (to any value),
60   then option processing will stop as soon as the first non-option is found.
61   Otherwise, options may be mixed together with positional arguments, and all
62   argument words beginning with @|@-| (other than @|@-| and @|@--|) which
63   aren't option arguments are interpreted as options.
64
65 \item The words @|@-| and @|@--| are not options.  The former is treated like
66   any other non-option word.  The latter is a special marker indicating that
67   option processing should stop here: all subsequent argument words are
68   treated as positional arguments regardless of any leading @|@-| characters.
69
70 \end{itemize}
71
72 Options are processed left-to-right.
73
74 \begin{description}
75
76 \item[@|@-h|, @|@--help|] Write commad-line help to standard output, and exit
77   successfully.
78 \item[@|@-V|, @|@--version|] Write the Sod translator's version number to
79   standard output, and exit successfully.
80 \item[@|@-u|, @|@--usage|] Write a (very) brief usage summary to standard
81   output, and exit successfully.
82
83 \item[@|@--backtrace|] Report errors through the host Lisp's usual
84   error-handling system, which will typically involve printing a stack
85   backtrace.  By default, the translator prints a short error message and
86   exits, in the manner common to Unix programs.  You may find this option
87   useful for debugging.
88
89 \item[@|@-e|, @|@--eval=|@<lisp>] Evaluate the Lisp form(s) in @<lisp>, in
90   order.  Nothing is printed: if you want output, write Lisp to print it.
91   Forms are evaluated in the @|SOD-USER| package.
92 \item[@|@-l|, @|@--load=|@<file>] Load and evaluate Lisp code from @<file>.
93   The file is loaded into the @|SOD-USER| package (though obviously
94   @|in-package| forms in the file will be respected).
95
96 \item[@|@--builtins|] Generate output for the built-in module, which defines
97   the @|SodObject| and @|SodClass| classes.  The built-in module is named
98   @|sod-base|.  This option is used to build Sod's runtime library, and is
99   probably not useful otherwise.
100
101 \item[@|@-I|, @|@--include=|@<dir>] Look for imported modules in @<dir>.
102   This option may be repeated: directories are searched in the order they
103   were named.
104
105 \item[@|@-M|, @|@--track-dependencies|] Write a Makefie fragment capturing
106   the dependencies of each emitted output file.
107
108   The details are delegated to output type handlers, but the default file
109   name is the same as the main output, with @`@-dep' appended.
110
111   This option does nothing if @|@-p| is in force.
112
113 \item[@|@-d|, @|@--directory=|@<dir>] Write output files to the directory
114   @<dir>, instead of the current directory.  The names of the output files
115   are determined by the names of the input modules and the requested output
116   types.
117
118 \item[@|@-p|, @|@--stdout|] Write the generated output to standard output,
119   rather than to files.
120
121 \item[@|@-t|, @|@--type=|@<out-type>] Produce output of type @<out-type>.
122   This option can be repeated to generate several output files from the same
123   modules.  The built-in output types are described below.
124
125   More output types can be defined by extensions.  Each @<out-type> is
126   converted into a Lisp keyword @<reason>, by uppercasing it and interning it
127   in the @|keyword| package.  Each requested module is loaded, and then, for
128   each requested @<reason>, an output filename is determined (by calling
129   \descref{gf}{module-output-file}, unless @|@-p| is in force); the output
130   file is generated (using \descref{fun}{output-module}), and, if @|@-M| is
131   in force, a Makefile fragment is written (using
132   \descref{gf}{write-dependency-file}).
133
134 \end{description}
135
136 %%%--------------------------------------------------------------------------
137 \section{Built-in output types}
138
139 The following output types are implemented by the base translator.
140 Additional types can be provided by extensions.
141
142 \begin{description}
143
144 \item[@|c|] Write C source, suitable for standalone compilation, defining the
145   necessary direct and effective method functions and static tables for the
146   classes defined in the module.  The output file for a module called @<name>
147   will be @|@<dir>/@<name>.c|, and the dependency file will be
148   @|@<dir>/@<name>.c-dep|.
149
150 \item[@|h|] Write a C header file, suitable for inclusion using @|\#include|,
151   declaraing the necessary data structures and functions for the classes
152   defined in the module.  The output file for a module called @<name> will be
153   @|@<dir>/@<name>.h|, and the dependency file will be
154   @|@<dir>/@<name>.h-dep|.
155
156 \end{description}
157
158 %%%----- That's all, folks --------------------------------------------------
159
160 %%% Local variables:
161 %%% mode: LaTeX
162 %%% TeX-master: "sod.tex"
163 %%% TeX-PDF-mode: t
164 %%% End: