summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2018-11-05 21:49:59 +0200
committerTor Lillqvist <tml@collabora.com>2018-11-05 22:01:31 +0200
commit9ddb1a12332cd1ac528b1e25d2414dbfe2088811 (patch)
treebffbc91b7cdd4388dc47541873988d3e76f166b6 /vcl
parent0cb0c7f02b745bc040c19aa26c6139dfc1833210 (diff)
Check explicitly for function names and link directly to them on iOS
When building the iOS app with optimisation (using the Release configurtaion), the linker will not include functions even if they have been marked with __attribute__ ((visibility("default"))). To get such a function included, you need an actual reference to it. Sure, I could probably do some other trick instead. Or I could use a table and loop here instead of a sequence of if statements. Later. Change-Id: I86fa38838f242fd1ac251da6e3885f5b166963d3
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/window/builder.cxx28
1 files changed, 24 insertions, 4 deletions
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 6be921bff169..b4c38ca77d30 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -20,6 +20,7 @@
#include <sal/log.hxx>
#include <unotools/resmgr.hxx>
#include <vcl/builder.hxx>
+#include <vcl/builderfactory.hxx>
#include <vcl/button.hxx>
#include <vcl/dialog.hxx>
#include <vcl/edit.hxx>
@@ -1488,6 +1489,15 @@ void VclBuilder::preload()
#endif // DISABLE_DYNLOADING
}
+#if defined DISABLE_DYNLOADING && !HAVE_FEATURE_DESKTOP
+
+VCL_BUILDER_FACTORY_EXTERN(CustomPropertiesControl);
+VCL_BUILDER_FACTORY_EXTERN(RefButton);
+VCL_BUILDER_FACTORY_EXTERN(RefEdit);
+VCL_BUILDER_FACTORY_EXTERN(ScRefButtonEx);
+
+#endif
+
VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &name, const OString &id,
stringmap &rMap)
{
@@ -2040,12 +2050,22 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
}
else
pFunction = reinterpret_cast<customMakeWidget>(aI->second->getFunctionSymbol(sFunction));
+#elif !HAVE_FEATURE_DESKTOP
+ if (false)
+ ; // Just so that all the other condition line pairs look the same
+ else if (sFunction == "makeCustomPropertiesControl")
+ pFunction = makeCustomPropertiesControl;
+ else if (sFunction == "makeRefButton")
+ pFunction = makeRefButton;
+ else if (sFunction == "makeRefEdit")
+ pFunction = makeRefEdit;
+ else if (sFunction == "makeScRefButtonEx")
+ pFunction = makeScRefButtonEx;
+
+ SAL_WARN_IF(!pFunction, "vcl.layout", "Missing case for " << sFunction);
+ assert(pFunction);
#else
pFunction = reinterpret_cast<customMakeWidget>(osl_getFunctionSymbol((oslModule) RTLD_DEFAULT, sFunction.pData));
-#if !HAVE_FEATURE_DESKTOP
- SAL_WARN_IF(!pFunction, "vcl.layout", "Lookup of " << sFunction << " failed");
- assert(pFunction);
-#endif
#endif
if (pFunction)
{