Kleiner Einsteigerguide, Teil 0: Das Setup

Moderator: Moderatoren2

Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von Ed von Schleck »

Hallo alle,

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 DowloadSource Code den Satz:
Developing non-trivial software on Windows sucks.
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.

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
Unter Fedora:

Code: Alles auswählen

sudo yum install guake
Das ist optional; Ihr könnt natürlich alles auch im Terminal-Fenster anstellen. Weitere Tools die wir benötigen:

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
oder einem anderen Namen, der Euch gefällt (Projekte, Development, ...). Wechselt in den Ordner

Code: Alles auswählen

cd code
und benutzt Mercurial, um den Quellcode von ASC herunterzuladen:

Code: Alles auswählen

hg clone http://hg.asc-hq.org/hg/asc
Nach einer Weile habt Ihr den Quellcode auf Eurer Festplatte.

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
oder so, und das Programm wurde compiliert. Das funktioniert gut, wenn nur eine einzige Datei da ist, aber wenn man viele Dateien hat, die man auch noch gegeneinander verlinken muss, und auch noch gegen externe Bibliotheken linkt, dann ist es zu mühselig, das alles immer auszuschreiben. Daher haben nette Leute das make-Tool entwickelt. Darin schreibt man die Regeln auf, nachdem ein Programm kompiliert und gelinkt werden soll. Und weil es mühselig ist, Makefiles von Hand zu schreiben, haben andere die autotools entwickelt, mit denen man Makefiles generieren kann.

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 DowloadSource 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
Also sucht nach Packeten, die ungefähr so heißen und auf -dev[el] enden, und installiert sie.

Unter Fedora gibt es einen Trick: Schreibt einfach

Code: Alles auswählen

sudo yum-builddep asc
und yum installiert alle Pakete, die man zum kompilieren benötigt. Ich weiß leider nicht, wie die Ubuntu-Version dieses Befehls heißt.

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"
Das sagt dem Compiler: Optimiere den Quellcode, aber generiere auch Debugging-Informationen und spucke Warnungen aus, wenn irgendwas komisch aussieht.

Jetzt haben wir alles, was wir brauchen. Wechselt in das Verzeichnis

Code: Alles auswählen

cd asc
und tippt

Code: Alles auswählen

./configure && make -j
Das && sagt: Führe den Befehl danach aus, wenn der Befehl davor erforlgreich war.

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
source/unix/asc/asc
um ASC zu starten. Hurra!

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 :)
leo1
Unteroffizier
Unteroffizier
Beiträge: 331
Registriert: So 11. Sep 2011, 12:09
Einheitenset: Teccnols

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von leo1 »

Puh! Habe zwar nichts verstanden, aber mächtig Respekt vor allen, die das hier verstehen und/oder ASC am Leben erhalten!
Benutzeravatar
itaker
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2505
Registriert: Sa 13. Jun 2009, 23:02
Einheitenset: Rehaner
Wohnort: Karlsruhe

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von itaker »

leo.. du muß dabei kaffee Trinken.. keinen Espresso! :)
sieglinde
Unteroffizier
Unteroffizier
Beiträge: 311
Registriert: Mi 7. Dez 2011, 12:56
Einheitenset: Mk IV

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von sieglinde »

...und nur einen pro absatz! ...
Excalibur
Generalmajor
Generalmajor
Beiträge: 2346
Registriert: Mo 15. Jun 2009, 18:32
Einheitenset: MK 4
Wohnort: 74629

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von Excalibur »

Hallo Ed von Schleck, bitte nicht mit uns ungeduldig werden, wir müssen uns erst einlesen und dazu brauchen wir Zeit.
Geb uns einwenig Zeit, wir machen schon mit, aber das ist alles neu für uns. Vielen Dank für Deine Geduld uns das alles zu erklären. Ich werde mir das Ganze in einigen Tagen ganz, ganz genau durchlesen. Nicht an uns zweifeln, wir wollen ja.
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von Hanni »

Es gibt übrigens auch eine vorgefertigte VM für die ASC Entwicklung: http://terdon.asc-hq.org/MyWiki/DevelopmentVM
Sowie eine Schritt für Schritt Anleitung für Visual Studio: http://terdon.asc-hq.org/MyWiki/WindowsCompile

Grüße
Hanni
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von Ed von Schleck »

@Excalibur: Kein Problem, ich finds toll, dass sich Leute dafür interessieren!

@Hanni: Die VM hab ich oben erwähnt (ich weiß, ist viel Text). Und was das Windows-Setup anbelangt: Da ich nicht unter Windows entwickle, kann ich da leider nix zu sagen oder Hilfestellungen geben. Wenn jemand aber das hinkriegt, wäre ich an einem Erfahrungsbericht sehr interessiert.
Benutzeravatar
fff
Stabsunteroffizier
Stabsunteroffizier
Beiträge: 435
Registriert: Mo 25. Jul 2011, 16:24

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von fff »

Danke.

"$make" hat funktioniert, mit der asc-dev-ubuntu VM, auf 12.10 upgedatet und libboost1.53-dev, libboost-regex1.53, libboost-regex1.53-dev.
Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von Ed von Schleck »

Sehr cool! War offensichtlich spät gestern :)
Benutzeravatar
fff
Stabsunteroffizier
Stabsunteroffizier
Beiträge: 435
Registriert: Mo 25. Jul 2011, 16:24

Re: Kleiner Einsteigerguide, Teil 0: Das Setup

Beitrag von fff »

Code: Alles auswählen

$ pwd
/home/asc/code/asc
$ mkdir build
$ cd build
$ ../configure --help | ack '\--enable-genparse'
  --enable-genparse       enables recreation of the command line parsers
asc verwendet das Programm Genparse. Siehe Ordner clparser.

Aus der Datei source/clparser/Makefile.am:

Code: Alles auswählen

%.cpp %.h: %.gp
    genparse $< -l cpp -c cpp -o $* 
Aus der Datei configure.in:

Code: Alles auswählen

AC_ARG_ENABLE( genparse, AS_HELP_STRING([--enable-genparse],[enables recreation of the command line parsers]), ENABLEGENPARSE=1 )
if test "X$ENABLEGENPARSE" = "X1"; then
    AC_CHECK_PROG(GENCLL,genparse,genparse)
    if test "X$GENCLL" = "Xgenparse"; then
        GENCL=clparser
    fi
    AC_SUBST([GENCL])
fi 
Antworten