Hacker News new | past | comments | ask | show | jobs | submit login

> Actually, the configure debacle doesn't have anything to do with terrible software practices.

I don't mean that reason to use configure is bad. There are many different systems, and being compatible with them all requires some kind of check / wrapper system.

I mean that the design of "autoconf" and the resulting "configure" script is terrible. Tens of thousands of lines of auto-generated shell scripts is (IMHO) objectively worse than a collection of simple tools.

See nginx for a different configure system. It has a few scripts like "look for library", and "look for header file". It then uses those scripts multiple times, with different input data.

In contrast, configure use the design pattern of "cut & paste & modify". Over and over and over and over again. :(




Here's an autoconf-compatible and much, much shorter configure system that isn't expanded from macros and remembers that bash has functions. Look, you can actually maintain it!

http://git.libav.org/?p=libav.git;a=blob;f=configure;h=9f836...

http://git.libav.org/?p=libav.git;a=blob;f=Makefile;h=4e026b...

The new thing seems to be generating configure from CMake which requires you to get a Ph.D to figure out how to override $CC.


Is that a 5400 line shell script?

    echo "This configure script requires a POSIX-compatible shell"
    echo "such as bash or ksh."
    echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
That's always a good sign.


To compare with php (nearest autoconf I've got on hand):

    # wc -l ac* configure.in configure
        3033 acinclude.m4
        9398 aclocal.m4
        1682 configure.in
      117433 configure
      131546 total
Most of libav's configure script is dependency trees for all the codecs flags you can turn on/off, so it's quite compact without it. x264 reuses it at 1500 lines:

http://git.videolan.org/?p=x264.git;a=blob;f=configure;h=9d1...

Apparently the bash requirement isn't too bad since it works on Windows and Plan 9.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: