stdlib/fedora: Use rpmdev-bumpspec -r flag for < Rawhide builds.
[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 Deleting target files if goals is interrupted, but only if the
10 timestamp changes (what about things which are not is-files?).
11 Also: atomic code.  This will delete the target if the code
12 doesn't run to completion.  (make doesn't do this, but
13 probably it should).
14
15 Conditional sections (same as "ifeq" etc in make).
16
17 Let within functions and goals, eg:
18   function foo () =
19     let temp = "%bar%baz";
20     { .... }
21 Unclear if this would be helpful or not.
22
23 Make re-execs itself if the Makefile (or any include) changes, and
24 goals should do something similar.  See:
25 https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html
26
27 Code should be an expression, eg this ought to work:
28 let foo = { echo "hello" }
29 and/or anonymous functions:
30 let foo = function (arg) { ... }
31
32 Infinite loop when you have this goal:
33 goal pod2man (page, section) = "docs/%page.%section" : "docs/%page.pod" { ... }
34 This is caused by %section matching "pod" so the rule is called
35 again, even if the local file docs/%page.pod actually exists.
36
37 Implement make-like “eval” function (similar to include directive,
38 but it evaluates the output of a function as Goalfile syntax).
39
40 Implement make-like “origin” function.  This is easy but it requires
41 us to track to the origin of definitions which we do not do at
42 the moment.
43
44 Some kind of “source” directive.  If goals sees this then
45 it automatically sources the parameter (a shell script) into
46 every shell command.
47
48 Allow code sections to be written in other languages, eg OCaml,
49 Python, etc.  The syntax might look like:
50   {#!OCAML
51     ocaml code
52   }
53 Also provide better integration, so we can accurately pass predicate
54 constructors into these other language sections.
55
56 Limit parallelism within the Goalfile (like make's .NOPARALLEL),
57 something like ‘let max_jobs = 8’
58
59 Hash table structure.