libtool #123

Kedvenc hobby-projektjeim egyike egy libtool-kompatibilis eszköz összegányolása, persze sosincs kész, most éppen a mc-4.8.10 buktatott meg. A gond azzal függhet össze, hogy agresszíven használ convenience librarykat, és a poén kedvvért azonos nevű objekteket (lib.o) is telepít mindegyikbe.

Első lépésként a fordítás során gondosan elrejtett információt kellene láthatóvá tenni:


find . -name Makefile  -exec \
    sed_repl 's|@echo "  CCLD    "|echo "  CCLD    "|
              s|--silent||' {} \;

20130906.1951: Szóval valami olyasmi, hogy amikor convenience library-t csinálunk, akkor a belekerülő elemeket egyediség szempontjából szűrni kell (vagyis először rendezni), és a duplákat átnevezni. Az átnevezés lényege, hogy lt<sorszám>- prefixet teszünk elé -- ha isten ments már volt neki, és mégis így is dupla, akkor nem teszünk újabb prefixet, csak egy másikat kap: mondjuk elsősorban végignézzük a listát, és megkeressük az eddigi maximumot. Hát voltam már boldogabb is.

20130912.1848: Működik az átnevezgetés (esetünkben symlinkelés), örülünk. Fáradozásunk jutalmaként a 'dump -H mc' ilyet ír:


INDEX  PATH                          BASE                MEMBER
0      /usr/local/lib:/usr/lib:/lib
1      /usr/local/lib                libgcc_s.a          shr.o
2      /usr/local/lib                libglib-2.0.so.0
3      /usr/local/lib                libiconv.so.2
4      /usr/local/lib                libintl.so.8
5      /usr/local/lib                libpcre.so.0
6      /usr/local/lib                libslang.so.2
7      /usr/local/lib                libz.so.1
8      /usr/local/lib                libcpotlas.so.1
9      /usr/lib                      libpthread.a        shr_comm.o
10     /usr/lib                      libpthread.a        shr_xpg5.o
11     /usr/lib                      libc.a              shr.o

Mindenkiről tudjuk, hogy honnan jön, melyik verzió, nincs futásidejű keresgélés... ez már kb olyan, mint amit hétköznapi ésszel el is várnánk;)

20130913.1005 Most jut eszembe, hogy nincs kész az a rész, hogy ha két lt123-foo.o van, akkor ne lt201-lt123-foo.o és lt202-lt123-foo.o legyen belőlük, hanem csak lt201-foo.o és lt202-foo.o (tudom, erre szokták azt mondani, hogy 'irigylem a problémáid'))

20130914.1748 Még egy szépséghibát látok: a rendezésnek is a név 'törzse' (nem pedig egésze) szerint kellene történnie, pl:

alfa, beta, lt120-alfa, lt130-beta

akkor a rendezett állapot így nézzen ki:

alfa, lt120-alfa, beta, lt130-beta

azután az átnevezett állapot:

lt131-alfa, lt132-alfa, lt133-beta, lt134-beta

persze először kell egy teszteset, ami kimutatja, hogy jelenleg nem így működik, utána pedig látható rajta a változás.

Hozzászólások

FYI, make V=1, vagy ./configure --disable-silent-rules, es akkor nem rejti el a commandlinet.

--
|8]

FYI, az ojjektum-unikvitast (hudeszepmagyarszo!) a libtool+automake paros tobbnyire ugy oldja meg, hogy ltpath_to_dir_filename.o, illetve lib eseten libpath_to_blah_blah.a lesz belole.

Tehat ha van egy lib/foo.c -d meg egy src/akarmi/foo.c, akkor abbo ltlib_foo.o illetve ltsrc_akarmi_foo.o lesz.

--
|8]

Ez is egy lehetőség, az a libtool, amiből én vettem a koncepciót, az sorszámokat használt, végül is egész csomó duplikátumom lett, főleg a végén, amikor a libinternal.a-ba összeöntötte az összes objektet, így lett egy csomó azonos (vagy azonos néven különböző tartalmú). A végső szépséges eredményben ilyenek vannak:


rw-r--r--     0/0       7159 12 Sep 11:56 2013 lt119-lt1-common.o
rw-r--r--     0/0       7159 12 Sep 11:56 2013 lt120-lt1-common.o
rw-r--r--     0/0       7159 12 Sep 11:56 2013 lt121-lt1-common.o
rw-r--r--     0/0       8377 12 Sep 11:56 2013 lt122-lt2-common.o
rw-r--r--     0/0       8377 12 Sep 11:56 2013 lt123-lt2-common.o
rw-r--r--     0/0       8377 12 Sep 11:56 2013 lt124-lt2-common.o
rw-r--r--     0/0       2995 12 Sep 11:56 2013 lt125-lt3-common.o
rw-r--r--     0/0       2995 12 Sep 11:56 2013 lt126-lt3-common.o
rw-r--r--     0/0       2995 12 Sep 11:56 2013 lt127-lt3-common.o

Szerk:
Próbából megnéztem a 'gyári' libtool eredményét máshol, ott ugyanez:

rw-r--r-- 0/0   2008 Sep  9 10:18 2013 common.o
rw-r--r-- 0/0   2008 Sep  9 10:18 2013 lt11-common.o
rw-r--r-- 0/0   2008 Sep  9 10:18 2013 lt87-common.o
rw-r--r-- 0/0   4212 Sep  9 10:18 2013 lt120-lt2-common.o
rw-r--r-- 0/0   4212 Sep  9 10:18 2013 lt2-common.o
rw-r--r-- 0/0   4212 Sep  9 10:18 2013 lt44-lt2-common.o
rw-r--r-- 0/0   4408 Sep  9 10:18 2013 lt150-widget-common.o
rw-r--r-- 0/0   4408 Sep  9 10:18 2013 lt74-widget-common.o
rw-r--r-- 0/0   4408 Sep  9 10:18 2013 widget-common.o
rw-r--r-- 0/0   4908 Sep  9 10:18 2013 lt1-common.o
rw-r--r-- 0/0   4908 Sep  9 10:18 2013 lt119-lt1-common.o
rw-r--r-- 0/0   4908 Sep  9 10:18 2013 lt43-lt1-common.o

(Ezek szerint ő sem kezeli a többszörös prefixek esetét.)

Szerk: ilyen lett, amikor bevezettem a duplaprefix-mentesítést:

rw-r--r--     0/0       7159 13 Sep 16:32 2013 lt119-common.o
rw-r--r--     0/0       7159 13 Sep 16:32 2013 lt120-common.o
rw-r--r--     0/0       7159 13 Sep 16:32 2013 lt121-common.o
rw-r--r--     0/0       8377 13 Sep 16:32 2013 lt122-common.o
rw-r--r--     0/0       8377 13 Sep 16:32 2013 lt123-common.o
rw-r--r--     0/0       8377 13 Sep 16:32 2013 lt124-common.o
rw-r--r--     0/0       2995 13 Sep 16:32 2013 lt125-common.o
rw-r--r--     0/0       2995 13 Sep 16:32 2013 lt126-common.o
rw-r--r--     0/0       2995 13 Sep 16:32 2013 lt127-common.o
rw-r--r--     0/0       9435 13 Sep 16:32 2013 lt213-widget-common.o
rw-r--r--     0/0       9435 13 Sep 16:32 2013 lt214-widget-common.o
rw-r--r--     0/0       9435 13 Sep 16:32 2013 lt215-widget-common.o