Grow 1.1 → 1.1.0.1
raw patch · 1 files changed
+44/−44 lines, 1 files
Files
- Grow.cabal +44/−44
Grow.cabal view
@@ -2,54 +2,54 @@ name: Grow category: Build synopsis: A declarative make-like interpreter.-description: 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.+description: 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. -- meta-information author: Marc Coiffier maintainer: marc.coiffier@gmail.com-version: 1.1+version: 1.1.0.1 license: OtherLicense license-file: LICENSE