Since 7.20beta7 Opera comes with a file called operamotifwrapper-3 which is linked against libXm.so.3 instead of libXm.so.2 like the file operamotifwrapper which is used by default. Simply replace the file operamotifwrapper with the newer version. Reproducible: Always Steps to Reproduce: emerge openmotif emerge opera >=7.20beta7 try to get it working without emerging lesstif Actual Results: opera ebuild depends on lesstif Expected Results: opera ebuild should depend on latter versions of openmotif instead of lesstif in the new ebuilds, there should perhaps be a note, that lesstif can be unmerged if opera was the only reason to install lesstif
I'd consider this a bug in opera... In opera-7.21, `operamotifwrapper' still appears to be linked with a lesstif libXm.so.2 (which is *not* provided by any distribution I've checked -- although two comments in another bug claim it also to be working with openmotif-2.1...except for the size mismatch warning for one of the exported symbols at startup). The alternative, `operamotifwrapper-3', links to libXm.so.3 (openmotif-2.2), but is refered to as `operamotifwrapper.3' in the install script...
even if the file is called openmotifwrapper.3 - Opera will not use it automatically and the install.sh doesn't check for libXm.so.3, it just copies the file. We have to copy the libXm.so.3 version of the wrapper over the libXm.so.2 version.
No...it's the other way around. `install.sh' should check for `operamotifwrapper-3' and install it under that name. From looking at `libnpp.so' in a debugger, it tries to load the wrapper under these names in that order: operamotifwrapper operamotifwrapper-1 operamotifwrapper-2 operamotifwrapper-3 operamotifwrapper-4 and uses the first that loads successfully. It is reported to work when using the RH9 rpm (on RH9) with only libXm.so.2, libXm.so.3, or both installed. Only difference is in RH9 is, `operamotifwrapper' is installed as `operamotifwrapper-2'.
i fixed the dep in the ebuild, if openmotif-2.2* is installed, it will install operamotifwrapper-3
@bartron: I renamed operamotifwrapper to operamotifwrapper-2 and it didn't help. Opera loads operamotifwrapper-2 and that fails. I can see the error on the console. @lanius: The new 7.21 ebuild still doesn't install operamotifwrapper-3 like it should (i saw the cp-command etc in the ebuild). Opera still fails loading libXm.so.2
emerge -s motif emerge -s lesstif
lesstif is not install x11-libs/openmotif-2.2.2-r1 is installed. BTW: i read the ebuild-script and i know that it should detect that openmotif-2.2* is installed - but it doesn't work, i don't know why.
a little syntax error, finally fixed :)
[small addition to comment #3] Hm...seems I can't reproduce said RedHat behavior either, my mistake...should have checked it myself. What libnpp does is, it fork()'s, then the new process tries to exec() operamotifwrapper with the names mentioned above until execve() does not return. Of course, when it comes to loading shared libraries *inside* the child, it's already too late to do that... and I have *NO* idea how the observed behavior is supposed to work on RedHat. Although I kind of like this kind of flexibility. Just some thought...if `operamotifwrapper' is installed as `operamotifwrapper-2', `operamotifwrapper' could be a small script that that checks which `libXm' is available at the time it is invoked: ----begin operamotifwrapper---- #!/bin/bash if [ -f "/usr/lib/libXm.so.2" -o -f "/usr/X11R6/lib/libXm.so.2" ]; then exec $plugdir/operamotifwrapper-2 "$@" else exec $plugdir/operamotifwrapper-3 "$@" fi ----end operamotifwrapper----
Suggested patch to `opera-7.21.ebuild' # install correct motifwrapper - if has_version '=x11-libs/openmotif-2.2*'; then - rm ${D}/opt/opera/lib/opera/plugins/operamotifwrapper - cp ${S}/plugins/operamotifwrapper-3 ${D}/opt/opera/lib/opera/plugins - fi + mv "${D}/opt/opera/lib/opera/plugins/operamotifwrapper" \ + "${D}/opt/opera/lib/opera/plugins/operamotifwrapper-2" + cp "${S}/plugins/operamotifwrapper-3" \ + "${D}/opt/opera/lib/opera/plugins" + cat <<EOT >"${D}/opt/opera/lib/opera/plugins/operamotifwrapper" +#!/bin/bash +if [ -f "/usr/lib/libXm.so.2" -o -f "/usr/X11R6/lib/libXm.so.2" ]; then + exec \${0%/*}/operamotifwrapper-2 "\$@" +else + exec \${0%/*}/operamotifwrapper-3 "\$@" +fi +EOT + chmod +x "${D}/opt/opera/lib/opera/plugins/operamotifwrapper" +