Portál AbcLinuxu, 30. dubna 2025 15:27
Jako IRC klienta používám výborný program xchat. Rád bych tento program občas používal i pod Windows. Bohužel ačkoliv je software GPL, windozí binárka je třicetidenní shareware. Jelikož jsem nedávno po windows zkoušel překládat jednoduchou GTK aplikaci pomocí mingw, řekl jsem si, že bych si mohl vyrobit vlastní freewarovou binárku. Jak u mě bývá ve windows v poslední době zvykem, zvrhlo se do v drsné hackování
Autoři xchatu používají ke kompilaci MS Visual Studio, ale v dokumentaci píšou, že by to mělo jít i s mingw. Asi by to šlo přeložit i pod cygwinem, jenže mingw port gcc dělá krásnou čistou binárku závislou jen na msvcrt.dll
a bez potřeby nějakého X-serveru.
Všechny potřebné knihovny (gtk, gdk, pango, intl, png, iconv, atk, zlib) už jsem měl na disku, tak jsem začal uvažovat nad vlastní kompilací. Potřeboval jsem stvořit nějaký ten Makefile. Ten za normálních okolností vznikne po běhu ./configure
. To jsem sice v cygwine pustit mohl, ale bylo mi to dobré tak pro získání nápovědy, v cygwinu jsem to kompilovat nechtěl a neměl jsem tam ani potřebné knihovny. Vrhl jsem se na drsný trik, xchat jsem skompiloval normálně v Linuxu a potom jsem přes find -name "*.o"
získal seznam *.c
souborů, které je třeba kompilovat. Místo Makefile jsem vytvořil následující elegantní baťák o jednom megapříkazu.
c:\dev-cpp\bin\gcc -o ./xch.exe ./src/common/proto-irc.c ./src/common/outbound.c ./src/common/notify.c ./src/common/dcc.c ./src/common/cfgfiles.c ./src/common/url.c ./src/common/history.c ./src/common/inbound.c ./src/common/ctcp.c ./src/common/modes.c ./src/common/network.c ./src/common/plugin-timer.c ./src/common/servlist.c ./src/common/text.c ./src/common/tree.c ./src/common/util.c ./src/common/server.c ./src/common/userlist.c ./src/common/ignore.c ./src/common/xchat.c ./src/common/plugin.c ./src/fe-gtk/chanview.c ./src/fe-gtk/palette.c ./src/fe-gtk/plugingui.c ./src/fe-gtk/xtext.c ./src/fe-gtk/urlgrab.c ./src/fe-gtk/dccgui.c ./src/fe-gtk/setup.c ./src/fe-gtk/gtkutil.c ./src/fe-gtk/banlist.c ./src/fe-gtk/fkeys.c ./src/fe-gtk/search.c ./src/fe-gtk/menu.c ./src/fe-gtk/about.c ./src/fe-gtk/rawlog.c ./src/fe-gtk/textgui.c ./src/fe-gtk/pixmaps.c ./src/fe-gtk/servlistgui.c ./src/fe-gtk/ignoregui.c ./src/fe-gtk/editlist.c ./src/fe-gtk/ascii.c ./src/fe-gtk/userlistgui.c ./src/fe-gtk/notifygui.c ./src/fe-gtk/chanlist.c ./src/fe-gtk/maingui.c ./src/fe-gtk/fe-gtk.c -Ic:/dev-cpp/gtk/include -Ic:/dev-cpp/gtk/include/gtk-2.0 -Ic:/dev-cpp/gtk/lib/gtk-2.0/include -Ic:/dev-cpp/gtk/include/atk-1.0 -Ic:/dev-cpp/gtk/include/pango-1.0 -Ic:/dev-cpp/gtk/include/glib-2.0 -Ic:/dev-cpp/gtk/lib/glib-2.0/include -Lc:/dev-cpp/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -liconv -mms-bitfields -mwindows -lintl -lwsock32 -lwinmm
Krása, ne? Jo, ještě bylo potřeba pepsat na bat jeden Makefile
v adresáři s bitmapama, aby z toho vypadl jeden hlavičkový soubor.
..\..\..\..\gtk\bin\gdk-pixbuf-csource.exe --build-list bookpng book.png hoppng hop.png oppng op.png purplepng purple.png redpng red.png voicepng voice.png xchatpng ..\..\xchat.png > inline_pngs.h
No, bohužel to nešlo slinkovat, nějaké reference šly naprázdno. Nakonec jsem musel napsat patch na soubor fe-gtk.c
.
42a43,44 > /* paskma hack */ > #include "../common/server.h" 60a63,64 > /* also paskma hack */ > #include <gdk/gdkwin32.h>
A povedlo se, vyblilo to binárku. Bohužel nefunguje . Normálně se to spustí, nastavím server ale skončí při "Looking up irc.bk.zcu.cz...". Jinak GUI pořád reaguje, možná jsem zapomněl nějakou podporu pro DNS
Tiskni
Sdílej:
V Linuxu to používám každý den, ve Woknech jednou za měsíc, tak za to přece nebudu platit?To je zajímavá logika
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.