Wie bereits in
einem früheren Hint beschrieben, ist es recht einfach,
BillardGL auf Mac OS X zu portieren. In jenem Hint wird auch eine Mac-Version zum Download angeboten, sowie beschrieben, wie man sich das Spiel selbst bauen kann. Mein Hint stellt nun eine Ergänzung zum genannten dar, dafür mit einem kleinen Bonus: Ich bin dem Wunsch gefolgt, BillardGL in ein schickes Mac OS Installationspaket zu verpacken.
Einfache Installation
Für Benutzer, denen es hauptsächlich darauf ankommt, BillardGL auch auf ihrem Mac spielen zu können, ist das Installer-Paket die beste Wahl. Die Installation verläuft damit sehr einfach, es werden keine speziellen Programme oder Bibliotheken benötigt:
- Laden Sie sich das komprimierte Installer-Paket BillardGL-1.75.pkg.tar.gz herunter und entpacken Sie die Datei.
- Da BillardGL einige Programm-Ressourcen in System Verzeichnissen installiert, benötigen Sie für die Installation Admin-Rechte.
- Doppelklicken Sie auf das Installer-Paket BillardGL-1.75.pkg, um mit der Installation von BillardGL zu beginnen.
- Folgen Sie den Anweisungen auf dem Bildschirm.
- Nach der Installation befindet sich im Programm-Ordner die Anwendung «BillardGL», welche durch die gelbe BillardGL-Kugel 13 auffällt.
- Mit einem Doppelklick auf das Programm Icon wird das Spiel gestartet.
Um das Programm wieder zu entfernen, müssen Sie folgende Dateien und Verzeichnisse löschen:
- /Programme/BillardGL
- /usr/share/BillardGL
BillardGL selbst kompilieren
Wer seine eigene Variante von BillardGL selbst bauen möchte, vielleicht um das Spiel auf einem betagten G3 zu spielen, oder so wie ich, aus reinem Interesse, wird sich wohl über diese Informationen freuen: Ein Hinweis: Ich beziehe mich hier auf die Version
1.75, d.h. überall wo "1.75" in Datei- und Verzeichnisnamen auftaucht, ist die jeweilige Version gemeint.
- Zuerst einmal brauchen Sie die aktuellen Quellen des Spieles, die es auf der Webseite von BillardGL gibt. Weiterhin ist es empfehlenswert, meinen Patch herunterzuladen, sofern man die nun besprochenen Änderungen nicht von Hand vornehmen möchte.
- Entpacken Sie die Quellen in ein Verzeichnis ihrer Wahl; dabei wird automatisch das Unterverzeichnis BillardGL-1.75 erzeugt.
- Laden Sie den Patch BillardGL-1.75.osx.src.patch.tar.gz in dieses Verzeichnis herunter und entpacken Sie ihn. Im Unterverzeichnis src wird dabei der Ordner GL neu angelegt, weiterhin gibt es nun noch einen Ordner res/ sowie eine Textdatei PORTING.
- Jene Datei enthält die Beschreibung der Änderungen, die ich an BillardGL gemacht habe, damit man es auch unter OS X spielen kann. Ich werde im folgenden darauf eingehen.
- Um die Quellen für die Kompilierung auf Ihrem Mac zu anzupassen, öffnen Sie ein Terminal-Fenster (Programme/Dienstprogramme/Terminal) und wechseln Sie (mittels des cd-Befehles) zu dem Ordner, in welchen Sie BillardGL entpackt haben. Führen Sie dort den Befehl patch -p0 < osx.patch aus um die Quellen zu patchen.
- Wechseln Sie nun (mittels cd src) in das Unterverzeichnis src und starten Sie die Kompilierung mit dem Befehl make. Nach erfolgreicher BillardGL-Erzeugung befinden sich in diesem Verzeichnis einige neue Dateien mit der Endung .o sowie eine mit dem Namen BillardGL, Das ist unser Programm. Wenn Sie BillardGL bereits installiert haben, d.h. die Programmressourcen unter /usr/share/BillardGL verfügbar sind, können Sie das Spiel mit ./BillardGL tatsächlich starten, um bei einer kleinen Partie zu entspannen.
- Um das Spiel nun zu installieren, tippen Sie den Befehl make install ein, womit in ihrem Programme-Ordner die BillardGL-Anwendung erzeugt und die Ressourcen nach /usr/share/BillardGL kopiert werden. Nun sind Sie genauso weit, als hätten Sie obiges Installer-Paket genommen, also fertig.
Änderungen am Original BillardGL
In diesem Abschnitt nun beschreibe ich detailliert, welche Änderungen an den BillardGL-Quellen nötig sind, bis auf die vorher genannte Methode das
BillardGL.app-Bundle erstellt ist. Eine Kurzfassung dieses Textes ist auch im Patch-Paket in der Datei
PORTING zu finden.
Wie bereits im genannten Hint beschrieben, ist OpenGL integraler Bestandteil von Mac OS X und wird, da es als sogenanntes Framework installiert ist, anders eingebunden. Aus diesem Grund muss man im Makefile die Zeilen, in der alle Includes sowie die zugelinkten Bibliotheken aufgeführt sind, diesen Umstand berücksichtigen: Aus
INCPATH = -I/usr/X11R6/include
LIBS = -L/usr/X11R6/lib -lGL -lGLU -lglut -lXmu -lXext -lX11 -lm -lXi
wird
INCPATH = -framework GLUT -I.
LIBS = -framework GLUT -framework OpenGL -lm -lobjc
Sie sehen hier außerdem, dass OpenGL, anders als bei den meisten Unixen, für die Display-Darstellung keinen X-Server benötigt. Da die Mac OS-Frameworks in Objective-C geschrieben sind, muss weiterhin die Objective-C-Runtime mittels
-lobjc dazugeladen werden.
Das das aktuelle Verzeichnis zu den Includes hinzugenommen wird, liegt daran, dass ich zusätzlich eine kleine Anpassung an den Quellen vornehmen musste: Die OpenGL-Header werden normalerweise mittels
#include <GL/glut.h> eingebunden, da diese allerdings unter MacOS X als Framework existieren, heißt es hier
#include <GLUT/glut.h>. Dies nun in allen Sources zu ändern war mir aber zu mühsam, also habe ich den Quellen kurzer Hand ein Unterverzeichnis GL spendiert, in dem der Header
glut.h liegt:
#ifdef __APPLE__
#include <GLUT/glut.h>
#endif
Um als nächstes dem Spiel ein wenig auf die Sprünge zu helfen, habe ich die Compilerflags so angepasst, dass die BillardGL-Binary nun optimiert und mit Altivec-Erweiterung gebaut wird:
CFLAGS += -fast -mcpu=7450 -faltivec
CXXFLAGS+= -fast -mcpu=7450 -faltivec
Es kann sein, dass die Anwendung damit nicht mehr G3-kompatibel ist.
Abschließend habe ich dem
Makefile noch ein neues
install-Target gegeben, mit dem automatisch das BillardGL.app-Bundle erstellt und die Programm-Ressourcen installiert werden. Als weiterer Unterschied zum Original-Makefile wird die Binary nun gestrippt, was eine deutlich kleinere Programm-Datei bewirkt.
Source-Patches
In der Datei
Kugel.cpp gibt es einen Aufruf der Funktion
exp2(GLint) (Zeile 118), der mit der C-Bibliotheks-Funktion
exp2(double) kollidiert; tatsächlich soll die selbst definierte Variante aufgerufen werden. Nun ist Parameter-Überladung ein Sprachmittel von C++, allerdings wird durch
#include <math.h> die C-Version von
exp2(double) deklariert, die nicht überladbar ist. Mit
#include <cmath> und dem expliziten Casten des Funktionsargumentes ist dieser Fehler passé:
GLint TG=exp2(GLint((7-Aufloesung)/2));
Im Header
LadeScreen.h ist ursprünglich die Variable
AktuellesFenster als
int deklariert, sie wird aber in allen anderen Headern als
GLint benannt. Um den daraus resultierenden Fehler zu beseitigen, brauchte ich nur die Deklaration entsprechend zu ändern.
Weiterhin habe ich in den Texturen (des Spieles) die 13 als "Symbol" für BillardGL als Bitmap gefunden, so dass es kein großes Problem war, mit dem Icon Composer (der Developer Tools) daraus ein MacOS-Icon zu "komponieren"; die entsprechende Textur ist die
1/dreizehn.bmp.
Erzeugung des Installer-Paketes
Auf dieser Seite wurde der Wunsch nach einem Installer-Paket geäußert. Ich habe mir diese "Mühe" gemacht und beschreibe hier kurz dessen Erstellung. Den
PackageMaker (
/Developer/Applications/Utilities) liefert Apple als passendes Werkzeug zum Erzeugen der Pakete mit. Da eine detaillierte Beschreibung des Packagings den Umfang dieses Hints sprengen würde und auch auf Grund der hervorrangenden Dokumentation durch Apple hier überflüssig ist, beschreibe ich im folgenden nur kurz einige wichtige Hinweise:
Im Archiv
BillardGL-1.75.pmsp.tar.gz befindet sich die Datei
BillardGL.pmsp zusammen mit weiteren benötigten Ordnern. Beim Öffnen der Datei wird es zu Problemen kommen, weil die Pfade unter
Files/
Root und
Resources/
Resources nicht mehr stimmen. In das erste Feld geben Sie deshalb den Pfad zum Verzeichnis
BillardGL.osx an, in das zweite den Pfad zu
BillardGL.osx-res.
In das Feld
Files/
Root wird ein Ordner angegeben, dessen Inhalt bei der Installation an den gewählten Installations-Ortes kopiert wird. Unter
Default Location geben Sie den Ort an, an dem das Paket installiert werden soll. Ich habe hier
/ angegeben, damit BillardGL in
/Applications und die Ressourcen in
/usr/share/BillardGL landen können. Dem entsprechend enthält der Ordner
BillardGL.osx die komplette Hierarchie dafür. Außerdem ist
Info/
Flags/
Relocatable deaktiviert, damit BillardGL auch in den richtigen Ordnern landet.
Als weitere Optionen (
Info) habe ich
No Restart Required für
Restart Action eingetragen, da keine großen Änderungen am System vorgenommen werde. Wie bereits mehrfach erwähnt, wird die Einstellung
Admin Authorization unter
Authorization Action benötigt.
[
aplysia: Nur
Einfach Installation getestet]