1 'let :=' for immediate evaluation in assignment. Does this work for
2 included files? Also ?= to only override if not already defined.
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.
9 Deleting target files if goals is interrupted, but only if the
10 timestamp changes (what about non-*files?). Also: atomic code. This
11 will delete the target if the code doesn't run to completion. (make
12 doesn't do this, but probably it should).
14 Parallel builds: On failure, wait for other jobs to finish.
16 Conditional sections (same as "ifeq" etc in make).
18 Let within functions and goals, eg:
20 let temp = "%bar%baz";
22 Unclear if this would be helpful or not.
24 Split "flags" strings. eg. Currently there is no way to pass
25 $CFLAGS from autoconf into a goalfile.
27 Make re-execs itself if the Makefile (or any include) changes, and
28 goals should do something similar. See:
29 https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html
31 Code should be an expression, eg this ought to work:
32 let foo = { echo "hello" }
33 and/or anonymous functions:
34 let foo = function (arg) { ... }
36 Infinite loop when you have this goal:
37 goal pod2man (page, section) = "docs/%page.%section" : "docs/%page.pod" { ... }
38 This is caused by %section matching "pod" so the rule is called
39 again, even if the local file docs/%page.pod actually exists.
41 Implement make-like “eval” function (similar to include directive,
42 but it evaluates the output of a function as Goalfile syntax).
44 Implement make-like “origin” function. This is easy but it requires
45 us to track to the origin of definitions which we do not do at