The Grow package

[Tags:library]

Grow is a well-defined replacement for Makefiles and the like to build complex hierarchies of files with minimal effort.

Like many Makefile-like tools, Grow depends on the notion of timestamps to determine whether a file should be recompiled or not. Grow is much simpler than those, though, and I might argue way easier to use as well.

On startup, Grow will look for a file named "Seed" in the current directory, and evaluate the grow expressions contained within.

For example, here is a simple Seed file to compile a single C file into an executable.

> tee $$arg:in > all = ($main:seq "All done !"):in $execs > execs = hook ld [main] [main.o] :in $objects > objects = hook cc [main.o] [main.c]

Notice the `hook` function ? It is the Grow primitive that calls an external program to perform actual tasks.

In Grow, hooks are expected to only accept files as their arguments, so we have to write the wrapper scripts `cc` and `ld` that accept arguments in the form "<destination>... <source>...". They are pretty trivial to write since they only involve renaming variables and swapping arguments.

Here are sample `cc` and `ld` scripts to show you there is nothing magical about them :

> #!/bin/bash > obj="$1" ; shift ; src="$1" > gcc -c "$src" -o "$obj"

> #!/bin/bash > bin="$1" ; shift ; obj="$1" > gcc "$obj" -o "$bin"

In grow, instead of writing recipes in the configuration, we just declare hooks and then write the appropriate wrapper scripts to call compilers with the correct flags and arguments.

Properties

Versions 1.0, 1.1, 1.1.0.1, 1.1.0.2, 1.1.0.3
Dependencies array (==0.5.*), base (==4.6.*), bytestring (==0.10.*), clock (==0.4.*), containers (==0.5.*), deepseq (==1.3.*), definitive-base (==1.2.*), definitive-filesystem (==1.2.*), definitive-parser (==1.2.*), definitive-reactive (==1.0.*), directory (==1.2.*), filepath (==1.3.*), old-locale (==1.0.*), primitive (==0.5.*), process (==1.2.*), time (==1.4.*), unix (==2.7.*), vector (==0.10.*) [details]
License OtherLicense
Author Marc Coiffier
Maintainer marc.coiffier@gmail.com
Stability Unknown
Category Build
Home page http://coiffier.net/projects/grow.html
Uploaded Sun Jul 13 11:32:13 UTC 2014 by MarcCoiffier
Updated Sun Jul 13 15:03:59 UTC 2014 by MarcCoiffier to revision 3
Distributions NixOS:1.1.0.3
Downloads 1125 total (18 in the last 30 days)
Votes
0 []
Status Docs not available [build log]
Successful builds reported [all 6 reports]

Modules

  • Grow
  • Language
    • Language.Grow
    • Syntax
      • Language.Syntax.Grow

Downloads

Maintainer's Corner

For package maintainers and hackage trustees