Pidgin Forum

Normale Version: Pidgin / Pidgin-Plugins unter Windows kompilieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo!
Ich wollte das Pidgin-OTR-Plugin ändern und neu kompilieren, aber ich komme einfach nicht mit der Kompilierung von Pidgin klar. Sad Sicher ist das etwas schwieriger, weil man das eigentlich für/unter Linux baut, aber es soll ja auch unter Windows möglich sein.
Zuerst hab ich MinGW installiert mit allem Pipapo und zusätzlich auch MSYS (wer es nicht kennt: das ist eine Shell, womit man auch unter Windows Configure-Skripte ausführen kann). Normalerweise funktioniert das so prächtig. Damit hab ich z.B. mplayer kompiliert und auch andere Sachen.
Für das Pidgin-OTR-Plugin läuft es auch gut an, ich hab einige Dev-Pakete für Windows von gtk.org geladen und bei MinGW eingebaut - alles erfolgreich erkennt. Aber dann verlangt er die Purple- und Pidgin-Libs/Header. Also versuche ich, das komplette Pidgin damit zu kompilieren. Ich hab die ganzen notwendigen Abhängigkeiten entpackt gemäß der Anleitung - allerdings stand nicht da, ob die Dependencies in ihren eigenen Unterverzeichnissen drin sein müssen oder direkt unter "$PIDGIN_DEV_ROOT/win32-dev". Naja, ich hab dann einfach beides getestet... Wenn ich dann alles da habe und "make -f Makefile.mingw" ausführe, kriege ich nur tausende von Fehlermeldungen, und es läuft nicht.

Gut, also nach Anleitung. Ich habe Cygwin installiert, auch die zusätzlichen Entwicklungstools (vor allem cygwins make) und dann die Bash gestartet. Pfade angepasst, so dass Mingw im Pfad drin ist und "make -f Makefile.mingw" ausgeführt. Ergebnis: dieselben Fehlermeldungen.

Ich bin mit meinem Latein am Ende. Eigentlich will ich auch gar nicht Pidgin bauen, sondern nur die Libs/Header haben, aber eben für Windows. Hat die vielleicht jemand? Oder weiß jemand, wie ich das nun endlich zum Kompilieren bringe? Ich würde so gerne was mit Plugins machen... Aber dazu brauche ich nunmal die Header, und die sind ja leider nicht zum Download erhältlich (bei gtk.org geht's doch auch?!). Sad
Hier mein win32-dev-Verzeichnis.

So sollte die Verzeichnissstruktur aussehen:
...
|
\---pidgin-2.5.4
|
\---win32-dev

Zusätzlich musst du noch eine local.mak in /pidgin-2.5.4 erstellen, die einige Pfade enthält und bei mir (unter Linux) so aussieht:
Zitat:CC := /usr/bin/i586-mingw32msvc-cc
GMSGFMT := msgfmt
MAKENSIS := /usr/bin/makensis
PERL := /usr/bin/perl
EXTUTILS := /usr/share/perl/5.8/ExtUtils
WINDRES := /usr/bin/i586-mingw32msvc-windres
STRIP := /usr/bin/i586-mingw32msvc-strip

INCLUDE_PATHS := -I$(PIDGIN_TREE_TOP)/../win32-dev/w32api/include
LIB_PATHS := -L$(PIDGIN_TREE_TOP)/../win32-dev/w32api/lib

Ich hoffe das hilft dir ein Bisschen - ich habs damals unter Windows nicht hinbekommen....viel Erfolg! Wink
Vielen Dank, ich bin schon deutlich weitergekommen. Kurz nachdem ich meinen Beitrag geschrieben habe, fiel mir auch auf, wo (ein) Fehler lag. Ich habe von GTK nicht alle Abhängigkeiten entpackt, was mir klar wurde, als ich mir mal die Fehlermeldungen und die Bauanleitung genauer durchgelesen habe. Zwar hatte ich diese Sachen bereits in /mingw entpackt, aber Pidgin will ja seinen eigenen Ordner ... also dort nochmal alles nach .../gtk_2_0 kopieren. Damit lief dann schonmal einiges.

Das mit der local.mak stand auch in der Anleitung. Ich hab bei mir erstmal die Pfade für Perl und Extutils eingefügt. Damit kompilierte er einige Zeit, aber jetzt habe ich folgende Fehlermeldung:
Code:
gcc.exe -shared Account.o AccountOpts.o BuddyIcon.o BuddyList.o Cipher.o Cmds.o Certificate.o Connection.o Conversation.o Core.o Debug.o FT.o Idle.o Purple.o ImgStore.o Log.o Network.o Notify.o Plugin.o PluginPref.o Pounce.o Prefs.o Privacy.o Proxy.o Prpl.o Request.o Roomlist.o SSLConn.o SavedStatuses.o Server.o Signal.o Smiley.o Sound.o Status.o Stringref.o Util.o Whiteboard.o XMLNode.o -L../../../../../win32-dev/perl-5.10.0 -L.. -L../../../../libpurple -L../../../../../win32-dev/gtk_2_0/lib -lperl510 -lperl -lpurple -lglib-2.0 -o Purple.dll
Purple.o: In function `boot_Purple':
D:/Sprachen/msys/1.0/home/Rainer/development/pidgin-2.5.4/libpurple/plugins/perl/common/Purple.xs:47: undefined reference to `boot_Purple__Account'
D:/Sprachen/msys/1.0/home/Rainer/development/pidgin-2.5.4/libpurple/plugins/perl/common/Purple.xs:48: undefined reference to `boot_Purple__Account__Option'
collect2: ld returned 1 exit status
make[4]: *** [Purple.dll] Error 1
Mal sehen, vielleicht komme ich noch drauf, was jetzt fehlen könnte...

Edit: Hm, das war ein seltsamer Kompilierfehler. Wenn man in pidgin-2.5.4/libpurple/plugins/perl/common einmal "make -f Makefile.mingw clean" aufruft, geht's wieder weiter.

... einige weitere fehlende Pakete später ...
Jetzt krieg ich richtige Kompilierfehler bei einigen GTK-relevanten Dingen. Hm.
Haha, es läuft! ;D Dein win32-dev-Paket hat da auch gut geholfen. Das fehlende Steinchen war das GTK-Dev-Paket, bei dem mir anscheinend noch irgendwas fehlt. Jedenfalls hat es mit den alten Libs geklappt, während die allerneuesten nicht wollten und Compilererrors geworfen haben. Vielleicht krieg ich das auch noch hin.

Erstmal allerdings kann ich mein Plugin rekompilieren und hinterher vielleicht auch anpassen.
Wie neu sind die allerneusten?
Nach ganz viel Rumgefrickel nun die Erkenntnis, dass eigentlich alle Dev-Pakete für Windows funktionieren, die man auf gtk.org bekommt. Bloß gtk+-dev_2.14.7-1_win32.zip geht nicht. Ist auch verständlich, da Pidgin 2.5.4 auf 2.14.6 basiert. Leider weiß ich nicht, wie man die Dev-Pakete erstellt, ohne gleich den ganzen GTK+-Kram zu kompilieren. Daher bleibt gtk+ da erstmal auf 2.6.10 stehen. Neuere Pidgin-Dev-Pakete werden nämlich auch seit drei Jahren nicht mehr erstellt.

Aaaaaaber: jetzt hab ich es zwar geschafft, Pidgin für Windows unter Windows (bzw. msys) zu kompilieren. Doch das nützt mir einen Dreck, scheint es. Will ich nun pidgin-otr konfigurieren, erhalte ich diese Meldung.
Code:
checking for EXTRA... configure: error: Package requirements (glib-2.0 >= 2.6 gtk+-2.0 >= 2.6 pidgin >= 2.0 purple >= 2.0) were not met:

No package 'pidgin' found
No package 'purple' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Ich weiß leider nicht, was ich nun mit den Erzeugnissen machen soll. Da gibt's nun zwar ein paar schöne DLLs und .dll.a-Dateien, aber selbst wenn ich die ins Lib-Verzeichnis schiebe, interessiert sich das configure-Skript nicht dafür. Sad Da muss es doch eine Möglichkeit geben?

Oder hab ich Tomaten auf den Augen? Eigentlich will ich ja "nur" ein kleines Dev-Paket von Pidgin und Purple haben, damit ich die Plugins bauen kann. Freakazoid, hast Du nicht sowas irgendwo rumliegen, einmal den ganzen bin/lib/include-Ordner von Pidgin/Purple packen und hochladen? Vielleicht klappt das ja. *g*
Das ist aber auch komisch. Wenn man Pidgin für Windows baut, bekommt man mit dem .mingw-Skript keine solche Ordnerstruktur geliefert. Die wäre aber nötig. Ich hab andersherum versucht, Pidgin ganz normal unter MSYS mit ./configure zu bauen, aber da fehlen mir gerade tausende Pakete und Perl-Pakete ... das ist irgendwie zu stressig. Ach Mensch, warum haben die das nur so kompiliziert gemacht?
Na schau doch mal in das Makefile.mingw von OTR rein:
Zitat:# Replace this with the path to the pidgin and purple headers
PIDGIN_HEADERS ?= /usr/i586-mingw32msvc/include/pidgin
PURPLE_HEADERS ?= /usr/i586-mingw32msvc/include/libpurple

Das ?= bedeutet, dass die Variable nur gesetzt wird, wenn sie noch nicht gesetzt wurde. Mit anderen Worten: man kann das dem make sicher direkt irgendwie mitgeben. Aber ich weiß nicht wie...die Datei editieren ist der kürzere Weg. Wink
Scheiß die Wand an... da war doch tatsächlich ein Makefile.mingw in dem Verzeichnis! Das hatte ich komplett übersehen. Damit ging's dann relativ leicht. Ich hab überall i586-mingw... durch mingw ersetzt, die Pidgin/Purple-Header nach /mingw/include sowie die kompilierten dll/dll.a nach /mingw/lib kopiert. Noch drei Zeilen ausmarkiert in einer Header-Datei (irgendwas war doppelt definiert) und zusätzliche (neu erstellte?) Headerfiles aus .../win32 rüberkopiert. Dann lief es fast. Er wollte noch ein paar Binarys haben, die es zum Glück im gtk-dev-Paket von Pidgin gab. Genauer: msgfmt und drei gettext-DLLs.

Und tatsächlich, es kompiliert. Smile Genial! Das hat mich jetzt also nur ca. 7 Stunden gekostet...  :Smile Du hast mir dabei sehr geholfen, ich danke dir vielmals. Jetzt geh ich erstmal pennen. Morgen sehen wir weiter, vielleicht gehen ja nun auch in .net kompilierte Plugins? Wahrscheinlich laufen die auch so, ohne komische Header. Aber es ging mir ja erstmal ums OTR-Plugin.
(24.02.2009, 03:31)RCf schrieb:Morgen sehen wir weiter, vielleicht gehen ja nun auch in .net kompilierte Plugins? Wahrscheinlich laufen die auch so, ohne komische Header.

Das denke ich nicht. Aber falls du es hinbekommst kannst du ja ne kurze Anleitung schreiben...vielleicht intressiert ja doch jemanden. ^^
Wie läuft das denn in Perl? Dafür ist doch auch ein komischer Wrapper erhältlich... müsste mit .NET dasselbe sein. Zu dumm, dass die Doku etwas mikrig daherkommt. Aber wenn ich es hinbekomme, mach ich natürlich ein neues Fass äh Thema auf.
Immerhin hat sich der Aufwand gelohnt. Ich konnte den zweizeiligen Patch für das Plugin anwenden, und nun ist die OTR-Kommunikation zu Nicht-Purple-Clients endlich wieder vernünftig. ;D

Noch eine Frage: ich hab jetzt pidgin-otr.dll neu kompiliert. Das Ergebnis ist allerdings 2557KB groß statt 413KB wie das Original. Kann man da was machen? Wie kommt der Unterschied zustande?

Edit: Ich seh gerade, wenn man sie packt, wird sie 412KB klein. Die Original-DLL ist auch intern gepackt. Wie kann ich das einstellen, dass der Compiler das auch tut?
Seiten: 1 2 3