File: x461.html

package info (click to toggle)
findlib 1.9.8-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,864 kB
  • sloc: ml: 7,800; xml: 3,138; sh: 1,605; makefile: 427
file content (384 lines) | stat: -rw-r--r-- 7,186 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>	  Does Findlib support camlp4?
        </TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="The findlib User's Guide"
HREF="index.html"><LINK
REL="UP"
TITLE="FAQs"
HREF="c429.html"><LINK
REL="PREVIOUS"
TITLE="Does findlib support linking of applications as well as
packages?"
HREF="x449.html"><LINK
REL="NEXT"
TITLE="	  Does Findlib support ppx-style preprocessors?
        "
HREF="x513.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>The findlib User's Guide</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="x449.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Chapter 7. FAQs</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x513.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="AEN461"
>Does Findlib support camlp4?</A
></H1
><P
>	<SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>Short answer:</I
></SPAN
> Yes, but there is only little
	documentation.</P
><P
>	Since Findlib-0.4, there is some experimental camlp4 support. For
example, the following compiler invocation chooses the revised syntax:

<PRE
CLASS="PROGRAMLISTING"
>ocamlfind ocamlc -syntax camlp4r -package camlp4 -c file.ml</PRE
>

        As you can see, camlp4 must be included as package, and the
-syntax option must specify which syntax is selected (either
<TT
CLASS="LITERAL"
>camlp4o</TT
> or <TT
CLASS="LITERAL"
>camlp4r</TT
>).</P
><P
>	If you want to pass additional options to the preprocessor,
you can use the <TT
CLASS="LITERAL"
>-ppopt</TT
> option:

<PRE
CLASS="PROGRAMLISTING"
>ocamlfind ocamlc -syntax camlp4r -package camlp4 -ppopt pa_ifdef.cmo -c file.ml</PRE
>
        </P
><P
>From the toploop, the following commands work:

<PRE
CLASS="PROGRAMLISTING"
>$ ocaml
        Objective Caml version 3.07+2
 
# #use "./topfind";;
- : unit = ()
Findlib has been successfully loaded. Additional directives:
  #require "package";;      to load a package
  #list;;                   to list the available packages
  #camlp4o;;                to load camlp4 (standard syntax)
  #camlp4r;;                to load camlp4 (revised syntax)
  #predicates "p,q,...";;   to set these predicates
  Topfind.reset();;         to force that packages will be reloaded
  #thread;;                 to enable threads
 
- : unit = ()
# #camlp4o;;            (* or camlp4r *)
/opt/godi/lib/ocaml/std-lib/camlp4: added to search path
/opt/godi/lib/ocaml/std-lib/camlp4/camlp4o.cma: loaded
        Camlp4 Parsing version 3.07+2
 
# _</PRE
>&#13;</P
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN474"
>The concept</A
></H2
><P
>If you have a <TT
CLASS="LITERAL"
>-syntax</TT
> option on the command line,
ocamlfind will generate a <TT
CLASS="LITERAL"
>-pp</TT
> parameter and pass it to the
invoked compiler. This is performed as follows: The specified packages are
inspected under a certain set of predicates, the <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>syntax
predicates</I
></SPAN
>. The syntax predicates are <TT
CLASS="LITERAL"
>syntax</TT
>,
<TT
CLASS="LITERAL"
>preprocessor</TT
>, and the predicates following
<TT
CLASS="LITERAL"
>-syntax</TT
>. The predicate <TT
CLASS="LITERAL"
>syntax</TT
> simply
means that the <TT
CLASS="LITERAL"
>-syntax</TT
> option has been specified.
The predicate <TT
CLASS="LITERAL"
>preprocessor</TT
> means that the preprocessor
command is being constructed. The predicates added by
<TT
CLASS="LITERAL"
>-syntax</TT
> may be used to distinguish between syntax variants
(currently <TT
CLASS="LITERAL"
>camlp4o</TT
> and <TT
CLASS="LITERAL"
>camlp4r</TT
>).</P
><P
>The packages are searched for a variable <TT
CLASS="LITERAL"
>preprocessor</TT
>;
normally the <TT
CLASS="LITERAL"
>camlp4</TT
> package defines it as (see its META
file):

<PRE
CLASS="PROGRAMLISTING"
>preprocessor = "camlp4 -nolib"</PRE
>

Now that the name of the preprocessor command is known, the arguments of the
command are looked up. The META files are evaluated under the syntax
predicates, and all <TT
CLASS="LITERAL"
>archive</TT
> variables are collected and
passed as arguments to the preprocessor. For example, the camlp4 package
defines:

<PRE
CLASS="PROGRAMLISTING"
>archive(syntax,preprocessor,camlp4o) = "pa_o.cmo pa_op.cmo pr_dump.cmo"
archive(syntax,preprocessor,camlp4r) = "pa_r.cmo pa_rp.cmo pr_dump.cmo"</PRE
>

Note that the predicate <TT
CLASS="LITERAL"
>preprocessor</TT
> prevents ocamlfind from
including these archives into the regular list of archives to link.</P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN496"
>How to write a META file for your own syntax extension</A
></H2
><P
>Suppose you have two archives: <TT
CLASS="LITERAL"
>pa_myext.cma</TT
> contains the
extension code of camlp4, and <TT
CLASS="LITERAL"
>run_myext.cma</TT
> contains runtime
material that must be present in programs compiled with your extensions. Your
META file should look as follows:

<PRE
CLASS="PROGRAMLISTING"
>requires = "camlp4"
archive(syntax,toploop) = "pa_myext.cma run_myext.cma"
archive(syntax,preprocessor) = "pa_myext.cma"
archive(syntax,byte)    = "run_myext.cma"
archive(syntax,native)  = "run_myext.cmxa"</PRE
>

You may add dependencies on <TT
CLASS="LITERAL"
>camlp4o</TT
> or
<TT
CLASS="LITERAL"
>camlp4r</TT
> if you have archives only working for one of the two
syntax variants.</P
><P
>To compile a program using your syntax extension package, one should use:

<PRE
CLASS="PROGRAMLISTING"
>ocamlfind ocamlc -package yourname -syntax variant ...</PRE
></P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN506"
>Example</A
></H2
><P
>The package <TT
CLASS="LITERAL"
>xstrp4</TT
> defines a syntax extension allowing
$-substitutions in OCaml strings. Version 1.0 of this package takes advantage
from the new camlp4 support of findlib; you may have a look at it for an
example.</P
><P
>You can find <TT
CLASS="LITERAL"
>xstrp4</TT
>
<A
HREF="/projects/xstrp4.html"
TARGET="_top"
>here</A
>.</P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="x449.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x513.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Does findlib support linking of applications as well as
packages?</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="c429.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Does Findlib support ppx-style preprocessors?</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>