Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


On 03/20/2012 11:02 PM, Tor Lillqvist wrote:
commit 25d114eec4d451acdda1ddff4c8ed9d47ba6275f
Author: Tor Lillqvist<tml@iki.fi>
Date:   Tue Mar 20 23:18:55 2012 +0200

     Initial experiments with static linking of (some) components / services

     Start with the first service needed when running sc's filters_test:
     the UniversalContentBroker. It might not be typical as ucb uses the
     deprecated XSingleServiceFactory.

     This commit is not at all a complete solution, far from it, just an
     initial hack. Naturally once I come up with some generic enough way to
     do the static linking the necessary macros etc will be added to some
     general header.

     The macro XSERVICEINFO_IMPL_1 (local to ucbhelper and ucb) is amended
     so that it in the disable-dynamic-linking case also emits a function
     whose assembler name equal contains the service name. This function
     returns the XSingleServiceFactory for the service. Where the service
     is instantiated we link directly to that function.

     But probably this will be reworked a couple of times... Maybe it would
     be better to simply have the service name specific entry point be a
     pointer to the component's component_getFactory() function? Those all
     have the same prototype.

I wonder two things:

1 Is this the right place to make changes, at the call sites instantiating UNO services? Why not rather leverage the existing .component file prefix attribute, combining all the component_getFactory functions into the one single executable (disambiguating them via prefixes), and tell the UNO shared library loader to not bother with multiple libs, but just call the relevant <prefix>_compoenent_getFactory in the one single executable? Sounds simpler to me.

2 If it /is/ the right place, maybe, ultimately, we could make use of the fact that the new style service constructors are generated by cppumaker. -- Turn all UNO service definitions into new-style ones, change all call sites to use constructors (cf. <https://bugs.freedesktop.org/show_bug.cgi?id=46808> "[Easy Hack] Adapt UNO services to new-style"), and in the DISABLE_DYNLOADING case let cppumaker emit constructors that somehow directly call the implementation class (which would require some sort of mapping, so that cppumaker could know the name of the C++ implementation class to call).

Stephan

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.