nach ein paar Post und Gesprächen hat sich herauskristallisiert, dass viele in der Community gerne helfen würden, ASC weiterzuentwickeln, aber nicht genau wissen, wie. Bei den meisten (wahrscheinlich allen) ist die Motivation die, neue Funktionen einzubauen. Da muss ich Euch leider erstmal um Geduld bitten: Ich glaube, dass es nicht sinnvoll ist, sich sofort darauf zu stürzen, in ASC alles mögliche Neue einzubauen. Langfristig ist das natürlich das Ziel, aber ich werde versuchen ein paar Beiträge zu schreiben, die es Euch ermöglichen, den Code Stück für Stück kennen zu lernen und dann ASC stetig weiterzuentwickeln. Wenn Ihr die anfänglichen Hürden übersprungen habt, mach das einen Heidenspaß. Ein Ziel dabei für mich ist es auch, einen gedanklichen Überblick über den gesamten Code zu bekommen, den ich noch nicht habe, aber beim Schreiben hoffentlich bekomme.
Wenn Ihr schon mal Software unter Linux entwickelt habt, dann könnt Ihr den Rest des Artikels getrost überspringen. Es ist eigentlich genau dasselbe wie für andere OpenSource-Software. Für alle anderen: Schnappt Euch mal ne Tasse Kaffee, es geht los! Im Teil 0 beschäftigen wir uns mit den Tools, die wir brauchen, um ASC zu kompilieren und daran zu entwickeln. Es gibt viele Möglichkeiten, dass zu tun - ich werde eine (aus meiner Sicht) einfache Umgebung beschreiben, die jeder nach eigenem Gusto erweitern kann, aber mächtig genug ist, tatsächlich was damit zu tun.
Linux
Auf der Website von ASC findet man unter Dowload→Source Code den Satz:
Das ist ein bisschen harsch; Visual Studio ist, nach allem was man hört, eine gute Entwicklungsumgebung. Allerdings macht ASC Gebrauch von vielen Open-Source-Bibliotheken, und das macht es unter Windows mühselig, alle Abhängigkeiten zusammenzukriegen. Deshalb rate ich zur Entwicklung unter Linux. Da kümmert sich die Distribution um die Bibliotheken und die Tools.Developing non-trivial software on Windows sucks.
Wenn Ihr noch kein Linux benutzt, dann ist es wahrscheinlich am einfachsten, Linux in einer virtuellen Maschine laufen zu lassen. Eine einfache und freie Virtualisierungssoftware ist VirtualBox. Nun kann man sich verschiedene Images aussuchen, die verschiedenen Linux-Distributionen entsprechen. ASC selbst bietet ein angepasstes Image an (http://terdon.asc-hq.org/asc/asc-develo ... achine.zip). Ich muss gestehen, dass ich mir das nicht angeschaut habe, da ich selbst direkt unter Linux arbeite. Ich glaube auch, dass es nicht viel mehr Aufwand ist, sich ein Standard-Distro-Image auszusuchen und zu verwenden. Das hat den Vorteil, dass es aktueller ist. Und Linux ist nicht nur für die ASC-Entwicklung zu gebrauchen
Vorgefertigte Images findet man auf http://virtualboxes.org/images/. Welche Distribution man verwendet ist Geschmackssache; ich persönlich verwende Fedora 18. Ubuntu ist wahrscheinlich die verbreitetste Distro, aber auch OpenSuSE ist gut und einfach zu bedienen. Ich gehe jetzt nicht im Detail darauf ein, das Image zum Laufen zu kriegen, bei Fragen erweitere ich diesen Abschnitt aber gerne. Ich gehe also im Folgenden davon aus, dass Ihr eine aktuelle Linux-Distro verwendet.
IDE
Unter einer IDE versteht man ein Integrated Development Environment. Bekannte IDEs sind zum Beispiel Eclipse, Code::Blocks oder KDevelop. Das sind alles tolle Programme, die nicht nur Editoren sind, sondern sich auch um andere Aspekte der Softwareentwicklung, wie kompilieren, debuggen und analysieren kümmern.
Trotzdem werde ich hier nicht erklären, wie man eine IDE für ASC einrichtet. Erstens sind die Geschmäcker verschieden, und zweitens glaube ich, dass es einfacher für mich ist, zu erklären, was passiert, wenn ich nur einen einfachen Editor und die Kommandozeile voraussetze. Das soll Euch aber nicht davon abhalten, mit IDEs rumzuspielen. Ich glaube aber, dass man den Nutzen einer IDE erst richtig versteht, wenn man mal ohne gearbeitet hat. Daher: Macht Euch vertraut mit der
Kommandozeile
Wenn Ihr das Programm Terminal startet, dann begegnet Euch ein Eingabeprompt. So etwas kennt Ihr bestimmt schon; unter Linux ist typischerweise Bash die Shell, die Eure Befehle entgegennimmt. Ich gehe im Folgenden nicht davon aus, dass Ihr Bash-Profis seid, aber es lohnt sich bestimmt, mal darüber nachzugooglen, was man damit anstellen kann (Hinweis: Sehr viel!). Wir benötigen das Terminal so oft, dass es sich lohnt, ein Programm wie Guake zu installieren, dass eine Quake-ähnliche Drop-Down-Konsole implementiert. Natürlich installieren wir sie im Terminal:
Unter Debian oder Ubuntu:
Code: Alles auswählen
sudo apt-get install guake
Code: Alles auswählen
sudo yum install guake
Editor
Ich persönlich benutze vim, aber der ist nicht gerade einsteigerfreundlich (man ist damit aber sehr produktiv). Ein netter Editor (der sogar als leichtgewichtige IDE beworben wird), der in jeder Distro vorhanden ist, ist Geany (Installation wieder wie gehabt mit apt-get oder yum).
Mercurial
Das Versionskontrollsystem, dass ASC verwendert, ist Mercurial. Mercurial zählt mit git zu den Distributed Version Control Systems, kurz DVCS. Mercurial verwaltet den Code, das heißt: Es speichert den kompletten Zustand jeder Datei, wenn ich commite, und ich kann zu jedem beliebigen Zustand updaten. Ebenso kann ich Code von anderen Mercurial-Repositories pullen und die Zustände zusammenführen (mergen). Dadurch kann ich mit anderen Entwicklern zusammenarbeiten. Wie das genau funktioniert, werde ich später an Beispielen erklären.
Auch Mercurial ist wieder leicht zu installieren (mit yum oder apt-get). Unter Umständen wir die Bezeichnung Hg dafür verwendet.
Compiler
Natürlich brauchen wir auch einen Compiler. Wir verwenden den GCC, der in jeder Linux-Distro vorhanden ist, da (fast) alle Programme inklusive Kernel damit gebaut werden. Die Installation ist wieder nur ein apt-get oder yum entfernt. Das Paket heißt meist gcc-c++ oder so.
Das war es eigentlich mit den notwendigen Tools; optionale Dinge wie perf, Valgrind, gdb oder Doxygen behandeln wir dann, wenn es nötig wird.
Der Code
Es wird Zeit, sich den Quellcode von ASC zu besorgen! Öffnen wir das Terminal (oder drücken F12, wenn Guake installiert ist). Wenn Ihr schon einen Ordner habt, in dem ihr Softwareprojekte entwickelt, dann wechselt da hinein; ansonsten erstellt einen Ordner mit
Code: Alles auswählen
mkdir code
Code: Alles auswählen
cd code
Code: Alles auswählen
hg clone http://hg.asc-hq.org/hg/asc
Jetzt wollen wir mal versuchen, den Code zu kompilieren. Wenn Ihr in der Uni oder der Schule einen C++-Compiler verwendet habt, dann habt Ihr normalerweise direkt sowas geschrieben wie
Code: Alles auswählen
c++ program.cpp
Wir brauchen also GNU make, um ASC zu bauen. Ihr ahnt schon: Auch das installieren wir wieder mit apt-get oder yum.
Wir brauchen allerdings noch mehr. ASC verwendet, wie schon erwähnt, einige Software-Bibliotheken. Um diese benutzen zu können, brauchen wie nicht nur die kompilierten Bibliotheken, sondern auch die sogenannten Header-Dateien, damit unser Code weiß, die die Datenstrukturen und Funktionen der Bibliotheken aussehen. Diese Header (oder Include-files) werden in separaten Paketen geliefert, die auf -devel (Fedora) oder -dev (Debian/Ubuntu) enden. Benötigt werden (diese Liste ist aus Dowload→Source Code von der ASC-Website):
- SDL 1.2
- SDL Image
- SDL Mixer 1.2
- SDL_sound
- libSigC++ 1.2
- PhysFS
- Boost
- Expat
- Freetype
- JPEG
- wxWidgets
- Lua
Unter Fedora gibt es einen Trick: Schreibt einfach
Code: Alles auswählen
sudo yum-builddep asc
Wir setzen noch eine Variable für den Compiler namens $CXXFLAGS mit ein paar Dingen, die wir für die Entwicklung brauchen:
Code: Alles auswählen
export CXXFLAGS="-O2 -march=native -pipe -fno-omit-frame-pointer -g -Wall"
Jetzt haben wir alles, was wir brauchen. Wechselt in das Verzeichnis
Code: Alles auswählen
cd asc
Code: Alles auswählen
./configure && make -j
Der erste Befehl konfiguriert die Art und Weise, wie ASC kompiliert wrden soll. Wenn dabei Fehler auftreten, dann fehlt wahrscheinlich noch eine Bibliothek, von der ASC abhängt. Das Skript sagt Euch auch normalerweise, welches. Die Schwierigkeit besteht oft darin, das entsprechende Paket der Distribution zu finden.
Der zweite Befehl kompiliert dann jede Datei und linkt das fertige Programm zusammen. Das dauert eine Weile (ich arbeite daran, den Kompiliervorgang etwas schneller zu machen). Das -j sagt, dass er so viele Dateien gleichzeitig kompilieren soll, wie Ihr Prozessoren habt.
Wenn alles gut ging, tippt
um ASC zu starten. Hurra!source/unix/asc/asc
Ich hoffe, es hat bei Euch alles geklappt, wenn nicht, schreibt einen Kommentar. Schreibt auch gerne alle Arten von Ergänzungen oder wie Eure Entwicklungsumgebung aussieht.
Im nächsten Teil wagen wir uns mal an den Quellcode und pfuschen ein wenig herum um zu gucken, was kaputt geht