Modern Perl Best Practices mit Damian Conway

Damian Conway mg 9100b Ich hatte heute wieder einmal die Gelegenheit, einen brillianten Vortrag von Damian Conway an der ETH besuchen zu dürfen. Das Thema war Perl Best Practices und handelte von den Dos and Don’ts beim programmieren mit Perl.

Nebst der Tatsache, dass man viele interessante und neue Dinge über Perl kennenlernt, ist ein Besuch eines Conway-Kurses jedoch immer auch mit einer Menge Spass verbunden. Damian weiss die Zuschauer zu fesseln und zu unterhalten, selbst dann wenn jemand eine ganz spezifische Frage hat, welche für die meisten Zuhörer vielleicht gerade null Relevanz hat. Kurz: Die Zeit vergeht – leider – wie im Fluge und man kriegt eine geballte Ladung an Perl Know-How mit.

Wer also einmal die Gelegenheit hat bei einem Conway Vortrag dabei sein zu können, sollte die Chance unbedingt nutzen.

Ich für meinen Teil freue mich schon auf den Donnerstag, wenn Damian zum Thema Advanced Technical Presentation Techniques referiert.




Assoziative Arrays in Bash

Fenster mit Quellcode

Mit bash 4.0 und höher hat man die Möglichkeit Assoziative Arrays verwenden zu können. In Python werden diese Art von Datenstrukturen Dictionaries genannt, in Perl heissen diese Hashes. Im Prinzip sind assoziative Arrays eine Erweiterung von normalen (indizierten) Arrays. Diese werden in der Regel dann eingesetzt, wenn man Arrayeinträge über vorher definierte Zeichenketten wiederfinden möchte.

 

Der Unterschied zu den indizierten Arrays besteht darin, dass bei den assoziativen Arrays nicht fortlaufende Nummern als Indizes, sondern sogenannte Keys (engl. Schlüssel) benutzt werden, die neben Zahlen auch Zeichenketten beinhalten können. Die einzelnen Arrayelemente werden demnach nicht einfach durchnummeriert, sondern jedes Element erhält eine Zeichenkette als Index.

Wollte man z.B. die Homeverzeichnisse von fünf Benutzern in einem Array abspeichern, musste man ein wenig tricksen um diese Infromationen pro Benutzer auch wieder auslesen zu können. Im folgenden Beispiel wird einfach definiert, dass in den ungeraden Indicies die Benutzernamen stehen und in den geraden Indicies die Pfade zu den Homeverzeichnissen.

#!/bin/bash

declare -a homeverzeichnis

homeverzeichnis[1]=matse
homeverzeichnis[2]=/home/matse
homeverzeichnis[3]=glatze
homeverzeichnis[4]=/to/boldly/go/patrick_stewart
homeverzeichnis[5]=fratze
homeverzeichnis[6]=/home/nightmare/freddy
homeverzeichnis[7]=james
homeverzeichnis[8]=/home/bond
homeverzeichnis[9]=bond
homeverzeichnis[10]=/007

echo "Benutzer 'fratze' hat folgendes homeverzeichnis:"

found=0
index=1

until [ $found -eq 1 ];do
if [ "${homeverzeichnis[${index}]}" = "fratze" ];then
echo ${homeverzeichnis[$(( ${index} + 1 ))]}
found=1
fi
index=$(( ${index} + 1 ))
done

Wie man sieht, ist das relativ umständlich. Einfacher geht dies seit Bash 4.0. Hierbei deklariert man zuerst ein Assoziatives Array mittels:

declare -A homeverzeichnis

Danach kann man einfach das Array füllen indem man als Schlüssel den Benutzernamen und als Wert den Pfad zum Homeverzeichnis definiert.

homeverzeichnis[matse]=/home/matse
homeverzeichnis[glatze]=/to/boldly/go/patrick_stewart
[etc.]

Das fertige Script sieht dann folgendermassen aus:

#!/bin/bash

declare -A homeverzeichnis

homeverzeichnis[matse]=/home/matse
homeverzeichnis[glatze]=/to/boldly/go/patrick_stewart
homeverzeichnis[fratze]=/home/nightmare/freddy
homeverzeichnis[james]=/home/bond
homeverzeichnis[bond]=/007

echo "Benutzer 'fratze' hat folgendes homeverzeichnis:"
echo "${homeverzeichnis[fratze]}"

Zum Schluss noch ein kleiner Tipp. Will man jeweils die Liste aller Schlüssel oder Werte erhalten, kann man folgendermassen vorgehen:

Eine Liste aller Keys eines Arrays erhält man mittels:

echo ${!homeverzeichnis[@]}

Eine Liste aller Werte eines Arrays erhält man mittels:

echo ${homeverzeichnis[@]}



Serie: DOSBox unter Windows kompilieren 10/10

Diese Artikelserie zeigt auf, wie man unter Windows eine Entwicklungsumgebung mit Open Source basierten Programmen erstelllt und darin Programme und deren Abhängigkeiten kompiliert. Die daraus entstehenden Dateien können unter Windows wie normale Programme verwendet werden.

Im zehnten und letzten Teil wird das selbst kompilierte DOSBox endlich ausprobiert und zum laufen gebracht.

Das kompilierte DOSBox befindet sich im Verzeichnis (D:\Entwicklung\MinGW-MSYS\MSYS\home\matse\dosbox-0.72\src\) und heisst dosbox.exe. Am einfachsten kopiert man sich die Datei in ein leeres Verzeichnis.

Versucht man die Datei zu starten, erhält man zunächst einmal eine Fehlermeldung:

DOSBox Fehlermeldung
DOSBox Fehlermeldung

Der Grund für die Meldung ist die nicht auffindbare SDL.dll Datei. Diese – und alle weiteren Abhängigkeiten – befindet sich im Verzeichnis (D:\Entwicklung\MinGW-MSYS\MinGW\bin\). Kopiert man aus diesem Verzeichnis die SDL.dll Bibliothek in das selbe Verzeichnis wie sich die dosbox.exe befindet, wird die Meldung bezüglich SDL.dll nicht mehr erscheinen. Nun kann man einfach für jede Fehlermeldung welche erscheint die entsprechende dll in das Verzeichnis mit der dosbox.exe kopieren.

Sind alle Abhängigkeiten aufgelöst startet DOSBox mit dem allseits bekannten DOS Bildschirm.

Dosbox funktioniert
Dosbox funktioniert

In der DOSBox kann man den Befehl config -writeconf default.cfg eingeben um eine Standard Konfigurationsdatei zu erzeugen.

Um nun die Umlaute nutzen zu können, muss die eben erstellte default.cfg Datei editiert werden. Hierzu beendet man zuerst DOSBox durch Eingabe von exit.

Als nächstes erstellt man im Verzeichnis, in welchem sich die dosbox.exe befindet ein Verzeichnis mit dem Namen disk. Dieses Verzeichnis dient später als Laufwerk C: für die DOSBox.

Nun editiert man die default.cfg Datei und fügt folgende Befehle hinzu, welche das disk Verzeichnis als Laufwerk C in DOSBox einbinden, das Tastaturlayout auf Deutsch stellt und auf das Laufwerk C: wechselt.

[...]
[autoexec]
# Lines in this section will be run at startup.
keyb gr 850
mount C "./disk"
C:

Hat man die Änderungen abgespeichert, startet man DOSBox mit folgendem Befehl:

dosbox -conf defalt.cfg

Nun kann man z.B. ein Verzeichnis Namens Hülle erstellen mit dem Befehl (mkdir Hülle). Wenn alles gklappt hat, sieht man mit dem dir Befehl das Verzeichnis und hat somit eine DOSBox Version kompiliert, welche Umlaute unterstützt.




Serie: DOSBox unter Windows kompilieren 9/10

Diese Artikelserie zeigt auf, wie man unter Windows eine Entwicklungsumgebung mit Open Source basierten Programmen erstelllt und darin Programme und deren Abhängigkeiten kompiliert. Die daraus entstehenden Dateien können unter Windows wie normale Programme verwendet werden.

Nachdem in den vorangegangenen Teilen die MinGW/MSYS Entwicklungsumgebung erstellt und alle Abhängigkeiten kompiliert wurden, kann in diesem Teil endlich DOSBox kompiliert werden.

Das bereits in Teil 5 dieser Artikelserie heruntergeladene DOSBox Archiv wird nochmals benötigt. Hat man es nicht mehr, kann man dosbox-0.72.tar.gz in das MSYS Heimverzeichnis herunterladen.

Mein Umlaute Patch kann ebenfalls in das MSYS Heimverzeichnis heruntergeladen werden.

Nun kann Dosbox entpackt, mein Umlautepatch eingespielt und das Programm endlich kompiliert werden.

tar xvzf dosbox-0.72.tar.gz
bunzip2 dosbox072matse.diff.bz2
cd dosbox-0.72
patch -p1<../dosbox072matse.diff
LIBS="-lvorbisfile" ./configure --prefix=/mingw && make
strip src/dosbox.exe

Im letzten Teil dieser Artikelserie wird gezeigt, wie man das selbst kompilierte dosbox verwenden kann, wo seine Abhängigkeiten zu finden sind und wie man eine Basiskonfiguration erstellt.




Serie: DOSBox unter Windows kompilieren 8/10

Diese Artikelserie zeigt auf, wie man unter Windows eine Entwicklungsumgebung mit Open Source basierten Programmen erstelllt und darin Programme und deren Abhängigkeiten kompiliert. Die daraus entstehenden Dateien können unter Windows wie normale Programme verwendet werden.

In diesem Artikel wird die auf SDL basierende Soundbibliothek SDL_sound kompiliert. Diese wird benötigt, um z.B. CD Images mit OGG Dateien als Audio Tracks mounten zu können. Die SDL_sound Bibliothek unterstützt von Haus aus das MP3 Format. Um Ogg Vorbis Dateien abspielen zu können, müssen erst einige zusätzliche Bibliotheken heruntergeladen und kompiliert werden.

Zunächst müssen die Dateien der folgenden Tabelle heruntergeladen und in das Heimvereichnis von MSYS kopiert werden:

Paket Beschreibung Link
libogg Container für z.B. Vorbis Musikdateien. libogg-1.1.3
libvorbis Vorbis Musik-Komprimieralgorithmus libvorbis-1.2.2rc1
SDL_sound Auf SDL basierende Musikbibliothek. SDL_sound-1.0.3

Die OGG Bibliothek kann ohne grössere Umstände entpackt und kompiliert werden.

tar xvzf libogg-1.1.3.tar.gz
mkdir libogg-build
cd libogg-build
../libogg-1.1.3/configure --prefix=/mingw && make && make install
cd ..

Die hier verwendete Version von libvorbis ist eigentlich ein Release Candidate. Also eine Version die zwischen Betaversion und offiziell veröffentlich ist. Der Grund für diese Wahl ist die mangelnde Unterstützung für MinGW in der offiziell verfügbaren Version.

tar xvjf libvorbis-1.2.2rc1.tar.bz2
mkdir libvorbis-build
cd libvorbis-build
../libvorbis-1.2.2/configure --prefix=/mingw && make && make install
cd ..

Versucht man das SDL_sound Paket unter MinGW zu kompilieren, funktioniert dies nicht, da gewisse Headerdateien mehrfach referenziert werden. Um dieses Problem zu umgehen müssen mit SED Anpassungen am Sourcecode vorgenommen werden.

cd
tar xvzf SDL_sound-1.0.3.tar.gz
mkdir SDL_sound-build
cd SDL_sound-build
for a in mpglib/mpg123_sdlsound.h timidity/tables.h;do
sed -e "s/#include.*
//g" ../SDL_sound-1.0.3/decoders/${a}>/tmp/gaga
cat /tmp/gaga > ../SDL_sound-1.0.3/decoders/${a}
rm /tmp/gaga
done
../SDL_sound-1.0.3/configure --prefix=/mingw && make && make install
cd ..

Da nun alle Abhängigkeiten erzeugt wurden, wird im neuten Teil dieser Artikelserie endlich die DOSBox kompiliert.




Serie: DOSBox unter Windows kompilieren 7/10

Diese Artikelserie zeigt auf, wie man unter Windows eine Entwicklungsumgebung mit Open Source basierten Programmen erstelllt und darin Programme und deren Abhängigkeiten kompiliert. Die daraus entstehenden Dateien können unter Windows wie normale Programme verwendet werden.

Im siebten Teil wird die auf SDL aufbauende Netzwerkbibliothek SDL_net erzeugt. Durch diese Bibliothek hat man in der DOSBox die Möglichkeit Spiele wie etwa Quake über das Netzwerk zu spielen. Prinzipiell kann man diese Abhängigkeit auch einfach auslassen. DOSBox wird trotzdem kompiliert, bietet aber keine Netzwerkunterstützung an. Da wir jedoch eine vollständie DOSBox kompilieren wollen, wird nachfolgend erläutert wie man SDL_net kompiliert.

Von der Webseite, von welcher man bereits SDL heruntergeladen hat, lädt man sich das Paket SDL_net-1.2.7.tar.gz herunter und kopiert es in das Heimverzeichnis der MSYS Umgebung.

Das Paket wird folgendermassen kompiliert.

cd
tar xvzf SDL_net-1.2.7.tar.gz
mkdir SDL_net-build
cd SDL_net-build
../SDL_net-1.2.7/configure --prefix=/mingw --disable-gui && make && make install
cd ..

Im achten Teil dieser Artikelserie wird die Soundunterstützung für DOSBox kompiliert.




Serie: DOSBox unter Windows kompilieren 6/10

Diese Artikelserie zeigt auf, wie man unter Windows eine Entwicklungsumgebung mit Open Source basierten Programmen erstelllt und darin Programme und deren Abhängigkeiten kompiliert. Die daraus entstehenden Dateien können unter Windows wie normale Programme verwendet werden.

Im fünften Teil wurde die Simple DirectMedia Library kompiliert, in diesem Teil wird die PNG Bibliothek kompiliert. Diese Bibliothek ermöglicht einem Programm die Verwendung und Erstellung von PNG Grafiken. Die PNG Bibliothek wird von DOSBox benötigt um die Screenshots – welche während einer DOSBox Session erstellt werden können – abspeichern zu können.

Zuerst müssen die Pakete der folgenden Tabelle in das Heimverzeichnis der MSYS Umgebung heruntergeladen werden.

Paket Beschreibung Link
Z Bibliothek Bibliothek mit dem Komprimieralgorithmus Z. zlib-1.2.3
libpng PNG Bibliothek libpng-1.2.35

Um zlib unter Windows als dll kompilieren zu können müssen einige Änderungen vorgenommen werden. Ausserdem wird die Installation (make install) Fehlermeldungen ausgeben, da einige if Abfragen ohne zugehöriges fi vorhanden sind. Die Fehlermeldungen haben jedoch keine Relevanz, da die wichtigen Dateien installiert werden.

cd
tar xvzf zlib-1.2.3.tar.gz
cd zlib-1.2.3
sed -e 's/INSTALL = $(CP)/INSTALL = install/g' win32/Makefile.gcc > Makefile
make && make test testdll && INCLUDE_PATH=/mingw/include LIBRARY_PATH=/mingw/lib make install
install zlib1.dll /mingw/bin
cd ..

libpng lässt sich im Gegensatz zur zlib bereits schon einfach kompilieren.

cd
tar xvzf libpng-1.2.35.tar.gz
mkdir libpng-build
cd libpng-build
cp ../libpng-1.2.35/scripts/makefile.mingw Makefile
SRCDIR=/home/matse/libpng-1.2.35 prefix=/mingw make
SRCDIR=/home/matse/libpng-1.2.35 prefix=/mingw make test
SRCDIR=/home/matse/libpng-1.2.35 prefix=/mingw make install
cd ..

Im siebten Teil dieser Artikelserie wird die SDL_net Bibliothek kompiliert.




Serie: DOSBox unter Windows kompilieren 5/10

Diese Artikelserie zeigt auf, wie man unter Windows eine Entwicklungsumgebung mit Open Source basierten Programmen erstelllt und darin Programme und deren Abhängigkeiten kompiliert. Die daraus entstehenden Dateien können unter Windows wie normale Programme verwendet werden.

In diesem Teil wird die erste Abhängigkeit von DOSBox kompiliert. DOSBox bietet z.B. die Möglichkeit CD’s mit Audio Tracks so einzubinden, dass statt der originalen, unkomprimierten WAV Dateien komprimierte MP3 oder OGG Dateien verwendet werden können. Um nun die Unterstützung hierzu nicht komplett neu programmieren zu müssen, haben sich die Programmierer an bestehenden Projekten bedient. Hierdurch ist die Arbeit der Programmierer zwar weniger geworden, derjenige welcher den Quelltext kompiliert, muss aber auch die benötigten Abhängigkeiten zuerst herunterladen und kompilieren.

Eine solche Abhängigkeit ist z.B. Simple DirectMedia Layer (SDL). Simple DirectMedia Layer ist eine plattformübergreifende Multimedia Bibliothek welche low level Zugriff auf Audio, Keyboard, Maus, Joystick, 3D hardware via OpenGL, und 2D Video Framebuffer zur Verfügung stellt.

Zuerst wird das SDL-1.2.13.tar.gz Paket in das Homeverzeichnis der MSYS Umgebung heruntergeladen.

Um SDL unter Windows zusammen mit DOSBox nutzen zu könenn, müssen einige Quelltextdateien angepasst werden. Da sich hierzu im DOSBox Quellcode bereits ein Patch File findet, wir zusätzlich das Archiv dosbox-0.72.tar.gz heruntergeladen.

Beide Archive werden nun entpackt und SDL wird gepatcht.

tar xvzf dosbox-*.gz
tar xvzf SDL-1.*.tar.gz
sed -e "s/VERSION 1,2,12,0/VERSION 1,2,13,0/g" \
-e "s/@@ -13,7 +13,7 @@/@@ -12,7 +12,7 @@/g" dosbox-0.72/src/platform/sdl-win32.diff >sdl-win32.diff
rm -fr dosbox-0.72
cd SDL-1.2.13
patch -p1<../sdl-win32.diff
cd ..

Achtung, patch wird eine Fehlermeldung bringen.

Aus irgend einem Grund kann die Datei src/main/win32/version.rc nicht gepatcht werden. Da in dieser Datei lediglich ein Zeichen verändert werden muss, öffnet man diese Datei am besten mit einem Texteditor (nicht Word!!) der UNIX Zeilenumbrüche versteht (z.B. Notepad++). In der Datei src/main/win32/version.rc sucht man nach FILEFLAGS 0x0L und ersetzt dies durch FILEFLAGS 0x4L

Als nächstes werden die DirectX Header Dateien heruntergeladen und entpackt, damit SDL diese nutzen kann.

Zum Schluss wird alles entpackt, SDL kompiliert und die erzeugten Dateien installiert.

cd
tar xvzf directx-devel.tar.gz -C /mingw include
mkdir SDL-build
cd SDL-build
../SDL-1.2.13/configure --prefix=/mingw && make && make install
cd ..

Nach dem kompilieren findet man in /mingw/bin die Datei SDL.dll vor. Auf diese wird später DOSBox referenzieren.

Im sechsten Teil dieser Artikelserie wird die libpng kompiliert, welche unter anderem für die Erzeugung von Screenshots in DOSBox benötigt wird.




Serie: DOSBox unter Windows kompilieren 4/10

Diese Artikelserie zeigt auf, wie man unter Windows eine Entwicklungsumgebung mit Open Source basierten Programmen erstelllt und darin Programme und deren Abhängigkeiten kompiliert. Die daraus entstehenden Dateien können unter Windows wie normale Programme verwendet werden.

In den vorangegangenen Artikeln wurde die Entwicklungsumgebung erstellt. In diesem Teil wird zum ersten mal etwas in dieser Umgebung kompiliert. Um genau zu sein, handelt es sich dabei um die Autotools. Prinzipiell sind diese Programme in der MinGW/MSYS Umgebung bereits vorhanden. Jedoch handelt es sich um ältere Versionen, welche – gerade bei neueren Paketen – immer mal wieder zu Problemen führen können. Aus diesem Grund werden die aktuellsten Autotools aus dem Quelltext erstellt.

Die Autotools sind mehrere Programme, welche vor dem eigentlichen kompilieren diverse Informationen des Systems sammeln. Dadurch ist schon vor dem kompilieren klar, welche Header Dateien oder welche Libraries verwendet werden sollen. Auch können die Autotools ermitteln ob benötigte Abhängigkeiten vorhanden sind.

Anstatt wie bisher die herunter zu ladenden Dateien im Basis-Installationsverzeichnis (D:\Entwicklung\MinGW-MSYS) zu platzieren, sollten diese ab sofort im Home-Verzeichnis der MinGW/MSYS Umgebung gespeichert werden. Die hat zwei Gründe:

  1. Man befindet sich nach dem ausführen von msys.bat direkt in diesem Verzeichnis.
  2. Das Basis-Installationsverzeichnis befindet sich prinzipiell ausserhalb der MinGW/MSYS Umgebung.

Unter Windows befindet sich dieses Verzeichnis im Pfad (D:\Entwicklung\MinGW-MSYS\MSYS\home\<ANMELDENAME>\). In dieses Verzeichnis lädt man nun alle Pakete der nachfolgenden Tabelle herunter:

Paket Beschreibung Link
autoconf Autoconf ist ein erweiterbares Paket von M4 Makros welche Shell Scripts erstellen um automatisch Quelltextpakete zu konfigurieren. autoconf-2.63
automake Automake erstellt automatisiert Makefile.in Dateien. automake-1.10.2
libtool Libtool bietet Unterstützung bei der Verwendung von dynamischen Bibliotheken auf unterschiedlichen Systemplattformen. libtool-2.2.6a

Die Pakete werden entpackt und pro Paket wird ein Build Verzeichnis erstellt in welchem die Pakete kompiliert werden. Hierdurch wird im Original Sourcenpfad nichts verändert.

for a in autoconf- automake- libtool-;do tar xvzf ${a}*;mkdir ${a}build;done
cd autoconf-build
../autoconf-2.63/configure --prefix=/mingw && make && make install
cd ../automake-build
../automake-1.10.2/configure --prefix=/mingw && csmake && csmake install
cd ../libtool-build
../libtool-2.2.6/configure --prefix=/mingw && make && make install
cd ..

Auf der MinGW Webseite wird empfohlen, selbstkompilierte Bibliotheken in /mingw zu installieren. Damit zukünftig erstellte Pakete wissen, dass die Bibliotheken hier zu suchen sind, müssen noch einige Einstellungen an der Entwicklungsumgebung vorgenommen werden.

sed -e 's#export HOME LOGNAME MSYSTEM HISTFILE#PKG_CONFIG_PATH="/mingw/lib/pkgconfig"\
CFLAGS="-pipe -O2 -mms-bitfields -march=i686"\
export HOME LOGNAME MSYSTEM HISTFILE PKG_CONFIG_PATH CFLAGS#g' /etc/profile>/tmp/profile
cat /tmp/profile > /etc/profile
rm /tmp/profile

Wenn man nun die MSYS Umgebung mittels exit verlässt und danach nochmals die msys.bat aufruft, ist alles so eingestellt, dass zukünftige Kompilationen die Bibliotheken ebenfalls in der /mingw Struktur suchen.

Im fünften Teil dieser Artikelserie wird die erste Abhängigkeit von DOSBox kompiliert.




Serie: DOSBox unter Windows kompilieren 3/10

Diese Artikelserie zeigt auf, wie man unter Windows eine Entwicklungsumgebung mit Open Source basierten Programmen erstelllt und darin Programme und deren Abhängigkeiten kompiliert. Die daraus entstehenden Dateien können unter Windows wie normale Programme verwendet werden.

Während im zweiten Teil dieser Artikelserie beschrieben wurde wie man die MinGW Entwicklungsumgebung erstellt, wird in diesem dritten Teil beschrieben, wie man die MSYS Umgebung einrichtet.

Wikipedia schreibt zu MSYS

MSYS (Minimal SYStem) ist eine Softwareportierung der Unix-Shell auf die Windows-Plattform. Es dient MinGW-Entwicklern als ein minimales System, welches unter anderem configure-Skripte ausführen kann.

MSYS installiert zum Beispiel eine bash Shell, Komprimiertools wie bzip2 oder lzma und verschiedene andere Programme, welche für eine Entwicklungsumgebung benötigt werden.

Die Pakete der nachfolgenden Tabelle können alle in das Basis-Installationsverzeichnis (D:\Entwicklung\MinGW-MSYS) heruntergeladen werden.

Paket Beschreibung Link
bash Die Bourne Again Shell für Windows. bash-3.1
bzip2 Das Komprimierprogramm bzip2. bzip2-1.0.3
coreutils Diverse Basisprogramme wie cat, echo, tail etc. coreuitls-5.97
cpmake Eine Make Variante für Windows. cpmake-3.81
csmake Eine Make Variante für Windows. csmake-3.81
diffutils Programme um Dateien zu vergleichen. diffutils-2.8.7
findutils Programme um Dateien zu finden. findutils-4.3.0
gawk Die Gnu AWK Programme. gawk-3.1.5
lzma Das lzma Komprimierungsprogramm. lzma-4.43
make Das originale make Programm. make-3.81
MSYS-dll Die MSYS Bibliothek. MSYS-dll-1.0.11
msysCORE Basiskomponenten von MSYS. msysCORE-1.0.11
tar Tape Archiver Programm. tar-1.0.11-2
texinfo Das info Paket. texinfo-4.11
perl Die PERL Programmiersprache. perl-5.6.1
crypt Die GNU Kryptographie Bibliothek crypt-1.1-1

Danach wird MSYS soweit vorbereitet, dass man später die restlichen Tools installieren kann. Zuerst muss hierzu ein MSYS Unterverzeichnis erstellt werden, dann werden die MSYS Kernkomponenten entpackt und zum Schluss ein Installationsscript gestartet. Hierzu gibt man folgende Befehle in der Eingabeaufforderung von Windows ein:

cd /D D:\Entwicklung\MinGW-MSYS\
mkdir MSYS
tar -xvzf msysCORE* -C ./MSYS/
tar -xvzf MSYS-* -C ./MSYS/
cd MSYS\postinstall\
pi
### Nachfolgend die Fragen und Antworten ###
Do you wish to continue with the post install? [yn ] y
Do you have MinGW installed? [yn ] y
Where is your MinGW installation? d:/Entwicklung/MinGW-MSYS/MinGW
cd ..\..\

Wenn alles funktioniert hat, sollte man nun im MSYS Verzeichnis msys.bat starten können und eine Shell erhalten. Ein gcc -v (welches von /mingw/bin geholt wird) sollte genau so funktionieren wie ein mount. Hat alles geklappt kann man die Shell mit exit wieder beenden.

Jetzt kann man die MSYS Umgebung mit den heruntergeladenen Tools Erweitern, bzw. updaten.

cd /D D:\Entwicklung\MinGW-MSYS\
tar -xvzf bash-* -C ./MSYS/
tar -xvzf bzip2-* -C ./MSYS/
tar -xvzf coreutils-* -C ./MSYS/
tar -xvzf cpmake-* -C ./MSYS/
tar -xvzf csmake-* -C ./MSYS/
tar -xvzf diffutils-* -C ./MSYS/
tar -xvzf findutils-* -C ./MSYS/
tar -xvzf gawk-* -C ./MSYS/
tar -xvzf lzma-* -C ./MSYS/
tar -xvzf make-* -C ./MSYS/
tar -xvzf tar-* -C ./MSYS/
tar -xvzf texinfo-* -C ./MSYS/
tar -xvzf crypt-* -C ./MSYS/
tar -xvzf perl-* -C ./MSYS/

Leider wurden die Coreutils in der Version 5.97 falsch gepackt, so dass im MSYS Verzeichnis ein coreutils-5.97 Verzeichnis erzeugt wurde. Darin befinden sich die bin, lib und anderen Verzeichnisse welche eigentlich in das MSYS Verzeichnis installiert werden sollten. Diesen Umstand kann man mit den folgenden Befehlen (welche innerhalb der ausgeführten msys.bat eingegeben werden) beheben:

cd /D D:\Entwicklung\MinGW-MSYS\MSYS\
msys.bat
### Alle folgenden Befehle in der msys Shell eingeben!!! ###
cd /
mv coreutils-5.97/bin/* bin/
### da wir mit mv mv.exe nicht verschieben können, muss
### es kopiert und separat gelöscht werden.
cp coreutils-5.97/bin/mv.exe bin/
mv coreutils-5.97/info/* info/
mv coreutils-5.97/lib/* lib/
mv coreutils-5.97/man/man1/* man/man1/
rm -r coreutils-5.97

Im vierten Teil dieser Artikelserie werden die Autotools installiert. Da diese direkt aus dem Quelltext erstellt werden, wird zum ersten mal die Entwicklungsumgebung ‹live› eingesetzt.