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