C build tool of the 21st century
at main 95 lines 2.7 kB view raw
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)