From edf3fa931cfaff399ed05a3d223eecb2286e1353 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 23 Dec 2019 11:53:09 +0000 Subject: [PATCH] Implement -C / --directory option. --- src/main.ml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main.ml b/src/main.ml index 2111eaf..bb25402 100644 --- a/src/main.ml +++ b/src/main.ml @@ -37,25 +37,34 @@ Options:" let main () = (* Command line arguments. *) + let args = ref [] in + let directory = ref "." in let filename = ref "Goalfile" in let argspec = [ - "-f", Arg.Set_string filename, - "filename Set name of Goalfile"; - "--file", Arg.Set_string filename, - "filename Set name of Goalfile"; + "-C", Arg.Set_string directory, + "directory Change to directory before running"; + "--directory", Arg.Set_string directory, + "directory Change to directory before running"; + "-f", Arg.Set_string filename, + "filename Set name of Goalfile"; + "--file", Arg.Set_string filename, + "filename Set name of Goalfile"; ] in let argspec = Arg.align argspec in - let args = ref [] in let anon_fun s = args := s :: !args in Arg.parse argspec anon_fun usage; - (*let args = List.rev !args in*) + let args = List.rev !args in + let directory = !directory in let filename = !filename in (* Parse the input file. *) let env = Parse.parse_goalfile filename in + (* Now we've read the input, change directory. *) + Sys.chdir directory; + (* Parse the command line anon args. Each parameter has the * form "name=" to assign a value to a variable, or * "" to indicate a target to build. @@ -75,7 +84,7 @@ let main () = let expr = Parse.parse_cli_expr arg in targets := expr :: !targets ) - ) !args; + ) args; let targets = List.rev !targets and env = !env in (* If no target was set on the command line, use "all ()". *) -- 1.8.3.1