summaryrefslogtreecommitdiff
path: root/svtools
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2012-10-07 07:52:26 +0300
committerTor Lillqvist <tml@iki.fi>2012-10-07 07:59:15 +0300
commit97593ae24a98daca89fad176dc2492e582b3a821 (patch)
treef52189545a5c5ffbc7cece7bca595b2cd18c9cc0 /svtools
parent1691752dd29d661552700d9bcac5d3a3953fb91a (diff)
Handle lack of module loading/unloading API when DISABLE_DYNLOADING
There are basicically two classes of cases: 1) Where the code is for obscure historical reasons or what I see as misguided "optimization" split into a more libraries than necessary, and these then are loaded at run-time. Instead, just use direct linking. 2) Where dynamic loading is part of the functionality offered to some upper (scripting etc) layer, or where some system-specific non-LO library is loaded dynamically, as it is not necessarily present on end-user machines. Can't have such in the DISABLE_DYNLOADING case. Change-Id: I9eceac5fb635245def2f4f3320821447bb7cd8c0
Diffstat (limited to 'svtools')
-rw-r--r--svtools/source/filter/filter.cxx94
-rw-r--r--svtools/source/misc/svtaccessiblefactory.cxx9
2 files changed, 101 insertions, 2 deletions
diff --git a/svtools/source/filter/filter.cxx b/svtools/source/filter/filter.cxx
index aaacb12884f8..6428c2ea6b4b 100644
--- a/svtools/source/filter/filter.cxx
+++ b/svtools/source/filter/filter.cxx
@@ -915,7 +915,9 @@ class ImpFilterLibCache;
struct ImpFilterLibCacheEntry
{
ImpFilterLibCacheEntry* mpNext;
+#ifndef DISABLE_DYNLOADING
osl::Module maLibrary;
+#endif
String maFiltername;
PFilterCall mpfnImport;
PFilterDlgCall mpfnImportDlg;
@@ -930,19 +932,67 @@ struct ImpFilterLibCacheEntry
ImpFilterLibCacheEntry::ImpFilterLibCacheEntry( const String& rPathname, const String& rFiltername ) :
mpNext ( NULL ),
+#ifndef DISABLE_DYNLOADING
maLibrary ( rPathname ),
+#endif
maFiltername ( rFiltername ),
mpfnImport ( NULL ),
mpfnImportDlg ( NULL )
{
+#ifdef DISABLE_DYNLOADING
+ (void) rPathname;
+#endif
}
// ------------------------------------------------------------------------
+#ifdef DISABLE_DYNLOADING
+
+extern "C" sal_Bool icdGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool idxGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool imeGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool ipbGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool ipdGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool ipsGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool iptGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool ipxGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool iraGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool itgGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool itiGraphicImport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+
+#endif
+
PFilterCall ImpFilterLibCacheEntry::GetImportFunction()
{
if( !mpfnImport )
+ {
+#ifndef DISABLE_DYNLOADING
mpfnImport = (PFilterCall) maLibrary.getFunctionSymbol(rtl::OUString(IMPORT_FUNCTION_NAME));
+#else
+ if( maFiltername.EqualsAscii( "icd" ) )
+ mpfnImport = icdGraphicImport;
+ else if( maFiltername.EqualsAscii( "idx" ) )
+ mpfnImport = idxGraphicImport;
+ else if( maFiltername.EqualsAscii( "ime" ) )
+ mpfnImport = imeGraphicImport;
+ else if( maFiltername.EqualsAscii( "ipb" ) )
+ mpfnImport = ipbGraphicImport;
+ else if( maFiltername.EqualsAscii( "ipd" ) )
+ mpfnImport = ipdGraphicImport;
+ else if( maFiltername.EqualsAscii( "ips" ) )
+ mpfnImport = ipsGraphicImport;
+ else if( maFiltername.EqualsAscii( "ipt" ) )
+ mpfnImport = iptGraphicImport;
+ else if( maFiltername.EqualsAscii( "ipx" ) )
+ mpfnImport = ipxGraphicImport;
+ else if( maFiltername.EqualsAscii( "ira" ) )
+ mpfnImport = iraGraphicImport;
+ else if( maFiltername.EqualsAscii( "itg" ) )
+ mpfnImport = itgGraphicImport;
+ else if( maFiltername.EqualsAscii( "iti" ) )
+ mpfnImport = itiGraphicImport;
+#endif
+ }
return mpfnImport;
}
@@ -1003,19 +1053,22 @@ ImpFilterLibCacheEntry* ImpFilterLibCache::GetFilter( const String& rFilterPath,
{
String aPhysicalName( ImpCreateFullFilterPath( rFilterPath, rFilterName ) );
pEntry = new ImpFilterLibCacheEntry( aPhysicalName, rFilterName );
-
+#ifndef DISABLE_DYNLOADING
if ( pEntry->maLibrary.is() )
+#endif
{
if( !mpFirst )
mpFirst = mpLast = pEntry;
else
mpLast = mpLast->mpNext = pEntry;
}
+#ifndef DISABLE_DYNLOADING
else
{
delete pEntry;
pEntry = NULL;
}
+#endif
}
return pEntry;
};
@@ -1735,6 +1788,21 @@ sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const INetURLO
// ------------------------------------------------------------------------
+#ifdef DISABLE_DYNLOADING
+
+extern "C" sal_Bool egiGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool emeGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool epbGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool epgGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool eppGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool epsGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool eptGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool eraGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool etiGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+extern "C" sal_Bool expGraphicExport( SvStream& rStream, Graphic& rGraphic, FilterConfigItem* pConfigItem, sal_Bool );
+
+#endif
+
sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const String& rPath,
SvStream& rOStm, sal_uInt16 nFormat, const uno::Sequence< beans::PropertyValue >* pFilterData )
{
@@ -2050,11 +2118,35 @@ sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const String&
sal_Int32 i, nTokenCount = getTokenCount(aFilterPath, ';');
for ( i = 0; i < nTokenCount; i++ )
{
+#ifndef DISABLE_DYNLOADING
String aPhysicalName( ImpCreateFullFilterPath( getToken(aFilterPath, i, ';'), aFilterName ) );
osl::Module aLibrary( aPhysicalName );
PFilterCall pFunc = (PFilterCall) aLibrary.getFunctionSymbol(rtl::OUString(EXPORT_FUNCTION_NAME));
// Dialog in DLL ausfuehren
+#else
+ PFilterCall pFunc = NULL;
+ if( aFilterName.EqualsAscii( "egi" ) )
+ pFunc = egiGraphicExport;
+ else if( aFilterName.EqualsAscii( "eme" ) )
+ pFunc = emeGraphicExport;
+ else if( aFilterName.EqualsAscii( "epb" ) )
+ pFunc = epbGraphicExport;
+ else if( aFilterName.EqualsAscii( "epg" ) )
+ pFunc = epgGraphicExport;
+ else if( aFilterName.EqualsAscii( "epp" ) )
+ pFunc = eppGraphicExport;
+ else if( aFilterName.EqualsAscii( "eps" ) )
+ pFunc = epsGraphicExport;
+ else if( aFilterName.EqualsAscii( "ept" ) )
+ pFunc = eptGraphicExport;
+ else if( aFilterName.EqualsAscii( "era" ) )
+ pFunc = eraGraphicExport;
+ else if( aFilterName.EqualsAscii( "eti" ) )
+ pFunc = etiGraphicExport;
+ else if( aFilterName.EqualsAscii( "exp" ) )
+ pFunc = expGraphicExport;
+#endif
if( pFunc )
{
if ( !(*pFunc)( rOStm, aGraphic, &aConfigItem, sal_False ) )
diff --git a/svtools/source/misc/svtaccessiblefactory.cxx b/svtools/source/misc/svtaccessiblefactory.cxx
index f08fb7db1aac..013e946bba95 100644
--- a/svtools/source/misc/svtaccessiblefactory.cxx
+++ b/svtools/source/misc/svtaccessiblefactory.cxx
@@ -265,7 +265,11 @@ namespace svt
}
//--------------------------------------------------------------------
+#ifndef DISABLE_DYNLOADING
extern "C" { static void SAL_CALL thisModule() {} }
+#else
+ extern "C" void* getSvtAccessibilityComponentFactory();
+#endif
void AccessibleFactoryAccess::ensureInitialized()
{
@@ -281,6 +285,7 @@ namespace svt
// load the library implementing the factory
if ( !s_pFactory.get() )
{
+#ifndef DISABLE_DYNLOADING
const ::rtl::OUString sModuleName( SVLIBRARY( "acc" ));
s_hAccessibleImplementationModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, 0 );
if ( s_hAccessibleImplementationModule != NULL )
@@ -291,7 +296,9 @@ namespace svt
}
OSL_ENSURE( s_pAccessibleFactoryFunc, "ac_registerClient: could not load the library, or not retrieve the needed symbol!" );
-
+#else
+ s_pAccessibleFactoryFunc = getSvtAccessibilityComponentFactory;
+#endif
// get a factory instance
if ( s_pAccessibleFactoryFunc )
{