X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=TODO;h=f3a76509efaf4b98146c55f2f00f751727ba933c;hb=refs%2Fheads%2Fmaster;hp=45b1880b26c8203a66a2cc6c8a72b8ce25b9c437;hpb=c07380a3a4dca44a29df4cb09265d10442c1d06f;p=goals.git diff --git a/TODO b/TODO index 45b1880..f3a7650 100644 --- 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. -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 -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). @@ -27,9 +20,6 @@ Let within functions and goals, eg: { .... } 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 @@ -39,10 +29,31 @@ let foo = { echo "hello" } 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.