3f3257184644beb72cd8446f339b663bf3f2817d
[goals.git] / TODO
1 'let :=' for immediate evaluation in assignment.  Does this work for
2 included files?  Also ?= to only override if not already defined.
3
4 Default parameters, ie:
5   goal foo (name, release = true) = ...
6 You might only allow defaults to be added to the end, or you
7 might allow goals to be called with labelled parameters.
8
9 Fix: You must use 'all ()' on the command line.
10
11 Deleting target files if goals is interrupted, but only if the
12 timestamp changes (what about non-*files?).  Also: atomic code.  This
13 will delete the target if the code doesn't run to completion.  (make
14 doesn't do this, but probably it should).
15
16 Parallel builds: On failure, wait for other jobs to finish.
17
18 Conditional sections (same as "ifeq" etc in make).
19
20 Let within functions and goals, eg:
21   function foo () =
22     let temp = "%bar%baz";
23     { .... }
24 Unclear if this would be helpful or not.
25
26 Implement more make functions, see:
27 https://www.gnu.org/software/make/manual/html_node/Functions.html#Functions
28
29 Make re-execs itself if the Makefile (or any include) changes, and
30 goals should do something similar.  See:
31 https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html
32
33 Code should be an expression, eg this ought to work:
34 let foo = { echo "hello" }
35 and/or anonymous functions:
36 let foo = function (arg) { ... }
37
38 Infinite loop when you have this goal:
39 goal pod2man (page, section) = "docs/%page.%section" : "docs/%page.pod" { ... }
40 This is caused by %section matching "pod" so the rule is called
41 again, even if the local file docs/%page.pod actually exists.