@@ -79,12 +79,14 @@ num_option(USE_REVOKE_TOKEN_API "Use revoke token API [OPENSSL ONLY]" OFF)
79
79
num_option(USE_GRANT_TOKEN_API "Use grant token API [OPENSSL ONLY]" OFF )
80
80
num_option(USE_FETCH_HISTORY "Use fetch history" ON )
81
81
num_option(USE_CRYPTO_API "Use crypto API [OPENSSL ONLY]" OFF )
82
- num_option(USE_CALLBACK_API "Use callback API [CALLBACK=ON SYNC=OFF]" ${DEFAULT_USE_CALLBACK_API} )
82
+ num_option(USE_NTF_RUNTIME_SELECTION "Use runtime NTF API selection" OFF )
83
+ num_option(USE_CALLBACK_API "Use callback API" ${DEFAULT_USE_CALLBACK_API} )
83
84
num_option(USE_IPV6 "Use IPv6" ON )
84
85
num_option(USE_SET_DNS_SERVERS "Use set DNS servers [CALLBACK=ON]" ${DEFAULT_USE_CALLBACK_API} )
85
86
num_option(USE_EXTERN_API "Use extern C API [WITH_CPP=ON]" ON )
86
87
num_option(USE_LEGACY_CRYPTO_RANDOM_IV "Use random IV for legacy crypto module [OpenSSL only]" ON )
87
88
num_option(USE_LOG_CALLBACK "Use possibility to replace default logging function with user provided callback" OFF )
89
+ log_option(COMPILE_COMMANDS "Generate compile_commands.json" OFF )
88
90
log_set(OPENSSL_ROOT_DIR "" "OpenSSL root directory (leave empty for find_package() defaults)[OPENSSL=ON needed]" )
89
91
log_set(CUSTOM_OPENSSL_LIB_DIR "lib" "OpenSSL lib directory relative to OPENSSL_ROOT_DIR [used only if find_package() failed]" )
90
92
log_set(CUSTOM_OPENSSL_INCLUDE_DIR "include" "OpenSSL include directory relative to OPENSSL_ROOT_DIR [used only if find_package() failed]" )
@@ -97,6 +99,15 @@ if (${OPENSSL} AND ${MBEDTLS})
97
99
message (FATAL_ERROR "You can't use both OpenSSL and mbedTLS at the same time!" )
98
100
endif ()
99
101
102
+ if (${USE_NTF_RUNTIME_SELECTION} AND NOT ${USE_CALLBACK_API} )
103
+ message (FATAL_ERROR "You must enable callback API to use runtime NTF API selection!" )
104
+ endif ()
105
+
106
+ if (${COMPILE_COMMANDS} )
107
+ message (STATUS "Generating compile_commands.json" )
108
+ set (CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "" )
109
+ endif ()
110
+
100
111
# Flags configuration
101
112
102
113
set (FLAGS "\
@@ -143,7 +154,13 @@ if (${USE_CALLBACK_API})
143
154
${FLAGS} \
144
155
-D PUBNUB_SET_DNS_SERVERS=${USE_SET_DNS_SERVERS} \
145
156
-D PUBNUB_USE_IPV6=${USE_IPV6} \
146
- -D PUBNUB_CALLBACK_API" )
157
+ -D PUBNUB_CALLBACK_API=${USE_CALLBACK_API} " )
158
+ endif ()
159
+
160
+ if (${USE_SYNC_API} )
161
+ set (FLAGS "\
162
+ ${FLAGS} \
163
+ -D PUBNUB_USE_SYNC_API=${USE_SYNC_API} " )
147
164
endif ()
148
165
149
166
if (${ASAN} )
@@ -195,30 +212,25 @@ set(CORE_SOURCEFILES
195
212
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_helper.c
196
213
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_generate_uuid_v3_md5.c
197
214
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_free_with_timeout_std.c
215
+ ${CMAKE_CURRENT_LIST_DIR} /core/pubnub_alloc_std.c
216
+ ${CMAKE_CURRENT_LIST_DIR} /core/pubnub_memory_block.c
198
217
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_url_encode.c)
199
218
200
219
set (LIB_SOURCEFILES
201
220
${CMAKE_CURRENT_LIST_DIR} /lib/sockets/pbpal_handle_socket_error.c
202
221
${CMAKE_CURRENT_LIST_DIR} /lib/base64/pbbase64.c
203
222
${CMAKE_CURRENT_LIST_DIR} /lib/pb_strnlen_s.c
204
- ${CMAKE_CURRENT_LIST_DIR} /lib/pb_strncasecmp.c
205
- ${CMAKE_CURRENT_LIST_DIR} /lib/pubnub_dns_codec.c)
223
+ ${CMAKE_CURRENT_LIST_DIR} /lib/pb_strncasecmp.c)
206
224
207
225
if (UNIX OR WIN32 OR WIN64 OR MSVC )
208
226
set (CORE_SOURCEFILES
209
227
${CORE_SOURCEFILES}
210
- ${CMAKE_CURRENT_LIST_DIR} /core/pubnub_alloc_std.c
211
228
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_generate_uuid.c
212
229
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_assert_std.c)
213
230
214
231
set (LIB_SOURCEFILES
215
232
${LIB_SOURCEFILES}
216
- ${CMAKE_CURRENT_LIST_DIR} /lib/sockets/pbpal_adns_sockets.c
217
233
${CMAKE_CURRENT_LIST_DIR} /lib/sockets/pbpal_resolv_and_connect_sockets.c)
218
- else ()
219
- set (CORE_SOURCEFILES
220
- ${CORE_SOURCEFILES}
221
- ${CMAKE_CURRENT_LIST_DIR} /core/pubnub_alloc_std.c)
222
234
endif ()
223
235
224
236
if (NOT ${OPENSSL} )
@@ -233,11 +245,13 @@ if (UNIX)
233
245
set (LDLIBS "-lpthread ${LDLIBS} " )
234
246
set (OS_SOURCEFILES
235
247
${CMAKE_CURRENT_LIST_DIR} /posix/posix_socket_blocking_io.c
236
- ${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_version_posix.c
237
248
${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_generate_uuid_posix.c
238
249
${CMAKE_CURRENT_LIST_DIR} /posix/msstopwatch_monotonic_clock.c
239
250
${CMAKE_CURRENT_LIST_DIR} /posix/pbtimespec_elapsed_ms.c
240
251
${CMAKE_CURRENT_LIST_DIR} /posix/pb_sleep_ms.c)
252
+ if (NOT ${WITH_CPP} )
253
+ set (OS_SOURCEFILES ${OS_SOURCEFILES} ${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_version_posix.c)
254
+ endif ()
241
255
242
256
if (APPLE )
243
257
set (OS_SOURCEFILES ${OS_SOURCEFILES} ${CMAKE_CURRENT_LIST_DIR} /posix/monotonic_clock_get_time_darwin.c)
@@ -251,12 +265,15 @@ elseif (WIN32 OR WIN64 OR MSVC)
251
265
set (OS_SOURCEFILES
252
266
${CMAKE_CURRENT_LIST_DIR} /windows/windows_socket_blocking_io.c
253
267
${CMAKE_CURRENT_LIST_DIR} /windows/pbtimespec_elapsed_ms.c
254
- ${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_version_windows.c
255
268
${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_generate_uuid_windows.c
256
269
${CMAKE_CURRENT_LIST_DIR} /windows/pbpal_windows_blocking_io.c
257
270
${CMAKE_CURRENT_LIST_DIR} /windows/msstopwatch_windows.c
258
271
${CMAKE_CURRENT_LIST_DIR} /windows/pb_sleep_ms.c
259
272
${CMAKE_CURRENT_LIST_DIR} /windows/pbauto_heartbeat_init_windows.c)
273
+
274
+ if (NOT ${WITH_CPP} )
275
+ set (OS_SOURCEFILES ${OS_SOURCEFILES} ${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_version_windows.c)
276
+ endif ()
260
277
else ()
261
278
message (STATUS "Using FreeRTOS setup" )
262
279
@@ -276,11 +293,8 @@ endif ()
276
293
set (INTF_SOURCEFILES)
277
294
278
295
if (${USE_CALLBACK_API} )
279
- message (STATUS "Using callback API" )
280
-
281
296
set (CORE_SOURCEFILES
282
297
${CORE_SOURCEFILES}
283
- ${CMAKE_CURRENT_LIST_DIR} /core/pubnub_memory_block.c
284
298
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_dns_servers.c)
285
299
286
300
set (INTF_SOURCEFILES
@@ -293,31 +307,74 @@ if (${USE_CALLBACK_API})
293
307
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_callback_subscribe_loop.c
294
308
${CMAKE_CURRENT_LIST_DIR} /core/pbpal_ntf_callback_admin.c
295
309
${CMAKE_CURRENT_LIST_DIR} /lib/sockets/pbpal_adns_sockets.c
310
+ ${CMAKE_CURRENT_LIST_DIR} /lib/pubnub_dns_codec.c
296
311
${INTF_SOURCEFILES} )
297
312
298
313
if (UNIX )
299
314
set (INTF_SOURCEFILES
300
315
${INTF_SOURCEFILES}
301
- ${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_dns_system_servers.c
302
- ${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_ntf_callback_posix.c
303
- ${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_get_native_socket.c)
316
+ ${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_dns_system_servers.c)
317
+ if (${OPENSSL} )
318
+ set (INTF_SOURCEFILES
319
+ ${INTF_SOURCEFILES}
320
+ ${CMAKE_CURRENT_LIST_DIR} /openssl/pubnub_get_native_socket.c
321
+ ${CMAKE_CURRENT_LIST_DIR} /openssl/pubnub_ntf_callback_posix.c)
322
+ else ()
323
+ set (INTF_SOURCEFILES
324
+ ${INTF_SOURCEFILES}
325
+ ${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_get_native_socket.c
326
+ ${CMAKE_CURRENT_LIST_DIR} /posix/pubnub_ntf_callback_posix.c)
327
+ endif ()
328
+
304
329
elseif (WIN32 OR WIN64 OR MSVC )
305
330
set (INTF_SOURCEFILES
306
331
${INTF_SOURCEFILES}
307
- ${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_ntf_callback_windows.c
308
- ${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_dns_system_servers.c
309
- ${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_get_native_socket.c)
332
+ ${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_dns_system_servers.c)
333
+ if (${OPENSSL} )
334
+ set (INTF_SOURCEFILES
335
+ ${INTF_SOURCEFILES}
336
+ ${CMAKE_CURRENT_LIST_DIR} /openssl/pubnub_get_native_socket.c
337
+ ${CMAKE_CURRENT_LIST_DIR} /openssl/pubnub_ntf_callback_windows.c)
338
+ else ()
339
+ set (INTF_SOURCEFILES
340
+ ${INTF_SOURCEFILES}
341
+ ${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_get_native_socket.c
342
+ ${CMAKE_CURRENT_LIST_DIR} /windows/pubnub_ntf_callback_windows.c)
343
+ endif ()
310
344
endif ()
311
- else ()
312
- message (STATUS "Using sync API" )
313
345
346
+ if (UNIX OR WIN32 OR WIN64 OR MSVC )
347
+ set (INTF_SOURCEFILES
348
+ ${INTF_SOURCEFILES}
349
+ ${CMAKE_CURRENT_LIST_DIR} /lib/sockets/pbpal_adns_sockets.c)
350
+ endif ()
351
+ endif ()
352
+
353
+ if (${USE_NTF_RUNTIME_SELECTION} OR NOT ${USE_CALLBACK_API} )
314
354
set (INTF_SOURCEFILES
315
355
${INTF_SOURCEFILES}
316
356
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_ntf_sync.c
317
357
${CMAKE_CURRENT_LIST_DIR} /core/pubnub_sync_subscribe_loop.c
318
358
${CMAKE_CURRENT_LIST_DIR} /core/srand_from_pubnub_time.c)
319
359
endif ()
320
360
361
+ if (${USE_NTF_RUNTIME_SELECTION} )
362
+ message (STATUS "Using runtime API selection" )
363
+
364
+ set (CMAKE_C_FLAGS "\
365
+ ${CMAKE_C_FLAGS} \
366
+ -D PUBNUB_NTF_RUNTIME_SELECTION" )
367
+
368
+ set (INTF_SOURCEFILES
369
+ ${INTF_SOURCEFILES}
370
+ ${CMAKE_CURRENT_LIST_DIR} /core/pubnub_ntf_enforcement.c)
371
+
372
+ elseif (${USE_CALLBACK_API} )
373
+ message (STATUS "Using callback API" )
374
+ else ()
375
+ message (STATUS "Using sync API" )
376
+ endif ()
377
+
321
378
set (FEATURE_SOURCEFILES)
322
379
323
380
if (${USE_PROXY} )
@@ -495,6 +552,7 @@ if (${OPENSSL})
495
552
${LIB_SOURCEFILES} )
496
553
497
554
set (FEATURE_SOURCEFILES
555
+ ${CMAKE_CURRENT_LIST_DIR} /core/pubnub_ssl.c
498
556
${CMAKE_CURRENT_LIST_DIR} /openssl/pbpal_openssl.c
499
557
${CMAKE_CURRENT_LIST_DIR} /openssl/pbpal_connect_openssl.c
500
558
${CMAKE_CURRENT_LIST_DIR} /openssl/pbpal_openssl_blocking_io.c
@@ -732,11 +790,18 @@ if (${EXAMPLES})
732
790
message (STATUS "Building callback examples" )
733
791
set (EXAMPLE_LIST
734
792
pubnub_callback_sample
735
- pubnub_callback_subloop_sample
736
793
subscribe_publish_callback_sample
737
794
subscribe_publish_from_callback
738
- publish_callback_subloop_sample
739
- publish_queue_callback_subloop)
795
+ ${EXAMPLE_LIST} )
796
+
797
+ if (NOT ${USE_SYNC_API} )
798
+ set (EXAMPLE_LIST
799
+ pubnub_callback_subloop_sample
800
+ publish_callback_subloop_sample
801
+ publish_queue_callback_subloop
802
+ ${EXAMPLE_LIST} )
803
+ endif ()
804
+
740
805
if (${USE_SUBSCRIBE_EVENT_ENGINE} )
741
806
set (EXAMPLE_LIST
742
807
subscribe_event_engine_sample
@@ -747,16 +812,24 @@ if (${EXAMPLES})
747
812
subscribe_publish_callback_sample # Only supports callback!
748
813
${CPP_EXAMPLE_LIST} )
749
814
endif ()
750
- else ()
815
+ endif ()
816
+ if (NOT ${USE_CALLBACK_API} OR ${USE_NTF_RUNTIME_SELECTION} )
751
817
message (STATUS "Building sync examples" )
752
818
set (EXAMPLE_LIST
753
819
metadata
754
- pubnub_sync_subloop_sample
755
820
pubnub_sync_publish_retry
756
821
pubnub_publish_via_post_sample
757
822
pubnub_advanced_history_sample
758
823
pubnub_fetch_history_sample
759
- cancel_subscribe_sync_sample)
824
+ cancel_subscribe_sync_sample
825
+ ${EXAMPLE_LIST} )
826
+
827
+ if (NOT ${USE_CALLBACK_API} )
828
+ set (EXAMPLE_LIST
829
+ pubnub_sync_subloop_sample
830
+ ${EXAMPLE_LIST} )
831
+ endif ()
832
+
760
833
if (OPENSSL)
761
834
set (EXAMPLE_LIST
762
835
pubnub_crypto_module_sample
@@ -773,6 +846,13 @@ if (${EXAMPLES})
773
846
${EXAMPLE_LIST} )
774
847
endif ()
775
848
endif ()
849
+
850
+ if (${USE_NTF_RUNTIME_SELECTION} )
851
+ set (EXAMPLE_LIST
852
+ pubnub_api_enforcement_sample
853
+ ${EXAMPLE_LIST} )
854
+ endif ()
855
+
776
856
else ()
777
857
message (STATUS "Building example ${EXAMPLE} " )
778
858
set (EXAMPLE_LIST ${EXAMPLE} )
0 commit comments