What is Conjure?

From the Documentation

Conjure is a build tool in the spirit of the well known Make program. Using Conjure you will be able to specify the tasks conducting to the accomplishment of a series of goals. Usually, these goals will involve the creation of new files (e.g. a compiled program, or a info document) from existing resources.

The resources needed by a given goal are known as its dependencies, and can include local files (source code in any programming language, texinfo files, etc.), information contained in a relational database, or whatever other data source accessible by a local program. Most importantly, a goal can also depend on other goals.

Conjure's job is not directly creating the products of a goal: you must specify a procedure, possibly invoking external programs, in charge of creating the goal's final artifacts; Conjure will take care of invoking it whenever is needed. A goal will need rebuilding when its products are stale, i.e., when the goal's dependencies have changed since the last time it was (re) built. Many predefined procedures are already provided by Conjure libraries, offering common operations like invoking external compilers, document generation tools, local and remote filesystem access, etc. You can use them out of the box, or combine or extend them as you see fit in order to specify the building procedures for your goals.

The traditional way of assessing a product staleness is comparing the filesystem timestamps of products with those of its dependencies. If the latter have been modified after the former were created, the goal needs rebuilding (of course, this is only possible when both products and dependencies consist, ultimately, of files). While this is also the default behaviour of Conjure, you can provide arbitrary "staleness predicates" for testing whether goals need updating. For instance, you may prefer using MD5 checksums to timestamps. Or maybe one of your goals is the creation of a database table contents from information contained in other tables; here, the staleness predicate would involve accessing and checking these tables, a task not easily expressible in terms of file modification times! Again, Conjure comes with a rich set of predefined functions that you can use to specify the most commonly used staleness predicates.


There is an Arch? repository at . Conjure is still in early-stage development. More information available at its homepage.


There is a mailing list for development, and an IRC channel (#conjure) on freenode.