$ git clone git://gittup.org/tup.git $ cd tup tup$ ./bootstrap.sh tup$ man ./tup.1
Tup is a file-based build system - it inputs a list of file changes and a directed acyclic graph (DAG), then processes the DAG to execute the appropriate commands required to update dependent files. The DAG is stored in an SQLite database. By default, the list of file changes is generated by scanning the filesystem. Alternatively, the list can be provided up front by running the included file monitor daemon. It might be possible to generate the list from an IDE as well. By providing the file change log up front and storing the dependencies in an efficient database structure, updates can be performed with very little overhead. The monitor daemon uses inotify, so it is currently linux only. The rest of tup could probably be pretty easily ported to other UNIX-y systems, as long as there is a mechanism for determining the file reads and writes of a spawned subprocess.
You can use tup anywhere you would use another build system (like make, or any of its derivatives). One reason you would want to use tup is if you like to update things very quickly. For example, if you typically execute a build in a subdirectory because it takes too long to figure out what to do when you execute the build from the top, you might want to look into tup. Unfortunately, tup is so fast that your chair mounted jousting might suffer. I apologize in advance if someone besmirches your honor and you are unable to properly defend yourself as a result.
Nothing much, just writing some web pages. What's up with you?
What this means is:
In a typical build system, the dependency arrows go down. Although this is the way they would naturally go due to gravity, it is unfortunately also where the enemy's gate is. This makes it very inefficient and unfriendly. In tup, the arrows go up. This is obviously true because it rhymes. See how the dependencies differ in make and tup:
Make | tup |
![]() |
![]() |
See the difference? The arrows go up. This makes it very fast. In fact, in at least one case, tup is optimal. See the Build System Rules and Algorithms (PDF) paper for more detailed information.
Tup is currently released under the same conditions as marfitude. So, the source code is free to download and use under the conditions of the GPL. Tup includes some source code from the linux kernel, which is covered by the GPL-v2 license (see the COPYING file in tup/src/linux/). Tup also includes SQLite, which is in the public domain. If you find tup to be useful, you are encouraged to donate some of your millions or your time to some place worthy, rather than to me, since I am but a pale ghost of my former self, and may be hit by a bus at anytime. Just think of all the time you saved with tup, and how much that is worth to you, and maybe do something about it.