Re: New libthai and pango
On Tue, Mar 31, 2009 at 4:56 PM, Josselin Mouette <joss@debian.org> wrote:
> Theppitak Karoonboonyanan writes:
>>>
>>> Unfortunately this won’t work for upgrades from lenny, so I’d prefer to
>>> see the Conflicts anyway.
>>
>> You meaned partial upgrade with only libthai upgraded?
>> I still think the upgrade would work if pango were rebuilt with -ldatrie
>> removed, i.e., no more libdatrie0 should be directly loaded, except from
>> libthai0. Correct me if I'm wrong.
>
> If you upgrade only libthai, it will bring libdatrie1 while pango still
> links to libdatrie0, so both libraries will be in the namespace.
Yes, so you meaned the partial upgrade case, not when
pango is also rebuilt and upgraded as Loic proposed.
> However, thinking about it again, if you add symbol versions in libdatrie1,
> this should work. Since pango doesn't actually use any symbols from
> libdatrie, all required symbols will be required with a version, so the
> correct ones will be selected.
I suppose so. However, I've tried it and found no luck so far.
For the experiment, I've used "-Wl,--version-script=libdatrie.map"
LDFLAG instead of libtool -export-symbols flag, and list all
currently exported symbols under DATRIE_0.2 { global: ...; };
(with a "local: *" catch all in it, of course). Then I rebuilt both
libdatrie and libthai.
Here is what I got:
$ objdump -T /usr/local/lib/libdatrie.so.1.0.0
/usr/local/lib/libdatrie.so.1.0.0: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
0000000000000c90 l d .init 0000000000000000 .init
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 ftell
0000000000000000 w D *UND* 0000000000000000 __gmon_start__
0000000000000000 w D *UND* 0000000000000000
_Jv_RegisterClasses
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fseek
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __assert_fail
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 malloc
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fopen
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __strdup
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 free
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strlen
0000000000000000 w DF *UND* 0000000000000000 GLIBC_2.2.5 __cxa_finalize
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 sprintf
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 memmove
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fread
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fclose
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fwrite
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 realloc
00000000000028a0 g DF .text 0000000000000005 DATRIE_0.2 trie_state_free
00000000000027a0 g DF .text 00000000000000fb DATRIE_0.2 trie_retrieve
0000000000002c30 g DF .text 0000000000000255 DATRIE_0.2 trie_store
00000000000032a0 g DF .text 0000000000000036 DATRIE_0.2 alpha_map_free
0000000000002640 g DF .text 000000000000001f DATRIE_0.2
trie_state_get_data
0000000000003000 g DF .text 000000000000009e DATRIE_0.2 trie_new
0000000000002960 g DF .text 000000000000002a DATRIE_0.2 trie_enumerate
00000000000032e0 g DF .text 0000000000000222 DATRIE_0.2
alpha_map_add_range
0000000000002aa0 g DF .text 00000000000000ff DATRIE_0.2 trie_delete
0000000000002f40 g DF .text 00000000000000be DATRIE_0.2 trie_new_from_fil
0000000000002f10 g DF .text 0000000000000027 DATRIE_0.2 trie_free
0000000000002610 g DF .text 000000000000001d DATRIE_0.2 trie_state_copy
00000000000030a0 g DF .text 0000000000000026 DATRIE_0.2 alpha_char_strlen
00000000000028b0 g DF .text 0000000000000060 DATRIE_0.2 trie_state_clone
0000000000002e90 g DF .text 000000000000007e DATRIE_0.2 trie_save
0000000000002780 g DF .text 000000000000001b DATRIE_0.2 trie_state_rewind
0000000000002630 g DF .text 0000000000000005 DATRIE_0.2
trie_state_is_single
0000000000000000 g DO *ABS* 0000000000000000 DATRIE_0.2 DATRIE_0.2
0000000000002660 g DF .text 000000000000007a DATRIE_0.2
trie_state_is_walkable
0000000000002910 g DF .text 000000000000004c DATRIE_0.2 trie_root
0000000000003510 g DF .text 000000000000005c DATRIE_0.2 alpha_map_clone
0000000000002600 g DF .text 0000000000000004 DATRIE_0.2 trie_is_dirty
0000000000003280 g DF .text 000000000000001f DATRIE_0.2 alpha_map_new
00000000000026e0 g DF .text 0000000000000095 DATRIE_0.2 trie_state_walk
$ objdump -T /usr/local/lib/libthai.so.0.1.2 | grep UND
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2
trie_state_is_single
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 wcsncat
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 snprintf
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 wcsncpy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 wcslen
0000000000000000 w D *UND* 0000000000000000 __gmon_start__
0000000000000000 w D *UND* 0000000000000000
_Jv_RegisterClasses
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 malloc
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2 trie_state_walk
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2 trie_state_free
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2 trie_state_rewind
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2 trie_state_copy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 free
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strlen
0000000000000000 w DF *UND* 0000000000000000 GLIBC_2.2.5 __cxa_finalize
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2 trie_state_clone
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2 trie_new_from_file
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 memcpy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strchr
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 getenv
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2 trie_root
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strcpy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 wcscat
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2 trie_free
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 realloc
0000000000000000 DF *UND* 0000000000000000 DATRIE_0.2
trie_state_is_walkable
All datrie calls from libthai seem to be versioned, while libdatrie0
symbols aren't:
$ objdump -T /usr/lib/libdatrie.so.0.0.3
/usr/lib/libdatrie.so.0.0.3: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
0000000000000f58 l d .init 0000000000000000 .init
0000000000000000 DF *UND* 0000000000000148 GLIBC_2.2.5 ftell
0000000000000000 w D *UND* 0000000000000000 __gmon_start__
0000000000000000 w D *UND* 0000000000000000
_Jv_RegisterClasses
0000000000000000 DF *UND* 000000000000011e GLIBC_2.2.5 fseek
0000000000000000 DF *UND* 00000000000001de GLIBC_2.2.5 malloc
0000000000000000 DF *UND* 000000000000000a GLIBC_2.2.5 fopen
0000000000000000 DF *UND* 00000000000001c2 GLIBC_2.2.5 fgets
0000000000000000 DF *UND* 0000000000000057 GLIBC_2.2.5 __strdup
0000000000000000 DF *UND* 00000000000000d9 GLIBC_2.2.5 free
0000000000000000 DF *UND* 00000000000000e9 GLIBC_2.2.5 strlen
0000000000000000 w DF *UND* 00000000000000fe GLIBC_2.2.5 __cxa_finalize
0000000000000000 DF *UND* 0000000000000090 GLIBC_2.2.5 sprintf
0000000000000000 DF *UND* 0000000000000090 GLIBC_2.2.5 sscanf
0000000000000000 DF *UND* 00000000000000f3 GLIBC_2.2.5 rewind
0000000000000000 DF *UND* 00000000000001bc GLIBC_2.2.5 strcat
0000000000000000 DF *UND* 000000000000018f GLIBC_2.2.5 memmove
0000000000000000 DF *UND* 0000000000000155 GLIBC_2.2.5 fread
0000000000000000 DF *UND* 00000000000000dc GLIBC_2.2.5 strcpy
0000000000000000 DF *UND* 0000000000000213 GLIBC_2.2.5 fclose
0000000000000000 DO *UND* 0000000000000008 GLIBC_2.2.5 stderr
0000000000000000 DF *UND* 0000000000000187 GLIBC_2.2.5 fwrite
0000000000000000 DF *UND* 00000000000002e8 GLIBC_2.2.5 realloc
0000000000000000 DF *UND* 0000000000000090 GLIBC_2.2.5 fprintf
00000000000037c0 g DF .text 0000000000000034 Base sb_trie_state_walk
0000000000002cf0 g DF .text 0000000000000005 Base trie_state_free
0000000000002ed0 g DF .text 00000000000000ef Base trie_retrieve
0000000000003150 g DF .text 0000000000000210 Base trie_store
0000000000003820 g DF .text 0000000000000022 Base sb_trie_state_free
0000000000002b50 g DF .text 0000000000000020 Base
trie_state_get_data
0000000000002dc0 g DF .text 0000000000000029 Base trie_enumerate
0000000000003a90 g DF .text 0000000000000069 Base sb_trie_store
0000000000002fc0 g DF .text 00000000000000f2 Base trie_delete
0000000000003bc0 g DF .text 00000000000000a5 Base sb_trie_open
0000000000003780 g DF .text 0000000000000034 Base
sb_trie_state_is_walkable
00000000000033f0 g DF .text 000000000000009d Base trie_open
0000000000003760 g DF .text 0000000000000013 Base
sb_trie_state_is_terminal
0000000000003720 g DF .text 0000000000000016 Base
sb_trie_state_get_data
00000000000033a0 g DF .text 0000000000000041 Base trie_close
0000000000002bf0 g DF .text 000000000000002c Base trie_state_is_leaf
0000000000003800 g DF .text 0000000000000012 Base
sb_trie_state_rewind
0000000000003b70 g DF .text 0000000000000016 Base sb_trie_save
0000000000002d00 g DF .text 0000000000000062 Base trie_state_clone
0000000000003b90 g DF .text 0000000000000027 Base sb_trie_close
0000000000003360 g DF .text 000000000000003a Base trie_save
0000000000003850 g DF .text 0000000000000058 Base
sb_trie_state_clone
0000000000002cd0 g DF .text 000000000000001b Base trie_state_rewind
0000000000003740 g DF .text 0000000000000013 Base
sb_trie_state_is_leaf
0000000000003b00 g DF .text 0000000000000068 Base sb_trie_retrieve
00000000000038b0 g DF .text 0000000000000053 Base sb_trie_root
0000000000002b70 g DF .text 0000000000000074 Base
trie_state_is_walkable
0000000000002d70 g DF .text 000000000000004c Base trie_root
0000000000002c20 g DF .text 00000000000000a7 Base trie_state_walk
0000000000003a30 g DF .text 0000000000000057 Base sb_trie_delete
0000000000003910 g DF .text 0000000000000030 Base sb_trie_enumerate
However, unstable pango still doesn't work. It crashes leafpad
and gucharmap, but not gedit. And when checking process map,
gedit doesn't care about LD_LIBRARY_PATH and only loads libthai
from /usr/lib. But the other two do load it from /usr/local/lib, and crash.
I must be missing something here. :-/
Regards,
--
Theppitak Karoonboonyanan
http://linux.thai.net/~thep/
Reply to: