GNU Build System

I just had my first real experience with the GNU build system, otherwise known as automake and autoconf.

I have been working on an operating system for the Coco (an old 8 bitter). This led me to creating a cross-assembler to do the work. This is something like re-inventing the wheel but I figured I would learn something by doing so and then I would only have me to bitch out if the assembler failed to work. Amazingly enough, I actually got the assembler to the point where it is basically usable by me so I thought, why not release it to the world.

With the concept of releasing it came a problem. I need to build a package (tarball) to distribute it as. I also need something relatively familiar for people to build it with. And I don’t want to do a lot of work later if portability issues arise. Since I rather like the way the gnu software builds, I settled on using autoconf and automake.

Initially, I’m just using it as a packaging scheme and a build system so that I don’t have to manually maintain Makefiles. And, amazingly enough, it’s working very well for that purpose. And now that I’ve got the package “autoconfiscated”, it will be easier later to add various bits and bobs to the build system for portability, among other things.

Overall, I’m quite pleased with my first foray into a real autoconf/automake package. It only took me about four hours total to take the code I wanted to release as version 1.0 and transform it into an autoconf/automake style source tree. And that time included some futzing around importing the code into a subversion repository and attaching the GNU General Public License to it.

For interested parties, you can find information in my Coco section or download it from my downloads section.

Update 2014-03-21:

A while back, I actually discussed ultimately removing autoconf and automake from lwtools. Anyone looking to add autoconf and automake to their project should read that post. It may change your mind.

Leave a Reply

Your email address will not be published. Required fields are marked *