2011/6/30 Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net:
Using autoconf would imply at least a fourfold increase in compile time,
Does anybody cares? Ok, anyway, we don't need to guess - let's count:
work ~/work/flashrom (git::fedora-next): time autoreconf -if
real 0m3.911s user 0m2.231s sys 0m0.244s work ~/work/flashrom (git::fedora-next):
This would be run very occasionally, so I wouldn't bother about autoreconf invocation - just for the record. Running ./configure is more frequent operation but it also requires only when we change something in configure.ac and Makefile.am:
work ~/work/flashrom (git::fedora-next): time ./configure 2>&1 > /dev/null
real 0m5.572s user 0m2.202s sys 0m1.674s work ~/work/flashrom (git::fedora-next):
And now, the most frequent (but not the last) operation:
work ~/work/flashrom (git::fedora-next): time make 2>&1 > /dev/null
real 0m4.922s user 0m4.072s sys 0m0.927s work ~/work/flashrom (git::fedora-next):
Finally, let's install the resulting binary:
work ~/work/flashrom (git::fedora-next): time make install DESTDIR=/var/tmp/flashrom-autotools 2>&1 > /dev/null
real 0m0.160s user 0m0.091s sys 0m0.054s work ~/work/flashrom (git::fedora-next):
Now, let's compare with the current buildsystem. Firstly, we will run "configure + make" target:
work ~/work/flashrom (git::master): time make 2>&1 > /dev/null
real 0m5.385s user 0m4.282s sys 0m1.157s work ~/work/flashrom (git::master):
I'd say it two times faster (assuming that we'll run ./configure every time we using autotools - and we won't). And lets try to install:
work ~/work/flashrom (git::master): time make install DESTDIR=/var/tmp/flashrom-custem 2>&1 > /dev/null
real 0m0.494s user 0m0.295s sys 0m0.188s work ~/work/flashrom (git::master):
Still (in)significantly fast but anyway - three times slower :).
To even consider autotools at all, two basic requirements must be met:
- Zero compile time increase (that includes the configure step in a
pristine tree).
- Total lines of code to be maintained do not increase either.
Yes. LOC number is significatly lower in case of autotools and handmade Makefile:
sulaco ~/work/flashrom (git::fedora-next): LANG=C wc -l configure.ac Makefile.am && wc -l Makefile 241 configure.ac 186 Makefile.am 427 total 523 Makefile sulaco ~/work/flashrom (git::fedora-next):
And there are some cleanups in the sources as well which I didn't count. So I can answer with confidence - the number of LOCs will be less than now and the compile time will be almost the same (difference in 5 seconds).
The CMake-based buildsystem however has one major drawback - it requires cmake to be installed (aototools requires themselves only for reconfiguration). And keeping in mind that different major CMake versions have major incompatibilities I'd rather say that it's better not to use it at all - it adds more issues than fixes them. I can say it for sure because I've got very interesting experience of maintaining compatibility of CMake-based buildsystem for relatively large project among three major CMake branches - 2.4, 2.6 and 2.8.