[Libreoffice-commits] core.git: pyuno/Library_pyuno_wrapper.mk

Stephan Bergmann sbergman at redhat.com
Wed May 8 09:38:20 PDT 2013


 pyuno/Library_pyuno_wrapper.mk |   12 ++++++++++++
 1 file changed, 12 insertions(+)

New commits:
commit 5589c72b88e502bfca045ae38af16c854afdd401
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed May 8 18:37:05 2013 +0200

    Make sure again pyuno_wrapper does not link against libstdc++
    
    ...which got broken with gbuild'ification.
    
    Change-Id: Ice2b3ffb81a646c9e542344ca348eb6a16eb4ce2

diff --git a/pyuno/Library_pyuno_wrapper.mk b/pyuno/Library_pyuno_wrapper.mk
index 9fb2e72..eb5c7c3 100644
--- a/pyuno/Library_pyuno_wrapper.mk
+++ b/pyuno/Library_pyuno_wrapper.mk
@@ -20,6 +20,18 @@ $(eval $(call gb_Library_use_externals,pyuno_wrapper,\
     python_headers \
 ))
 
+# python "import pyuno" dlopens pyuno.so as RTLD_LOCAL, so g++ exception
+# handling used to not work, so pyuno.so (pyuno_wrapper) is just a thin wrapper
+# that dlopens libpyuno.so as RTLD_GLOBAL; but when pyuno.so wrapper links
+# against libstdc++ (which has not previously been loaded into python process),
+# that resolves its _ZNSs4_Rep20_S_empty_rep_storageE to itself, but later LO
+# libs (loaded though RTLD_GLOBAL libpyuno.so) may resolve that symbol to e.g.
+# cppu, because they happen to see that before libstdc++; so the requirement has
+# always been that RTLD_LOCAL-loaded pyuno.so wrapper implicitly load into the
+# process as little as possible:
+$(eval $(call gb_Library_add_ldflags,pyuno_wrapper,-nostdlib))
+$(eval $(call gb_Library_add_libs,pyuno_wrapper,-lc))
+
 ifneq ($(OS)$(COM),WNTMSC)
 ifeq ($(filter DRAGONFLY FREEBSD NETBSD OPENBSD MACOSX,$(OS)),)
 


More information about the Libreoffice-commits mailing list