[Libreoffice] Using Inflater/Deflater classes from component/package - using component symbols
Michael Meeks
michael.meeks at novell.com
Tue Mar 22 04:22:17 PDT 2011
Hi Peter,
On Mon, 2011-03-21 at 22:57 +0000, Peter Jentsch wrote:
> after hibernating for a while I've started to finish where I left off in
> removing the Java dependency from xsltfilter (was EasyHack De-Java-Ise
> flat xml export).
Wonderful news :-)
> I've ported the Java code from XSLTFilterOLEExtracter
> (sic) to C++ and found there's a generic C++ interface to zlib hidden in
> component/package (components/package/source/zipapi). It features
> Inflater/Deflater classes that work pretty much like the ones in the Java
> runtime. I figured how to compile against that by delivering the header
> files to solver, but fail to link against the libpackage2.so library that
> seems to contain the classes.
Ah - ok; so first off in the 'beautiful' theory of UNO components
mind-set that is a "bad idea" (TM) - on the other hand, I happen to not
believe in a beautiful world of UNO components - and tons of libraries
export both components and symbols that can be usefully re-used without
tons of inefficient time-wasting pain :-)
So - lets go for it.
> The Zip implementation also seems to be
> exposed as a UNO service, but that assumes I'm working on complete zip
> files, while the OLE embedding stuff xslt filter uses assumes it only
> works on single deflated entries.
Well - if you are using a zip file underneath - I would suggest using
the existing package/ UNO interface - it is not particularly pleasant,
but you can see how the images.zip stuff works for the theme in some
fairly simple code in vcl/ sniff around vcl/source/gdi/impimagetree.cxx
(eg.).
> Should I try to rewrite the stuff to work on top of that service? Is there
> a way to make Inflater/Deflater directly accessible to other code? I'm
> stuck here and need some advice.
Of course; if you just have an individual compressed stream that you
want to work on I don't see why we can't export those symbols.
The problem is the component.map file that is linked against; cf.
package/util/makefile.mk:
SHL1VERSIONMAP=$(SOLARENV)$/src$/component.map
This hides all symbols except a few C entry points for good performance
reasons. Checkout objdump -T <libpackage*> to see for yourself.
If we want to selectively export symbols we need to do this
differently. See:
sw/inc/swdllapi.h
You need a header like that file inside package/ Then you need to add a
PACKAGE_DLL_PUBLIC to the symbols you want to export, and of course to
add a CFLAGS+=-DPACKAGE_DLLIMPLEMENTATION type thing in the
makefile.mk's where you're compiling that stuff.
Then drop the map file in util/makefile.mk; and -hopefully- you have a
library that can be linked to & re-used easily.
Hope that helps !
Looking forward to seeing the fruit of your labour,
ATB,
Michael.
--
michael.meeks at novell.com <><, Pseudo Engineer, itinerant idiot
More information about the LibreOffice
mailing list