Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 349297

Summary: dev-lang/parrot-2.9.1 doesn't find libpcre.so.0 in /lib(64) - fails tests, possibly runtime
Product: Gentoo Linux Reporter: David Leverton <levertond>
Component: [OLD] DevelopmentAssignee: Gentoo Perl team <perl>
Status: RESOLVED TEST-REQUEST    
Severity: normal CC: kentnl, Martin.vGagern
Priority: High    
Version: unspecified   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---

Description David Leverton 2010-12-21 14:33:01 UTC
dev-lang/parrot-2.9.1 fails the test phase with:

t/library/pcre.t ............................ Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/2 subtests 

#   Failed test 'libpcre loading'
#   at t/library/pcre.t line 51.
#          got: 'Failed to load libpcre
# '
#     expected: 'Loaded
# '

#   Failed test 'soup to nuts'
#   at t/library/pcre.t line 106.
# Exited with error code: 1
# Received:
# ok 1
# Failed to load libpcre
# current instr.: 'parrot;PCRE;init' pc 135 (runtime/parrot/library/pcre.pir:133)
# called from Sub 'main' pc 32 (/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/t/library/pcre_2.pir:28)
# 
# Expected:
# ok 1
# ok 2
# ok 3
# ok 4
# ok 5
# 
# Looks like you failed 2 tests of 2.

(I suspect it also wouldn't work if installed without running tests and someone tried to use the pcre binding with the installed version, although I haven't tried it.)

strace shows it looking for the pcre shared library only in /usr/lib(64), not /lib(64) which is the proper location at least with dev-libs/libpcre-8.02:

shiny-one ~ # cd /var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/t/library/
shiny-one library # LD_LIBRARY_PATH=/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/blib/lib strace -f -o >(grep libpcre) perl pcre.t &>/dev/null
13213 stat("/usr/lib/libpcre.so", {st_mode=S_IFREG|0755, st_size=526, ...}) = 0
13213 open("/usr/lib/libpcre.so", O_RDONLY) = 3
13213 stat("/usr/lib/libpcre.so", {st_mode=S_IFREG|0755, st_size=526, ...}) = 0
13213 open("/usr/lib/libpcre.so", O_RDONLY) = 3
13213 stat("/usr/lib/libpcre.so.3", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/runtime/parrot/dynext/libpcre.so.3", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("dynext/libpcre.so.3", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/dynext/libpcre.so.3", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("//usr/lib64/parrot/2.9.1/dynext/libpcre.so.3", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("libpcre.so.3", 0x7fffb26bdff0) = -1 ENOENT (No such file or directory)
13213 stat("/usr/lib/libpcre.so.0", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/runtime/parrot/dynext/libpcre.so.0", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("dynext/libpcre.so.0", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/dynext/libpcre.so.0", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("//usr/lib64/parrot/2.9.1/dynext/libpcre.so.0", 0x7fffb26bdf90) = -1 ENOENT (No such file or directory)
13213 stat("libpcre.so.0", 0x7fffb26bdff0) = -1 ENOENT (No such file or directory)
13213 write(1, "Failed to load libpcre", 22) = 22
13207 read(3, "Failed to load libpcre\n", 4096) = 23
13207 write(6, "not ok 1 - libpcre loading\n", 27) = 27
13207 write(7, "#   Failed test 'libpcre loading"..., 34) = 34
13215 stat("/usr/lib/libpcre.so", {st_mode=S_IFREG|0755, st_size=526, ...}) = 0
13215 open("/usr/lib/libpcre.so", O_RDONLY) = 3
13215 stat("/usr/lib/libpcre.so", {st_mode=S_IFREG|0755, st_size=526, ...}) = 0
13215 open("/usr/lib/libpcre.so", O_RDONLY) = 3
13215 stat("/usr/lib/libpcre.so.3", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/runtime/parrot/dynext/libpcre.so.3", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("dynext/libpcre.so.3", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/dynext/libpcre.so.3", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("//usr/lib64/parrot/2.9.1/dynext/libpcre.so.3", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("libpcre.so.3", 0x7fffa557b800) = -1 ENOENT (No such file or directory)
13215 stat("/usr/lib/libpcre.so.0", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/runtime/parrot/dynext/libpcre.so.0", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("dynext/libpcre.so.0", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("/var/tmp/paludis/dev-lang-parrot-2.9.1/work/parrot-2.9.1/dynext/libpcre.so.0", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("//usr/lib64/parrot/2.9.1/dynext/libpcre.so.0", 0x7fffa557b7a0) = -1 ENOENT (No such file or directory)
13215 stat("libpcre.so.0", 0x7fffa557b800) = -1 ENOENT (No such file or directory)
13215 write(2, "Failed to load libpcre\n", 23) = 23
13207 read(3, "ok 1\nFailed to load libpcre\ncurr"..., 4096) = 220

(/usr/lib(64)/libpcre.so exists, but is a linker script produced by the gen_usr_ldscript function from toolchain-funcs.eclass, so it can't be dlopened.)

Creating /usr/lib64/libpcre.so.0 as a symlink to /lib64/libpcre.so.0 allows the tests and installation to complete successfully.
Comment 1 Jeroen Roovers (RETIRED) gentoo-dev 2010-12-21 15:05:34 UTC
Which version of libpcre is that?
Comment 2 David Leverton 2010-12-21 16:16:37 UTC
That's dev-libs/libpcre-8.02
Comment 3 Diego Elio Pettenò (RETIRED) gentoo-dev 2011-03-11 21:38:54 UTC
8.12 same issue it seems.
Comment 4 Martin von Gagern 2011-08-01 20:52:55 UTC
dev-lang/parrot-3.6.0[pcre] fails to build for me:

Compiled: parrot_nci_thunk_gen.o
x86_64-pc-linux-gnu-gcc -o parrot_nci_thunk_gen "parrot_nci_thunk_gen.o" "/var/tmp/portage/dev-lang/parrot-3.6.0/work/parrot-3.6.0/src/parrot_config.o"  -L"/var/tmp/portage/dev-lang/parrot-3.6.0/work/parrot-3.6.0/blib/lib" -lparrot -Wl,-E -Wl,--as-needed   -lnsl -ldl -lm -lcrypt -lutil -lpthread -lrt -lreadline  -lffi    -lpthread -ldl -lm   -L/usr/lib64  -licuuc -licudata  -lpthread -ldl -lm   
Linked: parrot_nci_thunk_gen
./parrot_nci_thunk_gen \
        --loader-name=Parrot_glut_nci_loader \
        --loader-storage-class=PARROT_DYNEXT_EXPORT \
        --output=src/glut_nci_thunks.c \
        <src/glut_nci_thunks.nci
Failed to load libpcre
current instr.: 'parrot;PCRE;init' pc 249 (runtime/parrot/library/pcre.pir:162)
called from Sub 'read_one_sig' pc 1982 (tools/dev/nci_thunk_gen.pir:861)
called from Sub 'read_sigs' pc 1903 (tools/dev/nci_thunk_gen.pir:823)
called from Sub 'main' pc 40 (tools/dev/nci_thunk_gen.pir:48)
make: *** [src/glut_nci_thunks.c] Error 1
emake failed

I guess this is the same problem.
Comment 5 Sergiy Borodych 2011-08-02 10:29:28 UTC
Has the same failure as #c4
stable amd64

[ebuild     U ~] dev-lang/parrot-3.6.0 [3.3.0] USE="gdbm nls opengl pcre ssl unicode -doc -examples -gmp" 0 kB
[ebuild     U ~] dev-lang/rakudo-2011.07 [2011.04] USE="-doc" 0 kB
Comment 6 Martin von Gagern 2011-08-02 14:41:07 UTC
Bug 377379 comment 5 has a patch that might help for this issue here as well. Should apply to parrot versions since 2.9.0, as those are the ones containing the commit that is suspected to have introduced this issue.
Comment 7 Patrick Lauer gentoo-dev 2012-03-22 13:11:04 UTC
Should be fixed in newer versions.