DESCRIPTION
Credo calls scripts to create files, after doing the same for files on
which they depend. Libdo copies templates of those scripts, and lists
of default dependencies, from a library, and customizes them for a
given target. Libenv composes shell variable settings from a variety
of aspects.
Credo is a set of small shell scripts, which stores its data (such as
a checksum for each file on which a target depends) in flat files in
the current directory. This creates clutter, but also an interface
for higher-level tools.
Credo is currently only implemented in Inferno’s sh: I really like its
shell language (especially apply, <{}, and quoting rules); and Inferno
exposes all the shell variables of a process as files in /env, which
makes writing dependencies on them much simpler. I expect that it
will need a port to Linux for wider adoption, either as shell scripts
or a program.
LITERATE TESTS
Literate programs to test credo and describe its features.
Credo’s test suite also serves as its expository documentation.
Credo example: Hello, world! A view over credo. Generate and run a
build system. So, what’s going on here? What are all these other
files in my source code directory, how can I ignore them, and how do I
get rid of them?
https://github.com/catenate/credo/blob/master/test/1/credo/hello/hello.test
Set the shell variable crecho to echo, to print instead of execute key
production commands in do scripts.
https://github.com/catenate/credo/blob/master/test/1/credo/hello/crecho.test
Crelay walks the dependency graph from a file to targets which depend on it.
https://github.com/catenate/credo/blob/master/test/1/credo/hello/relay.test
ARTICLES
A new credo: no more complex makefiles.
http://groups.google.com/group/redo-list/browse_thread/thread/643db9316b09c47a
How credo handles manual changes to generated files; default do scripts.
http://groups.google.com/group/redo-list/browse_thread/thread/e048dd2a3f473822/
Credo example: from lex and c source to cygwin executable, across directories.
http://swtools.wordpress.com/2011/07/03/credo-example-from-lex-and-c-source-to-cygwin-executable-across-directories/
One change since the example is new addenv/rmenv commands, to
manage target dependencies on environment variables. For example,
these commands can replace the echo commands in the example:
addenv default srcdir ../src/
addenv default cpp cpp-3
addenv default cppflags -I../src/
addenv default cc gcc-3
RELATED WORK
Credo is an adaptation of the unpublished build tool redo,
proposed and sketched by D.J. Bernstein.
http://cr.yp.to/redo.html
Avery Pennarun implemented redo in python.
https://github.com/apenwarr/redo
In 2006 and 2007 Alan Grosskurth gave a talk¹ and wrote a master’s
thesis² on purely top-down software rebuilding. The thesis implements
redo in sh-bourne and compares it to make.
¹ http://grosskurth.ca/talks/2006.04.10/slides.pdf
² http://grosskurth.ca/papers/mmath-thesis.pdf
Credo’s most significant differences from redo is that there are no
redo-* commands in the do scripts; credo has a new set of shell
script commands to create, examine, and maintain the build system
(for higher-level tools to automatically generate a build system);
and credo exposes all of its record-keeping in flat files in the
current directory.