\section{Tutorial} Beim folgenden Abschnitt handelt es sich um ein \textit{Tutorial} in welchem Schritt für Schritt erklärt was notwendig ist um \textit{Enlightenment} \citep{efl} und das Programm \textit{Ueberall} von Linux nach \textit{Windows Mobile 6.1} zu portieren. Bei dem genutzten Linux handelt es sich um ein Ubuntu Version 9.10. Für dieses Vorhaben werden mehrere Tools benötigt, welche auch im folgenden kurz vorgestellt werden. Zum einen wird das \textit{Enlightenment} Packet benötigt, welches aus mehreren Unterprogrammen besteht. Diese wurden allesamt aus dem \textit{Subversion Repository} der Entwickler heruntergeladen. Ein weiterer wichtiger Rolle in diesem Vorhaben spielt der \textit{CeGCC-Compiler} \citep{cegcc}, welcher für das kompilieren von Programmcode von Linux nach Windows Mobile benötigt wird.\newline Diese Programme bilden die Grundlagen für diese Aufgabe. Um \textit{Ueberall} kompilieren ist es auch nötig noch ein paar \textit{Libraries} zu protieren. Auf diese wird im Abschnitt \textit{Ueberall} genauer eingegangen.\newline Als erstes wird nun auf den \textit{CeGCC} näher eingegangen, danach auf das Erstellen von Enlightenment für Windows Mobiel und schliesslich wird auch das portieren von \textit{Ueberall} genauer besprochen. \subsection{CeGCC} Der CeGCC ist ein \textit{Open-Source} Projekt, welches ein \textit{Crosscompiler} von Linux nach Windows Mobile entwickelt hat. Dieser Kompiler bassiert auf dem standart Unix C-Kompiler, dem GCC.\newline Eine aktuelle Version des CeGCC's kann auf der Projekthomepage gefunden und heruntergeladen werden. Es wird hierbei prinzipiell zwischen zwei verschiedenen Arten des CeGCC's unterschieden. Es gibt zum einen einen Kompiler der eben \textit{cegcc} genannt wird, zum anderen aber aber auch einen welcher \textit{mingw32ce} genannt wird. Der Unterschied zwischen diesen beiden Kompilern besteht darin, dass ersterer nur dann benutzt wird, wenn man nur Linux APIs nutzt. Im Unterschied dazu wird der \textit{mingw32ce}-Kompiler dann gebraucht, wenn man auch \textit{Windows Mobile} APIs nutzen möchte.\newline Für diese Aufgabe wird der \textit{mingw32ce} für den \textit{ARM}-Prozessortyp benötigt. Dieser kann auf der Homepage des CeGCC-Projekts heruntergeladen und in das passende Systemverzeichniss entpackt werden.\newline Hat man diese zwei Schritte erledigt, hat man auch schon den CeGCC erfolgreich auf seinem System installiert. \subsection{Enlightenment} Unter dem Namen \textit{Enlightenment} werden mehrere Programme zusammengefasst, welche zusammen einen kompletten \textit{Window-Manager} bilden. Auch hier handelt es sich um ein \textit{Open-Source} Projekt. Um ein \textit{Frontend}, welches mit einer Enlightenment Bibliothek erstellt wurde, auf einem Smart Phone starten zu können müssen mehrere Programme mit dem \textit{CeGCC} kompiliert werden. Diese sind: \textit{evil, eina, eet, embryo, evas, ecore, edje und elementary}. Diese Programme werden mit dem von den Entwicklern bereitgestelltem Source Code kompiliert. Bevor man allerdings damit beginnen kann, müssen noch ein paar benötigte Packete aus dem Ubuntu-Repository installiert werden. \begin{verbatim} sudo apt-get install build-essential make gcc bison flex subversion autoconf libtool gettext libfreetype6-dev libpng12-dev zlib1g-dev libjpeg-dev libtiff-dev libungif4-dev librsvg2-dev xorg-dev libltdl3-dev libcurl4-dev cvs subversion git-core doxygen proj libsqlite3-0 libsqlite3-dev \end{verbatim} Nachdem diese Packete installiert wurden kann man sich nun die einzelnen Packete aus dem \textit{Subversion-Repository} der Entwickler herunterladen.\newline Nun muss man sich noch ein Verzeichniss anlegen, in welchem die für Windows Mobile kompilierten Dateien abgelegt werden. Des weiteren muss noch eine Datei angelegt werden, in welcher die Pfade zu dem genutzten Kompiler liegen und welche dann einmalig exportiert werden müssen, damit die benötigten \textit{Header-Files}, textit{Libraries} und \textit{Binaries} auch vom Betriebssystem gefunden werden. Diese Datei wird im folgenden ``mingw32ce.env'' benannt. \begin{verbatim} touch mingw32ce.env \end{verbatim} Nun müssen noch in diese Datei die zu exportierenden Pfade geschrieben werden. \begin{verbatim} export CEGCC_PATH=/opt/cegcc export MINGW32CE_PATH=/opt/mingw32ce export WINCE_PATH=$HOME/workspace/wince export PATH=$CEGCC_PATH/bin:$MINGW32CE_PATH/bin:$PATH export CPPFLAGS="-I$WINCE_PATH/include -I$WINCE_PATH/zlib-1.2.3-dev/include -I$WINCE_PATH/libjpeg-6b-dev/include -I$WINCE_PATH/win_iconv-dev/include -I$WINCE_PATH/freetype-2.3.7-dev/include -I$WINCE_PATH/libpng-1.2.33-dev/include/libpng12 -I$WINCE_PATH/win_iconv-dev/include -I/opt/mingw32ce/arm-mingw32ce/include/" export LDFLAGS="-L$WINCE_PATH/lib -L$WINCE_PATH/zlib-1.2.3-dev/lib -L$WINCE_PATH/libjpeg-6b-dev/lib -L$WINCE_PATH/win_iconv-dev/include -L$WINCE_PATH/freetype-2.3.7-dev/lib -L$WINCE_PATH/libpng-1.2.33-dev/lib -L$WINCE_PATH/win_icon-dev/lib -L$CEGCC_PATH/lib" export LD_LIBRARY_PATH="$WINCE_PATH/bin" export PKG_CONFIG_PATH="$WINCE_PATH/lib/pkgconfig" \end{verbatim} Der Inhalt dieser Datei muss nun in jeder neu geöffneten Shell neu exportiert werden, da sie durch die hier gewählte Methode nur in eben diesen Shell's gelten wo sie exportiert wurden.\newline Bei den Variablen ``CEGCC\_PATH'' und ``MINGW32CE\_PATH'' ist der Pfad zum Verzeichniss des \textit{cegcc}, beziehungsweiße des \textit{mingw32ce} Kompilers einzutragen. Unter ``WINCE\_PATH'' muss der Pfad, zu dem Verzeichniss in dem die kompilierten Daten gespeichert werden sollen, eingetragen werden. Mit ``PATH'' werden die \textit{Binaries}, der zwei Kompiler, in den Systempfad aufgenommen. Des weiteren werden unter ``CPPFLAGS'' die \textit{include}-Pfade und unter ``LDFLAGS'' die \textit{Librarie} Pfade abgelegt. ``LD\_LIBRARY\_PATH'' zeigt auf den Ordner in welchem die kompilierten \textit{Binaries} liegen. ``PKG\_CONFIG\_PATH'' zeigt schliesslich noch auf den Ordner der die Packetinformationen der installierten Dateien beinhaltet. Dieses exportieren geschieht mit dem folgenden Aufruf. \begin{verbatim} source /mingw32ce.env \end{verbatim} Im nächsten Schritt muss nun noch ein Ordner angelegt werden, in welchem der \textit{Enlightenment Source-Code} abgelegt wird. Nun muss noch in dieses Verzeichniss gewechselt werden und es kann mit dem ersten Programm begonnen werden. \subsubsection{evil} Als erstes ist es nötig das Programm \textit{evil} aus dem \textit{SVN}, welches von den Entwicklern bereit gestellt wurde, herunterzuladen. Das herunterladen geschieht mit: \begin{verbatim} svn co http://svn.enlightenment.org/svn/e/trunk/evil \end{verbatim} Nachdem alle Dateien erfolgreich heruntergeladen wurden muss, falls nicht schon geschen, die Datei mit den \textit{Umgebungsvaribalen} eingelesen werden. Nachdem dies geschehen ist, kann man nun das Konfigurationsskript starten \begin{verbatim} ./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce \end{verbatim} Durch diesen Aufruf wird der Installationspfad auf den Wert der Variable ``WINCE\_PATH'' gesetzt und als Zielsystem ein \textit{ARM-Prozessor} gesetzt und der \textit{mingw32ce}-Kompiler als Kompiler gewählt.\newline Nachdem dieses Skript erfolgreich durchgeführt wurde, kann man im nächsten Schritt das Programm erstellen. \begin{verbatim} make \end{verbatim} Ist auch dies erfolgreich durchgelofen, so muss man nun noch in einem letzen Schritt die erstellten Dateien im Zielordner installieren. \begin{verbatim} make install \end{verbatim} Nun sollte \textit{evil} erfolgreich im Zielordner installiert worden sein. \subsubsection{eina} Auch hier ist es auch wieder nötig die Dateien aus dem Entwickler-Repository herunterzuladen. \begin{verbatim} svn co http://svn.enlightenment.org/svn/e/trunk/eina \end{verbatim} Danach wird auch hier wieder das ``autogen.sh'' Skript aufgerufen. \begin{verbatim} ./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce --disable-pthread \end{verbatim} Es werden bei diesem Aufruf die gleichen Parameter wie bei \textit{evil} übergeben. Hinzu kommt noch ``--disable-pthread''. Mit diesem Parameter wird \textit{threading} beim erstellen von \textit{eina} deaktiviert, da \textit{ARM-Prozessoren} dies nicht unterstützen.\newline Nachdem das Skript durchgelaufen ist, muss man nun auch wieder das Programm erstellen und im Zielverzeichniss installieren. \begin{verbatim} make ; make install \end{verbatim} \subsubsection{eet} Bevor man \textit{eet} erstellen kann, muss man noch vier vorgefertigte \textit{tar-Archive} im Verzeichniss, welches in der Variable ``WINCE\_PATH'' gespeichert wurde, entpacken. Diese Archive kann man unter den Links, welche in Anhang 2 zu finden sind, herunterladen. Nach dem herunterladen müssen diese nur noch in das ``WINCE\_PATH''-Verzeichniss kopiert und entpackt werden. Nun kann man den Quellcode für \textit{eet} herunterladen. \begin{verbatim} svn co http://svn.enlightenment.org/svn/e/trunk/eet \end{verbatim} Nachdem die Dateien heruntergeladen sind, muss wieder das ``autogen.sh``-Skript aufgerufen werden. \begin{verbatim} ./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce \end{verbatim} Im Anschluss muss nun auch wieder kompiliert und installiert werden. \begin{verbatim} make ; make install \end{verbatim} \subsubsection{embryo} \begin{verbatim} svn co http://svn.enlightenment.org/svn/e/trunk/embryo \end{verbatim} Nachdem die Dateien heruntergeladen sind auch wieder das Skript aufrufen. \begin{verbatim} ./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce \end{verbatim} Im Anschluss nun auch wieder kompilieren und installieren. \begin{verbatim} make ; make install \end{verbatim} \subsubsection{evas} Auch für \textit{evas} müssen mehrere \textit{tar-Archive} heruntergeladen werden. Auch sollen diese in das gleiche Verzeichniss, wie die vorhergegangenen Archive, entpackt werden. Nun müssen noch die Dateien, welche die Packetinformationen beinhalten für die heruntergeladen Dateien ergänzt werden: \begin{verbatim} cp $WINCE_PATH/cp libpng-1.2.33-dev/lib/pkgconfig/libpng* $WINCE_PATH/lib/pkgconfig/ cp $WINCE_PATH/freetype-2.3.7-dev/lib/pkgconfig/freetype2.pc $WINCE_PATH/lib/freetype2.pc \end{verbatim} Nun müssen diese Packetinformationen noch bearbeitet werden. Dazu müssen diese mit einem beliebigen Editor geöffnet werden und in beiden Dateien der Wert von ''prefix`` auf ''WINCE\_PATH`` gesetzt werden. Nachdem dies durchgeführt wurde kann nun \textit{evas} heruntergeladen werden. \begin{verbatim} svn co http://svn.enlightenment.org/svn/e/trunk/evas \end{verbatim} Nun muss auch hier, wie bei allen anderen Programmen das ''autogen.sh``-Skript aufgerufen werden. \begin{verbatim} ./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce \end{verbatim} Als nächster Schritt muss nun das Programm kompiliert werden. \begin{verbatim} make \end{verbatim} Sollte hierbei die Datei ''ft2build.h`` nicht gefunden werden, so muss diese an die richtige Stelle kopiert werden. Eigentlich liegt die Datei an folgendem Ort: \begin{verbatim} $WINCE_PATH/freetype-2.3.7-dev/include/freetype2/ft2build.h \end{verbatim} \subsubsection{ecore} Um \textit{ecore} zu erstellen muss zu allererst eine Änderung im ``winnt.h''-Header vorgenommen werden. Dieser liegt im \textit{include}-Verzeichniss des \textit{mingw32ce}-Kompilers. \begin{verbatim} #define PROCESS_SET_QUOTA 0x0100 #define PROCESS_SET_INFORMATION 0x0200 #define PROCESS_QUERY_INFORMATION 0x0400 +#define PROCESS_SUSPEND_RESUME 0x0800 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff) #define THREAD_TERMINATE 0x0001 \end{verbatim} Der mit ``+'' gekennzeichnete Eintrag ``PROCESS\_SUSPEND\_RESUME'' muss in die Datei ``winnt.h'' eingefügt werden.\newline Nachdem dieser Schritt ausgeführt wurde kann nun auch \textit{ecore} kompiliert werden. Dazu wird auch hier wieder zuerst das ``autogen.sh'' Skript ausgeführt. \begin{verbatim} ./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce --disable-pthread \end{verbatim} Nachdem dies erfolgreich ausgeführt wurde können nun auch die gleichen zwei Schritte wie bei den vorhergegangenen Programmen ausgeführt werden. \subsubsection{edje} Auch hier gilt wieder, Dateien herunterladen. \begin{verbatim} svn co http://svn.enlightenment.org/svn/e/trunk/embryo \end{verbatim} Nachdem die Dateien heruntergeladen wurden, muss auch hier wieder das Skript aufgerufen werden. \begin{verbatim} ./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce \end{verbatim} Die letzten beiden Schritte sind auch hier wieder kompilieren und installieren. \begin{verbatim} make ; make install \end{verbatim} \subsubsection{elementary} \subsection{Ueberall}