Gnu Autoconf – Ein Versuch der Erklärung – configure

Für Paketbetreuer ist es häufig wichtig zu verstehen, wie Upstream Sourcecode ausliefert und wie dieser konfiguriert wird bzw. sich zusammensetzt.

Es gibt hier ein ziemlich mächtiges Tool namens Autoconf, was sich auf die Fahne geschrieben hat, portabel die nötigen Konfigurationsskripts zu generieren, um den Build/Bau-Vorgang erfolgreich durchführen zu können.

Die relevanten Dateien im Root-Verzeichnis des Sourcecodes sind (in mehr oder weniger abhängender Reihenfolge):

configure.ac / configure.in

Die Konfiguration für Autoconf. Der Upstream-Autor einer Softwarekomponente erstellt die nötige Datei.

configure.in ist deprecated und es sollte configure.ac verwendet werden.

Der Upstream-Autor ruft autoconf auf und daraus wird die nötige configure-Datei generiert.

configure

Die generierte configure-Datei ist nötig um Parameter zur Kompilierzeit mitzugeben. Hier kann z.B. der Pfad für die Libs oder zusätzliche Optionen aktiviert werden.

Ein typischer Aufruf wäre ./configure –enable-snmp=yes

config.guess

Da es endlich viele verschiedene Architekturen und Umgebungen gibt, muss beim Kompilieren darauf geachtet werden, dass für die richtige CPU/Architektur kompiliert wird.

Da es umständlich wäre, dies immer händisch zu definieren, gibt es ein Hilfs-Skript config.guess um den build-machine-type zu erraten vom eigenen System.

Eine typische Ausgabe wäre:

stefan@debianbuild:~/scli-0.4.0$ ./config.guess
x86_64-unknown-linux-gnu

config.sub

Config.sub ist dazu nötig, Konfigurationsparameter zu substituieren/ersetzen.

Ein typischer Aufruf wäre:

stefan@debianbuild:~/scli-0.4.0$ ./config.sub sun4
sparc-sun-sunos4.1.1

Beide Skripte werden selbstständig vom configure-Skript aufgerufen und nicht vom Benutzer.

Der eigentliche ./configure-Aufruf:

Beim Aufruf von ./configure wird geprüft, ob die nötigen Abhängigkeiten für den Buildvorgang verfügbar sind

Typische Ausgabe wäre:

checking pkg-config is at least version 0.16… yes
checking for GLIB – version >= 2.0.0… yes (version 2.40.0)
checking for pkg-config… /usr/bin/pkg-config
checking for GNET – version >= 2.0.0… yes (version 2.0.8)
checking for xml2-config… /usr/bin/xml2-config
checking for libxml – version >= 2.0.0… yes (version 2.9.1)

Final werden dann die nötigen Makefiles generiert, die definieren, wie die eigentliche Software mit welchen Libs/Abhängigkeiten und in welcher Reihenfolge kompiliert wird.

Darüber wird Protokoll geführt und in config.status config.cache und config.log abgelegt.

Quellen:

http://www.gnu.org/software/autoconf/manual/autoconf.html

http://linux.die.net/man/1/config.guess

http://linux.die.net/man/1/config.sub