X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=TODO;h=d620a9872bff4a024844b554f23676243663fab1;hb=acd025579097fa819c23382f00103d4760165993;hp=4ed2e118ac375acb85d03b88b90055078fed3459;hpb=d7be5d49d48ee62e7cd2a16007e8002b80aa8fe5;p=goals.git diff --git a/TODO b/TODO index 4ed2e11..d620a98 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,54 @@ -'let :=' for immediate evaluation in assignment. +'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. + +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). + +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.