Mathias Hasselmann

Stripping down GNU make

After reading Thomas' rant about automake 1.10 rejecting GNU-makeism in its script I wondered if it wouldn't possible to ship GNU make with all tarballs, instead of all the autotools crap. So I did some experiments this morning.

Raw GNU make 3.81 as distributed by the FSF requires 1.1 MB. After unpacking 6.4 MB of disk space are used:

 576     config/
1052     doc/
 140     glob/
2028     po/
 556     tests/
 168     w32/
2080     .

Considering the goal of distributing GNU make with each of your tarballs, quite alot of space is used by non-essential stuff like unit tests, documentation and translations. Removing the doc, po and tests folder produces a much smaller tarball:

-rw-r--r-- 1 mathias mathias 541323 2007-07-02 07:50 make-3.81.tar.bz2

That's already smaller than the configure script shipped with make 3.81 (takes 456k) and the m4 macros used to generated it (576k). Encouraged by this, I became even more radical - I removed the autoconf stuff:

-rw-r--r-- 1 mathias mathias 364566 2007-07-02 07:53 make-3.81.tar.bz2

Well, but this steps leaves you without any platform detection for the build system. So some replacement would be needed. Tried with bulldozer some time ago, by injecting pre-conditions and checks as rules into my GNUmakefile. Worked with few code. Maybe worth to start a library of GNU make based platform detection rules?

Conclusion: Avoiding GNU-makeisms in automake scripts is absolutely pointless, because:

  1. GNU make is available for any platform your software supports anyway.
  2. The core of GNU make is that much smaller than the usual autoconf/automake bloat, so it could be shipped with every tarball to make up the build system.
  3. Its only a matter of time, until Greenpeace shows up and blames the free software community for wasting insane amounts of electrons.

Comments

No comments yet.

Post a Comment

This site's webmaster failed misserably in upgrading the underlaying web framework.
The comment system is entirely broken right now. Sorry!