goals.git
4 years agotests: More basic tests.
Richard W.M. Jones [Sat, 11 Jan 2020 11:57:08 +0000 (11:57 +0000)]
tests: More basic tests.

4 years agotests: Print PASS/FAIL for each test.
Richard W.M. Jones [Sat, 11 Jan 2020 20:07:47 +0000 (20:07 +0000)]
tests: Print PASS/FAIL for each test.

Simple test harness.

4 years agorun: Improve consistency of error messages.
Richard W.M. Jones [Fri, 10 Jan 2020 19:43:17 +0000 (19:43 +0000)]
run: Improve consistency of error messages.

Make sure we always print the line number and the full name + params
of any goal or tactic which fails.

4 years agojobs: Wait for completion even in the error case.
Richard W.M. Jones [Fri, 10 Jan 2020 19:38:43 +0000 (19:38 +0000)]
jobs: Wait for completion even in the error case.

Previously if we hit an error (last_exn being set) then we exited the
loop immediately and re-raised the exception.  However this means jobs
which are still running would continue to run after goals exited.
Move the wait code outside the loop to ensure we always wait for jobs
to complete even in the error case.

4 years agotests: Add basic tests.
Richard W.M. Jones [Fri, 10 Jan 2020 08:31:06 +0000 (08:31 +0000)]
tests: Add basic tests.

Use 'make check' to run them.

4 years agoparser: Allow an empty goal statement with no targets, deps or code.
Richard W.M. Jones [Fri, 10 Jan 2020 12:30:51 +0000 (12:30 +0000)]
parser: Allow an empty goal statement with no targets, deps or code.

This allows you to write "do nothing" goals like:

  goal all ;

4 years agobuild: Add 'make maintainer-clean' passthrough rule.
Richard W.M. Jones [Fri, 10 Jan 2020 12:16:53 +0000 (12:16 +0000)]
build: Add 'make maintainer-clean' passthrough rule.

4 years agostdlib: Add wrap function.
Richard W.M. Jones [Fri, 10 Jan 2020 12:15:41 +0000 (12:15 +0000)]
stdlib: Add wrap function.

4 years agostdlib: Don't add \n after quoted_string.
Richard W.M. Jones [Fri, 10 Jan 2020 12:15:23 +0000 (12:15 +0000)]
stdlib: Don't add \n after quoted_string.

4 years agorun: Add %goals_final_check variable when evaluating tactics.
Richard W.M. Jones [Fri, 10 Jan 2020 08:42:41 +0000 (08:42 +0000)]
run: Add %goals_final_check variable when evaluating tactics.

This is true ("1") if this is the final check that the goal evaluation
was successful.  It allows tactics to behave differently when
evaluating if we need a rebuild vs checking that the rebuild was
successful.

4 years agoSplit implementation into dependency analysis and traversal.
Richard W.M. Jones [Thu, 9 Jan 2020 18:11:42 +0000 (18:11 +0000)]
Split implementation into dependency analysis and traversal.

4 years agoutils: Add unique () function.
Richard W.M. Jones [Thu, 9 Jan 2020 18:11:26 +0000 (18:11 +0000)]
utils: Add unique () function.

4 years agojobs: Don't let Failure exception escape from worker.
Richard W.M. Jones [Thu, 9 Jan 2020 11:53:54 +0000 (11:53 +0000)]
jobs: Don't let Failure exception escape from worker.

Also stop the wait () function if the stop flag is set so we don't
wait forever for jobs which are never going to be run.

4 years agocmdline: Make sure all errors go through main () function.
Richard W.M. Jones [Thu, 9 Jan 2020 11:50:27 +0000 (11:50 +0000)]
cmdline: Make sure all errors go through main () function.

4 years agojobs: Introduce stop_all function to stop job submission on error.
Richard W.M. Jones [Thu, 9 Jan 2020 11:49:50 +0000 (11:49 +0000)]
jobs: Introduce stop_all function to stop job submission on error.

4 years agoUpdate TODO.
Richard W.M. Jones [Wed, 8 Jan 2020 22:06:29 +0000 (22:06 +0000)]
Update TODO.

4 years agobuild: Create man/ subdirectory before building man pages.
Richard W.M. Jones [Wed, 8 Jan 2020 21:57:33 +0000 (21:57 +0000)]
build: Create man/ subdirectory before building man pages.

4 years agoImplement parallel jobs (-j option).
Richard W.M. Jones [Wed, 8 Jan 2020 11:43:26 +0000 (11:43 +0000)]
Implement parallel jobs (-j option).

4 years agobuild: Remove man/*.? man pages when running 'make clean'.
Richard W.M. Jones [Wed, 8 Jan 2020 16:18:38 +0000 (16:18 +0000)]
build: Remove man/*.? man pages when running 'make clean'.

Fixes commit abfde4ea239de6b9458243a862d5da0302a241a4.

4 years agodocs: Add empty Goalfile(5) and goals-reference(5).
Richard W.M. Jones [Tue, 7 Jan 2020 20:42:53 +0000 (20:42 +0000)]
docs: Add empty Goalfile(5) and goals-reference(5).

4 years agodocs: Write man pages to man/ subdirectory.
Richard W.M. Jones [Tue, 7 Jan 2020 20:39:55 +0000 (20:39 +0000)]
docs: Write man pages to man/ subdirectory.

Allows us to test multi-parameter goals.

4 years agodocs: Expand the basic man page.
Richard W.M. Jones [Tue, 7 Jan 2020 20:36:56 +0000 (20:36 +0000)]
docs: Expand the basic man page.

4 years agodocs: Use pod2man -u option.
Richard W.M. Jones [Tue, 7 Jan 2020 20:36:20 +0000 (20:36 +0000)]
docs: Use pod2man -u option.

4 years agocmdline: Don't convert Goalfile, includes to absolute paths.
Richard W.M. Jones [Tue, 7 Jan 2020 18:24:19 +0000 (18:24 +0000)]
cmdline: Don't convert Goalfile, includes to absolute paths.

We actually want these to be relative to the -C directory,
same as make.

4 years agoAdd documentation subdirectory.
Richard W.M. Jones [Tue, 7 Jan 2020 17:10:20 +0000 (17:10 +0000)]
Add documentation subdirectory.

4 years agoIn debug mode (-d) print all shell scripts executed.
Richard W.M. Jones [Tue, 7 Jan 2020 17:10:05 +0000 (17:10 +0000)]
In debug mode (-d) print all shell scripts executed.

4 years agoAdd README file for the project.
Richard W.M. Jones [Tue, 7 Jan 2020 15:56:09 +0000 (15:56 +0000)]
Add README file for the project.

4 years agoUpdate TODO.
Richard W.M. Jones [Tue, 7 Jan 2020 15:30:53 +0000 (15:30 +0000)]
Update TODO.

4 years agoeval: Split running external code according to return type.
Richard W.M. Jones [Tue, 7 Jan 2020 13:31:46 +0000 (13:31 +0000)]
eval: Split running external code according to return type.

Previously we were wrongly hiding stdout in some cases.

Fixes commit a48b05d35f0646322e8178ff10f8ed7af3e739aa
and commit 2ac1b84cb49ad04e27b4543436b0227153fbfb15.

4 years agoImplement pure functions.
Richard W.M. Jones [Tue, 7 Jan 2020 08:57:58 +0000 (08:57 +0000)]
Implement pure functions.

4 years agolexer: Use @{...} for quiet code sections.
Richard W.M. Jones [Mon, 6 Jan 2020 21:38:07 +0000 (21:38 +0000)]
lexer: Use @{...} for quiet code sections.

4 years agoparser: Fix parsing of patterns containing explicit tactic names.
Richard W.M. Jones [Mon, 6 Jan 2020 20:54:09 +0000 (20:54 +0000)]
parser: Fix parsing of patterns containing explicit tactic names.

4 years agoparser: Fix tracking of beginning of line for error messages.
Richard W.M. Jones [Mon, 6 Jan 2020 20:51:39 +0000 (20:51 +0000)]
parser: Fix tracking of beginning of line for error messages.

4 years agoCopy system environment into initial env, and also add %stdlib.
Richard W.M. Jones [Mon, 6 Jan 2020 12:53:15 +0000 (12:53 +0000)]
Copy system environment into initial env, and also add %stdlib.

4 years agoAllow functions "returning strings" (etc), redefine sort function.
Richard W.M. Jones [Mon, 6 Jan 2020 09:51:15 +0000 (09:51 +0000)]
Allow functions "returning strings" (etc), redefine sort function.

4 years agoStandardize running code in a single function, include prelude.sh.
Richard W.M. Jones [Sun, 5 Jan 2020 21:23:59 +0000 (21:23 +0000)]
Standardize running code in a single function, include prelude.sh.

4 years agoUpdate TODO
Richard W.M. Jones [Sun, 5 Jan 2020 21:09:45 +0000 (21:09 +0000)]
Update TODO

4 years agoFunctions return expressions instead of only lists of strings.
Richard W.M. Jones [Sun, 5 Jan 2020 13:10:43 +0000 (13:10 +0000)]
Functions return expressions instead of only lists of strings.

4 years agobuild: Create dependencies for Goalfile itself.
Richard W.M. Jones [Sat, 4 Jan 2020 12:02:24 +0000 (12:02 +0000)]
build: Create dependencies for Goalfile itself.

4 years agostdlib: Implement sort function.
Richard W.M. Jones [Sat, 4 Jan 2020 11:56:00 +0000 (11:56 +0000)]
stdlib: Implement sort function.

4 years agoUpdate TODO.
Richard W.M. Jones [Sat, 4 Jan 2020 11:48:22 +0000 (11:48 +0000)]
Update TODO.

4 years agobuild: Generate complete OCaml dependencies.
Richard W.M. Jones [Sat, 4 Jan 2020 09:49:21 +0000 (09:49 +0000)]
build: Generate complete OCaml dependencies.

Because we didn't use -I src on the ocamldep command line, ocamldep
didn't generate the complete set of dependencies.

4 years agoAst: Standard location for ocamldoc comments.
Richard W.M. Jones [Sat, 4 Jan 2020 09:41:52 +0000 (09:41 +0000)]
Ast: Standard location for ocamldoc comments.

4 years agostdlib: Implement wildcard function.
Richard W.M. Jones [Fri, 3 Jan 2020 21:45:34 +0000 (21:45 +0000)]
stdlib: Implement wildcard function.

4 years agoImplement functions.
Richard W.M. Jones [Fri, 3 Jan 2020 21:33:48 +0000 (21:33 +0000)]
Implement functions.

4 years agoAst: Remove functions which were moved to Eval module.
Richard W.M. Jones [Fri, 3 Jan 2020 21:10:16 +0000 (21:10 +0000)]
Ast: Remove functions which were moved to Eval module.

Updates commit f36210fd16a8e4e4d6ecdd8825bf8b8307943472.

4 years agobuild: Add depend goal and 'make depend'.
Richard W.M. Jones [Fri, 3 Jan 2020 19:26:13 +0000 (19:26 +0000)]
build: Add depend goal and 'make depend'.

4 years agobuild: Don't always pass -d to goals.
Richard W.M. Jones [Fri, 3 Jan 2020 19:24:24 +0000 (19:24 +0000)]
build: Don't always pass -d to goals.

We can enable debugging on a case-by-case basis when necessary.

4 years agobuild: Fix construction of parser.mli
Richard W.M. Jones [Fri, 3 Jan 2020 19:23:50 +0000 (19:23 +0000)]
build: Fix construction of parser.mli

4 years agobuild: Fix ocamldep invocation.
Richard W.M. Jones [Fri, 3 Jan 2020 19:19:01 +0000 (19:19 +0000)]
build: Fix ocamldep invocation.

4 years agobuild: Fix 'goals clean' rule.
Richard W.M. Jones [Fri, 3 Jan 2020 19:18:48 +0000 (19:18 +0000)]
build: Fix 'goals clean' rule.

4 years agostdlib: Fix *file tactic.
Richard W.M. Jones [Fri, 3 Jan 2020 19:07:11 +0000 (19:07 +0000)]
stdlib: Fix *file tactic.

Broken test if there is more than one dependency.

4 years agorun: Fix whitespace.
Richard W.M. Jones [Fri, 3 Jan 2020 19:07:07 +0000 (19:07 +0000)]
run: Fix whitespace.

4 years agorun: Better debugging and error messages for goals and tactics.
Richard W.M. Jones [Fri, 3 Jan 2020 18:49:31 +0000 (18:49 +0000)]
run: Better debugging and error messages for goals and tactics.

4 years agorun: If multiple goals match a tactic, at most one must have a CODE section.
Richard W.M. Jones [Fri, 3 Jan 2020 15:09:28 +0000 (15:09 +0000)]
run: If multiple goals match a tactic, at most one must have a CODE section.

This now works the same way as make.

4 years agoDon't default to echoing tactic command.
Richard W.M. Jones [Fri, 3 Jan 2020 15:12:02 +0000 (15:12 +0000)]
Don't default to echoing tactic command.

4 years agoUpdate TODO
Richard W.M. Jones [Fri, 3 Jan 2020 11:24:24 +0000 (11:24 +0000)]
Update TODO

4 years agoIn dependency file, use ; between statements.
Richard W.M. Jones [Fri, 3 Jan 2020 14:50:55 +0000 (14:50 +0000)]
In dependency file, use ; between statements.

So this parses correctly.

4 years agoparser: Optional semicolon between statements.
Richard W.M. Jones [Fri, 3 Jan 2020 14:48:54 +0000 (14:48 +0000)]
parser: Optional semicolon between statements.

4 years agoSimplify Constructor -> Ctor.
Richard W.M. Jones [Fri, 3 Jan 2020 11:35:56 +0000 (11:35 +0000)]
Simplify Constructor -> Ctor.

4 years agoRename Eval -> Run, split out some Ast functions into new Eval.
Richard W.M. Jones [Fri, 3 Jan 2020 11:33:31 +0000 (11:33 +0000)]
Rename Eval -> Run, split out some Ast functions into new Eval.

This gives us more consistent nomenclature:

  - "Run" for running targets.
  - "Eval" for simplifying and evaluating expressions, etc.
  - "Ast" is a library of AST-related structures.

4 years agoeval: Don't check target was rebuilt if there is no code.
Richard W.M. Jones [Fri, 3 Jan 2020 08:11:18 +0000 (08:11 +0000)]
eval: Don't check target was rebuilt if there is no code.

A pure dependency rule like:

  "foo.o": "foo.c"

doesn't contain any code, so it doesn't make sense to check if the
target has been rebuilt.

4 years agoUse goals itself exclusively to build.
Richard W.M. Jones [Mon, 30 Dec 2019 21:27:57 +0000 (21:27 +0000)]
Use goals itself exclusively to build.

4 years agoeval: Goals with no targets always need a rebuild.
Richard W.M. Jones [Fri, 3 Jan 2020 08:02:29 +0000 (08:02 +0000)]
eval: Goals with no targets always need a rebuild.

4 years agoeval: If multiple goals match a tactic, run them all.
Richard W.M. Jones [Fri, 3 Jan 2020 07:54:11 +0000 (07:54 +0000)]
eval: If multiple goals match a tactic, run them all.

4 years agolexer: Fix parsing of { characters in CODE sections.
Richard W.M. Jones [Fri, 3 Jan 2020 07:44:21 +0000 (07:44 +0000)]
lexer: Fix parsing of { characters in CODE sections.

4 years agoeval: Explicit function to evaluate goal arguments.
Richard W.M. Jones [Fri, 3 Jan 2020 07:44:00 +0000 (07:44 +0000)]
eval: Explicit function to evaluate goal arguments.

4 years agoRevert "eval: Expand goal args before running the goal."
Richard W.M. Jones [Fri, 3 Jan 2020 07:28:10 +0000 (07:28 +0000)]
Revert "eval: Expand goal args before running the goal."

This reverts commit 8509cad9b10205b7bec23eb59ba63e88c3d0fcb3.

4 years agoeval: Expand goal args before running the goal.
Richard W.M. Jones [Thu, 2 Jan 2020 16:11:39 +0000 (16:11 +0000)]
eval: Expand goal args before running the goal.

4 years agoLexer: Allow "-" char in the middle of identifier names.
Richard W.M. Jones [Thu, 2 Jan 2020 16:00:56 +0000 (16:00 +0000)]
Lexer: Allow "-" char in the middle of identifier names.

This allows eg maintainer-clean to be a goal name.

4 years agoAst: Rename ECallTactic to ETacticConstructor.
Richard W.M. Jones [Thu, 2 Jan 2020 15:59:48 +0000 (15:59 +0000)]
Ast: Rename ECallTactic to ETacticConstructor.

This is a constructor, it's not 'calling' anything.

4 years agoAst: Change EGoal -> EGoalDefn, ETactic -> ETacticDefn.
Richard W.M. Jones [Thu, 2 Jan 2020 15:57:48 +0000 (15:57 +0000)]
Ast: Change EGoal -> EGoalDefn, ETactic -> ETacticDefn.

4 years agoImplement -include (optional include) command.
Richard W.M. Jones [Mon, 30 Dec 2019 21:37:22 +0000 (21:37 +0000)]
Implement -include (optional include) command.

4 years agoFix ‘goal’ when it appears as a target (meaning ‘goal()’).
Richard W.M. Jones [Tue, 31 Dec 2019 09:08:35 +0000 (09:08 +0000)]
Fix ‘goal’ when it appears as a target (meaning ‘goal()’).

4 years agoMore TODO ideas.
Richard W.M. Jones [Tue, 31 Dec 2019 09:01:17 +0000 (09:01 +0000)]
More TODO ideas.

4 years agoAdd some more debugging.
Richard W.M. Jones [Tue, 31 Dec 2019 09:01:08 +0000 (09:01 +0000)]
Add some more debugging.

4 years agoImplement -d (debug) option.
Richard W.M. Jones [Mon, 30 Dec 2019 21:51:40 +0000 (21:51 +0000)]
Implement -d (debug) option.

4 years agoChange -V to -v for compat with make.
Richard W.M. Jones [Mon, 30 Dec 2019 21:41:17 +0000 (21:41 +0000)]
Change -V to -v for compat with make.

4 years agostdlib: Add some rules for OCaml code.
Richard W.M. Jones [Mon, 30 Dec 2019 21:27:20 +0000 (21:27 +0000)]
stdlib: Add some rules for OCaml code.

4 years agoImplement stdlib directory, -I, --no-prelude, etc.
Richard W.M. Jones [Sat, 28 Dec 2019 18:43:25 +0000 (18:43 +0000)]
Implement stdlib directory, -I, --no-prelude, etc.

4 years agoDefine OCaml Config module in ./configure, ./run script, --version option.
Richard W.M. Jones [Sat, 28 Dec 2019 19:54:50 +0000 (19:54 +0000)]
Define OCaml Config module in ./configure, ./run script, --version option.

4 years agoImplement tactics.
Richard W.M. Jones [Sat, 28 Dec 2019 16:28:41 +0000 (16:28 +0000)]
Implement tactics.

4 years agoRemove Ast.PVar.
Richard W.M. Jones [Sat, 28 Dec 2019 08:52:35 +0000 (08:52 +0000)]
Remove Ast.PVar.

Pure variables as patterns are disallowed.  Patterns have a distinct
type from expressions so allowing an expression to be substituted
causes complications.  In particular we want to know statically how
many targets a goal has, which is not possible if a variable can be
substituted here.

You can still write:

  "%name": ...

4 years agoRun code with set -e / set -x.
Richard W.M. Jones [Sat, 28 Dec 2019 08:50:19 +0000 (08:50 +0000)]
Run code with set -e / set -x.

4 years agoActually run goal code.
Richard W.M. Jones [Fri, 27 Dec 2019 20:26:43 +0000 (20:26 +0000)]
Actually run goal code.

4 years agoAdd implicit tactic rebuild.
Richard W.M. Jones [Fri, 27 Dec 2019 20:18:08 +0000 (20:18 +0000)]
Add implicit tactic rebuild.

We don't need to look for a goal covering every tactic, if the tactic
doesn't need rebuilding.

4 years agoSubstitute %<, %@ etc variables into code.
Richard W.M. Jones [Fri, 27 Dec 2019 19:47:16 +0000 (19:47 +0000)]
Substitute %<, %@ etc variables into code.

4 years agoAdd Ast.to_shell_script.
Richard W.M. Jones [Fri, 27 Dec 2019 19:56:19 +0000 (19:56 +0000)]
Add Ast.to_shell_script.

Previously we were confusing Ast.substitute with the place where we
need to shell quote.

4 years agoHard code *file tactic.
Richard W.M. Jones [Fri, 27 Dec 2019 19:05:03 +0000 (19:05 +0000)]
Hard code *file tactic.

4 years agoImplement tactic matching.
Richard W.M. Jones [Fri, 27 Dec 2019 14:45:00 +0000 (14:45 +0000)]
Implement tactic matching.

4 years agotodo: Note default parameters.
Richard W.M. Jones [Fri, 27 Dec 2019 13:37:55 +0000 (13:37 +0000)]
todo: Note default parameters.

4 years agoFactor out param_decl and improvements to AST printing.
Richard W.M. Jones [Thu, 26 Dec 2019 16:24:31 +0000 (16:24 +0000)]
Factor out param_decl and improvements to AST printing.

4 years agoRefactor evaluation.
Richard W.M. Jones [Tue, 24 Dec 2019 18:10:57 +0000 (18:10 +0000)]
Refactor evaluation.

Also more work on pattern matching and when to rebuild.

4 years agoFix file() -> *file() in comment about tactics.
Richard W.M. Jones [Wed, 25 Dec 2019 14:34:07 +0000 (14:34 +0000)]
Fix file() -> *file() in comment about tactics.

Updates commit b14ff66c953e6a73e9ac2fe8d42dd68e92e58f53.

4 years agoRename Ast.StringMap -> Ast.Env
Richard W.M. Jones [Wed, 25 Dec 2019 14:30:38 +0000 (14:30 +0000)]
Rename Ast.StringMap -> Ast.Env

4 years agoBegin converting Ast print functions so they can be used with format %a.
Richard W.M. Jones [Mon, 23 Dec 2019 20:44:01 +0000 (20:44 +0000)]
Begin converting Ast print functions so they can be used with format %a.

4 years agoSend debug message to stderr.
Richard W.M. Jones [Mon, 23 Dec 2019 20:43:08 +0000 (20:43 +0000)]
Send debug message to stderr.

4 years agoPrint errors (Failure exceptions) nicely.
Richard W.M. Jones [Mon, 23 Dec 2019 20:42:11 +0000 (20:42 +0000)]
Print errors (Failure exceptions) nicely.

4 years agoDefine *file() syntax for tactic constructors.
Richard W.M. Jones [Mon, 23 Dec 2019 19:08:14 +0000 (19:08 +0000)]
Define *file() syntax for tactic constructors.

Alternative syntaxes considered where ~file and &file.

4 years agoAttach parser location information to AST nodes.
Richard W.M. Jones [Mon, 23 Dec 2019 18:00:51 +0000 (18:00 +0000)]
Attach parser location information to AST nodes.