Letr[1]: Pewne zalecenie i jego przypomnienie

Tomasz Kłoczko kloczek w rudy.mif.pg.gda.pl
Śro, 17 Lut 1999, 01:24:41 CET


Jakiczas pisałem o tym żeby odejść od termcapa ale jakoś widać
Wojtek musia o tym zapomnieć bo full pakietów jest polinkowanych z
libtermcap albo podwujnie z libslang i libncurses.

SYNOPSIS albo jak kto woli "ab ovo"[2]:

Przypomnę o co chodzi, a chodzi o to żeby wyciepać dualizm baz terminali
(po co nam dwie ?). W zwiazku z tym, że terminfo jest lepsza bazą (lepiej
dopracowana) to zalecenie było żeby właśnie na to przejść.

Co trzeba robić aby dosatosować stuff do wyłącznie terminfo ?

Pierwszy krok polega na wycięciu pakietu libtermcap-devel (to na początek,
żeby żaden autoconf nie mógł stwierdzić, że może próbować kombinować z
libtermcap). Kolejne kroki będą polegać na przekompilowaniu wszystkiego
tak żeby nie używało libtermcap. Zazwyczaj w przypadku aplikacji wystarczy
tylko zapuścić odpowiednio autoconfa. Kłopoty mogą z pakietami
biblitecznymi jak readline, slang, ncureses, gpm. Owe kłopoty w zasadzie
mogą być ale u tych osób, które nie mają tego co jest w stable jakie
jeszcze leży na cenzorze ;>, bo tu nie ma ani jenego pakietu
korzystającego z libtermcap (już) i wszystkie kłopoty zwiazane z takim
przestawieniem zostały już załatwione.

W zasadzie dobrze by było używać tylko dwuch term bibliotek czyli slang i
ncurses. Obie same przestawiaja się na użycie teminfo baj def (przy
autoconf). Jedyne newralgiczne miejsce jest w pozostałych czyli gpm i
libreadline. Przeanalizowałem wszystkie jakie znalazłem możliwe użycia
obydwu i stwierdziłem, że najlepiej będzie jak libreadline będzie
korzystać z libncurses (--with-cucrses), a gpm z slang (patch na autoconfa
i jeden .c). Powyższy układ gwarantuje, że każdy program będzie powiązany
tylko z jedną z term bibliotek i przypadki jakie mają miejsce często w RH,
że program jest linkowany z libtermcap i libslang czy jeszcze na trzeciego
libncurses daja się ładnie wyrugować.

Jakby ktos miał wątpliwości czy da sie przestawić na wyłącznie terminfo to
przypomnę jak nalezy robić to w każdym przypadku kiedy program potrzebuje
np. termcap.h. Otóż taki plik jest w /usr/include/ncurses. Samo ncurses co
do mięmordzia programowego jest kompatybilne z libtermcap i o ile przy
kompilacji wywala się z komunikatem o braku termcap.h to wystarczy dodać
do np. CFLAGS -I/usr/include/ncurses (wystarczy na poziomie speca) i
linkować z -lncurses .. i po krzyku.

Przestawienie było trenowane na stable od samego początku i nie ma tu
żadnych przeszkud. Sam pakiet libtermcap-devel powinien IMHO wypaść teraz
z dystrybucji (można go przenieść do supported), a o ile skończymy całe
przejście to także libtermcap i termcap też powinny wypaść z trzona
pakietów dystrybucyjnych), a w dok powinno być o tym dlaczego i po co to,
a także w komentarzu w specu do libtermcap powinna być odpowiednia
adnotacja z ostrzeżeniem.

W tej chwili u mnie z libtermcapa wykorzystują jeszcze:
# rpm -e libtermcap
removing these packages would break dependencies:
        libtermcap.so.2 is needed by cdecl-2.5-6
        libtermcap.so.2 is needed by postgresql-clients-6.3.2-4
        libtermcap.so.2 is needed by postgresql-devel-6.3.2-4
        libtermcap.so.2 is needed by vim-X11-5.1-5
        libtermcap.so.2 is needed by procinfo-13-1
        libtermcap.so.2 is needed by trn-3.6-12
        libtermcap.so.2 is needed by ircii-4.4-2
        libtermcap.so.2 is needed by elm-2.4.25-14
        libtermcap.so.2 is needed by pinfocom-3.0-7
        libtermcap.so.2 is needed by vim-5.1-5
        libtermcap.so.2 is needed by xterm-color-1.1-7
        libtermcap.so.2 is needed by zsh-3.0.5-3
        libtermcap.so.2 is needed by nmh-0.24-7
        libtermcap.so.2 is needed by ispell-3.1.20-9
        libtermcap.so.2 is needed by XFree86-3.3.2.3-18

(nie są to rzeczy może najnowsze ale jeszcze powyższych nie przejrzane pod
kontem teminfo).

W tej chwili w tym co zrobił Wojtek przez nie zwracanie na to uwagi kilka
pakietów jest polikowanych z dwoma term libami. Np. lftp z slang i ncurses
(dlatego, że redline było linkowane tak żeby korzystało z slang .. a
powinno z ncurses .. swoją rogą o wycofaniu powizania gpm ze slang
pisałem na liście).

Chciałem dzisiaj wygenerować nowego lftp i nie mogłem tego zrobić, bo
najpier trzeba jeszcze przekompilować readline (najlepiej wziąć jako bazę
z CVS i dodać kosmetykę) .. a ja już spadam bo jestem zmachany (po
basenie :)

Prosiłbym o zwracanie na powyższe uwagę wszystkich którzy gdzieś tam we
własnym zaciszu scyzorykiem cyzelują pakiety gdyż ostatecznie będę
generował je tak żeby wykorzystywały wyłącznie terminfo.

Pierwsza sprawa od razu związana z [x]termami, które zwykle korzystają z
term bibów. Xterm jest łatwy gdyż ma autoconf i jest przystosowany z palca
do korzystania z libncurses. Kolejne jak rxvt i pochodne zwykle korzystają
z slang lub też z ncurses albo dają się łatwo przekabacić żeby używały
tych term libów zamiast termcap.

W sumie niektóre programy będą może zajmować ciut wiecej oper pamięci
(libtermacap jest tu rekordzistą i jest najmniejszy) ale nastawienie się
wyłącznie na termifo poprzez slang/ncurses da też oszczędności z
wspóldzielenia libów między rózne programy. Tu prawie wsztstkie (znakomita
większość) będą używać ncurses co powinno częściowo się skompensować
dająć takie same lub niewiele większe obciazenie pamięci operacyjnej przy
mniejszej ilości pakietów. W sumie nawet bash przy założeniu, że mamy
innego jeszcze w systemie shella zlinkowanego statycznie (ash.static lub
esh.static .. apropo położenie static shelli w PLD też powinno być
elementem naszej dokumentacji) może być linkowany dynamicznie z readline
i ncurses po przeniesieniu tych libów do /lib (tak jak to jest w starym
stable).

Jeszcze co do vima bo jest ich kilka wersji. Z zdaje się dwuch powinien
zostać tylko jeden, a nie jak zdaje się jest obecnie że jest wersja slang
i nsurses. Swoją drogą vim-ncurses to kolejny który jest linkowany z dwoma
term libami (ncurses i slang) po mimo tego, że ejst w pakiecie vim-ncurses
:>

Ponieważ libgpm korzysta ze slang to raczej sam vim też powinien być
linkowany tylko ze slang z slang i tylko taka wersja poeinna zostać.

W specu w %install chyba na potzreby poprwnego linkowania trzeba by
dodawać fragmenty w %install sprawdające czy dane binarki są polinkowane z
zaplanowanym w PLD term libem (i tylko tym jednym).

W sumie jest jeszcze bardziej radykalne rozwiązanie polegające na zostaniu
wyłącznie przy libncurses ale nie wiem czy wszedzie da sie to zrobić i czy
np. mc nie kopie się jakoś z ncurses (tak jak to było jakiś czas temu co
było powodem dołożenia zredukowanej wersji libslang do źródeł mc). Może i
nawet to rozwiązanie byłoby nawet najlepsze ale na razie zalecałbym tylko
powstrzymać sie o używania libtermcap i minimalizować użycie slang.

W sumie IMHO idealne rozwiązanie byłoby takie gdyby wszystko dało się
oprzeć o libslang, bo ten po mimo że zawierta w sobie interpreter to jest
o jakieś 40% mniej pamięciożerny od ncurses (nie wiem dlaczego nie
podzielono tej bibloteki na włąściwą term i lib z "dodatkami") ale nie
wszędzie jak na razie daje sie go zastosować (joe linkowany z libslang na
konsoli widzi tylko 25 linii, a na vt220 klepie równo krzakami po
terminalu choć na xtermie pracuje poprawnie). Może za jakiś czas da się
zrealizować pomysł wyłącznie używania libslang ale na razie jest to ciężki
(ale nie niemożliwe).

W sumie jak Davis moze zrealizuje sugestię żeby libslang podzilic na term
liba i resztę z interpreterem to zapewne w przyszłości przestawienie się
wyłącznie na slang byłoby najodpowiedzniesze (pieśń przyszłości).

kloczek
[1] letr - list (franc.)
ale:
pół letra - to już byłby krótszy list ;)

[2] ab ovo - od jajka .. od początku (łąć). Rzymianie doszli do wniosku,
że najpierw było jajko, a potem dopiero Qrczak^Wkura ;)
-- 
-----------------------------------------------------------
*Ludzie nie mają problemów, tylko sobie sami je stwarzają*
-----------------------------------------------------------
Tomasz Kłoczko, sys adm @zie.pg.gda.pl|*e-mail: kloczek w rudy.mif.pg.gda.pl*



Więcej informacji o liście dyskusyjnej pld-devel-pl