Obsolete VTE pre-2.91 ABI
[oi-userland.git] / components / ocaml / ocaml-findlib / files / ocamlfind.1
blobc0b2d884fc405d4c4361be2fa99b3751427212eb
1 '\" te
2 .\" Adapted from the source manpage for the OpenIndiana Project
3 .\"
4 .TH OCAMLFIND 1 "May 26, 2020"
6 .SH NAME
7 ocamlfind \- The findlib package manager for OCaml
9 .SH SYNOPSIS
11 ocamlfind query
13 \-help | other options
15 .I package_name 
16 \&...
18 ocamlfind ocamlc
20 \-help | other options
22 .I file 
23 \&...
25 ocamlfind ocamlcp
27 \-help | other options
29 .I file 
30 \&...
32 ocamlfind ocamlmktop
34 \-help | other options
36 .I file 
37 \&...
39 ocamlfind ocamlopt
41 \-help
43 .I file 
44 \&...
46 ocamlfind ocamldoc
48 \-help | other options
50 .I file 
51 \&...
53 ocamlfind ocamldep
55 \-help | other options 
57 .I file 
58 \&...
60 ocamlfind ocamlmklib
62 \-help | other options
64 .I file 
65 \&...
67 ocamlfind ocamlbrowser
69 \-help | other options
72 ocamlfind install
74 \-help | other options
76 .I package_name file 
77 \&...
79 ocamlfind remove
81 \-help | other options 
83 .I package_name 
84 \&...
86 ocamlfind lint
87 .I META
89 ocamlfind list
91 \-describe
94 ocamlfind printppx
96 \-help | other options
98 .I package_name 
99 \&...
101 ocamlfind printconf
103 .I variable
106 ocamlfind
107 .I package/command arg 
108 \&...
110 Optional toolchain selection by:
112 ocamlfind \-toolchain
113 .I name 
114 \&...
116 .SH THE SUBCOMMAND \[lq]query\[rq]
119 .B Synopsis
120 .RS 4n
123 \fBocamlfind\fR query [ \fB\-predicates\fR \fIp\fR |
124                   \fB\-format\fR \f |
125                   \fB\-long\-format\fR | \fB\-l\fR |
126                   \fB\-i\-format\fR |
127                   \fB\-l\-format\fR |
128                   \fB\-a\-format\fR |
129                   \fB\-o\-format\fR |
130                   \fB\-p\-format\fR |
131                   \fB\-prefix\fR \fIp\fR |
132                   \fB\-separator\fR \fIs\fR |
133                   \fB\-suffix\fR \fIs\fR |
134                   \fB\-pp\fR |
135                   \fB\-descendants\fR | \fB\-d\fR |
136                   \fB\-recursive\fR | \fB\-r\fR |
137                   \fB\-qe\fR |
138                   \fB\-qo\fR ] \fIpackage\fR \&...
142 .B Description
143 .RS 4n
145 This command looks packages up, sorts them optionally, and prints
146 attributes of them.
147 If the option \-recursive (short: \-r) is not specified, exactly the
148 packages given on the command line are looked up; if \-recursive is
149 present, the packages and all their ancestors, or if \-descendants
150 (short: \-d) is present, too, all their descendants are printed.
152 Package lookup and the selection of the attributes of the packages can
153 be modified by specifying predicates; without a \-predicates option the
154 empty set of predicates is used.
155 Note that even the lookup is influenced by the set of actual predicates
156 as the \[lq]requires\[rq] variables may be conditional.
158 What is printed about a package depends on the specified format; there
159 are a number of options that modify the format.
160 Some formats denote sets of values (such as \-format %a), in which case
161 multiple output records are printed for every package.
162 (It is even possible to specify formats denoting the Cartesian product
163 of sets, such as \-format %a%o, but this does not make sense.) Before
164 the first output record the prefix is printed, and the suffix after the
165 last record.
166 Between two records the separator is printed.
169 .B Options
170 .RS 4n
172 .ne 2
175 \fB\-predicates\fR \fIp\fR
177 .sp .6
178 .RS 4n
179 Sets the set of actual predicates.
180 The argument \fIp\fR is a list of predicate names separated by commas and/or
181 whitespace.
182 If multiple \-predicates options are given, the union of all specified
183 sets is effectively used.
187 .ne 2
190 \fB\-format\fR \fIf\fR
192 .sp .6
193 .RS 4n
194 Sets the format to the string f.
195 Characters preceded by a percent sign are interpreted as placeholders;
196 all other characters mean themselves.
197 The defined placeholders are listed below.
198 The default format is \[lq]%d\[rq].
202 .ne 2
205 .B \-long\-format
207 .B \-l 
209 .sp .6
210 .RS 4n
211 Sets the format such that all relevant variables are printed.
215 .ne 2
218 .B \-i\-format
220 .sp .6
221 .RS 4n
222 Same as \-format \[lq]\-I %d\[rq], i.e.\ directory options for ocamlc
223 are printed.
227 .ne 2
230 .B \-l\-format
232 .sp .6
233 .RS 4n
234 Same as \-format \[lq]\-ccopt \-L%d\[rq], i.e.\ directory options for
235 the linker backend are printed.
239 .ne 2
242 .B \-a\-format
244 .sp .6
245 .RS 4n
246 Same as \-format \[lq]%+a\[rq], i.e.\ archive file names are printed.
250 .ne 2
253 .B \-o\-format
255 .sp .6
256 .RS 4n
257 Same as \-format \[lq]%o\[rq], i.e.\ linker options are printed.
261 .ne 2
264 .B \-p\-format
266 .sp .6
267 .RS 4n
268 Same as \-format \[lq]%p\[rq], i.e.\ package names are printed.
272 .ne 2
275 .B \-prefix
276 .I p
278 .sp .6
279 .RS 4n
280 Sets the prefix that is printed before the first output record to the
281 given string.
282 The default prefix is the empty string.
286 .ne 2
289 .B \-suffix
290 .I s
292 .sp .6
293 .RS 4n
294 Sets the suffix that is printed after the last output record to the
295 given string.
296 The default suffix is the empty string.
300 .ne 2
303 .B \-separator
304 .I s
306 .sp .6
307 .RS 4n
308 Sets the separator that is printed between output records to the given
309 string.
310 The default separator is a linefeed character.
314 .ne 2
317 .B \-recursive
319 .B \-r
321 .sp .6
322 .RS 4n
323 Not only the packages given on the command line are queried but also all
324 ancestors or descendants.
325 If the option \fB\-descendants\fR is specified, too, the descendants are
326 printed, otherwise the ancestors.
327 The packages are topologically sorted.
331 .ne 2
334 .B \-descendants
336 .B \-d
338 .sp .6
339 .RS 4n
340 Instead of the ancestors the descendants of the given packages are
341 queried.
342 This option implies \fB\-recursive\fR.
347 .ne 2
350 .B \-pp
352 .sp .6
353 .RS 4n
354 Query preprocessor packages (camlp4 syntax extensions).
355 Normally it is not needed to set \-predicates, except you need the
356 archives (then add \-predicates byte).
357 This option implies \-recursive.
361 .ne 2
364 .B \-qe
366 .sp .6
367 .RS 4n
368 Do not print most errors to stderr, just set the exit code
372 .ne 2
375 .B \-qo
377 .sp .6
378 .RS 4n
379 Do not print the regular output.
382 .B Placeholders meaningful in the \-format option
383 .RS 4n
385 .ne 2
388 .B %%
390 .sp .6
391 .RS 4n
392 Replaced by a single percent sign
396 .ne 2
399 .B %p
401 .sp .6
402 .RS 4n
403 Replaced by the package name
407 .ne 2
410 .B %d
412 .sp .6
413 .RS 4n
414 Replaced by the package directory
418 .ne 2
421 .B %m
423 .sp .6
424 .RS 4n
425 Replaced by the path to the META file (new since findlib\-1.6)
429 .ne 2
432 .B %D
434 .sp .6
435 .RS 4n
436 Replaced by the package description
440 .ne 2
443 .B %v
445 .sp .6
446 .RS 4n
447 Replaced by the version string
451 .ne 2
454 .B %a
456 .sp .6
457 .RS 4n
458 Replaced by the archive filename.
459 If there is more than one archive, a separate output record is printed
460 for every archive.
464 .ne 2
467 .B %+a
469 .sp .6
470 .RS 4n
471 Like %a, but the filenames are converted to absolute paths (\[lq]+\[rq]
472 and \[lq]\@\[rq] notations are resolved)
476 .ne 2
479 .B %A
481 .sp .6
482 .RS 4n
483 Replaced by the list of archive filenames.
487 .ne 2
490 .B %+A
492 .sp .6
493 .RS 4n
494 Like %A, but the filenames are converted to absolute paths (\[lq]+\[rq]
495 and \[lq]\@\[rq] notations are resolved)
499 .ne 2
502 .B %o
504 .sp .6
505 .RS 4n
506 Replaced by one linker option.
507 If there is more than one option, a separate output record is printed
508 for every option.
512 .ne 2
515 .B %O
517 .sp .6
518 .RS 4n
519 Replaced by the list of linker options.
523 .ne 2
526 .B %(property)
528 .sp .6
529 .RS 4n
530 Replaced by the value of the property named in parentheses, or the empty
531 string if not defined.
535 .SH THE SUBCOMMANDS \[lq]ocamlc\[rq], \[lq]ocamlcp\[rq],\[lq]ocamlopt\[rq], and \[lq]ocamlmktop\[rq]
538 .B Synopsis
539 .RS 4n
542 \fBocamlfind\fR ( ocamlc | ocamlcp | ocamlopt | ocamlmktop )
543           [ \fB\-package\fR \fIpackage\-name\-list\fR |
544             \fB\-linkpkg\fR |
545             \fB\-predicates\fR \fIpred\-name\-list\fR |
546             \fB\-dontlink\fR \fIpackage\-name\-list\fR |
547             \fB\-syntax\fR \fIpred\-name\-list\fR |
548             \fB\-ppopt\fR \fIcamlp4\-arg\fR |
549             \fB\-ppxopt\fR \fIpackage,arg\fR |
550             \fB\-dllpath\-pkg\fR \fIpackage\-name\-list\fR |
551             \fB\-dllpath\-all\fR |
552             \fB\-passopt\fR \fIarg\fR |
553             \fB\-passrest\fR \fIarg\fR \&... |
554             \fB\-only\-show\fR |
555             \fBstandard\-option\fR ] \fIfile\fR \&...
559 .B Description
560 .RS 4n
562 These subcommands are drivers for the compilers with the same names,
563 i.e.
564 \[lq]ocamlfind ocamlc\[rq] is a driver for \[lq]ocamlc\[rq], and so on.
565 The subcommands understand all documented options of the compilers (here
566 called standard\-options), but also a few more options.
567 If these subcommands are invoked only with standard options, they behave
568 as if the underlying compiler had been called directly.
569 The extra options modify this.
571 Internally, these subcommands transform the given list of options and
572 file arguments into an invocation of the driven compiler.
573 This transformation only adds options and files, and the relative order
574 of the options and files passed directly is unchanged.
576 If there are \-package options, additional directory search specifiers
577 will be included (\[lq]\-I\[rq], and \[lq]\-ccopt \-I\[rq]), such that
578 files of all named packages and all ancestors can be found.
580 The \-linkpkg option causes that the packages listed in the \-package
581 options and all necessary ancestors are linked in.
582 This means that the archive files implementing the packages are inserted
583 into the list of file arguments.
585 As the package database is queried a set of predicates is needed.
586 Most predicates are set automatically, see below, but additional
587 predicates can be given by a \-predicates option.
589 If there is a \-syntax option, the drivers assume that a preprocessor is
590 to be used.
591 In this case, the preprocessor command is built first in a preprocessor
592 stage, and this command is passed to the compiler using the \-pp option.
593 The set of predicates in the preprocessor stage is different from the
594 set in the compiler/linker stage.
597 .B Options for compiling and linking
598 .RS 4n
600 Here, only the additional options not interpreted by the compiler but by
601 the driver itself, and options with additional effects are explained.
602 Some options are only meaningful for the preprocessor call, and are
603 explained below.
605 .ne 2
608 .B \-package
609 .I package\-name\-list
611 .sp .6
612 .RS 4n
613 Adds the listed package names to the set of included packages.
614 The package names may be separated by commas and/or whitespace.
615 In the transformed command, for every package of the set of included
616 packages and for any ancestor a directory search option is inserted
617 after the already given options.
618 This means that \[lq]\-I\[rq] and \[lq]\-ccopt \-I\[rq] options are
619 added for every package directory.
623 .ne 2
626 .B \-linkpkg
628 .sp .6
629 .RS 4n
630 Causes that in the transformed command all archives of the packages
631 specified by \-packages and all their ancestors are added to the file
632 arguments.
633 More precisely, these archives are inserted before the first given file
634 argument.
635 Furthermore, \[lq]\-ccopt \-L\[rq] options for all package directories,
636 and the linker options of the selected packages are added, too.
637 Note that the archives are inserted in topological order while the
638 linker options are added in reverse toplogical order.
642 .ne 2
645 .B \-predicates
646 .I pred\-name\-list
648 .sp .6
649 .RS 4n
650 Adds the given predicates to the set of actual predicates.
651 The predicates must be separated by commas and/or whitespace.
655 .ne 2
658 .B \-dontlink
659 .I package\-name\-list
661 .sp .6
662 .RS 4n
663 This option modifies the behaviour of \-linkpkg.
664 Packages specified here and all ancestors are not linked in.
665 Again the packages are separated by commas and/or whitespace.
669 .ne 2
672 .B \-dllpath
673 .I package\-name\-list
675 .sp .6
676 .RS 4n
677 For these packages \-dllpath options are added to the compiler command.
678 This may be useful when the ld.conf file is not properly configured.
682 .ne 2
685 .B \-dllpath\-all
687 .sp .6
688 .RS 4n
689 For all linked packages \-dllpath options are added to the compiler
690 command.
691 This may be useful when the ld.conf file is not properly configured.
695 .ne 2
698 .B \-passopt
699 .I arg
701 .sp .6
702 .RS 4n
703 The argument arg is passed directly to the underlying compiler.
704 This is needed to specify undocumented compiler options.
708 .ne 2
711 .B \-passrest
712 .I arg
713 \&...
715 .sp .6
716 .RS 4n
717 All following arguments arg\&... are passed directly to the underlying
718 compiler.
719 This is needed to specify undocumented compiler options.
723 .ne 2
726 .B \-only\-show
728 .sp .6
729 .RS 4n
730 Only prints the constructed command (ocamlc/ocamlopt) to stdout, but
731 does not execute the command.
732 (This is for the unlikely event that you need a wrapper around
733 ocamlfind.)
737 .ne 2
740 .B \-verbose
742 .sp .6
743 .RS 4n
744 This standard option is interpreted by the driver, too.
748 .ne 2
751 .B \-thread
752 .I package\-name\-list
754 .sp .6
755 .RS 4n
756 This standard option causes that the predicate \[lq]mt\[rq] is added to
757 the set of actual predicates.
758 If POSIX threads are available, the predicate \[lq]mt_posix\[rq] is
759 selected, too.
760 If only VM threads are available, the predicate \[lq]mt_vm\[rq] is
761 included into the set, and the compiler switch is changed into \-vmthread.
762 Note that the presence of the \[lq]mt\[rq] predicate triggers special
763 fixup of the dependency graph (see below).
767 .ne 2
770 .B \-vmthread
772 .sp .6
773 .RS 4n
774 This standard option causes that the predicates \[lq]mt\[rq] and
775 \[lq]mt_vm\[rq] are added to the set of actual predicates.
776 Note that the presence of the \[lq]mt\[rq] predicate triggers special
777 fixup of the dependency graph (see below).
781 .ne 2
784 .B \-p
786 .sp .6
787 .RS 4n
788 This standard option of \[lq]ocamlopt\[rq] causes that the predicate
789 \[lq]gprof\[rq] is added to the set of actual predicates.
793 .B Options for preprocessing
794 .RS 4n
796 The options relevant for the preprocessor are the following:
798 .ne 2
801 .B \-package
802 .I package\-name\-list
804 .sp .6
805 .RS 4n
806 These packages are considered while looking up the preprocessor
807 arguments.
808 (It does not cause problems that the same \-package option is used for
809 this purpose, because the set of predicates is different.) It is
810 recommended to mention at least camlp4 here if the preprocessor is going
811 to be used.
815 .ne 2
818 .B \-syntax
819 .I pred\-name\-list
821 .sp .6
822 .RS 4n
823 These predicates are assumed to be true in addition to the standard
824 preprocessor predicates.
825 See below for a list.
829 .ne 2
832 .B \-ppopt
833 .I camlp4\-arg
835 .sp .6
836 .RS 4n
837 This argument is passed to the camlp4 call.
841 .ne 2
844 .B \-ppxopt
845 .I package,arg
847 .sp .6
848 .RS 4n
849 Add arg to the ppx preprocessor invocation specified via the
850 \[lq]ppx\[rq] property in the META file of package.
854 .B Predicates for compiling and linking
855 .RS 4n
857 .ne 2
860 .B byte
862 .sp .6
863 .RS 4n
864 The \[lq]byte\[rq] predicate means that one of the bytecode compilers is
865 used.
866 It is automatically included into the predicate set if the
867 \[lq]ocamlc\[rq], \[lq]ocamlcp\[rq], or \[lq]ocamlmktop\[rq] compiler is
868 used.
872 .ne 2
875 .B native
877 .sp .6
878 .RS 4n
879 The \[lq]native\[rq] predicate means that the native compiler is used.
880 It is automatically included into the predicate set if the
881 \[lq]ocamlopt\[rq] compiler is used.
885 .ne 2
888 .B toploop
890 .sp .6
891 .RS 4n
892 The \[lq]toploop\[rq] predicate means that the toploop is available in
893 the linked program.
894 This predicate is only set when the toploop is actually being executed,
895 not when the toploop is created (this changed in version 1.0.4 of
896 findlib).
900 .ne 2
903 .B create_toploop
905 .sp .6
906 .RS 4n
907 This predicate means that a toploop is being created (using ocamlmktop).
909 The \[lq]mt\[rq] predicate means that the program is multi\-threaded.
910 It is automatically included into the predicate set if the \-thread
911 option is given.
915 .ne 2
918 .B mt_posix
920 .sp .6
921 .RS 4n
922 The \[lq]mt_posix\[rq] predicate means that in the case \[lq]mt\[rq] is
923 set, too, the POSIX libraries are used to implement threads.
924 \[lq]mt_posix\[rq] is automatically included into the predicate set if
925 the variable \[lq]type_of_threads\[rq] in the META description of the
926 \[lq]threads\[rq] package has the value \[lq]posix\[rq].
927 This is normally the case if \[lq]findlib\[rq] is configured for POSIX
928 threads.
932 .ne 2
935 .B mt_vm
937 .sp .6
938 .RS 4n
939 The \[lq]mt_vm\[rq] predicate means that in the case \[lq]mt\[rq] is
940 set, too, the VM thread emulation is used to implement multi\-threading.
941 gprof
942 The \[lq]gprof\[rq] predicate means that in the case \[lq]native\[rq] is
943 set, too, the program is compiled for profiling.
944 It is automatically included into the predicate set if
945 \[lq]ocamlopt\[rq] is used and the \-p option is in effect.
949 .ne 2
952 .B autolink
954 .sp .6
955 .RS 4n
956 The \[lq]autolink\[rq] predicate means that ocamlc is able to perform
957 automatic linking.
958 It is automatically included into the predicate set if ocamlc knows
959 automatic linking (from version 3.00), but it is not set if the
960 \-noautolink option is set.
964 .ne 2
967 .B syntax
969 .sp .6
970 .RS 4n
971 This predicate is set if there is a \-syntax option.
972 It is set both for the preprocessor and the compiler/linker stage, and
973 it can be used to find out whether the preprocessor is enabled or not.
977 .B Predicates for preprocessing
978 .RS 4n
980 .ne 2
983 .B preprocessor
985 .sp .6
986 .RS 4n
987 This predicate is always set while looking up the preprocessor
988 arguments.
989 It can be used to distinguish between the preprocessor stage and the
990 compiler/linker stage.
994 .ne 2
997 .B syntax
999 .sp .6
1000 .RS 4n
1001 This predicate is set if there is a \-syntax option.
1002 It is set both for the preprocessor and the compiler/linker stage, and
1003 it can be used to find out whether the preprocessor is enabled or not.
1007 .ne 2
1010 .B camlp4o
1012 .sp .6
1013 .RS 4n
1014 This is the reserved predicate for the standard OCaml syntax.
1015 It can be used in the \-syntax predicate list.
1019 .ne 2
1022 .B camlp4r
1024 .sp .6
1025 .RS 4n
1026 This is the reserved predicate for the revised OCaml syntax.
1027 It can be used in the \-syntax predicate list.
1031 .B Special behaviour of \[lq]ocamlmktop\[rq]
1032 .RS 4n
1034 As there is a special module Topfind that supports loading of packages
1035 in scripts, the \[lq]ocamlmktop\[rq] subcommand can add initialization
1036 code for this module.
1037 This extra code is linked into the executable if \[lq]findlib\[rq] is in
1038 the set of effectively linked packages.
1041 .B Fixup of the dependency graph for multi\-threading
1042 .RS 4n
1044 For a number of reasons the presence of the \[lq]mt\[rq] predicate
1045 triggers that (1) the package \[lq]threads\[rq] is added to the list of
1046 required packages and (2) the package \[lq]threads\[rq] becomes
1047 prerequisite of all other packages (except of itself and a few hardcoded
1048 exceptions).
1049 The effect is that the options \-thread and \-vmthread automatically
1050 select the \[lq]threads\[rq] package, and that \[lq]threads\[rq] is
1051 inserted at the right position in the package list.
1054 .B Extended file naming
1055 .RS 4n
1057 At a number of places one can not only refer to files by absolute or
1058 relative path names, but also by extended names.
1059 These have two major forms: \[lq]+name\[rq] refers to the subdirectory
1060 name of the standard library directory, and \[lq]\@name\[rq] refers to
1061 the package directory of the package name.
1062 Both forms can be continued by a path, e.g.
1063 \[lq]\@netstring/netstring_top.cma\[rq].
1065 You can use extended names: (1) With \-I options, (2) as normal file
1066 arguments of the compiler, (3) in the \[lq]archive\[rq] property of
1067 packages.
1070 .B How to set the names of the compiler executables
1071 .RS 4n
1073 Normally, the OCaml bytecode compiler can be called under the name
1074 ocamlc.
1075 However, this is not always true; sometimes a different name is chosen.
1077 You can instruct ocamlfind to call executables with other names than
1078 ocamlc, ocamlopt, ocamlmktop, and ocamlcp.
1079 If present, the environment variable OCAMLFIND_COMMANDS is interpreted
1080 as a mapping from the standard names to the actual names of the
1081 executables.
1082 It must have the following format:
1083 .RS 4n
1085 \fIstandardname1\fR=\fIactualname1\fR \fIstandardname2\fR=\fIactualname2\fR \&...
1088 Example: You may set OCAMLFIND_COMMANDS as follows:
1089 .RS 4n
1091 .B OCAMLFIND_COMMANDS=`ocamlc=ocamlc\-3.00 ocamlopt=ocamlopt\-3.00'
1092 .B export OCAMLFIND_COMMANDS
1095 Alternatively, you can change the configuration file findlib.conf.
1098 .SH THE SUBCOMMAND \[lq]ocamlmklib\[rq]
1100 .B Synopsis
1101 .RS 4n
1104 \fBocamlfind\fR ocamlmklib [ \fB\-package\fR \fIpackage\-name\-list\fR |
1105                        \fB\-predicates\fR \fIpred\-name\-list\fR |
1106                        \fB\-dllpath\-pkg\fR \fIpackage\-name\-list\fR |
1107                        \fB\-dllpath\-all\fR |
1108                        \fB\-passopt\fR \fIarg\fR |
1109                        \fB\-passrest\fR \fIarg\&...\fR |
1110                        \fBstandard\-option\fR ] \fIfile\fR \&...
1114 .B Description
1115 .RS 4n
1117 This is a wrapper around ocamlmklib, and creates library archives and
1118 DLLs.
1119 In addition to the standard options, one can use \-package to add the
1120 search path of packages.
1121 Note that no predicates are set by default \- the wrapper does not know
1122 whether this is about byte or native code linking.
1124 This wrapper is mostly provided for completeness.
1127 .SH THE SUBCOMMAND \[lq]ocamldep\[rq]
1129 .B Synopsis
1130 .RS 4n
1133 \fBocamlfind\fR ocamldep [ \fB\-package\fR \fIpackage\-name\-list\fR |
1134                      \fB\-syntax\fR \fIpred\-name\-list\fR |
1135                      \fB\-ppopt\fR \fIcamlp4\-arg\fR |
1136                      \fB\-passopt\fR \fIarg\fR |
1137                      \fB\-passrest\fR \fIarg\fR \&... |
1138                      \fB\-verbose\fR |
1139                      \fBstandard\-option\fR ] \fIfile\fR \&...
1143 .B Description
1144 .RS 4n
1146 This command is a driver for the tool ocamldep of the OCaml
1147 distribution.
1148 This driver is only useful in conjunction with the preprocessor camlp4;
1149 otherwise it does not provide more functions than ocamldep itself.
1152 .B Options
1153 .RS 4n
1155 Here, only the additional options not interpreted by ocamldep but by the
1156 driver itself, and options with additional effects are explained.
1159 .ne 2
1162 .B \-package package\-name\-list
1164 .sp .6
1165 .RS 4n
1166 The packages named here are only used to look up the preprocessor
1167 options.
1168 The package camlp4 should be specified anyway, but further packages that
1169 add capabilities to the preprocessor can also be passed.
1173 .ne 2
1176 .B \-syntax pred\-name\-list
1178 .sp .6
1179 .RS 4n
1180 The predicates that are in effect during the look\-up of the
1181 preprocessor options.
1182 At least, either camlp4o (selecting the normal syntax), or camlp4r
1183 (selecting the revised syntax) should be specified.
1187 .ne 2
1190 \fB\-ppopt\fR \fIcamlp4\-arg\fR
1192 .sp .6
1193 .RS 4n
1194 An option that is passed through to the camlp4 call.
1198 .ne 2
1201 \fB\-passopt\fR \fIarg\fR
1203 .sp .6
1204 .RS 4n
1205 An option that is passed through to the ocamldep call.
1209 .ne 2
1212 \fB\-passrest\fR \fIarg\fR \&...
1214 .sp .6
1215 .RS 4n
1216 All further arguments are passed down to ocamldep unprocessed
1220 .ne 2
1223 .B \-verbose
1225 .sp .6
1226 .RS 4n
1227 Displays the resulting ocamldep command (for debugging)
1231 .B Example
1232 .RS 4n
1234 A typical way of using this driver:
1235 .sp .6
1236 .RS 4n
1237 \fBocamlfind\fR ocamldep \fB\-package\fR \fIcamlp4,xstrp4\fR \fB\-syntax\fR \fIcamlp4r\fR file1.ml file2.ml
1240 This command outputs the dependencies of file1.ml and file2.ml, although
1241 these modules make use of the syntax extensions provided by xstrp4 and
1242 are written in revised syntax.
1245 .SH THE SUBCOMMAND \[lq]ocamlbrowser\[rq]
1247 .B Synopsis
1248 .RS 4n
1251 \fBocamlfind\fR ocamlbrowser [ \fB\-package package\-name\-list\fR |
1252                          \fB\-all\fR |
1253                          \fB\-passopt\fR \fIarg\fR \fB\-passrest\fR \fIargs\fR \&... ]
1257 .B Description
1258 .RS 4n
1260 This driver calls the ocamlbrowser with package options.
1261 With \-package, the specified packages are included into the search path
1262 of the browser, and the modules of these packages become visible (in
1263 addition to the standard library).
1264 The option \-all causes that all packages are selected that are managed
1265 by findlib.
1267 As for other drivers, the options \-passopt and \-passrest can be used
1268 to pass arguments directly to the ocamlbrowser program.
1271 .SH THE SUBCOMMAND \[lq]ocamldoc\[rq]
1273 .B Synopsis
1274 .RS 4n
1277 \fBocamlfind\fR ocamldoc [ \fB\-package\fR \fIpackage\-name\-list\fR |
1278                      \fB\-predicates\fR \fIpred\-name\-list\fR |
1279                      \fB\-syntax\fR \fIpred\-name\-list\fR |
1280                      \fB\-ppopt\fR \fIcamlp4\-arg\fR |
1281                       \fBstandard\-option\fR ] \fIfile \&...\fR
1285 .B Description
1286 .RS 4n
1288 This subcommand is a driver for ocamldoc.
1289 It understands all options ocamldoc supports plus the mentioned findlib
1290 options.
1291 Basically, the \-package options are translated into \-I options, and
1292 the selected syntax options are translated into camlp4 options.
1295 .B Options
1296 .RS 4n
1298 Here, only the additional options not interpreted by ocamldep but by the
1299 driver itself, and options with additional effects are explained.
1301 .ne 2
1304 \fB\-package\fR \fIpackage\-name\-list\fR
1306 .sp .6
1307 .RS 4n
1308 Adds the listed package names to the set of included packages.
1309 The package names may be separated by commas and/or whitespace.
1310 In the transformed command, for every package of the set of included
1311 packages and for any ancestor a directory search option is inserted
1312 after the already given options.
1313 This means that \[lq]\-I\[rq] options are added for every package
1314 directory.
1318 .ne 2
1321 \fB\-predicates\fR \fIpred\-name\-list\fR
1323 .sp .6
1324 .RS 4n
1325 Adds the given predicates to the set of actual predicates.
1326 The predicates must be separated by commas and/or whitespace.
1330 .ne 2
1333 \fB\-syntax\fR \fIpred\-name\-list\fR
1335 .sp .6
1336 .RS 4n
1337 The predicates that are in effect during the look\-up of the
1338 preprocessor options.
1339 At least, either camlp4o (selecting the normal syntax), or camlp4r
1340 (selecting the revised syntax) should be specified.
1344 .ne 2
1347 \fB\-ppopt\fR \fIcamlp4\-arg\fR
1349 .sp .6
1350 .RS 4n
1351 An option that is passed through to the camlp4 call.
1355 .SH THE SUBCOMMAND \[lq]install\[rq]
1357 .B Synopsis
1358 .RS 4n
1361 \fBocamlfind\fR install [ \fB\-destdir\fR \fIdirectory\fR ]
1362                   [ \fB\-metadir\fR \fIdirectory\fR ]
1363                   [ \fB\-ldconf\fR \fIpath\fR ]
1364                   [ \fB\-dont\-add\-directory\-directive\fR ]
1365                   [ \fB\-patch\-version\fR \fIstring\fR ]
1366                   [ \fB\-patch\-rmpkg\fR \fIname\fR ]
1367                   [ \fB\-patch\-archives\fR ]
1368                   [ \fB\-dll\fR ]
1369                   [ \fB\-nodll\fR ]
1370                   [ \fB\-optional\fR ]
1371                   [ \fB\-add\fR ] \fIpackage_name\R \fIfile\fR \&...
1375 .B Description
1376 .RS 4n
1378 This subcommand installs a new package either at the default location
1379 (see the variable destdir of findlib.conf), or in the directory
1380 specified by the \-destdir option.
1381 This means that a new package directory is created and that the files on
1382 the command line are copied to this directory.
1383 It is required that a META file is one of the files copied to the target
1384 directory.
1386 Note that package directories should be flat (no subdirectories).
1387 Existing packages are never overwritten.
1389 It is possible to have a separate directory for all the META files.
1390 If you want that, you have either to set the variable metadir of
1391 findlib.conf, or to specify the \-metadir option.
1392 In this case, the file called META is copied to the specified directory
1393 and renamed to META.p (where p is the package name), while all the other
1394 files are copied to the package directory as usual.
1395 Furthermore, the META file is modified such that the directory variable
1396 contains the path of the package directory.
1398 The option \-dont\-add\-directory\-directive prevents the installer from
1399 adding a directory variable.
1401 If there are files ending in the suffixes .so or .dll, the package
1402 directory will be added to the DLL configuration file ld.conf, such that
1403 the dynamic loader can find the DLL.
1404 The location of this file can be overriden by the \-ldconf option.
1405 To turn this feature off, use \[lq]\-ldconf ignore\[rq]; this causes
1406 that the ld.conf file is not modified.
1408 However, if there is a stublibs directory in site\-lib, the DLLs are not
1409 installed in the package directory, but in this directory that is shared
1410 by all packages that are installed at the same location.
1411 In this case, the configuration file ld.conf is not modified, so you do
1412 not need to say \[lq]\-ldconf ignore\[rq] if you prefer this style of
1413 installation.
1415 The options \-dll and \-nodll can be used to control exactly which files
1416 are considered as DLLs and which not.
1417 By default, the mentioned suffix rule is in effect: files ending in
1418 \[lq].so\[rq] (Unix) or \[lq].dll\[rq] (Windows) are DLLs.
1419 The switch \-dll changes this, and all following files are considered as
1420 DLLs, regardless of their suffix.
1421 The switch \-nodll expresses that the following files are not DLLs, even
1422 if they have a DLL\-like suffix.
1423 For example, in the following call the files \fIf1\fR and \fIf2\fR are handled by
1424 the suffix rule; \fIf3\fR and \fIf4\fR are DLLs anyway; and \fIf5\fR and \fIf6\fR are not DLLs:
1425 .sp .6
1426 .RS 4n
1427 \fBocamlfind\fR install \fIp\fR \fIf1\fR \fIf2\fR \fB\-dll\fR \fIf3\fR \fIf4\fR \fB\-nodll\fR \fIf5\fR \fIf6\fR
1430 The switch \-optional declares that all following files are optional,
1431 i.e.\ the command will not fail if files do not exist.
1433 The \-patch options may be used to change the contents of the META files
1434 while it is being installed.
1435 The option \-patch\-version changes the contents of the top\-level
1436 \[lq]version\[rq] variable.
1437 The option \-patch\-rmpkg removes the given subpackage.
1438 The option \-patch\-archives is experimental, in particular it removes
1439 all non\-existing files from \[lq]archive\[rq] variables, and even whole
1440 subpackages if the archives are missing.
1442 The effect of \-add is to add further files to an already installed
1443 packages.
1446 .SH THE SUBCOMMAND \[lq]remove\[rq]
1448 .B Synopsis
1449 .RS 4n
1452 \fBocamlfind\fR remove [ \fB\-destdir\fR \fIdirectory\fR ] [ \fB\-metadir\fR \fIdirectory\fR ]
1453                  [ \fB\-ldconf\fR \fIpath\fR ] \fIpackage_name\fR
1457 .B Description
1458 .RS 4n
1460 The package will removed if it is installed at the default location (see
1461 the variable destdir of findlib.conf).
1462 If the package resides at a different location, it will not be removed
1463 by default; however, you can pass an alternate directory for packages by
1464 the \-destdir option.
1465 (This must be the same directory as specified at installation time.)
1467 Note that package directories should be flat (no subdirectories); this
1468 subcommand cannot remove deep package directories.
1470 If you have a separate directory for META files, you must either
1471 configure this directory by the metadir variable of findlib.conf, or by
1472 specifying the \-metadir option.
1474 The command does not fail if the package and/or the META file cannot be
1475 located.
1476 You will get a warning only in this case.
1478 If the package directory is mentioned in the ld.conf configuration file
1479 for DLLs, it will be tried to remove this entry from the file.
1480 The location of this file can be overriden by the \-ldconf option.
1481 To turn this feature off, use \[lq]\-ldconf ignore\[rq]; this causes
1482 that the ld.conf file is not modified.
1484 If there is a stublibs directory, it is checked whether the package owns
1485 any of the files in this directory, and the owned files will be deleted.
1488 .SH THE SUBCOMMAND \[lq]list\[rq]
1490 .B Synopsis
1491 .RS 4n
1494 \fBocamlfind\fR list [ \fB\-describe\fR ]
1498 .B Description
1499 .RS 4n
1501 This command lists all packages in the search path.
1502 The option \-describe outputs the package descriptions, too.
1505 .SH THE SUBCOMMAND \[lq]printppx\[rq]
1507 .B Synopsis
1508 .RS 4n
1511 \fBocamlfind\fR printppx [ \fB\-predicates\fR \fIpred\-name\-list\fR ] 
1512                    [ \fB\-ppxopt\fR \fIpackage,arg\fR ] \fIpackage\fR \&...
1516 .B Description
1517 .RS 4n
1519 This command prints the ppx preprocessor options as they would occur in
1520 an OCaml compiler invocation for the packages listed in the command.
1521 The output includes one \[lq]\-ppx\[rq] option for each preprocessor.
1522 The possible options have the same meaning as for \[lq]ocamlfind
1523 ocamlc\[rq].
1524 The option \[lq]\-predicates\[rq] adds assumed predicates and
1525 \[lq]\-ppxopt package,arg\[rq] adds \[lq]arg\[rq] to the ppx invocation
1526 of package package.
1528 The output of \[lq]ocamlfind printppx\[rq] will contain quotes
1529 \[lq]\[rq]" for ppx commands that contain space\-separated arguments.
1530 In this case $(ocamlfind printppx \&...) won't work as naively expected,
1531 because many shells (including bash and dash) perform field splitting on
1532 the result of command substitutions without honoring quotes.
1535 .SH THE SUBCOMMAND \[lq]lint\[rq]
1537 .B Synopsis
1538 .RS 4n
1541 \fBocamlfind\fR lint \fIfile\fR
1545 .B Description
1546 .RS 4n
1548 Checks the META file, and reports possible problems.
1551 .SH THE SUBCOMMAND \[lq]printconf\[rq]
1553 .B Synopsis
1554 .RS 4n
1557 \fBocamlfind\fR printconf [ \fBconf\fR | \fBpath\fR | \fBdestdir\fR | \fBmetadir\fR | \fBmetapath\fR |
1558                       \fBstdlib\fR | \fBldconf\fR ]
1562 .B Description
1563 .RS 4n
1565 This command prints the effective configuration after reading the
1566 configuration file, and after applying the various environment variables
1567 overriding settings.
1568 When called without arguments, the command prints all configuration
1569 options in a human\-readable form.
1570 When called with an argument, only the value of the requested option is
1571 printed without explaining texts:
1573 .ne 2
1576 .B conf
1578 .sp .6
1579 .RS 4n
1580 Prints the location of the configuration file findlib.conf
1584 .ne 2
1587 .B path
1589 .sp .6
1590 .RS 4n
1591 Prints the search path for packages.
1592 The members of the path are separated by linefeeds.
1596 .ne 2
1599 .B destdir
1601 .sp .6
1602 .RS 4n
1603 Prints the location where package are installed and removed by default.
1607 .ne 2
1610 .B metadir
1612 .sp .6
1613 .RS 4n
1614 Prints the location where META files are installed and removed (if the
1615 alternative layout is used).
1619 .ne 2
1622 .B metapath
1624 .sp .6
1625 .RS 4n
1626 Prints the path where the META file is installed for a fictive package.
1627 The name of the package is marked with `%s' in the path.
1628 For instance, this command could output \[lq]/some/path/%s/META\[rq] or
1629 \[lq]/some/path/META.%s\[rq], depending on the layout.
1633 .ne 2
1636 .B stdlib
1638 .sp .6
1639 .RS 4n
1640 Prints the location of the standard library.
1644 .ne 2
1647 .B ldconf
1649 .sp .6
1650 .RS 4n
1651 Prints the location of the ld.conf file
1655 .SH THE SUBCOMMAND CALLING PACKAGE PROGRAMS
1657 .B Synopsis
1658 .RS 4n
1661 \fBocamlfind\fR pkg/cmd \fIargument\fR \&...
1665 .B Description
1666 .RS 4n
1668 This subcommand is useful to call programs that are installed in package
1669 directories.
1670 It looks up the directory for pkg and calls the command named cmd in
1671 this directory.
1672 The remaining arguments are passed to this command.
1674 argv(0) contains the absolute path to the command, and argv(1) and the
1675 following argv entries contain the arguments.
1676 The working directory is not changed.
1678 Example: To call the program \[lq]x\[rq] that is installed in package
1679 \[lq]p\[rq], with arguments \[lq]y\[rq] and \[lq]z\[rq], run:
1680 .sp .6
1681 .RS 4n
1682 \fBocamlfind\fR \fIp/x\fR \fIy\fR \fIz\fR
1686 .SH CONFIGURATION FILE, ENVIRONMENT VARIABLES
1688 The configuration file and environment variables are documented in the
1689 manual page for findlib.conf.
1691 .SH HOW TO SET THE TOOLCHAIN
1693 .B Synopsis
1694 .RS 4n
1697 \fBocamlfind \-toolchain\fR \fIname\fR \&...
1701 .B Description
1702 .RS 4n
1704 The \-toolchain option can be given before any other command, e.g.
1705 ocamlfind \-toolchain foo ocamlc \-c file.ml
1706 compiles file.ml with toolchain \[lq]foo\[rq].
1707 By selecting toolchains one can switch to different command sets.
1708 For instance, the toolchain \[lq]foo\[rq] may consist of a patched
1709 ocamlc compiler.
1711 See findlib.conf how to configure toolchains.