No project description provided
Project description
Cook is a task-centric build system with simple declarative recipes specified in Python.
Getting Started
Tasks are declared in a recipe.py
file using the ~cook.manager.create_task
function. Each task must have a unique name, may depend on files or other tasks, and can execute an action, typically a shell command. The simple example below creates a C source file, compiles it, and executes the binary.
>>> from cook import create_task
>>> create_task("src", targets=["hello.c"],
... action="echo 'int main() { return 0; }' > hello.c") # doctest: +IGNORE_RESULT
>>> create_task("cc", dependencies=["hello.c"], targets=["hello"],
... action="cc -o hello hello.c") # doctest: +IGNORE_RESULT
>>> create_task("hello", dependencies=["hello"], action="./hello") # doctest: +IGNORE_RESULT
Running cook ls
from the command line lists all known tasks, e.g.,
$ cook ls
<task `src` @ /.../recipe.py:3>
<task `cc` @ /.../recipe.py:5>
<task `hello` @ /.../recipe.py:7>
Running cook exec hello
creates the source file, compile it, and executes the binary. We use --log-level=debug
to provide additional information here.
$ cook --log-level=debug exec hello
DEBUG: <task `src` @ ...> is stale because one of its targets is missing
DEBUG: started <task `src` @ ...>
DEBUG: completed <task `src` @ ...> in ... seconds
DEBUG: `<task `src` @ ...>` created `hello.c`
DEBUG: <task `cc` @ ...> is stale because its dependency `hello.c` does not have a hash entry
DEBUG: started <task `cc` @ ...>
DEBUG: completed <task `cc` @ ...> in ... seconds
DEBUG: `<task `cc` @ ...>` created `hello`
DEBUG: <task `hello` @ ...> is "stale" because it has no targets
DEBUG: started <task `hello` @ ...>
DEBUG: completed <task `hello` @ ...> in ... seconds
To rerun a task, tell Cook to reset it.
$ cook reset cc
INFO: reset 1 task
The full set of available commands can be explored using cook --help
.
Tasks Are Dumb; Contexts Are Smart
~cook.task.Task
s do not provide any functionality beyond storing metadata, including
targets
, the files generated by the task,dependencies
, the files the task depends on,action
, the~cook.actions.Action
to execute when the task is run,task_dependencies
, other tasks that should be executed first,location
, filename and line number where the task was defined.
All logic is handled by ~cook.contexts.Context
s which are applied to each task when it is created. For example, ~cook.contexts.create_group
adds all tasks created within the context to a group. This group can be executed to execute all child tasks.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.