From 87929a9a2168b1634be69fbdcf97d1a41167de6a Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 27 Aug 2018 16:58:01 +0200 Subject: compat/linkage-macros: simplify --- compat/linkage-macros.hpp | 20 +++++++++++--------- options/value.cpp | 3 ++- options/value.hpp | 40 +++++++++++++++++++--------------------- 3 files changed, 32 insertions(+), 31 deletions(-) diff --git a/compat/linkage-macros.hpp b/compat/linkage-macros.hpp index 967dfba9..77c4502d 100644 --- a/compat/linkage-macros.hpp +++ b/compat/linkage-macros.hpp @@ -1,21 +1,23 @@ #pragma once -#if defined _MSC_VER +#if defined _WIN32 && !defined __WINE__ # define OTR_GENERIC_EXPORT __declspec(dllexport) # define OTR_GENERIC_IMPORT __declspec(dllimport) -#elif defined _WIN32 && !defined(__WINE__) -# define OTR_GENERIC_EXPORT __attribute__((dllexport, visibility ("default"))) -# define OTR_GENERIC_IMPORT __attribute__((dllimport)) #else # define OTR_GENERIC_EXPORT __attribute__ ((visibility ("default"))) # define OTR_GENERIC_IMPORT #endif -#define OTR_TEMPLATE_IMPORT(x) extern template class OTR_GENERIC_IMPORT x +#if defined __MINGW32__ || defined __APPLE__ +# define OTR_TEMPLATE_IMPORT(x) //nothing +#else +# define OTR_TEMPLATE_IMPORT(x) extern template class OTR_GENERIC_IMPORT x +#endif + #define OTR_TEMPLATE_EXPORT_(x) template class OTR_GENERIC_EXPORT x -#if defined _MSC_VER -# define OTR_TEMPLATE_EXPORT OTR_TEMPLATE_EXPORT_ -#else -# define OTR_TEMPLATE_EXPORT OTR_TEMPLATE_EXPORT_ +#if defined __MINGW32__ || defined __APPLE__ +# define OTR_TEMPLATE_EXPORT(x) // nothing +#else /* does this _always_ work for binutils ELF? */ +# define OTR_TEMPLATE_EXPORT(x) OTR_TEMPLATE_EXPORT_(x) #endif diff --git a/options/value.cpp b/options/value.cpp index 0e0725f8..e0be69ae 100644 --- a/options/value.cpp +++ b/options/value.cpp @@ -1,5 +1,6 @@ // instantiate the "template class" value symbols -#define OTR_INST_VALUE OTR_TEMPLATE_EXPORT +#include "compat/linkage-macros.hpp" +#define OTR_INST_VALUE(x) OTR_TEMPLATE_EXPORT(x) #include "value.hpp" diff --git a/options/value.hpp b/options/value.hpp index 7c0a8d56..bfa8b352 100644 --- a/options/value.hpp +++ b/options/value.hpp @@ -150,27 +150,25 @@ public: }; // some linker problems -#if !defined __APPLE__ -# if !defined OTR_INST_VALUE -# define OTR_INST_VALUE OTR_TEMPLATE_IMPORT -# endif - - OTR_INST_VALUE(value); - OTR_INST_VALUE(value); - OTR_INST_VALUE(value); - OTR_INST_VALUE(value); - OTR_INST_VALUE(value); - OTR_INST_VALUE(value); - OTR_INST_VALUE(value); - OTR_INST_VALUE(value); - OTR_INST_VALUE(value>); - OTR_INST_VALUE(value>); - OTR_INST_VALUE(value>); - OTR_INST_VALUE(value>); - OTR_INST_VALUE(value>); - OTR_INST_VALUE(value>); - OTR_INST_VALUE(value>); - OTR_INST_VALUE(value>); +#if !defined OTR_INST_VALUE +# define OTR_INST_VALUE OTR_TEMPLATE_IMPORT #endif +OTR_INST_VALUE(value); +OTR_INST_VALUE(value); +OTR_INST_VALUE(value); +OTR_INST_VALUE(value); +OTR_INST_VALUE(value); +OTR_INST_VALUE(value); +OTR_INST_VALUE(value); +OTR_INST_VALUE(value); +OTR_INST_VALUE(value>); +OTR_INST_VALUE(value>); +OTR_INST_VALUE(value>); +OTR_INST_VALUE(value>); +OTR_INST_VALUE(value>); +OTR_INST_VALUE(value>); +OTR_INST_VALUE(value>); +OTR_INST_VALUE(value>); + } // ns options -- cgit v1.2.3