stdlib/fedora: Use rpmdev-bumpspec -r flag for < Rawhide builds.
[goals.git] / TODO
diff --git a/TODO b/TODO
index 0c67dcd..f3a7650 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,12 +1,59 @@
-'let :=' for immediate evaluation in assignment.  Does this work
-for included files?
+'let :=' for immediate evaluation in assignment.  Does this work for
+included files?  Also ?= to only override if not already defined.
 
 Default parameters, ie:
   goal foo (name, release = true) = ...
 You might only allow defaults to be added to the end, or you
 might allow goals to be called with labelled parameters.
 
-Functions, eg. wildcard("*.c").  These should be defined as shell
-scripts with a selection of common functions defined in stdlib.
+Deleting target files if goals is interrupted, but only if the
+timestamp changes (what about things which are not is-files?).
+Also: atomic code.  This will delete the target if the code
+doesn't run to completion.  (make doesn't do this, but
+probably it should).
 
-Fix: You must use 'all ()' on the command line.
+Conditional sections (same as "ifeq" etc in make).
+
+Let within functions and goals, eg:
+  function foo () =
+    let temp = "%bar%baz";
+    { .... }
+Unclear if this would be helpful or not.
+
+Make re-execs itself if the Makefile (or any include) changes, and
+goals should do something similar.  See:
+https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html
+
+Code should be an expression, eg this ought to work:
+let foo = { echo "hello" }
+and/or anonymous functions:
+let foo = function (arg) { ... }
+
+Infinite loop when you have this goal:
+goal pod2man (page, section) = "docs/%page.%section" : "docs/%page.pod" { ... }
+This is caused by %section matching "pod" so the rule is called
+again, even if the local file docs/%page.pod actually exists.
+
+Implement make-like “eval” function (similar to include directive,
+but it evaluates the output of a function as Goalfile syntax).
+
+Implement make-like “origin” function.  This is easy but it requires
+us to track to the origin of definitions which we do not do at
+the moment.
+
+Some kind of “source” directive.  If goals sees this then
+it automatically sources the parameter (a shell script) into
+every shell command.
+
+Allow code sections to be written in other languages, eg OCaml,
+Python, etc.  The syntax might look like:
+  {#!OCAML
+    ocaml code
+  }
+Also provide better integration, so we can accurately pass predicate
+constructors into these other language sections.
+
+Limit parallelism within the Goalfile (like make's .NOPARALLEL),
+something like ‘let max_jobs = 8’
+
+Hash table structure.