summaryrefslogtreecommitdiff
path: root/idl
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2014-03-13 11:03:04 +0100
committerMatúš Kukan <matus.kukan@collabora.com>2014-03-14 09:31:42 +0100
commitfc27a685d466dc380a8b68cd48f47db632ed3693 (patch)
tree3c9d7ec646b878d57742658e361b083d942e2078 /idl
parentbee9ea584cb5c1e6bee802c45214010d072846db (diff)
Avoid duplicate symbols in libmerged for Windows too.
Export these symbols from sfx library. For cases when we link together more libraries, there are more symbols, so I've kept __attribute__((__weak__)) hack there. Change-Id: I8b7f6fc9bea479dca5062344c04b74c1f3eb36b2
Diffstat (limited to 'idl')
-rw-r--r--idl/inc/database.hxx2
-rw-r--r--idl/source/objects/types.cxx25
-rw-r--r--idl/source/prj/database.cxx1
3 files changed, 26 insertions, 2 deletions
diff --git a/idl/inc/database.hxx b/idl/inc/database.hxx
index 15e87f29da87..f9abfd226f4b 100644
--- a/idl/inc/database.hxx
+++ b/idl/inc/database.hxx
@@ -81,6 +81,8 @@ protected:
aIFaceName = OString();
}
public:
+ OUString sSlotMapFile;
+
explicit SvIdlDataBase( const SvCommand& rCmd );
~SvIdlDataBase();
static sal_Bool IsBinaryFormat( SvStream & rInStm );
diff --git a/idl/source/objects/types.cxx b/idl/source/objects/types.cxx
index 1797fa2b3409..6dc82163888d 100644
--- a/idl/source/objects/types.cxx
+++ b/idl/source/objects/types.cxx
@@ -1398,7 +1398,7 @@ sal_uLong SvMetaType::MakeSfx( OStringBuffer& rAttrArray )
}
void SvMetaType::WriteSfxItem(
- const OString& rItemName, SvIdlDataBase &, SvStream & rOutStm )
+ const OString& rItemName, SvIdlDataBase& rBase, SvStream& rOutStm )
{
WriteStars( rOutStm );
OStringBuffer aVarName(" a");
@@ -1411,14 +1411,35 @@ void SvMetaType::WriteSfxItem(
OString::number(nAttrCount));
aTypeName.append(aAttrCount);
- rOutStm.WriteCharPtr( "extern " ).WriteCharPtr( aTypeName.getStr() )
+ bool bExport = false, bReturn = false;
+ // these are exported from sfx library
+ if (rItemName == "SfxBoolItem" ||
+ rItemName == "SfxStringItem" ||
+ rItemName == "SfxUInt16Item" ||
+ rItemName == "SfxUInt32Item" ||
+ rItemName == "SfxVoidItem")
+ {
+ if (rBase.sSlotMapFile.endsWith("sfxslots.hxx"))
+ bExport = true;
+ else
+ bReturn = true;
+ }
+
+ rOutStm.WriteCharPtr( "extern " );
+ if (bExport)
+ rOutStm.WriteCharPtr( "SFX2_DLLPUBLIC " );
+ rOutStm.WriteCharPtr( aTypeName.getStr() )
.WriteCharPtr( aVarName.getStr() ).WriteChar( ';' ) << endl;
+ if (bReturn)
+ return;
// write the implementation part
rOutStm.WriteCharPtr( "#ifdef SFX_TYPEMAP" ) << endl;
rOutStm.WriteCharPtr( "#if !defined(_WIN32) && ((defined(DISABLE_DYNLOADING) && (defined(ANDROID) || defined(IOS))) || STATIC_LINKING)" ) << endl;
rOutStm.WriteCharPtr( "__attribute__((__weak__))" ) << endl;
rOutStm.WriteCharPtr( "#endif" ) << endl;
+ if (bExport)
+ rOutStm.WriteCharPtr( "SFX2_DLLPUBLIC " );
rOutStm.WriteCharPtr( aTypeName.getStr() ).WriteCharPtr( aVarName.getStr() )
.WriteCharPtr( " = " ) << endl;
rOutStm.WriteChar( '{' ) << endl;
diff --git a/idl/source/prj/database.cxx b/idl/source/prj/database.cxx
index 3ac165ddcabe..04f351c6c80d 100644
--- a/idl/source/prj/database.cxx
+++ b/idl/source/prj/database.cxx
@@ -34,6 +34,7 @@ SvIdlDataBase::SvIdlDataBase( const SvCommand& rCmd )
, aPersStream( *IDLAPP->pClassMgr, NULL )
, pIdTable( NULL )
{
+ sSlotMapFile = rCmd.aSlotMapFile;
}
SvIdlDataBase::~SvIdlDataBase()