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