Welcome to the Buildtool project
Buildtool is a highly integrated shell based build infrastructure. It can be used in the development of any kind of software package, like standalone programs, shared libraries or documentation packages due to its modularity. Furthermore, it is completely free, licensed under the terms of the revised BSD license, which basically means that it suits perfectly free projects as well as commercial development.
Recent news
Current status
Posting date: 2nd January 2005
First of all, happy new year! But now, to the real news: a month ago, I posted a message in my journal detailing the current Buildtool status. I should have posted it here too, which is the most reasonable place if I expect people to read it. So here goes a copy/paste of it. BTW, since commenting is not supported here, feel free to post any replies in the original message in my blog:
Hmm, Buildtool... one of my pet projects, probably the one on which I've spent the most time working... and it was even starting to get some (few) popularity lately
But I must admit it. The code is, in its actual form, dead :-( It's unmanageable (shell scripting doesn't scale, you know) and breaks in many, many places. Just consider the following facts:
- Detection of C++ features from bt_config fails in many cases.
- bt_logic's behavior is less than acceptable, and adding functionality to it is a PITA.
- Several modules haven't been modified across versions, so they don't work properly. For example, bt_lint is almost useless.
- Shared library handling is broken in many systems, and fixing it could be very difficult.
- The code exposes internals too much, specially in environmental variables and C/C++ defines. But cleaning that up is also complex due to the nature of shell scripts.
- I was suggested recently to make bt_dist only include in tarballs what was really needed, and not everything (just like GNU Automake's make dist does. I like the suggestion, but implementing correctly is impossible due to the current code.
... plus a large etcetera. All in all, too many problems that can't be solved without doing very gross hacks or restarting the project from scratch. This is why I haven't touched the code since the beginning of the summer.
But... you know what? For some reason, I'm willing to rewrite it from scratch. Of course, using a real programming language. The choices I have in mind are ("obviously" ;-):
- C++: I really like C++, together with the STL. Yes, believe me! It simplifies programming a lot, and OOP is wonderful. But I'm a bit afraid of portability. If I use this, it must follow the ANSI standard (not doing so could be silly), which means that users will need a compiler that follows the standard, such as GNU GCC. This is not a big problem, since GCC compiles almost anywhere, but may add problems to end users. However, by the time the program is usable, the situation may have improved a lot, hehe.
- C: Very portable, assuming you know where the portability problems arise (not a big problem for me). But what really bothers me is that it slows down development a lot: I'd have to create my own classes to handle containers (hash tables, linked lists, etc.) and handle dynamic memory even for trivial tasks. I'd also loose polymorphism, inheritance, exceptions... Ok, ok, GNOME emulates OOP in C, but I'm not too keen on that.
If I can't find any strong reason not to use C++, I'll stick to it. In fact, I've already written a bit of code (program detection) and it has been easy :-)
Oh, I listen, "How could build scripts be?". Well, I have XML in mind - something similar to Apache Ant. Otherwise I'll have to invent and write a parser for a custom language (ew, not funny). But that's something yet to decide.
Not in original post: I've been looking at Lua lately, a programming language used to "extend" Monotone. Looks like it could be a possible choice for scripting (though it doesn't fit very well my current idea of how scripts could look like).
Test Driven Development meets Buildtool
Posting date: 11th July 2004
Test Driven Development (TDD, for short) is a technique in which you write a test before adding a new feature. The test fails until the feature is properly implemented. Furthermore you end up with a complete regression suite for your application, so that you can easily check that new features don't break old ones.
As this sounds very interesting and is known to be a good development model, I'm rewritting the Testsuite (included in the Buildtool distribution file), to follow TDD principles. So far I've written twelve tests that check multiple parts of the program, and already fixed some bugs, thanks to them.
I think that the next version, 0.17, will be just a polished 0.16, with all bugs found by the tests fixed. Some features may come too, but not many (probably). Note that this is what I think now, and that my mind can change until it's published... ;-)
Buildtool 0.16 released
Posting date: 4th July 2004
Buildtool 0.16 released. This version includes lots of changes since the previous one. The major ones include preliminar support for work directories and a rewrite of bt_logic's core. There are also several small new features as well as many bug fixes.
Debian packages available
Posting date: 28th March 2004
Debian packages are now available, thanks to Bartosz Fenski. Check the downloads section for more information.