catenate/credo
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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.
About
Many small scripts generate, comprise, and run a build system. (An adaptation of djb's "redo" build-tool idea.)
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published