stdlib/fedora: Use grep -F when matching %fedora-rebuild-name
[goals.git] / TODO
diff --git a/TODO b/TODO
index 45b1880..f3a7650 100644 (file)
--- a/TODO
+++ b/TODO
@@ -6,18 +6,11 @@ Default parameters, ie:
 You might only allow defaults to be added to the end, or you
 might allow goals to be called with labelled parameters.
 
 You might only allow defaults to be added to the end, or you
 might allow goals to be called with labelled parameters.
 
-Fix: You must use 'all ()' on the command line.
-
-"Quiet" code.  Generally {CODE} sections in user files should be
-echos, and those in stdlib should run silently (except if debugging).
-Maybe we should have a quiet keyword to indicate this?
-
 Deleting target files if goals is interrupted, but only if the
 Deleting target files if goals is interrupted, but only if the
-timestamp changes (what about non-*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).
-
-Implement parallel builds.
+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).
 
 Conditional sections (same as "ifeq" etc in make).
 
 
 Conditional sections (same as "ifeq" etc in make).
 
@@ -27,9 +20,6 @@ Let within functions and goals, eg:
     { .... }
 Unclear if this would be helpful or not.
 
     { .... }
 Unclear if this would be helpful or not.
 
-Implement more make functions, see:
-https://www.gnu.org/software/make/manual/html_node/Functions.html#Functions
-
 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
 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
@@ -39,10 +29,31 @@ let foo = { echo "hello" }
 and/or anonymous functions:
 let foo = function (arg) { ... }
 
 and/or anonymous functions:
 let foo = function (arg) { ... }
 
-Functions returning plain strings and lists of strings.
-function (foo, bar) returning string = { echo hello }
-function (foo, bar) returning strings = { echo hello; echo goodbye }
-Then re-add the sort function.
+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’
 
 
-Should the environment be populated by the actual environment, eg:
-let homedir = "%HOME"
+Hash table structure.