====== Psi+ unter MS Windows (MinGW) ======
===== Erforderliche Werkzeuge für den Bau-Prozess =====
- [[http://qt.nokia.com/downloads/sdk-windows-cpp|Qt SDK for Open Source C++ development on Windows]]. Beinhaltet Qt, MinGW, Qt Creator //~ 270 MB//
- [[http://www.slproweb.com/products/Win32OpenSSL.html|Win32 OpenSSL Libs]] - Krypto-Bibliotheken //~ 7 MB//
- [[http://strawberryperl.com/|Open Source Perl for Windows]] //~ 30 MB//
- [[http://code.google.com/p/msysgit/downloads/list|Win32 Git]] - Hilfsprogramme für Git //~ 12 MB//
- [[http://www.sliksvn.com/en/download/|Slik SVN]] - Hilfsprogramme für SVN //~ 5 MB//
- [[http://tortoisesvn.net/downloads.html|TortoiseSVN]] - Erweiterung für MS Windows Explorer (optional) //~ 20 MB//
- [[http://delta.affinix.com/qconf/|QConf]] - Hilfsprogramm zur Projekt Konfiguration, kompilierte Version qconf.exe [[http://psi-dev.googlecode.com/files/qconf-1.5-win32-qt460.zip|hier)]] //~ 0.1 MB//
- [[ftp://ftp.lyx.org/pub/lyx/contrib/lyx-windows-deps-msvc2008.zip|Aspell Libs for msvc2008]] - Rechtschreibprüfung Bibliotheken //~ 65 MB//
- **__UNSTABLE__** [[ftp://90.184.233.166/ccache.exe|ccache]] ([[http://psi-dev.googlecode.com/files/ccache-2.4-win32.zip|Spiegel]])-- ein [[http://en.wikipedia.org/wiki/Ccache|Werkzeug]] zur Beschleunigung baut, ist [[http://forums.codeblocks.org/index.php/topic,12285.0.html|hier]] mehr Informationen
===== Vorbereitungen vor dem Bauen, Umgebungsvariablen setzen und erforderliche Bibliotheken =====
* Installieren Sie die oben aufgelisteten Werkzeuge (Nummer 1 - 6).
* Extrahieren Sie das Verzeichnis **QConf** aus dem Archiv **qconf-1.5-win32-qt460.zip** nach **C:\Qt**
* Extrahieren Sie die Verzeichnisse **include** und **lib** aus dem Archiv **lyx-windows-deps-msvc2008.zip** nach **C:\Qt\2010.02\mingw**
* Unter Computer Properties (Start → Settings → Control Panel → System Properties → Advanced → Environment Variables) fügen Sie den Pfad zu der Variablen [[http://en.wikipedia.org/wiki/Path_%28variable%29|PATH]] hinzu (Sollten Sie die Software in einem anderen Pfad als oben angegeben installiert haben, so benutzen Sie bitte Ihren korrekten Pfad für alle Pfadangaben):
C:\>path
PATH=C:\Qt\2010.02\qt\bin;C:\Qt\2010.02\mingw\bin;C:\OpenSSL\bin;C:\Program Files\SlikSvn\bin;C:\Program Files\TortoiseSVN\bin;C:\Qt\QConf;C:\strawberry\c\bin;C:\strawberry\perl\bin;C:\strawberry\perl\site\bin;C:\Program Files\Git\bin
und erzeugen Sie diese neuen Umgebungsvariablen ( mit Ihrem Pfad!):
QMAKESPEC=win32-g++
QTDIR=C:\Qt\2010.02\qt
OPENSSLDir=C:\OpenSSL
**__Anmerkung:__** die neuen variablen sind nur für neu gestartete Prozesse gültig, d.h. Sie müssen **cmd** als Administrator neu starten (Notfalls das System neu starten!).
===== Verifikation der Installation und der Performance von Qt durch Bauen einer Beispiel Test Applikation =====
* Starten Sie eine Konsole *cmd.exe* als Administrator (Start → Run → cmd)
* Überprüfen des Installationspfades und der Variablen:
C:\>qmake -v
QMake version 2.01a
Using Qt version 4.6.2 in C:/Qt/2010.02/qt/lib
C:\>echo %QMAKESPEC%
win32-g++
* Wechseln Sie das Arbeitsverzeichnis zu *C:\Qt\2010.02\qt\examples\tutorials*
* Auf der Kommandozeile *cmd.exe* führen Sie *qmake* aus, und dann *mingw32-make*
C:\Qt\2010.02\qt\examples\tutorials>qmake
C:\Qt\2010.02\qt\examples\tutorials>mingw32-make
...................
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT
-DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS
_QMAIN -I'../../../../include/QtCore' -I'../../../../include/QtGui' -I'../../../
../include' -I'../../../../include/ActiveQt' -I'tmp/moc/release_shared' -I'../..
/../../mkspecs/win32-g++' -o tmp/obj/release_shared/moc_finddialog.o tmp/moc/rel
ease_shared/moc_finddialog.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
oc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o release/part7.exe tmp/obj/rele
ase_shared/addressbook.o tmp/obj/release_shared/finddialog.o tmp/obj/release_sha
red/main.o tmp/obj/release_shared/moc_addressbook.o tmp/obj/release_shared/moc_f
inddialog.o -L'c:/Qt/2010.02/qt/lib' -L'c:/Qt/2010.02/qt/lib' -lmingw32 -lqtmai
n -lQtGui4 -lQtCore4
mingw32-make[3]: Leaving directory `c:/Qt/2010.02/qt/examples/tutorials/addressb
ook/part7'
mingw32-make[2]: Leaving directory `c:/Qt/2010.02/qt/examples/tutorials/addressb
ook/part7'
mingw32-make[1]: Leaving directory `c:/Qt/2010.02/qt/examples/tutorials/addressb
ook'
Das Resultat des Bauprozesses steht in dem Verzeichnis **C:\Qt\2010.02\qt\examples\tutorials\addressbook\part7\release**
Ein erfolgreicher Bauprozess bedeutet, dass Qt korrekt installiert wurde und einsatzbereit ist.
===== Kompilieren von OpenSSL Toolkit =====
* Entpacken Sie das Archiv mit der OpenSSL-Source-Code (aus § 8 der erforderlichen Werkzeuge) zu *C:\OpenSSL*
* In der Datei *e_os2.h* ändern Sie die Zeile:
von
#ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION
# define OPENSSL_IMPLEMENT_GLOBAL(type,name) \
zu
#ifdef NEVER_OPENSSL_EXPORT_VAR_AS_FUNCTION
# define OPENSSL_IMPLEMENT_GLOBAL(type,name) \
* Benennen Sie die Datei aus *C:\Program Files\Git\bin\sh.exe* bis *C:\Program Files\Git\bin\sh.ex`_`*
* Run *cmd.exe*, wechseln zum Ordner *C:\OpenSSL* und starten Sie den Prozess der Erstellung durch den Befehl *ms\mingw32* (Paket von Absatz 4 muss installiert sein):
C:\OpenSSL>ms\mingw32
...........................................
gcc -o tmp\prime.o -DMONOLITH -Ioutinc -Itmp -DL_ENDIAN -DDSO_WIN32 -fomit-frame
-pointer -O3 -march=i486 -Wall -DBN_ASM -DMD5_ASM -DSHA1_ASM -DOPENSSL_BN_ASM_PA
RT_WORDS -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_M
DC2 -DOPENSSL_NO_CMS -DOPENSSL_NO_JPAKE -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_KRB5 -
DOPENSSL_NO_DYNAMIC_ENGINE -c .\apps\prime.c
gcc -o tmp\cms.o -DMONOLITH -Ioutinc -Itmp -DL_ENDIAN -DDSO_WIN32 -fomit-frame-p
ointer -O3 -march=i486 -Wall -DBN_ASM -DMD5_ASM -DSHA1_ASM -DOPENSSL_BN_ASM_PART
_WORDS -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC
2 -DOPENSSL_NO_CMS -DOPENSSL_NO_JPAKE -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_KRB5 -DO
PENSSL_NO_DYNAMIC_ENGINE -c .\apps\cms.c
gcc -o tmp\openssl.o -DMONOLITH -Ioutinc -Itmp -DL_ENDIAN -DDSO_WIN32 -fomit-fra
me-pointer -O3 -march=i486 -Wall -DBN_ASM -DMD5_ASM -DSHA1_ASM -DOPENSSL_BN_ASM_
PART_WORDS -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO
_MDC2 -DOPENSSL_NO_CMS -DOPENSSL_NO_JPAKE -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_KRB5
-DOPENSSL_NO_DYNAMIC_ENGINE -c .\apps\openssl.c
gcc -o out\openssl tmp\verify.o tmp\asn1pars.o tmp\req.o tmp\dgst.o tmp\dh.o tm
p\dhparam.o tmp\enc.o tmp\passwd.o tmp\gendh.o tmp\errstr.o tmp\ca.o tmp\pkcs7.o
tmp\crl2p7.o tmp\crl.o tmp\rsa.o tmp\rsautl.o tmp\dsa.o tmp\dsaparam.o tmp\ec.o
tmp\ecparam.o tmp\x509.o tmp\genrsa.o tmp\gendsa.o tmp\s_server.o tmp\s_client.
o tmp\speed.o tmp\s_time.o tmp\apps.o tmp\s_cb.o tmp\s_socket.o tmp\app_rand.o t
mp\version.o tmp\sess_id.o tmp\ciphers.o tmp\nseq.o tmp\pkcs12.o tmp\pkcs8.o tmp
\spkac.o tmp\smime.o tmp\rand.o tmp\engine.o tmp\ocsp.o tmp\prime.o tmp\cms.o tm
p\openssl.o out\libssl.a out\libcrypto.a -lwsock32 -lgdi32
Generating the DLLs and input libraries
Done compiling OpenSSL
* Benennen Sie die Datei wieder ab *C:\Program Files\Git\bin\sh.ex`_`* bis *C:\Program Files\Git\bin\sh.exe*
Das Ergebnis des Builds finden Sie im Ordner gefunden werden *C:\OpenSSL*. Es gibt Bibliotheken kompiliert *libeay32.dll*, *libssl32.dll* und andere binäre Dateien im Ordner *C:\OpenSSL\out*.
* Kopieren Sie die Bibliothek *libeay32.dll*, *libssl32.dll* und die Inhalte der Ordner *C:\OpenSSL\out* auf den neu erstellten Ordner *C:\OpenSSL\bin*
* Kopieren Sie aus dem Ordner *C:\OpenSSL\out* *libcrypto.a*, *libeay32.a*, *libssl32.a* und *libssl.a* auf den neu erstellten Ordner *C:\OpenSSL\lib\MinGW*
Die OpenSSL ist jetzt für die Verknüpfung mit dem Psi + ready.
===== Psi+ im automatischen Modus bauen (empfohlen) =====
* Laden Sie das Skript [[http://psi-dev.googlecode.com/svn/trunk/scripts/win32/make-psiplus.cmd|make-psiplus.cmd]] in ein neues Verzeichnis (z.B. C:\psi-plus\build) herunter
* Starten Sie das Skript *make-psiplus.cmd* aus dem Verzeichnis *C:\psi-plus\build* und warten Sie auf das Ende seiner Ausführung
Wenn das Skript fehlerfrei ab lief, erscheint in **C:\psi-plus\build** das kompilierte und einsatzbereite Programm **psi-plus.exe**
===== Psi+ im manuellen Modus bauen (NICHT empfohlen) ======
==== Psi Quellcode besorgen ====
* Laden Sie den Psi Quellcode von dem offiziellen Psi git Repository herunter. Dazu starten Sie *cmd.exe* aus dem Verzeichnis *psi-git* und führen Sie die folgenden Kommandos in der angegebenen Reihenfolge aus:
git clone git://git.psi-im.org/psi.git
cd psi
git submodule init
git submodule update
==== Vorbereitung des Psi Quellcodes zum Bauen ====
* Entfernen sie das Kommentarzeichen in der 3ten Zeile der Datei *psi-git/conf_windows.pri*:
Diese lautete
#CONFIG += qca-static
und wird zu
CONFIG += qca-static
* Ebenso die 26te Zeile :
Diese lautete
#DEFINES += HAVE_ASPELL
und wird zu
DEFINES += HAVE_ASPELL
* In der Datei *psi-git/third-party/qca/qca-ossl.pri* benennen Sie den Schlüssel *-llibeay32* um in *-leay32*
* Um Plugins einzuschalten, entfernen Sie das Kommentarzeichen vor der angegebenen Zeile in der Datei *psi-git/src/src.pro*:
Diese lautete
#CONFIG += psi_plugins
und wird zu
CONFIG += psi_plugins
* Optional: Um von der Release zur Debug Konfiguration umzuschalten, ändern Sie die 2te Zeile in der Datei *psi-git/conf_windows.pri* von
CONFIG += release
nach
CONFIG += debug
* Optional: Um automatisch eine Debug_Konsole mit Psi+ zu starten, fügen Sie die folgende Zeile in die Datei *psi-git/src/src.pro* ein:
CONFIG += console
* Optional: Um WebKit Unterstützung in Psi+ einzuschalten, fügen Sie die folgende Zeile in die Datei *psi-git/conf_windows.pri*ein:
CONFIG += webkit
==== Anbringen von Patches an den Psi Quellcode ====
Bevor Sie GNU/Patch für Windows benutzen, beachten Sie bitte folgendes:
Unter MS-Windows muss die Patchdatei eine Textdatei sein, d.h. das Zeilenende-Zeichen muss CR-LF sein.
Eine Datei mit LF führt zu der Fehlermeldung: “Assertion failed, hunk, file patch.c, line 343,” unless the option ‘–binary’ is given.
* Starten Sie *cmd.exe* in dem Verzeichnis *psi-git* und führen Sie die folgenden Kommandos in der angegebenen Reihenfolge aus:
patch -p1 < 0000-psiplus-aboutdlg.diff
patch -p1 < 0010-less-includes.diff
patch -p1 < 0020-psi-iconsets.diff
patch -p1 < 0030-psi-webkit.diff
patch -p1 < 0040-psi-muc-topic.diff
patch -p1 < 0050-psi-receipts.diff
patch -p1 < 0060-psi-popup-avatar.diff
patch -p1 < 0070-psi-entity-time.diff
patch -p1 < 0080-psi-mood-icons.diff
patch -p1 < 0090-psi-muc-change-affiliation.diff
.....................
**__Anmerkung:__** Bevor Sie Patches herunterladen und anbringen, überprüfen Sie unbedingt den Dateinamen anhand der aktuellen [[http://psi-dev.googlecode.com/svn/trunk/patches/|Liste]].
==== Psi+ Bauprozess ====
* Öffnen Sie das Verzeichnis *psi-git* mit den heruntergeladenen Psi+ Quellcode Dateien
* In diesem Verzeichnis führen Sie die Kommandos **qmake psi.pro** und **mingw32-make** (oder **make clean** und **make**) aus
Nach einiger Zeit (10 - 40 Minuten) suchen Sie nach dem Ergebnis der Kompilation **psi.exe** im Verzeichnis **psi-git/src/release**.
**__Anmerkung:__** Die Dateigröße von **psi.exe** kann unterschiedlich sein (Hängt von der debug/release Konfiguration ab):
* Für die release Konfiguration liegt die Dateigröße zwischen 5 MB und 12 MB
* Für die debug Konfiguration liegt die Dateigröße zwischen 30 MB und 60 MB
===== Kompilieren der Plugins =====
Als Beispiel betrachten wir die Kompilation des folgenden Plugins.
__**Anmerkung**__: Für korrektes Kompilieren der Plugins müssen Sie zunächst den Psi Quellcode herunterladen und die Patches anbringen.
==== Conference Logger Plugin ====
* Laden Sie den Quellcode des Plugins von [[http://psi-dev.googlecode.com/svn/trunk/plugins/generic/conferenceloggerplugin|hier]] herunter
* Kopieren Sie die Quellcode Dateien in das Verzeichnis **psi-git/src/plugins/generic/conferenceloggerplugin**
* Führen Sie das Kommando **qmake conferenceloggerplugin.pro** aus
* Führen Sie das Kommando **mingw32-make -f makefile.release** aus
C:\psi-plus\build\psi\src\plugins\generic\conferenceloggerplugin>qmake conferenceloggerplugin.pro
C:\psi-plus\build\psi\src\plugins\generic\conferenceloggerplugin>mingw32-make -f makefile.release
...................
C:/Qt/2010.02/qt/bin/moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_D
EBUG -DQT_PLUGIN -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I'
c:/Qt/2010.02/qt/include/QtCore' -I'c:/Qt/2010.02/qt/include/QtGui' -I'c:/Qt/201
0.02/qt/include/QtXml' -I'c:/Qt/2010.02/qt/include' -I'../../include' -I'c:/Qt/2
010.02/qt/include/ActiveQt' -I'release' -I'c:/Qt/2010.02/qt/mkspecs/win32-g++' -
D__GNUC__ -DWIN32 typeaheadfind.h -o release/moc_typeaheadfind.cpp
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT
-DQT_DLL -DQT_NO_DEBUG -DQT_PLUGIN -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_
THREAD_SUPPORT -I'c:/Qt/2010.02/qt/include/QtCore' -I'c:/Qt/2010.02/qt/include/Q
tGui' -I'c:/Qt/2010.02/qt/include/QtXml' -I'c:/Qt/2010.02/qt/include' -I'../../i
nclude' -I'c:/Qt/2010.02/qt/include/ActiveQt' -I'release' -I'c:/Qt/2010.02/qt/mk
specs/win32-g++' -o release/moc_typeaheadfind.o release/moc_typeaheadfind.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
oc -Wl,-s -mthreads -Wl -shared -Wl,--out-implib,release/libconferenceloggerplug
in.a -o release/conferenceloggerplugin.dll release/conferenceloggerplugin.o rele
ase/typeaheadfind.o release/moc_typeaheadfind.o -L'c:/Qt/2010.02/qt/lib' -lQtXm
l4 -lQtGui4 -lQtCore4
Creating library file: release/libconferenceloggerplugin.a
* Das kompilierte Plugin **conferenceloggerplugin.dll** befindet sich in dem Verzeichnis **psi-git/src/plugins/generic/conferenceloggerplugin/release**
===== Links =====
* http://psi-im.org/
* http://qt.nokia.com/
* [[http://technet.microsoft.com/ru-ru/sysinternals/bb896647%28en-us%29.aspx|DebugView for Windows]]
* [[http://www.dependencywalker.com/|Dependency Walker for Windows]]