Remote Call Framework 3.1
Config.hpp
1 
2 //******************************************************************************
3 // RCF - Remote Call Framework
4 //
5 // Copyright (c) 2005 - 2019, Delta V Software. All rights reserved.
6 // http://www.deltavsoft.com
7 //
8 // RCF is distributed under dual licenses - closed source or GPL.
9 // Consult your particular license for conditions of use.
10 //
11 // If you have not purchased a commercial license, you are using RCF
12 // under GPL terms.
13 //
14 // Version: 3.1
15 // Contact: support <at> deltavsoft.com
16 //
17 //******************************************************************************
18 
19 #ifndef INCLUDE_RCF_CONFIG_HPP
20 #define INCLUDE_RCF_CONFIG_HPP
21 
22 #include <RCF/TypeTraits.hpp>
23 
24 #ifndef RCF_MAX_METHOD_COUNT
25 #define RCF_MAX_METHOD_COUNT 100
26 #endif
27 
28 // C++11 requires us to mark some destructors as throwing.
29 #define RCF_DTOR_THROWS noexcept(false)
30 
31 #ifdef _WIN32
32 #define RCF_WINDOWS
33 #endif
34 
35 #ifdef RCF_USE_CONSTEXPR
36 #define RCF_CONSTEXPR constexpr
37 #else
38 #define RCF_CONSTEXPR
39 #endif
40 
41 //------------------------------------------------------------------------------
42 // Determine which features to compile.
43 
44 #ifndef RCF_PRO
45 #define RCF_PRO 1
46 #endif
47 
48 #ifndef RCF_FEATURE_LEGACY
49 #define RCF_FEATURE_LEGACY 0
50 #endif
51 
52 // RCF_FEATURE_LOCALSOCKET not supported on Windows platforms.
53 #if defined(RCF_FEATURE_LOCALSOCKET) && defined(RCF_WINDOWS)
54 #undef RCF_FEATURE_LOCALSOCKET
55 #define RCF_FEATURE_LOCALSOCKET 0
56 #endif
57 
58 // RCF_FEATURE_NAMEDPIPE not supported on non-Windows platforms.
59 #if defined(RCF_FEATURE_NAMEDPIPE) && !defined(RCF_WINDOWS)
60 #undef RCF_FEATURE_NAMEDPIPE
61 #define RCF_FEATURE_NAMEDPIPE 0
62 #endif
63 
64 // RCF_FEATURE_SSPI not supported on non-Windows platforms.
65 #if defined(RCF_FEATURE_SSPI) && !defined(RCF_WINDOWS)
66 #undef RCF_FEATURE_SSPI
67 #define RCF_FEATURE_SSPI 0
68 #endif
69 
70 
71 // For any features left undefined, define to default value.
72 
73 // Zlib feature.
74 #ifndef RCF_FEATURE_ZLIB
75 #ifdef RCF_USE_ZLIB
76 #define RCF_FEATURE_ZLIB 1
77 #else
78 #define RCF_FEATURE_ZLIB 0
79 #endif
80 #endif
81 
82 // OpenSSL feature.
83 #ifndef RCF_FEATURE_OPENSSL
84 #ifdef RCF_USE_OPENSSL
85 #define RCF_FEATURE_OPENSSL 1
86 #else
87 #define RCF_FEATURE_OPENSSL 0
88 #endif
89 #endif
90 
91 // SSPI feature.
92 #ifndef RCF_FEATURE_SSPI
93 #if defined(RCF_WINDOWS) && RCF_PRO == 1
94 #define RCF_FEATURE_SSPI 1
95 #else
96 #define RCF_FEATURE_SSPI 0
97 #endif
98 #endif
99 
100 // File transfer feature. Off by default as it requires C++17.
101 #ifndef RCF_FEATURE_FILETRANSFER
102 #define RCF_FEATURE_FILETRANSFER 0
103 #endif
104 
105 // Server feature
106 #ifndef RCF_FEATURE_SERVER
107 #define RCF_FEATURE_SERVER 1
108 #endif
109 
110 // Server feature
111 #ifndef RCF_FEATURE_PROXYENDPOINT
112 #define RCF_FEATURE_PROXYENDPOINT 1
113 #endif
114 
115 // Publish/subscribe feature.
116 #ifndef RCF_FEATURE_PUBSUB
117 #define RCF_FEATURE_PUBSUB 1
118 #endif
119 
120 // HTTP/HTTPS feature.
121 #ifndef RCF_FEATURE_HTTP
122 #define RCF_FEATURE_HTTP 1
123 #endif
124 
125 // UDP feature
126 #ifndef RCF_FEATURE_UDP
127 #define RCF_FEATURE_UDP 1
128 #endif
129 
130 // Win32 named pipes feature.
131 #ifndef RCF_FEATURE_NAMEDPIPE
132 #ifdef RCF_WINDOWS
133 #define RCF_FEATURE_NAMEDPIPE 1
134 #else
135 #define RCF_FEATURE_NAMEDPIPE 0
136 #endif
137 #endif
138 
139 // Unix local sockets feature.
140 #ifndef RCF_FEATURE_LOCALSOCKET
141 #ifdef RCF_WINDOWS
142 #define RCF_FEATURE_LOCALSOCKET 0
143 #else
144 #define RCF_FEATURE_LOCALSOCKET 1
145 #endif
146 #endif
147 
148 // TCP feature.
149 #ifndef RCF_FEATURE_TCP
150 #define RCF_FEATURE_TCP 1
151 #endif
152 
153 // IPv6 feature
154 #ifndef RCF_FEATURE_IPV6
155 #define RCF_FEATURE_IPV6 1
156 #endif
157 
158 // Protocol Buffers feature
159 #ifndef RCF_FEATURE_PROTOBUF
160 #ifdef RCF_USE_PROTOBUF
161 #define RCF_FEATURE_PROTOBUF 1
162 #else
163 #define RCF_FEATURE_PROTOBUF 0
164 #endif
165 #endif
166 
167 // Custom allocator feature.
168 #ifndef RCF_FEATURE_CUSTOM_ALLOCATOR
169 #ifdef RCF_USE_CUSTOM_ALLOCATOR
170 #define RCF_FEATURE_CUSTOM_ALLOCATOR 1
171 #else
172 #define RCF_FEATURE_CUSTOM_ALLOCATOR 0
173 #endif
174 #endif
175 
176 
177 // RCF_FEATURE_SF / RCF_FEATURE_BOOST_SERIALIZATION.
178 // For backward compatibility we need to interpret RCF_USE_SF_SERIALIZATION / RCF_USE_BOOST_SERIALIZATION correctly.
179 
180 #ifndef RCF_FEATURE_SF
181 #ifdef RCF_USE_SF_SERIALIZATION
182 #define RCF_FEATURE_SF 1
183 #elif !defined(RCF_USE_SF_SERIALIZATION) && defined(RCF_USE_BOOST_SERIALIZATION)
184 #define RCF_FEATURE_SF 0
185 #else
186 #define RCF_FEATURE_SF 1
187 #endif
188 #endif
189 
190 #ifndef RCF_FEATURE_BOOST_SERIALIZATION
191 #ifdef RCF_USE_BOOST_SERIALIZATION
192 #define RCF_FEATURE_BOOST_SERIALIZATION 1
193 #else
194 #define RCF_FEATURE_BOOST_SERIALIZATION 0
195 #endif
196 #endif
197 
198 //------------------------------------------------------------------------------
199 
200 // Detect TR1 availability.
201 #ifndef RCF_USE_TR1
202 
203  // MSVC
204  #if defined(_MSC_VER) && (_MSC_VER >= 1600 || (_MSC_VER == 1500 && _MSC_FULL_VER >= 150030729))
205  #define RCF_USE_TR1
206  #define RCF_TR1_HEADER(x) <x>
207  #endif
208 
209  // GCC
210  #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
211  #define RCF_USE_TR1
212  #define RCF_TR1_HEADER(x) <tr1/x>
213  #endif
214 
215 #endif // RCF_USE_TR1
216 
217 // Detect hash_map/hash_set availability.
218 #ifndef RCF_USE_HASH_MAP
219 
220  #if (defined(_MSC_VER) && _MSC_VER >= 1310) || (defined(__GNUC__) && __GNUC__ == 3)
221  #define RCF_USE_HASH_MAP
222  #if defined(_MSC_VER)
223  #define RCF_HASH_MAP_HEADER(x) <x>
224  #define RCF_HASH_MAP_NS stdext
225  #elif defined(__GNUC__)
226  #define RCF_HASH_MAP_HEADER(x) <ext/x>
227  #define RCF_HASH_MAP_NS __gnu_cxx
228  #endif
229  #endif
230 
231 #endif // RCF_USE_HASH_MAP
232 
233 namespace RCF {
234 
235  typedef Int<RCF_FEATURE_SF> RcfConfig_SF;
236  typedef Int<RCF_FEATURE_BOOST_SERIALIZATION> RcfConfig_BSer;
237  typedef Int<RCF_FEATURE_FILETRANSFER> RcfConfig_FileTransfer;
238  typedef Int<RCF_FEATURE_PROTOBUF> RcfConfig_Protobufs;
239 
240  template<int N1, int N2, int N3, int N4>
241  struct RcfConfigurationDetectMismatches
242  {
243  };
244 
245  typedef RcfConfigurationDetectMismatches<
246  RcfConfig_SF::value,
247  RcfConfig_BSer::value,
248  RcfConfig_FileTransfer::value,
249  RcfConfig_Protobufs::value> RcfConfigT;
250 
251 } // namespace RCF
252 
253 #ifdef _MSC_VER
254 #ifndef _CPPRTTI
255  // RTTI support not detected!
256  // If you're using Visual C++, set "Enable Run-Time Type Info" to true,
257  // in the Project Properties | C/C++ | Language options,
258 #error RCF requires Run-Time Type Info support to be enabled.
259 #endif
260 #endif
261 
262 // Borrowed from Boost, to determine which current function macro to use.
263 #if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)
264 # define RCF_CURRENT_FUNCTION __PRETTY_FUNCTION__
265 #elif defined(__DMC__) && (__DMC__ >= 0x810)
266 # define RCF_CURRENT_FUNCTION __PRETTY_FUNCTION__
267 #elif defined(__FUNCSIG__)
268 # define RCF_CURRENT_FUNCTION __FUNCSIG__
269 #elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500))
270 # define RCF_CURRENT_FUNCTION __FUNCTION__
271 #elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)
272 # define RCF_CURRENT_FUNCTION __FUNC__
273 #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
274 # define RCF_CURRENT_FUNCTION __func__
275 #elif defined(__cplusplus) && (__cplusplus >= 201103)
276 # define RCF_CURRENT_FUNCTION __func__
277 #else
278 # define RCF_CURRENT_FUNCTION "(unknown)"
279 #endif
280 
281 // Need these defines so asio doesn't pull in any Boost code.
282 #ifndef RCF_USE_BOOST_ASIO
283 
284 #ifndef ASIO_STANDALONE
285 #define ASIO_STANDALONE
286 #endif
287 
288 #ifndef ASIO_HAS_STD_CHRONO
289 #define ASIO_HAS_STD_CHRONO
290 #endif
291 
292 #endif // ! RCF_USE_BOOST_ASIO
293 
294 #endif // ! INCLUDE_RCF_CONFIG_HPP
Definition: AmiIoHandler.hpp:24