SkillAgentSearch skills...

Credo

Many small scripts generate, comprise, and run a build system. (An adaptation of djb's "redo" build-tool idea.)

Install / Use

/learn @catenate/Credo
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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.

View on GitHub
GitHub Stars22
CategoryDevelopment
Updated1y ago
Forks3

Languages

Shell

Security Score

60/100

Audited on Oct 7, 2024

No findings