\section*{Anhang} \begin{appendix} \subsection*{Anhang 1} Um die Pakete \textit{Evil, Eina, Eet, Embryo, Evas, Ecore, Edje} und \textit{Elementary} von \textit{Ubuntu} nach \textit{Windows Mobile} zu portieren, sind die folgenden Schritte nötig: \newline Zuerst muss eine aktuelle Version des \textit{CeGCC's} heruntergeladen und installiert werden. Die benötigten Dateien können auf der Projekthomepage\footnote{http://cegcc.sourceforge.net/} heruntergeladen werden. Für dieses Tu\-to\-ri\-al wird der \textit{mingw32ce} für den \textit{ARM}-Prozessortyp benötigt. Nach dem Herunterladen muss dieser in das passende Systemverzeichniss entpackt werden.\newline Bevor man mit dem nächsten Schritt fortfahren kann, müssen noch ein paar benötigte Pakete aus dem \textit{Ubuntu-Repository} installiert werden. \begin{lstlisting}[backgroundcolor=\color{grey}] 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{lstlisting} Als nächstes muss ein Verzeichniss angelegt werden, in welchem die für Windows Mobile kompilierten Dateien gespeichert werden können. Des Weiteren muss noch eine Datei angelegt werden, in welcher die Pfade zun genutzten Kompiler liegen und welche dann einmalig exportiert werden müssen. Dies ist notwendig, damit die zum Portieren benötigten \textit{Header}-Dateien, Bibliotheken und ausführbare Dateien auch vom Betriebssystem gefunden werden. Diese Datei wird im folgenden mit \textit{mingw32ce.env} benannt. Das Anlegen dieser Datei geschieht mit Hilfe des Befehls \lstinline{touch mingw32ce.env}. % % \begin{lstlisting} % touch mingw32ce.env % \end{lstlisting} % Nun müssen noch folgende Einträge in der Datei \textit{mingw32ce.env} hinzugefügt werden. \begin{lstlisting}[backgroundcolor=\color{grey}] 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{lstlisting} Der Inhalt dieser Datei muss nun in jeder neu geöffneten \textit{Shell} exportiert werden. Die Var\-iablen existieren nur in den \textit{Shells}, in denen sie exportiert wurden.\newline Unter den Variablen \textit{CEGCC\_PATH} und \textit{MINGW32CE\_PATH} ist der Pfad zum Verzeichnis des \textit{cegcc}, beziehungsweise des \textit{mingw32ce} Kompilers einzutragen. Unter \textit{WINCE\_PATH} muss der Pfad zum Verzeichnis in dem die kompilierten Dateien gespeichert werden sollen, eingetragen werden. Mit \textit{PATH} werden die \textit{Binaries} des \textit{CeGCC's}, in den systemweiten Pfad der ausführbaren Dateien aufgenommen. Des Weiteren werden unter \textit{CPPFLAGS} die \textit{include}-Pfade und unter \textit{LDFLAGS} die Pfade zu den benötigten Bibliotheken abgelegt. \textit{LD\_LIBRARY\_PATH} zeigt auf den Ordner in welchem ausführbare Dateien liegen, die zum Kompilieren benötigt werden. \textit{PKG\_CONFIG\_PATH} zeigt schliesslich noch auf den Ordner, der die Paketinformat\-io\-nen der installierten Dateien beinhaltet. Das Exportieren dieser Werte geschieht mit dem Aufruf \lstinline{source /mingw32ce.env}.\newline Nun muss noch ein Ordner angelegt werden, in welchem der \textit{Enlightenment Source-Code} ge\-spei\-chert werden kann. Nach dem Wechseln in selbigen kann mit dem nächsten Schritt fortgefahren werden. \subsubsection*{Evil} Zuerst muss der Quellcode von \textit{Evil} aus dem \textit{SVN} heruntergeladen werden. Das Herunterladen wird mit \lstinline{svn co http://svn.enlightenment.org/svn/e/trunk/evil} ausgeführt. Nachdem alle Da\-tei\-en erfolgreich heruntergeladen wurden, muss falls nicht schon geschehen, die Datei mit den \textit{Umgebungsvaribalen} exportiert werden. Nachdem dies durchgeführt wurde, kann nun das Konfigurationsskript mit dem Aufruf \lstinline|./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce| ge\-star\-tet werden. \newline Durch das Ausführen des Skriptes mit diesen Parametern wird der Installationspfad auf den Wert der Variable \textit{WINCE\_PATH} gesetzt und der \textit{mingw32ce}-Kompiler als Kompiler festgelegt.\newline Nachdem dieses Skript erfolgreich ausgeführt wurde, kann im nächsten Schritt das Programm durch Ausführen von \lstinline{make} erstellt und im Anschluss durch \lstinline{make install} installiert werden. Nach diesem Schritt sollte \textit{Evil} erfolgreich im Zielordner, der in der Variable \textit{WINCE\_PATH} festgelegt wurde, installiert worden sein. \subsubsection*{Eina} Hier ist es ebenfalls nötig die Dateien aus dem Entwickler-Repository durch \lstinline{svn co http://svn.enlightenment.org/svn/e/trunk/eina} herunterzuladen. Danach wird das \textit{autogen.sh} Skript durch \lstinline|./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce --disable-pthread| aufgerufen. \newline Es werden bei diesem Aufruf die gleichen Parameter wie bei \textit{Evil} übergeben. Hinzu kommt noch \textit{--disable-pthread}. Mit diesem Parameter wird die Nutzung der \textit{POSIX} Bibliothek \textit{libpthread} deaktiviert, da diese auf dem Zielsystem nicht unterstützt wird.\newline Nachdem das Skript ausgeführt wurde, wird das Programm nun mit \lstinline{make} erstellt und im Ziel\-ver\-zeich\-nis mit \lstinline{make install} installiert. \subsubsection*{Eet} Bevor man \textit{Eet} erstellen kann, muss man noch vier \textit{tar-Archive} im Verzeichnis, welches in der Variable \textit{WINCE\_PATH} gespeichert wurde, entpacken. Diese Archive können unter den Links, welche in Anhang 2 zu finden sind, heruntergeladen werden. Im Anschluss müssen diese in das \textit{WINCE\_PATH}-Verzeichnis kopiert und entpackt werden. Nun kann der Quellcode für \textit{Eet} durch Ausführen von \lstinline{svn co http://svn.enlightenment.org/svn/e/trunk/eet} heruntergeladen werden. Nachdem die Dateien vorhanden sind, muss das \textit{autogen.sh}-Skript durch \lstinline|./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce| aufgerufen und ausgeführt werden. Im Anschluss wird mit \lstinline{make} kompiliert und mit \lstinline{make install} installiert. \subsubsection*{Embryo} Der Erste Schritt ist das Herunterladen des Programmcodes unter der Verwendung von \lstinline{svn co http://svn.enlightenment.org/svn/e/trunk/embryo}. Nachdem die Dateien heruntergeladen wurden, muss durch \lstinline{./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce} das \textit{autogen.sh} Skript aufgerufen werden. Im Anschluss mit \lstinline{make} kompilieren und mit \lstinline{make install} installieren. \subsubsection*{Evas} Auch für \textit{Evas} müssen mehrere \textit{tar-Archive} heruntergeladen werden (siehe Anhang 3). Diese werden in das gleiche Verzeichnis, wie die vorhergegangenen Archive, entpackt. Nun müssen noch die Dateien, welche die Paketinformationen beinhalten, um die heruntergeladen Pakete ergänzt werden: \begin{lstlisting}[breakatwhitespace=true,backgroundcolor=\color{grey}] cp $WINCE_PATH/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{lstlisting} Die Paketinformationen müssen allerdings noch bearbeitet werden. Dazu werden folgende drei Dateien, \textit{freetype2.pc}, \textit{libpng.pc} und \textit{libpng12.pc} benötigt. Diese werden daraufolgend mit einem beliebigen Editor geöffnet und allen drei Dateien der Wert der Variable \textit{prefix} auf \textit{\$WINCE\_PATH} gesetzt. Nachdem dies durchgeführt wurde kann nun der Quellcode von \textit{Evas} durch Ausführen von \lstinline{svn co http://svn.enlightenment.org/svn/e/trunk/evas} heruntergeladen werden. Nun wird \lstinline|./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce --disable-async-events| ausgeführt. Im näch\-sten Schritt muss das Programm mit \lstinline{make} kompiliert werden. Sollte hierbei die Datei \textit{ft2build.h} nicht gefunden werden, so muss diese an die richtige Stelle kopiert werden. Ur\-sprüng\-lich ist diese Datei unter \lstinline|$WINCE_PATH/freetype-2.3.7-dev/include/freetype2/ft2build.h| zu finden. Es kann allerdings vorkommen das sie in diesem Ordner nicht gefunden wird. Um dies zu beheben muss \textit{ft2build.h} eine Ordnerebene nach oben kopiert werden. Dies geschieht mit dem Aufruf von \lstinline|cp $WINCE_PATH/freetype-2.3.7-dev/include/freetype2/ft2build.h| \lstinline|$WINCE_PATH/freetype-2.3.7-dev/include| . \newline Um einen weiteren Fehler von vorneherein zu umgehen, muss noch der Pfad eines eingebund\-enen Headers in \textit{ft2build.h} abgeändert werden. Hierzu öffnet man \textit{ft2build.h} mit einem beliebigen Editor und ändert \lstinline{#include } zu \lstinline{#include } ab. \newline Anschliessend muss nun auch der \textit{freetype}-Ordner um eine Ebene nach oben kopieren werden, da die \textit{include}-Pfade in den Headern von \textit{freetype2} nicht korrekt sind.\newline Falls man nun noch \textit{Evas} mit \textit{DirectX-Support} kompilieren möchte, muss das \textit{DirectX-SDK} herunterladen und \textit{ddraw.h} in die Verzeichnisse \textit{/opt/cegcc/arm-cegcc/include/w32api/} und \newline \mbox{\textit{/opt/mingw32ce/arm-mingw32ce/include/}} kopiert werden. \subsubsection*{Ecore} Um \textit{Ecore} zu Erstellen muss zuerst eine Änderung im \textit{winnt.h}-Header vorgenommen werden. Dieser liegt im \textit{include}-Verzeichniss des \textit{mingw32ce}-Kompilers. \begin{lstlisting}[backgroundcolor=\color{grey}] #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{lstlisting} Der mit \textit{+} gekennzeichnete Eintrag \textit{PROCESS\_SUSPEND\_RESUME} muss in die Datei \mbox{\textit{winnt.h}} eingefügt werden.\newline Nachdem dieser Schritt ausgeführt wurde kann \textit{Ecore} erstellt werden. Dazu wird das \textit{autogen.sh}-Skript durch den Aufruf von \lstinline|./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce --disable-pthread| gestartet. \newline Nachdem das Skript erfolgreich ausgeführt wurde, können nun die gleichen zwei Schritte wie bei den vorhergegangenen Programmen ausgeführt werden. Der Kompilierungsvorgang wird durch \lstinline{make} gestartet. Im Anschluss kann mit \lstinline{make install} installiert werden. \subsubsection*{Edje} Auch hier müssen zuerst die Dateien durch Aufruf von \lstinline{svn co http://svn.enlightenment.org/svn/e/trunk/embryo} heruntergeladen werden. Nachdem die Dateien heruntergeladen wurden, muss das Skript mit \lstinline|./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce| aufgerufen. Die letzten beiden Schritte sind kompilieren und installieren durch \lstinline{make} und \lstinline{make install}. \subsubsection*{Elementary} Zuerst ist es notwendig den Quellcode und die benötigte Daten herunterzuladen. Dies geschieht durch den Aufruf von \lstinline{svn co http://svn.enlightenment.org/svn/e/trunk/TMP/st/elementary}. \newline Nun muss das \textit{autogen.sh}-Skript mit \lstinline|./autogen.sh --prefix=$WINCE_PATH --host=arm-mingw32ce --with-edje-cc=$WINCE_PATH/bin/edje_cc| gestartet und ausgeführt werden. Um zwei Fehlern vor\-zu\-beu\-gen, welche beim Erstellen der Test-Files von \textit{elementary} auftreten, sollte man in der Datei \textit{Makefile.am} im Ordner \textit{\textless Pfad-zu-Elementary\textgreater /src/bin/} alle Vorkommnisse von \textit{test\_file\-se\-lec\-tor.c} entfernen und folgende Zeilen auskommentieren: \begin{lstlisting}[backgroundcolor=\color{grey}] bin_PROGRAMS = elementary_test if BUILD_QUICKLAUNCH bin_PROGRAMS += elementary_quicklaunch elementary_run elementary_testql endif \end{lstlisting} Nun kann das Programm auf gewohnte Art und Weise mit \lstinline{make} und \lstinline{make install} erstellt und installiert werden. \subsubsection*{Weitere Schritte} Im Anschluss an das Erstellen dieser Programme muss nun noch ein Skript in \textit{WINCE\_PATH} angelegt und dessen Zugriffsrechte abgeändert werden. Das Anlegen des Skripts erfolgt durch \lstinline{touch efl_zip.sh}. Die Zugriffsrechte werden durch \lstinline{chmod 774 efl_zip.sh} abgeändert. In dieses Skript wird nun der Code kopiert, welcher unter Anhang 4 zu finden ist.\newline Bei Ausführung dieses Skripts werden die vorhandenen \textit{DLL's} nocheinmal komprimiert und alles in einen Ordner mit dem Namen \textit{efl} kopiert. Im Anschluss wird der ganze Ordner noch in einem \textit{Zip-Archiv} zusammengefasst. Möchte man nun noch eigene Anwendungen hinzufügen, so muss man diese nur in diesen \textit{efl} Ordner hinzufügen und das Skript aus Anhang 4 erneut ausführen. Nun kann dieses Archiv auf das mobile Gerät kopiert und entpackt werden. \newpage \subsection*{Anhang 2} Archive für \textit{Eet}: \begin{itemize} \item zlib-1.2.3-bin.tar.bz2: \newline \url{http://sourceforge.net/projects/cegcc/files/ported%20packages/zlib-1.2.3/zlib-1.2.3-bin.tar.bz2/download} \item zlib-1.2.3-dev.tar.bz2: \newline \url{http://sourceforge.net/projects/cegcc/files/ported%20packages/zlib-1.2.3/zlib-1.2.3-dev.tar.bz2/download} \item libjpeg-6b-bin.tar.bz2: \newline \url{http://sourceforge.net/projects/cegcc/files/ported%20packages/libjpeg-6b/libjpeg-6b-bin.tar.bz2/download} \item libjepg-6b-dev.tar.bz2: \newline \url{http://sourceforge.net/projects/cegcc/files/ported%20packages/libjpeg-6b/libjpeg-6b-dev.tar.bz2/download} \end{itemize} \subsection*{Anhang 3} Archive für \textit{Evas}: \begin{itemize} \item freetype-2.3.7-bin.tar.bz2: \newline \url{http://sourceforge.net/projects/cegcc/files/ported%20packages/freetype-2.3.7/freetype-2.3.7-bin.tar.bz2/download} \item freetype-2.3.7-dev.tar.bz2: \newline \url{http://sourceforge.net/projects/cegcc/files/ported%20packages/freetype-2.3.7/freetype-2.3.7-dev.tar.bz2/download} \item libpng-1.2.33-bin.tar.bz2: \newline \url{http://sourceforge.net/projects/cegcc/files/ported%20packages/libpng-1.2.33/libpng-1.2.33-bin.tar.bz2/download} \item libpng-1.2.33-dev.tar.bz2: \newline \url{http://sourceforge.net/projects/cegcc/files/ported%20packages/libpng-1.2.33/libpng-1.2.33-dev.tar.bz2/download} \end{itemize} \subsection*{Anhang 4} efl\_zip.sh: \begin{lstlisting}[breakatwhitespace=false,backgroundcolor=\color{grey}] #!/bin/sh rm -rf efl/ rm -f efl.zip mkdir -p efl/eina/mp mkdir -p efl/evas/modules/engines/buffer/mingw32ce-arm/ mkdir -p efl/evas/modules/engines/software_16/mingw32ce-arm/ mkdir -p efl/evas/modules/engines/software_16_wince/mingw32ce-arm/ mkdir -p efl/evas/modules/engines/software_generic/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/eet/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/jpeg/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/pmaps/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/png/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/xpm/mingw32ce-arm/ mkdir -p efl/evas/modules/savers/eet/mingw32ce-arm/ mkdir -p efl/evas/modules/savers/png/mingw32ce-arm/ cp bin/eet.exe efl/ cp bin/libdl-0.dll efl/ cp bin/libevil-0.dll efl/ cp bin/libeina-0.dll efl/ cp bin/libeet-1.dll efl/ cp bin/libevas-0.dll efl/ cp bin/libecore-0.dll efl/ cp bin/libecore_evas-0.dll efl/ cp bin/libecore_job-0.dll efl/ cp bin/libecore_wince-0.dll efl/ cp bin/libembryo-0.dll efl/ cp bin/libedje-0.dll efl/ arm-mingw32ce-strip efl/libdl-0.dll arm-mingw32ce-strip efl/libevil-0.dll arm-mingw32ce-strip efl/libeina-0.dll arm-mingw32ce-strip efl/libeet-1.dll arm-mingw32ce-strip efl/libevas-0.dll arm-mingw32ce-strip efl/libecore-0.dll arm-mingw32ce-strip efl/libecore_evas-0.dll arm-mingw32ce-strip efl/libecore_job-0.dll arm-mingw32ce-strip efl/libecore_wince-0.dll arm-mingw32ce-strip efl/libembryo-0.dll arm-mingw32ce-strip efl/libedje-0.dll cp lib/eina/mp/eina_chained_mempool.dll efl/eina/mp cp lib/eina/mp/eina_fixed_bitmap.dll efl/eina/mp cp lib/eina/mp/eina_pass_through.dll efl/eina/mp arm-mingw32ce-strip efl/eina/mp/eina_chained_mempool.dll arm-mingw32ce-strip efl/eina/mp/eina_fixed_bitmap.dll arm-mingw32ce-strip efl/eina/mp/eina_pass_through.dll cp lib/evas/modules/engines/buffer/mingw32ce-arm/module.dll efl/evas/modules/engines/buffer/mingw32ce-arm/engine_buffer.dll cp lib/evas/modules/engines/software_16/mingw32ce-arm/module.dll efl/evas/modules/engines/software_16/mingw32ce-arm/engine_software_16.dll cp lib/evas/modules/engines/software_16_wince/mingw32ce-arm/module.dll efl/evas/modules/engines/software_16_wince/mingw32ce-arm/engine_software_16_wince.dll cp lib/evas/modules/engines/software_generic/mingw32ce-arm/module.dll efl/evas/modules/engines/software_generic/mingw32ce-arm/engine_software_generic.dll cp lib/evas/modules/loaders/eet/mingw32ce-arm/module.dll efl/evas/modules/loaders/eet/mingw32ce-arm/loader_eet.dll cp lib/evas/modules/loaders/jpeg/mingw32ce-arm/module.dll efl/evas/modules/loaders/jpeg/mingw32ce-arm/loader_jpeg.dll cp lib/evas/modules/loaders/pmaps/mingw32ce-arm/module.dll efl/evas/modules/loaders/pmaps/mingw32ce-arm/loader_pmaps.dll cp lib/evas/modules/loaders/png/mingw32ce-arm/module.dll efl/evas/modules/loaders/png/mingw32ce-arm/loader_png.dll cp lib/evas/modules/loaders/xpm/mingw32ce-arm/module.dll efl/evas/modules/loaders/xpm/mingw32ce-arm/loader_xpm.dll cp lib/evas/modules/savers/eet/mingw32ce-arm/module.dll efl/evas/modules/savers/eet/mingw32ce-arm/saver_eet.dll cp lib/evas/modules/savers/png/mingw32ce-arm/module.dll efl/evas/modules/savers/png/mingw32ce-arm/saver_png.dll arm-mingw32ce-strip efl/evas/modules/engines/buffer/ mingw32ce-arm/engine_buffer.dll arm-mingw32ce-strip efl/evas/modules/engines/software_16/ mingw32ce-arm/engine_software_16.dll arm-mingw32ce-strip efl/evas/modules/engines/ software_16_wince/mingw32ce-arm/engine_software_16_wince.dll arm-mingw32ce-strip efl/evas/modules/engines/ software_generic/mingw32ce-arm/engine_software_generic.dll arm-mingw32ce-strip efl/evas/modules/loaders/eet/ mingw32ce-arm/loader_eet.dll arm-mingw32ce-strip efl/evas/modules/loaders/jpeg/ mingw32ce-arm/loader_jpeg.dll arm-mingw32ce-strip efl/evas/modules/loaders/pmaps/ mingw32ce-arm/loader_pmaps.dll arm-mingw32ce-strip efl/evas/modules/loaders/png/ mingw32ce-arm/loader_png.dll arm-mingw32ce-strip efl/evas/modules/loaders/xpm/ mingw32ce-arm/loader_xpm.dll arm-mingw32ce-strip efl/evas/modules/savers/eet/mingw32ce-arm/saver_eet.dll arm-mingw32ce-strip efl/evas/modules/savers/png/mingw32ce-arm/saver_png.dll cp freetype-2.3.7-bin/bin/libfreetype-6.dll efl/ cp libjpeg-6b-bin/bin/jpeg62.dll efl/ cp libpng-1.2.33-bin/bin/libpng12-0.dll efl/ cp libpng-1.2.33-bin/bin/libpng-3.dll efl/ cp zlib-1.2.3-bin/bin/zlib1.dll efl/ zip -r -9 efl.zip efl/ \end{lstlisting} \end{appendix}