Copy system environment into initial env, and also add %stdlib.
[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 "Quiet" code.  Generally {CODE} sections in user files should be
12 echos, and those in stdlib should run silently (except if debugging).
13 Maybe we should have a quiet keyword to indicate this?
14
15 Deleting target files if goals is interrupted, but only if the
16 timestamp changes (what about non-*files?).  Also: atomic code.  This
17 will delete the target if the code doesn't run to completion.  (make
18 doesn't do this, but probably it should).
19
20 Implement parallel builds.
21
22 Conditional sections (same as "ifeq" etc in make).
23
24 Let within functions and goals, eg:
25   function foo () =
26     let temp = "%bar%baz";
27     { .... }
28 Unclear if this would be helpful or not.
29
30 Implement more make functions, see:
31 https://www.gnu.org/software/make/manual/html_node/Functions.html#Functions
32
33 Make re-execs itself if the Makefile (or any include) changes, and
34 goals should do something similar.  See:
35 https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html
36
37 Code should be an expression, eg this ought to work:
38 let foo = { echo "hello" }
39 and/or anonymous functions:
40 let foo = function (arg) { ... }
41
42 Functions returning plain strings and lists of strings.
43 function (foo, bar) returning string = { echo hello }
44 function (foo, bar) returning strings = { echo hello; echo goodbye }
45 Then re-add the sort function.