AA_eigenbau.jpg

© Bratscher, photocase.com

Marke Eigenbau

Configure, Make und Co.

Unbekannte und extrem aktuelle Software können (oder müssen) Sie oft selbst aus dem Quellcode übersetzen. Das sieht merkwürdig aus, ist aber keine Zauberei.

Wenn Hacker in Filmen gerade so richtig am Hacken sind, blenden die Filmemacher gern ein beliebiges Linux-Programm ein, das gerade kompiliert wird. Der Zeichensalat auf der Konsole lässt jeden Zuschauer sofort ahnen: Hier sind Hacker am Werk. Keine Sorge: wir können alles erklären!

Im Normalfall lassen Sie am besten die Finger vom Compiler. Ein Programm zu übersetzen dauert, abhängig vom Rechner, mitunter recht lange. Das Ergebnis – ein funktionierendes Programm – lässt sich oft einfacher beschaffen. Bevor Sie aufwändig den Quellcode einer Software in Maschinencode übersetzen, prüfen Sie erst, ob diese nicht schon in Paketform vorliegt.

Rufen Sie das Softwarecenter auf und suchen Sie nach der Software. Fehlt sie oder ist die Version zu alt, starten Sie eine Suche in den Personal Package Archives (PPAs) auf Launchpad [1]. Häufig bauen Privatanwender für sich selbst Pakete einer bestimmten Software, die sie mögen und stellen diese in den PPAs der Welt zur Verfügung.

Bleibt die Suche generell erfolglos, weil die Software nur im Quellcode vorliegt oder wollen Sie eine aktuellere als die verfügbare Version, besuchen Sie die Webseite und laden Sie den Code herunter. Im Beispiel demonstrieren wir das Ganze am Quellcode für das Spiel Lordsawar (Abbildung 1), das im Paketmanager nur in Version 0.1.8 vorliegt.

Abbildung 1

Abbildung 1: Das Bild zeigt die aus Trunk übersetzte Version des Spiels Lordsawar.

Der aktuell stabile Quellcode trägt die Versionsnummer 0.2.0. Ihn stellen die Entwickler in einem TAR.GZ-Archiv bereit, das Sie herunterladen. Daneben gibt es noch die instabile Version 0.2.1-pre3. Da Sie zum Kompilieren ohnehin auf die Kommandozeile müssen, beginnen Sie am besten gleich damit. Rufen Sie per [Strg]+[Alt]+[T] ein Terminal auf, wechseln Sie über den cd-Befehl in das Verzeichnis mit dem TAR.GZ-Archiv und entpacken Sie es:

tar xvzf lordsawar-0.2.0.tar.gz

Dabei entsteht ein neues Unterverzeichnis mit dem Namen lordsawar-0.2.0, in das Sie nun navigieren. Sie könnten jetzt mit dem Kompilieren loslegen, entscheiden sich aber, zusätzlich noch die ofenfrische und sehr experimentelle Variante von Lordsawar direkt aus einem Subversion-Repository zu ziehen.

Bei Subversion handelt es sich um eine Versionsverwaltung, mit der die Entwickler ihren Quellcode verwalten. Subversion läuft als Dienst auf dem Lordsawar-Server. Über einen Subversion-Client "checken" Sie den Code aus – so heißt das im Slang. Dazu installieren Sie unter Ubuntu 11.04 das Paket subversion. Legen Sie ein neues Verzeichnis an, in dem der Code landen soll und wechseln Sie in einem Terminal dorthin. Nun geben Sie einen Befehl ein, den Sie auf der Lordsawar-Webseite vorfinden und der den Code auscheckt:

$ svn checkout svn://svn.savannah.nongnu.org/lordsawar/lordsawar

Vergessen Sie nicht, vorher die Firewall anzupassen, andernfalls klappt das Auschecken nicht. Neben Subversion gibt es noch zahlreiche weitere Versionsverwaltungen – bekannt sind Git (das die Kernel-Entwickler nutzen), Bazaar (das vom Ubuntu-Projekt favorisierte System) sowie Mercurial und CVS (das etwas angestaubte Concurrent Versions System). In allen Fällen brauchen Sie jeweils einen passenden Client, der den Code holt.

Im Falle von Lordsawar greift Subversion nun auf das Internet zu und lädt alle Dateien herunter, die es im aktuellen Entwicklerzweig findet (Abbildung 2). Da die neuesten Änderungen am Code oft erst ein paar Minuten alt sind, kann dieser potentiell instabil sein. Aber egal ob Sie die stabile Version oder die aus dem Repository verwenden: In beiden Fällen navigieren Sie als nächstes in das Unterverzeichnis mit dem Code und sehen sich die vorhandenen Dateien an (Abbildung 3).

Abbildung 2

Abbildung 2: Über einen Subversion-Client laden Sie eine ofenfrische Version des Lordsawar-Codes herunter, an dem die Entwickler momentan feilen.

Abbildung 3

Abbildung 3: In der Datei "INSTALL" steht gewöhnlich, wie Sie den Quellcode übersetzen. Die Datei "configure" führen Sie aus, um das Makefile für Lordsawar zu erzeugen.

Besonders beachten sollten Sie zunächst die Datei INSTALL. In ihr steht üblicherweise ein längerer generischer Text, der Ihnen verrät, dass Sie die Datei mit Hilfe der Befehle configure, make und sudo make install übersetzen – so weit, so klar.

Einige Projekte handhaben den Quellcode aber anders. Mitunter genügt es, wenn Sie einfach nur make eingeben, in anderen Fällen müssen Sie die Datei configure erst explizit generieren – dazu später mehr. Wieder andere Projekte nutzen eher unübliche Systeme, um aus dem Quellcode funktionierende Programme zu bauen. Ardour, Blender und Google Chrome setzen zum Beispiel Scons [2] ein, während KDE, Scribus, MySQL und Stellarium auf Cmake [3] setzen. Die INSTALL-Datei klärt dann oft über die Besonderheiten auf, mitunter stehen die Kompilierinfos auch in den Dateien LIESMICH bzw. README.

Hallo Welt!

Um Quellcode zu übersetzen, benötigen Sie zunächst eine Reihe von Tools, die Sie über das Metapaket build-essential installieren. Beginnen wir mit einem einfachen Beispiel. Schreiben Sie den Code aus Listing 1 in eine leere Datei, die Sie unter dem Namen hallowelt.c speichern.

Listing 1

 

#include <stdio.h>
int main ()
{
printf("Hallo Welt!\n");
return 0;
}

Es handelt sich um ein kleines Programm in der Programmiersprache C, das nichts weiter tut, als den Text Hallo Welt! auszugeben. Ein Aufruf des Compilers GCC

gcc -o hallowelt hallowelt.c

übersetzt den Code, damit der Rechner ihn ausführen kann. Der Compiler erzeugt zunächst eine so genannte Objektdatei namens a.out, verwandelt diese dann in die ausführbare Datei hallowelt und löscht die Objektdatei wieder. Das war einfach, Sie führen das Programm nun über ./hallowelt aus (Abbildung 4).

Abbildung 4

Abbildung 4: Kleine Programme sind schnell kompiliert, schwieriger wird's bei mehreren Dateien.

Schwieriger wird es, wenn Sie Dutzende von Dateien übersetzen wollen, und mitunter noch besondere Parameter benötigen. Den eigentlichen Quellcode von Lordsawar finden Sie etwa im Ordner src, er besteht aus mehr als hundert Dateien mit den Endungen .cpp und .h (Abbildung 5). Sie alle per Hand zu übersetzen, ist mühsam – hier kommen Configure und Make ins Spiel.

Abbildung 5

Abbildung 5: Sie müssen schon sehr viel Geduld mitbringen, um die große Anzahl von Lordsawar-Dateien per Hand zu übersetzen.

Makefile zimmern mit Configure

Make liefert dem Compiler GCC ein Rezept, nach dem dieser die Quellcodedateien übersetzt. Er findet dieses Rezept in der Datei Makefile, die häufig Teil des Quellcodes ist. Sie definiert wichtige Variablen, legt Optionen für den Übersetzungsvorgang fest, setzt Pfade zu den Systemwerkzeugen und legt die Versionsnummern der abhängigen Programme fest. So braucht das fertige Programm häufig eine bestimmte Version eines anderen Programms. Zudem ist es möglich, eine Software nur mit ausgewählten Komponenten zu kompilieren. Ein Bildbetrachter unterstützt dann etwa nur PNG- und JPG-, aber keine TIFF-Dateien.

Das Anlegen des Makefiles bedeutete für Entwickler früher einen Haufen Arbeit. Heute liefert Configure alle nötigen Informationen und erzeugt das Makefile aus der Datei Makefile.in. Sie rufen Configure auf, indem Sie im Verzeichnis mit dem Quellcode:

./configure

eingeben. Nun prüft das Programm zunächst, ob es alle für das Übersetzen des Quellcodes notwendigen Entwicklerdateien findet. Das Skript bricht ab, sobald Ubuntu eine Abhängigkeit nicht erfüllt und gibt einen mehr oder weniger verständlichen Hinweis auf die fehlende Bibliothek von sich (Abbildung 6). Ist dann – wie bei der stabilen Version von Lordsawar – von SDL_mixer die Rede, suchen Sie im Softwarecenter nach dem Programmnamen. Sie installieren dann nicht nur das Paket libsdl-mixer1.2, sondern vor allem auch libsdl-mixer1.2-dev. Letzteres Paket enthält die so genannten Header-Dateien für die Bibliothek libsdl-mixer. Sie erkennen solche Dateien an der Endung -dev. Sie tauchen nur im Softwarecenter auf, wenn Sie explizit auf Technische Dateien anzeigen klicken. Die Entwicklerdateien müssen Sie jedoch nur installieren, wenn Sie Programme aus dem Quellcode übersetzen wollen – dann sind sie aber unverzichtbar.

Abbildung 6

Abbildung 6: Configure hält stets an, wenn es eine bestimmte Abhängigkeit nicht findet und gibt einen mehr oder minder hilfreichen Hinweis darauf, was aktuell fehlt.

Installieren Sie also beide libsdl-Komponenten und rufen Sie ./configure erneut auf. Dieses Spielchen kann sich mehrmals wiederholen, bei wichtigen Systemkomponenten mit vielen Abhängigkeiten sogar sehr oft. Schauen Sie daher im Vorfeld in der INSTALL-Datei oder auf der Webseite nach, von welchen Programmen die Software abhängt. Sie installieren diese und ihre Header-Dateien bereits im Vorfeld und ersparen sich so die vielen Configure-Aufrufe.

Im Erfolgsfall gibt Configure am Ende oft eine Liste mit Modulen aus, mit denen zusammen Make das Programm nun kompiliert (Abbildung 7). Welche Komponenten Sie aktivieren, bestimmen Sie über den Aufruf von Configure, das verschiedene Optionen akzeptiert, teilweise selbst. Wollen Sie also, dass der Bildbetrachter auch TIFF-Dateien zeigt, rufen Sie Configure mit den entsprechenden Parametern auf. Der Befehl ./configure --help zeigt, welche Optionen Configure akzeptiert. Geben Sie bei Lordsofwar zum Beispiel

./configure --enable-editor=no --enable-pbm=no

ein, kompilieren Sie das Spiel ohne die Möglichkeit, einen Map Editor zu benutzen und es per E-Mail zu spielen. Sie sehen also, wie die Optionen von Configure funktionieren. Auch beliebt ist die Eingabe von

./configure --prefix=$HOME

über die Sie dem Makefile einen anderen Installationsort übergeben. So lassen sich Programme auch in das Home-Verzeichnis installieren. Alternativ geben Sie hier absolute Pfade an.

Abbildung 7

Abbildung 7: Über die Optionen von Configure bestimmen Sie zum Teil, welche Module ein Programm nach dem Kompilieren nutzt und welche nicht.

Einem Freund empfehlen