diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-02-06 14:45:46 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2012-02-06 14:45:46 +0100 |
commit | 0b1be1ce0e0ac7b34c4b73d53f4bf32ec5df7290 (patch) | |
tree | de5389f578456c8d97fd3febe814ff2ec3c0a2d7 /pyuno/source | |
parent | 04f6c5e4d277c038c69e06eaf5fa2d0bc0faeeda (diff) |
Reintroduce pyuno.so wrapper around libpyuno.so
...it was cleaned away by a09ce46818fd4d5e08b3af9a478501cd8ef5b4fe "Port PyUno
to support Python 3" but is still needed to make sure libpyuno.so is loaded
RTLD_GLOBAL (Python apparently loads its modules RTLD_LOCAL). At least with
pre 4.5 GCC this can cause problems with C++ exception handling, see the mail
thread starting at
<http://lists.freedesktop.org/archives/libreoffice/2012-February/025166.html>
"LibO 3.5RC2: terminate called after throwing an instance of
'com::sun::star::registry::InvalidRegistryException'" for details.
Diffstat (limited to 'pyuno/source')
-rw-r--r-- | pyuno/source/module/makefile.mk | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/pyuno/source/module/makefile.mk b/pyuno/source/module/makefile.mk index f72e1c3031fe..714a120de58d 100644 --- a/pyuno/source/module/makefile.mk +++ b/pyuno/source/module/makefile.mk @@ -50,6 +50,9 @@ EXTRA_FRAMEWORK_FLAG=-framework Python .ENDIF # .IF "$(EXTRA_CFLAGS)"!="" .IF "$(GUI)" == "UNX" +# python expects modules without the lib prefix +# pyuno.so even on Mac OS X, because it is a python module +PYUNO_MODULE=$(DLLDEST)$/pyuno.so PYUNORC=pyunorc .ELSE .IF "$(CROSS_COMPILING)" != "YES" @@ -109,6 +112,7 @@ DEFLIB1NAME=$(TARGET) ALLTAR : \ $(DLLDEST)/uno.py \ $(DLLDEST)/unohelper.py \ + $(PYUNO_MODULE) \ $(MISC)/$(PYUNORC) \ $(LB)/lib$(TARGET).a @@ -116,17 +120,10 @@ $(LB)/lib$(TARGET).a: $(MISC)/$(TARGET).def $(DLLTOOL) --dllname $(TARGET)$(DLLPOST) --input-def=$(MISC)/$(TARGET).def --kill-at --output-lib=$(LB)/lib$(TARGET).a .ELSE -.IF "$(GUI)"!="WNT" -# For some reason the build breaks on Windows if this is listed in the -# prerequisite list of ALLTAR, but pyuno.pyd still gets produced. Go -# figure. But we need it on non-Windows. -targetdll=$(LB)/$(TARGET)$(DLLPOST) -.ENDIF - ALLTAR : \ $(DLLDEST)/uno.py \ $(DLLDEST)/unohelper.py \ - $(targetdll) \ + $(PYUNO_MODULE) \ $(MISC)/$(PYUNORC) .ENDIF .ENDIF @@ -141,6 +138,29 @@ $(MISC)/framework_link : $(COMMAND_ECHO)ln -sf $(SOLARLIBDIR)/OOoPython.framework $(LB)/OOoPython.framework @touch $@ +.IF "$(GUI)" == "UNX" +$(PYUNO_MODULE) : $(SLO)$/pyuno_dlopenwrapper.obj +.IF "$(OS)" == "LINUX" + @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSRUNPATH_OOO) $(LINKFLAGSSHLCUI) -ldl -o $@ $(SLO)$/pyuno_dlopenwrapper.o > $(MISC)$/$(@:b).cmd +.ELIF "$(OS)" == "SOLARIS" + @echo ld -G -ldl -o $@ $(SLO)$/pyuno_dlopenwrapper.o > $(MISC)$/$(@:b).cmd +.ELIF "$(OS)" == "FREEBSD" + @echo ld -shared -o $@ $(SLO)$/pyuno_dlopenwrapper.o > $(MISC)$/$(@:b).cmd +.ELIF "$(OS)" == "NETBSD" + @echo $(LINK) $(LINKFLAGSSHLCUI) -o $@ $(SLO)$/pyuno_dlopenwrapper.o > $(MISC)$/$(@:b).cmd +.ELIF "$(OS)" == "OPENBSD" + @echo ld -shared -o $@ $(SLO)$/pyuno_dlopenwrapper.o > $(MISC)$/$(@:b).cmd +.ELIF "$(OS)" == "DRAGONFLY" + @echo ld -shared -o $@ $(SLO)$/pyuno_dlopenwrapper.o > $(MISC)$/$(@:b).cmd +.ELIF "$(OS)" == "MACOSX" + @echo $(CC) -bundle -ldl -o $@ $(SLO)$/pyuno_dlopenwrapper.o $(EXTRA_LINKFLAGS) $(EXTRA_FRAMEWORK_FLAG) > $(MISC)$/$(@:b).cmd +.ELSE + @echo $(LINK) $(LINKFLAGSSHLCUI) -o $@ $(SLO)$/pyuno_dlopenwrapper.o > $(MISC)$/$(@:b).cmd +.ENDIF + cat $(MISC)$/$(@:b).cmd + @+source $(MISC)$/$(@:b).cmd +.ENDIF + $(MISC)/$(PYUNORC) : pyuno -rm -f $@ cat pyuno > $@ @@ -149,11 +169,4 @@ $(MISC)/pyuno.flt : pyuno.flt -rm -f $@ cat $? > $@ -.IF "$(DLLPRE)"!="" -# python does not accept the "lib" prefix in the module library -$(LB)/$(TARGET)$(DLLPOST) : $(LB)/$(DLLPRE)$(TARGET)$(DLLPOST) - -rm -f $@ - ln -s $? $@ -.ENDIF - .ENDIF # L10N_framework |