C build tool of the 21st century
1open Cmdliner
2
3let path =
4 let doc = "Root directory" in
5 Arg.(
6 value & opt string (Sys.getcwd ()) & info [ "p"; "path" ] ~doc ~docv:"PATH")
7
8let output =
9 let doc = "Output file name" in
10 Arg.(
11 value & opt (some string) None & info [ "o"; "output" ] ~doc ~docv:"PATH")
12
13let targets =
14 let doc = "Selected targets" in
15 Arg.(value & pos_all string [] & info [] ~doc ~docv:"TARGETS")
16
17let cflag =
18 let doc =
19 "Compiler flag for a specific language (e.g. -c c=-O2). Use 'all' for all \
20 languages."
21 in
22 Arg.(
23 value
24 & opt_all (pair ~sep:'=' string string) []
25 & info [ "cflag"; "c" ] ~doc ~docv:"LANG=FLAG")
26
27let ldflag =
28 let doc =
29 "Linker flag for a specific language (e.g. -l c=-lm). Use 'all' for all \
30 languages."
31 in
32 Arg.(
33 value
34 & opt_all (pair ~sep:'=' string string) []
35 & info [ "lflag"; "l" ] ~doc ~docv:"LANG=FLAG")
36
37let ignore =
38 let doc = "Ignore file" in
39 Arg.(value & opt_all string [] & info [ "ignore"; "i" ] ~doc ~docv:"FILE")
40
41let file =
42 let doc = "Add file" in
43 Arg.(value & opt_all string [] & info [ "file"; "f" ] ~doc ~docv:"FILE")
44
45let run =
46 let doc = "Run after compiling" in
47 Arg.(value & flag & info [ "run"; "r" ] ~doc)
48
49let watch =
50 let doc = "Watch for file changes and rebuild automatically." in
51 Arg.(value & flag & info [ "w"; "watch" ] ~doc)
52
53let arg =
54 let doc = "Run argument" in
55 Arg.(value & opt_all string [] & info [ "arg" ] ~doc ~docv:"ARGUMENT")
56
57let pkg =
58 let doc = "Pkg-config package" in
59 Arg.(value & opt_all string [] & info [ "pkg" ] ~doc ~docv:"PACKAGE")
60
61let linker =
62 let doc = "Linker name" in
63 Arg.(value & opt (some string) None & info [ "linker" ] ~doc ~docv:"LINKER")
64
65let verbose =
66 let doc = "Control log verbosity (-v for verbose, -vv for debug logging)" in
67 Arg.(value & flag_all & info [ "verbose"; "v" ] ~doc)
68
69let target =
70 let doc = "Target to run" in
71 Arg.(value & pos 0 (some string) None & info [] ~doc ~docv:"TARGET")
72
73let build =
74 let doc = "Compile before running" in
75 Arg.(value & flag & info [ "build"; "b" ] ~doc)
76
77let clean_build =
78 let doc = "Clean before building" in
79 Arg.(value & flag & info [ "clean" ] ~doc)
80
81let run_args =
82 let doc = "Arguments to pass to executable" in
83 Arg.(value & pos_right 0 string [] & info [] ~doc ~docv:"ARG")
84
85let prefix =
86 let doc = "Installation prefix" in
87 Arg.(value & opt string "/usr/local" & info [ "prefix" ] ~doc ~docv:"PATH")
88
89let version =
90 let doc = "Version" in
91 Arg.(value & opt string "0.0.0" & info [ "version" ] ~doc ~docv:"VERSION")
92
93let uninstall =
94 let doc = "Uninstall artifacts instead of installing" in
95 Arg.(value & flag & info [ "u"; "uninstall" ] ~doc)