[REVIEW 3-5] Reintroduce pyuno.so wrapper around libpyuno.so

2012-02-15 Thread Stephan Bergmann
As per  
"Importing uno bindings in python causes crash" the master commit 
 
"Reintroduce pyuno.so wrapper around libpyuno.so" should please be 
reviewed and cherry-picked to libreoffice-3-5.


(It only actually affects platforms with somewhat old GCC versions, so 
there should typically be no need to backport this to any Linux-distro's 
3.5.0 offerings.)


Thanks,
Stephan
___
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice


Re: [REVIEW 3-5] Reintroduce pyuno.so wrapper around libpyuno.so

2012-02-15 Thread Michael Meeks

On Wed, 2012-02-15 at 15:07 +0100, Stephan Bergmann wrote:
> As per  
> "Importing uno bindings in python causes crash" the master commit 
> 
>  
> "Reintroduce pyuno.so wrapper around libpyuno.so" should please be 
> reviewed and cherry-picked to libreoffice-3-5.

Looks reasonable enough to me; can you cherry-pick it with my
sign-off ? :-) and I assume the relevant .component file is magically
updated as it's built etc. ?

ATB,

Michael.

-- 
michael.me...@suse.com  <><, Pseudo Engineer, itinerant idiot

___
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice


Re: [REVIEW 3-5] Reintroduce pyuno.so wrapper around libpyuno.so

2012-02-16 Thread Stephan Bergmann

On 02/15/2012 04:54 PM, Michael Meeks wrote:

On Wed, 2012-02-15 at 15:07 +0100, Stephan Bergmann wrote:

As per
"Importing uno bindings in python causes crash" the master commit

"Reintroduce pyuno.so wrapper around libpyuno.so" should please be
reviewed and cherry-picked to libreoffice-3-5.


Looks reasonable enough to me; can you cherry-pick it with my
sign-off ? :-) and I assume the relevant .component file is magically
updated as it's built etc. ?


Just noted that the revert does not take the necessary changes for 
Python 3 into account, so an additional 
 
"Adapt pyuno.so wrapper to Python 3 support" is necessary.


So please re-review attached 
0001-Reintroduce-pyuno.so-wrapper-around-libpyuno.so.patch (which 
combines the two relevant master commits into one) for application to 
libreoffice-3-5.


Thanks,
Stephan
>From 85d95692d43b90c7955dbb2ba8393e948835d469 Mon Sep 17 00:00:00 2001
From: Stephan Bergmann 
Date: Thu, 16 Feb 2012 16:42:58 +0100
Subject: [PATCH] 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

"LibO 3.5RC2: terminate called after throwing an instance of
'com::sun::star::registry::InvalidRegistryException'" for details.

(cherry picked from commit 0b1be1ce0e0ac7b34c4b73d53f4bf32ec5df7290)

...plus...

Adapt pyuno.so wrapper to Python 3 support

(cherry picked from commit 1bb0d979b5ac5ed0cd831c6c8c0ab55dc2621eba)
---
 pyuno/source/module/makefile.mk   |   43 +++--
 pyuno/source/module/pyuno_dlopenwrapper.c |   76 +
 2 files changed, 83 insertions(+), 36 deletions(-)

diff --git a/pyuno/source/module/makefile.mk b/pyuno/source/module/makefile.mk
index f72e1c3..714a120 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" pref

Re: [REVIEW 3-5] Reintroduce pyuno.so wrapper around libpyuno.so

2012-02-16 Thread Stephan Bergmann

On 02/16/2012 04:50 PM, Stephan Bergmann wrote:

On 02/15/2012 04:54 PM, Michael Meeks wrote:

On Wed, 2012-02-15 at 15:07 +0100, Stephan Bergmann wrote:

As per
"Importing uno bindings in python causes crash" the master commit


"Reintroduce pyuno.so wrapper around libpyuno.so" should please be
reviewed and cherry-picked to libreoffice-3-5.


Looks reasonable enough to me; can you cherry-pick it with my
sign-off ? :-) and I assume the relevant .component file is magically
updated as it's built etc. ?


Just noted that the revert does not take the necessary changes for
Python 3 into account, so an additional

"Adapt pyuno.so wrapper to Python 3 support" is necessary.

So please re-review attached
0001-Reintroduce-pyuno.so-wrapper-around-libpyuno.so.patch (which
combines the two relevant master commits into one) for application to
libreoffice-3-5.


Rats, missing return value.  Now, third attempt, please look at the 
newly attached, slightly modified patch instead.  Sigh.


Stephan
>From 85d95692d43b90c7955dbb2ba8393e948835d469 Mon Sep 17 00:00:00 2001
From: Stephan Bergmann 
Date: Thu, 16 Feb 2012 16:42:58 +0100
Subject: [PATCH] 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

"LibO 3.5RC2: terminate called after throwing an instance of
'com::sun::star::registry::InvalidRegistryException'" for details.

(cherry picked from commit 0b1be1ce0e0ac7b34c4b73d53f4bf32ec5df7290)

...plus...

Adapt pyuno.so wrapper to Python 3 support

(cherry picked from commit 1bb0d979b5ac5ed0cd831c6c8c0ab55dc2621eba)
---
 pyuno/source/module/makefile.mk   |   43 +++--
 pyuno/source/module/pyuno_dlopenwrapper.c |   76 +
 2 files changed, 83 insertions(+), 36 deletions(-)

diff --git a/pyuno/source/module/makefile.mk b/pyuno/source/module/makefile.mk
index f72e1c3..714a120 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 $@
 	c

Re: [REVIEW 3-5] Reintroduce pyuno.so wrapper around libpyuno.so

2012-02-16 Thread Stephan Bergmann

On 02/16/2012 05:12 PM, Stephan Bergmann wrote:

On 02/16/2012 04:50 PM, Stephan Bergmann wrote:

On 02/15/2012 04:54 PM, Michael Meeks wrote:

On Wed, 2012-02-15 at 15:07 +0100, Stephan Bergmann wrote:

As per
"Importing uno bindings in python causes crash" the master commit



"Reintroduce pyuno.so wrapper around libpyuno.so" should please be
reviewed and cherry-picked to libreoffice-3-5.


Looks reasonable enough to me; can you cherry-pick it with my
sign-off ? :-) and I assume the relevant .component file is magically
updated as it's built etc. ?


Just noted that the revert does not take the necessary changes for
Python 3 into account, so an additional


"Adapt pyuno.so wrapper to Python 3 support" is necessary.

So please re-review attached
0001-Reintroduce-pyuno.so-wrapper-around-libpyuno.so.patch (which
combines the two relevant master commits into one) for application to
libreoffice-3-5.


Rats, missing return value. Now, third attempt, please look at the newly
attached, slightly modified patch instead. Sigh.


Ha!  What can I say?  Still lacks a WaE workaround...  So here comes 
patch number four.


Stephan
>From 85d95692d43b90c7955dbb2ba8393e948835d469 Mon Sep 17 00:00:00 2001
From: Stephan Bergmann 
Date: Thu, 16 Feb 2012 16:42:58 +0100
Subject: [PATCH] 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

"LibO 3.5RC2: terminate called after throwing an instance of
'com::sun::star::registry::InvalidRegistryException'" for details.

(cherry picked from commit 0b1be1ce0e0ac7b34c4b73d53f4bf32ec5df7290)

...plus...

Adapt pyuno.so wrapper to Python 3 support

(cherry picked from commit 1bb0d979b5ac5ed0cd831c6c8c0ab55dc2621eba)
---
 pyuno/source/module/makefile.mk   |   43 +++--
 pyuno/source/module/pyuno_dlopenwrapper.c |   76 +
 2 files changed, 83 insertions(+), 36 deletions(-)

diff --git a/pyuno/source/module/makefile.mk b/pyuno/source/module/makefile.mk
index f72e1c3..714a120 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 > $(MIS

Re: [REVIEW 3-5] Reintroduce pyuno.so wrapper around libpyuno.so

2012-02-17 Thread Michael Meeks
Hi Stephan,

On Thu, 2012-02-16 at 18:21 +0100, Stephan Bergmann wrote:
> > Rats, missing return value. Now, third attempt, please look at the newly
> > attached, slightly modified patch instead. Sigh.
> 
> Ha!  What can I say?  Still lacks a WaE workaround...  So here comes 
> patch number four.

:-) I knew it wasn't just idleness delaying my review.

So - it's impenetrable to me, but I trust you know what you're doing;
and as long as it's in 3.5.1 RC1 we'll have some time to check it
live :-)

Any chance you can merge it to -3-5 yourself ?

Thanks,

Michael.

-- 
michael.me...@suse.com  <><, Pseudo Engineer, itinerant idiot

___
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice


Re: [REVIEW 3-5] Reintroduce pyuno.so wrapper around libpyuno.so

2012-02-21 Thread Stephan Bergmann

On 02/16/2012 06:21 PM, Stephan Bergmann wrote:

On 02/16/2012 05:12 PM, Stephan Bergmann wrote:

On 02/16/2012 04:50 PM, Stephan Bergmann wrote:

On 02/15/2012 04:54 PM, Michael Meeks wrote:

On Wed, 2012-02-15 at 15:07 +0100, Stephan Bergmann wrote:

As per
"Importing uno bindings in python causes crash" the master commit




"Reintroduce pyuno.so wrapper around libpyuno.so" should please be
reviewed and cherry-picked to libreoffice-3-5.


Looks reasonable enough to me; can you cherry-pick it with my
sign-off ? :-) and I assume the relevant .component file is magically
updated as it's built etc. ?


Just noted that the revert does not take the necessary changes for
Python 3 into account, so an additional



"Adapt pyuno.so wrapper to Python 3 support" is necessary.

So please re-review attached
0001-Reintroduce-pyuno.so-wrapper-around-libpyuno.so.patch (which
combines the two relevant master commits into one) for application to
libreoffice-3-5.


Rats, missing return value. Now, third attempt, please look at the newly
attached, slightly modified patch instead. Sigh.


Ha! What can I say? Still lacks a WaE workaround... So here comes patch
number four.


Embarrassing as it is, turns out yet another patch needs to be 
backported from master to libreoffice-3-5, namely 
 
"Revert 'Mac OS X uses .dylib and not .so for python modules.'"  That 
should fix the broken Mac OS X tinderbox build at 
, 
and I verified that at least --enable-python=internal indeed works with 
Python components named *.so.


So please also review and cherry-pick that additional patch.

Thanks,
Stephan
___
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice