Module Cmdliner.Cmd
Contents
Instructions: Use this module in your project
In the IDE (CLion, Visual Studio Code, Xcode, etc.) you use for your DkSDK project:
Add the following to your project's
dependencies/CMakeLists.txt:DkSDKProject_DeclareAvailable(cmdliner CONSTRAINT "= 1.1.1+dune" FINDLIBS cmdliner) DkSDKProject_MakeAvailable(cmdliner)Add the
Findlib::cmdlinerlibrary to any desired targets insrc/*/CMakeLists.txt:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::cmdliner)Click your IDE's
Buildbutton
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install cmdliner.1.1.1+duneEdit your
dune-projectand add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (cmdliner (>= 1.1.1+dune))))Then run:
dune build *.opam # if this fails, run: dune buildEdit your
<package>.opamfile and add:depends: [ # ... existing dependencies ... "cmdliner" {>= "1.1.1+dune"} ]Then run:
opam install . --deps-only
FINALLY, add the cmdliner library to any desired (library)and/or (executable) targets in your **/dune files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
cmdliner))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
cmdliner))Command information
Command information defines the name and documentation of a command.
moduleExit:sig...end
Exit codes and their information.
moduleEnv:sig...end
Environment variable and their information.
typeinfo
The type for information about commands.
valinfo : ``?deprecated:string->``?man_xrefs:Manpage.xreflist``->``?man:Manpage.blocklist``->``?envs:Env.infolist``->``?exits:Exit.infolist``->``?sdocs:string->``?docs:string->``?doc:string->``?version:string->``string->info
info name ?sdocs ?man ?docs ?doc ?version is a term information such
that:
nameis the name of the command.versionis the version string of the command line tool, this is only relevant for the main command and ignored otherwise.deprecated, if specified the command is deprecated and the string is a message output on standard error when the command is used.docis a one line description of the command used for theNAMEsection of the command's man page and in command group listings.docs, for commands that are part of a group, the title of the section of the parent's command man page where it should be listed (defaults toManpage.s_commands).sdocsdefines the title of the section in which the standard--helpand--versionarguments are listed (defaults toManpage.s_common_options).exitsis a list of exit statuses that the command evaluation may produce, defaults toExit.defaults.envsis a list of environment variables that influence the command's evaluation.manis the text of the man page for the command.man_xrefsare cross-references to other manual pages. These are used to generate aManpage.s_see_alsosection.
doc, man, envs support the
documentation markup language in
which the following variables are recognized:
$(tname)the (term's) command's name.$(mname)the main command name.
Commands
type``'a t
The type for commands whose evaluation result in a value of type 'a.
v i t is a command with information i and command line syntax parsed
by t.
group i ?default cmds is a command with information i that groups
sub commands cmds. default is the command line syntax to parse if no
sub command is specified on the command line. If default is None
(default), the tool errors when no sub command is specified.
valname :'at->string
name c is the name of c.
Evaluation
These functions are meant to be composed with
Stdlib.exit. The following exit codes
may be returned by all these functions:
Exit.cli_errorif a parse error occurs.Exit.internal_errorif the~catchargument istrue(default) and an uncaught exception is raised.- The value of
~term_err(defaults toExit.cli_error) if a term error occurs.
These exit codes are described in
Exit.defaults which is the
default value of the ?exits argument of function info.
valeval : ``?help:Stdlib.Format.formatter->``?err:Stdlib.Format.formatter->``?catch:bool->``?env:``(``string->``string option``)``->``?argv:``string array``->``?term_err:Exit.code->``unitt->Exit.code
eval cmd is Exit.ok if cmd
evaluates to (). See eval_value for other
arguments.
valeval' : ``?help:Stdlib.Format.formatter->``?err:Stdlib.Format.formatter->``?catch:bool->``?env:``(``string->``string option``)``->``?argv:``string array``->``?term_err:Exit.code->Exit.codet->Exit.code
eval' cmd is c if cmd evaluates to the exit code c. See
eval_value for other arguments.
valeval_result : ``?help:Stdlib.Format.formatter->``?err:Stdlib.Format.formatter->``?catch:bool->``?env:``(``string->``string option``)``->``?argv:``string array``->``?term_err:Exit.code->``(unit, string)``resultt->Exit.code
eval_result cmd is:
Exit.okifcmdevaluates toOk ().Exit.some_errorifcmdevaluates toError msg. In this casemsgis printed onerr.
See eval_value for other arguments.
valeval_result' : ``?help:Stdlib.Format.formatter->``?err:Stdlib.Format.formatter->``?catch:bool->``?env:``(``string->``string option``)``->``?argv:``string array``->``?term_err:Exit.code->``(Exit.code, string)``resultt->Exit.code
eval_result' cmd is:
cifcmdevaluates toOk c.Exit.some_errorifcmdevaluates toError msg. In this casemsgis printed onerr.
See eval_value for other arguments.
Low level evaluation
This interface gives more information on command evaluation results and lets you choose how to map evaluation results to exit codes.
type``'a eval_ok`` = ``[
| ```Ok ``of'a(* The term of the command evaluated to this value.
*)
| ```Version ``(* The version of the main cmd was requested.
*)
| ```Help ``(* Help was requested.
*)
]
The type for successful evaluation results.
typeeval_error`` = ``[
| ```Parse ``(* A parse error occured.
*)
| ```Term ``(* A term evaluation error occured.
*)
| ```Exn ``(* An uncaught exception occured.
*)
]
The type for erroring evaluation results.
valeval_value : ``?help:Stdlib.Format.formatter->``?err:Stdlib.Format.formatter->``?catch:bool->``?env:``(``string->``string option``)``->``?argv:``string array``->'at->``('aeval_ok,eval_error)``result
eval ~help ~err ~catch ~env ~argv cmd is the evaluation result of
cmd with:
argvthe command line arguments to parse (defaults toSys.argv)envthe function used for environment variable lookup (defaults toSys.getenv.catchiftrue(default) uncaught exceptions are intercepted and their stack trace is written to theerrformatterhelpis the formatter used to print help or version messages (defaults toFormat.std_formatter)erris the formatter used to print error messages (defaults toFormat.err_formatter.
valeval_peek_opts : ``?version_opt:bool->``?env:``(``string->``string option``)``->``?argv:``string array``->'aTerm.t->'aoption`` * ``('aeval_ok,eval_error)``result
eval_peek_opts version_opt argv t evaluates t, a term made of
optional arguments only, with the command line argv (defaults to
Sys.argv). In this evaluation, unknown optional arguments and
positional arguments are ignored.
The evaluation returns a pair. The first component is the result of
parsing the command line argv stripped from any help and version
option if version_opt is true (defaults to false). It results in:
Some _if the command line would be parsed correctly given the partial knowledge int.Noneif a parse error would occur on the options oft
The second component is the result of parsing the command line argv
without stripping the help and version options. It indicates what the
evaluation would result in on argv given the partial knowledge in t
(for example it would return `Help if there's a help option in
argv). However in contrasts to eval_value no side
effects like error reporting or help output occurs.
Note. Positional arguments can't be peeked without the full specification of the command line: we can't tell apart a positional argument from the value of an unknown optional argument.
