12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485(*---------------------------------------------------------------------------
Copyright (c) 2025 The b0 programmers. All rights reserved.
SPDX-License-Identifier: ISC
---------------------------------------------------------------------------*)openB0_stdopenResult.Syntaxtypekind=Root|B0|Cache|Build|Unitletget_kind~kind~units=matchkindwith|None->ifunits=[]thenBuildelseUnit|Somekindwhenkind<>Unit&&units<>[]->letpp_args=Fmt.(list~sep:spcode)inLog.warn(funm->m"Ignoring positional arguments @[%a@]"pp_argsunits);kind|Somekind->kindletoutput_dirdir=Fmt.pr"@[%a@]@."Fpath.pp(Fpath.strip_trailing_dir_sepdir);Os.Exit.okletoutput_dirs~kind~unitsconf=matchget_kind~kind~unitswith|Root->B0_cmd_root.output_dirconf|B0->output_dir(B0_driver.Conf.b0_dirconf)|Cache->output_dir(B0_driver.Conf.cache_dirconf)|Unit->B0_cmd_unit.output_dirs~unitsconf|Build->letb0_dir=B0_driver.Conf.b0_dirconfinletbuild_dir=B0_build.B0_dir.build_dir~b0_dir~variant:"user"(* FIXME *)inoutput_dirbuild_dir(* Command line interface *)openCmdlineropenCmdliner.Term.Syntaxletkind=letkinds=[SomeRoot,Arg.info["root"]~doc:"The root directory. See also $(tool) $(b,root).";SomeB0,Arg.info["b0"]~doc:"The b0 directory. See $(b,--b0-dir).";SomeCache,Arg.info["cache"]~doc:"The cache directory. See $(b,--cache-dir).";SomeBuild,Arg.info["build"]~doc:"The build root directory. Default if there is no \
positional argument.";SomeUnit,Arg.info["unit"]~doc:"The directory of build unit(s). Default if there is a \
positional argument. If this is specified and there is \
no argument all of them are output. \
See also $(tool) $(b,unit dir)";]inArg.(value&vflagNonekinds)letunits=letdoc="The $(docv) to act on. If $(b,--unit) is specified, this is \
all of them if unspecified."inB0_cli.act_on_units_posn~doc~first:0()letcmd=letdoc="Output the path to b0 directories"inletdescr=`Blocks[`P"$(cmd) outputs the path to directories used by $(tool). The \
directories do not necessarily exist on the file system.";`Pre"$(cmd) # Path to the build directory";`Noblank;`Pre"$(cmd) $(b,myunit) # Path to the build directory of $(b,myunit)";`Noblank;`Pre"$(cmd) $(b,--cache) # Path to the cache directory";`P"Without arguments default to $(b,--build). With only positional \
arguments it defaults $(b,--unit).";`Noblank;]inB0_tool_cli.cmd_with_b0_file"dir"~doc~descr@@let+kindand+unitsinoutput_dirs~kind~units