-- content information
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.

-- meta-information
author:        Marc Coiffier
maintainer:    marc.coiffier@gmail.com
version:       1.1.0.3
x-revision: 1
license:       OtherLicense
license-file:  LICENSE

-- build information
build-type:    Simple
cabal-version: >=1.10

library
  exposed-modules: Grow Language.Grow Language.Syntax.Grow
  build-depends: base (== 4.6.*), definitive-base (== 1.2.*), containers (== 0.5.*), deepseq (== 1.3.*), array (== 0.5.*), bytestring (== 0.10.*), vector (== 0.10.*), primitive (== 0.5.*), definitive-parser (== 1.2.*), definitive-filesystem (== 1.2.*), definitive-reactive (== 1.0.*), clock (== 0.4.*), directory (== 1.2.*), filepath (== 1.3.*), time (== 1.4.*), old-locale (== 1.0.*), unix (== 2.7.*), process (== 1.2.*)
  default-extensions: RebindableSyntax NoMonomorphismRestriction GeneralizedNewtypeDeriving FlexibleInstances LambdaCase FlexibleContexts MultiParamTypeClasses ImplicitParams
  ghc-options: 
  default-language: Haskell2010