Notatka służbowa
Jak zainstalowac ekg na starym Red Hacie, oraz zrobić 2 dirty-hacki do ekg.
Notatka powstała jako zapis całej rozrywki związanej z ulepszeniem ekg. Mi głównie
jest potrzeby patch, napisy o instalacji (make && make install) są
ogólnoedukacyjne dla innych. ;-)
Co do patcha... Podobno taki bajer jest w ekg2, ale ono
jest "fuj", jest zbyt trudne (jak dla mnie) i
oczywiście szczerze wątpie, żeby się na takim starym linuxie zainstalowało.
(Rzecz jasna, na starym Solarisie 9 się instaluje, tylko linuxowe patafiany
mają takie problemy jak Zbyt-Stara-Biblioteka(TM), której się nie da upgrade'ować,
bo "dependecy-hell". Giń Torvaldsie!)
Założenia:
1. Instalacja libgadu
Nie ma lekko, ktoś wydzielił libgadu z ekg, więc
trzeba 'cd libgadu'. :(((
1.1. Żeby się libgadu kompilowało
Ze względu na pewne błędy w ld 2.11.90.0.8 (prawdopodobnie),
libgadu myśli, że pthread nie może. A ono może, tylko trzeba
je ręcznie zmusić do linkowania ekg z pthread.
[kotek@paf73 libgadu]$ diff -u configure.orig configure
--- configure.orig Sat Jan 12 22:56:17 2008
+++ configure Sat Jan 12 22:56:40 2008
@@ -20616,7 +20616,7 @@
# FIXME: -fPIC is required for -shared on many architectures,
# so we specify it here, but the right way would probably be to
# properly detect whether it is actually required.
- CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS"
+ CFLAGS="-shared -fPIC $CFLAGS $PTHREAD_CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
CC="$PTHREAD_CC"
1.2. Powiększenie opisu z 70 do 75 znaków.
[kotek@paf73 libgadu]$ diff -u include/libgadu.h.in include/libgadu.h.in.orig
--- include/libgadu.h.in.orig Sat Jan 12 22:54:04 2008
+++ include/libgadu.h.in Sat Jan 12 22:54:13 2008
@@ -1429,7 +1429,7 @@
*
* Maksymalna długośc opisu.
*/
-#define GG_STATUS_DESCR_MAXSIZE 70
+#define GG_STATUS_DESCR_MAXSIZE 75
/* GG_S_F() tryb tylko dla znajomych */
#define GG_S_F(x) (((x) & GG_STATUS_FRIENDS_MASK) != 0)
1.3. Odpalamy instalkę
Tu nie ma nic mądrego, no może poza opcjami do configure. ;)
[kotek@paf73 libgadu]$ ./configure --enable-libgadu-openssl --with-pthread
...
checking whether to check for GCC pthread/shared inconsistencies... yes
checking whether -pthread is sufficient with -shared... yes
...
checking for ssl.h... /usr/include/openssl/ssl.h
checking for RSA_new in -lssl... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating include/Makefile
config.status: creating pkgconfig/Makefile
config.status: creating pkgconfig/libgadu.pc
config.status: creating config.h
config.status: creating include/libgadu.h
config.status: executing depfiles commands
[kotek@paf73 libgadu]$
Narzeka wprawdzie na brak OpenSSL'a z pkgconfig, ale jak da -lssl (samo
z siebie działa).
[kotek@paf73 libgadu]$ make
...
[kotek@paf73 libgadu]$ su
Password:
[root@paf73 liggadu]# make install
...
[root@paf73 liggadu]# ^D
Tak tak, pamiętaj, nigdy nie działaj na roocie dłużej niż musisz. ;)
2. Hackowanie ekg
Ekg też wymaga pewnych zabiegów, pthread'owych, żeby działać...
2.1. Nowe kolory act
Tu jest cała mądrość. Kolorowe "act", czyli numery aktywnych okien.
Defaultowy szary zostaje dla zmian statusów itp, a wiadomości
dostają brand new "silnie biały". Prawie jak irssi. ;-)
--- src/ui-ncurses.c.orig 2008-01-12 20:09:52.000000000 +0100
+++ src/ui-ncurses.c 2008-01-12 20:58:05.000000000 +0100
@@ -1392,6 +1392,15 @@
w->act = 1;
w->first_act_time = w->last_act_time;
}
+ // MiKylie hack
+ if (w->act != 2){
+ if(w->id >= 2){
+ if((*(line+7) != ':') && (*(line+15) != ':')){
+ // message from user, win importance ++
+ w->act++;
+ }
+ }
+ }
if (!command_processing)
update_statusbar(0);
}
@@ -1897,15 +1906,32 @@
iso_to_ascii((unsigned char*) text);
}
- for (j = 0; text && j < strlen(text); j++) {
- if (text[j] != 10) {
- waddch(w, (unsigned char) text[j]);
- continue;
+ // MiKylie really dirty hack
+ if (strcmp(data[i].name, "activity") == 0){//act
+ for (j = 0; text && j < strlen(text); j++) {
+ if (text[j] != 10) {
+ if(text[j] == '-'){
+ x--;
+ wattrset(w, color_pair(COLOR_WHITE, 1, bgcolor));
+ }else if(text[j] == ','){
+ wattrset(w, color_pair(fgcolor, bold, bgcolor));
+ waddch(w, (unsigned char) text[j]);
+ }else{
+ waddch(w, (unsigned char) text[j]);
+ }
+ }
}
+ }else{
+ for (j = 0; text && j < strlen(text); j++) {
+ if (text[j] != 10) {
+ waddch(w, (unsigned char) text[j]);
+ continue;
+ }
- wattrset(w, color_pair(COLOR_BLACK, 1, bgcolor));
- waddch(w, '|');
- wattrset(w, color_pair(fgcolor, bold, bgcolor));
+ wattrset(w, color_pair(COLOR_BLACK, 1, bgcolor));
+ waddch(w, '|');
+ wattrset(w, color_pair(fgcolor, bold, bgcolor));
+ }
}
p += len;
@@ -2231,7 +2257,11 @@
if (!first)
string_append_c(s, ',');
- string_append(s, itoa(w->id));
+ // MiKylie hack
+ if(w->act == 2)
+ string_append(s, itoa(- w->id));
+ else
+ string_append(s, itoa(w->id));
first = 0;
act = 1;
}
Pozostaje zpatche'ować... A więc, nie wiem jak to można inaczej zrobić niż
[kotek@paf73 ekg-20080112]$ patch src/ui-ncurses.c < ~/ekg-color-act.patch
patching file src/ui-ncurses.c
[kotek@paf73 ekg-20080112]$
2.2. Kompilacja
Jeśli przy configure nam wypluje (a wypluje, bo stary system):
checking for gg_login in -lgadu... no
configure: error: You have to install libgadu. Please see docs/libgadu.txt
To jest kiszka. Jak grzecznie zrobiliśmy to co wyżej było (i mamy fajny ldconfig)
to trzeba będzie gwałcić ekg... Problem tkwi w pthread, które niby są w libgadu,
ale linker mówi, że ich nie ma. (Bo faktycznie ich tam nie ma.) Trzeba jawnie
ekg (tj. linkerowi na etapie ekg) powiedzieć, żeby jednak linkował do pthread'ów.
No to "jazda, w górę w górę, DJ MATUSH!".
[kotek@paf73 ekg-20080112]$ setenv LIBS -pthread
[kotek@paf73 ekg-20080112]$ ./configure --enable-openssl
...
configure: creating ./config.status
config.status: creating src/Makefile
config.status: creating Makefile
config.status: creating examples/Makefile
config.status: creating config.h
configured options:
- openssl: enabled
- ioctld: disabled
- python: disabled
- zlib: enabled
- pthread: disabled
- libungif: enabled
- libjpeg: enabled
- ui-readline: disabled
- ui-ncurses: enabled (default)
- ui-gtk: disabled
- aspell: disabled
Przeszło. ;-)
Teraz pora na ostatniego make'a i fingers crossed.
[kotek@paf73 ekg-20080112]$ make
...
gcc -I.. -g -O2 -Wall -DDATADIR=\"/usr/local/share/ekg\" -DSYSCONFDIR=\"/usr/local/etc\" -o ekg stuff.o commands.o events.o themes.o vars.o dynstuff.o userlist.o ekg.o xmalloc.o mail.o msgqueue.o emoticons.o configfile.o simlite.o ../compat/strlcat.o ../compat/strlcpy.o ui-ncurses.o voice.o ui-batch.o ui-none.o log.o comptime.o -lz -ljpeg -lungif -lgsm -lssl -lcrypto -lncurses -pthread -lgadu
gmake[1]: Opuszczam katalog `/tmp/ekg-20080112/src'
[kotek@paf73 ekg-20080112]$
Super. Mamy skompilowane ekg. Zobaczmy co ono ma:
[kotek@paf73 ~]$ ldd /tmp/ekg-20080112/src/ekg
libz.so.1 => /usr/lib/libz.so.1 (0x40033000)
libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40041000)
libungif.so.4 => /usr/lib/libungif.so.4 (0x40060000)
libssl.so.2 => /lib/libssl.so.2 (0x40068000)
libcrypto.so.2 => /lib/libcrypto.so.2 (0x40095000)
libncurses.so.5 => /lib/libncurses.so.5 (0x40159000)
libgadu.so.3 => /usr/local/lib/libgadu.so.3 (0x40175000)
libpthread.so.0 => /lib/i686/libpthread.so.0 (0x4018e000)
libc.so.6 => /lib/i686/libc.so.6 (0x401a3000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0x402df000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40308000)
libdl.so.2 => /lib/libdl.so.2 (0x403fe000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Istotnie, linkowane do libgadu i libpthread.
A czemu taki cyrk z pthread? Ano podobno wywędrował do libgadu.
Dla porównania na FC7.92 (oczywiście bez żadnych zmian w configure itp...)
mamy:
[kotek@kylie src]$ ldd ./ekg|grep pthread
[kotek@kylie src]$ ldd ./ekg|wc -l
51
[kotek@kylie src]$
Co świadczy o tym, że ld linkuje pthread do libgadu, i ekg
nie musi go widzieć. No i że nowszy linux linkuje
ogromną masę śmiecia gratis. ;-)
Ale coż, ważne, że dało się to obejść.
Pozostaje
[kotek@paf73 ~]$ make install
3. Podsumowanie
I można cieszyć się nowym ekg-20080112 z moim dirty hackiem. :-)
Greetz & respect dla firmy Sun Microsystems,
twórców i koderów ekg i
irssi oraz producenta
fletów poprzecznych Yamaha. ;-)
Sux dla Linusa T. oraz
pomysłu i realizacji ekg2.
ver. 0.947 / 12Feb08
--MiKylie - GG 292433