bash-4.4 -- mi a fejlődés tárgya?

Rögtön kezdetnek itt van a lehetőség, hogy a readline-t is frissítsük 7.0-ra (ne felejtsük el a patch-eket.)

Aztán itt kiderül, hogy ez a verzió már pluginokat is tud, examples/loadables néven. A linkelésüket a következő nagyon tudományos módszerrel végezné:


ld -bdynamic -bnoentry -bexpall -maix64 -Wl,-brtl -Wl,-blibpath

Vagyis ügyes szervezéssel a gcc-nek szóló LDFLAGS-t is odacsapta a ld parancssora végére, hátha az AIX!ld tud gcc-ül is. De nem. Viszont a gcc sem tud AIX!ld nyelven, tehát símán lecserélni sem lehet. Köszönjük, Emese.

Szerk: viszont óriási megtakarítást értek el azzal, hogy a pluginok neve nem pl "basename.so" hanem csak simán "basename". Szinte hallom, ahogy fellélegeznek a diszkek. (Nem, ezek nem futnak önállóan, csak pluginok. Kieg: ide települnek: /usr/local/lib64/bash/ (vagy amit --libdir -nek megadtunk configure-kor, + /bash).

Kieg: a pluginok, szokásos módon, importálnak szimbólumokat a a főprogramból, pl.: 'builtin_usage', 'internal_getopt'. Vagyis a főprogramot '-export-dynamic' opcióval kell szerkeszteni. És még így sem jó! Ugyanis ezekből egy 'libbuiltins.a' nevű libet csinál, és azt adja oda a linkernek:


libtool --mode=link gcc -o bash -export-dynamic -L./builtins ... -lbuiltins ...

Természetesen ez egyáltalán nem jelenti azt, hogy a libbuiltins.a elemei bekerülnének az executable-ba... Oda az kerül, ami a felsorolt objekt modulokban benne van. És amit azok használnak a *.a libekből. Vagy valamilyen export-fájlban szerepelnek. Hát itt egyikről sincs szó. No majd gondolkozom a kérdésen. (Csak meg ne ártson.)

Szerk: illetve a 'bash'-ba belekerülnek, az exportfájlba nem kerülnek bele. Íme egy lehetőség: -Wl,-bexpall linkeléskor, azután így generálni exportfájlt:


(echo '#! .'
dump -Tv -X64 bash | awk '/ EXP / { print $8 }' | sort -u) >bash.exp

Edit: kb 80%-ban sikerült, de még maradtak unresolved szimbóleumok... szóval goto 10

Később: tehát a convenience library nevű mágiával próbálkozunk.


volt: ar cru libbuiltins.a b1.o b2.o ...
lesz: libtool --mode=link gcc -static -o libbuiltins.la b1.o b2.o b3.o

abból látszik, hogy convenience, hogy nincs benne -rpath. (Mondjuk a libtool ilyenkor szomorúan néz, hogy *.lo fájlok helyett közönséges *.o objektekből kell dolgoznia.)

Ugyanis az lenne a koncepció, hogy a 'convenience library' teljes tartalma belekerül a kimenetbe... Na most ha nem ez történik, akkor vagy a libtool hibázik, vagy én értettem félre valamit.

Szerk: a libtool-t kell fejleszteni: ha adott egy 'dir/libfoo.la' nevű' convenience library', akkor azt mindenképpen a vonatkozó szabályok szerint kell kezelni, függetlenül attól, hogy a parancs-sorban hogyan szerepelt: -lfoo vagy dir/libfoo.la vagy dir/libfoo.a

Hozzászólások

Mikorra várhatjuk a Teve v1.0 GNU/AIX kiadását? :D

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Azt még nem tudom;)

A konkrét esetben úgy estem bele a bajba, hogy azt javasoltam valakinek, fordítson bátran gcc-vel bash-4.4-et magának.

Aztán feltámadt a lelkiismeretem, és magam is nekiálltam lefordítani, ekkor derült ki ez a plugin dolog. De ravaszak, mert a 'make all' nem csinál velük semmit, csak a 'make install', nyilván azért, hogy elaltassák az éberségemet;)

Ezek után:


enable -f /usr/local/lib64/bash/sleep sleep
date; sleep 0.1; date # frissen betöltött sleep -- tizedmásodpercet vár

Egyetlen kérdés: nem kellene full-path nélkül is menjen?

Szerk: úgy látom, linuxban sem megy... Mondjuk AIX-on lehetne próbálkozni a -blibpath opcióval linkeléskor...

A perzl.org-ról letöltött bash-4.4 viszont tényleg nem jó, végtelen ciklusban pörög. Debug infó nincs benne, nekem meg nincs xlc-m, szóval egycsapásra nem tudok mit mondani róla.