diff --git a/CMakeLists.txt b/CMakeLists.txt index 85f4eb05..a955aa0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16) +cmake_minimum_required(VERSION 3.15) project(RealmCxx) @@ -16,19 +16,12 @@ endif() set(REALM_BUILD_LIB_ONLY ON) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(REALM_USE_SYSTEM_OPENSSL ON) - set(OPENSSL_USE_STATIC_LIBS OFF) + set(REALM_USE_SYSTEM_OPENSSL ON CACHE BOOL "Find OpenSSL installed on the system instead of using a prebuilt copy") + set(OPENSSL_USE_STATIC_LIBS OFF CACHE BOOL "Link statically against OpenSSL") endif() add_subdirectory(realm-core) -set(REALM_NO_CONFIG) -set(REALM_ENABLE_SYNC) -set(REALM_NO_TESTS) -set(REALM_BUILD_LIB_ONLY) -set(REALM_INSTALL_LIBEXECDIR) -set(REALM_ENABLE_ENCRYPTION 1) - list(APPEND CMAKE_MODULE_PATH "${RealmCxx_SOURCE_DIR}/tools/cmake" # for GetVersion "${RealmCxx_SOURCE_DIR}/realm-core/tools/cmake") # for GetGitRevisionDescription @@ -38,12 +31,6 @@ if(NOT DEFINED REALMCXX_VERSION) git_describe(REALMCXX_VERSION) endif() -add_compile_definitions(REALM_NO_CONFIG) -add_compile_definitions(REALM_ENABLE_SYNC) -add_compile_definitions(REALM_ENABLE_ENCRYPTION) -add_compile_definitions(REALM_INSTALL_LIBEXECDIR) -add_compile_definitions(REALM_BUILD_LIB_ONLY) - # Check if the compiler is Clang or GCC >= 11 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "11.0")) set(ENABLE_ALPHA_SDK TRUE) diff --git a/realm-core b/realm-core index c569bec4..ba96288b 160000 --- a/realm-core +++ b/realm-core @@ -1 +1 @@ -Subproject commit c569bec4d04da84030d94f376437bc4efda3686b +Subproject commit ba96288b5c88096998591f94a64b0e3a00d4c92f diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2b6dcd3b..ae0212e7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,8 +2,8 @@ add_subdirectory(cpprealm/internal/bridge/generator) include(GetVersion) # Configure source code to use right version number -configure_file(${RealmCxx_SOURCE_DIR}/src/cpprealm/internal/version_numbers.hpp.in ${RealmCxx_SOURCE_DIR}/src/cpprealm/internal/version_numbers.hpp) -install(FILES ${RealmCxx_SOURCE_DIR}/src/cpprealm/internal/version_numbers.hpp +configure_file(cpprealm/internal/version_numbers.hpp.in cpprealm/internal/version_numbers.hpp) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cpprealm/internal/version_numbers.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cpprealm/internal COMPONENT devel) diff --git a/src/cpprealm/analytics.cpp b/src/cpprealm/analytics.cpp index 7f736e11..54c6b766 100644 --- a/src/cpprealm/analytics.cpp +++ b/src/cpprealm/analytics.cpp @@ -17,7 +17,6 @@ //////////////////////////////////////////////////////////////////////////// #include -#include #if __APPLE__ || __MACH__ #include @@ -38,11 +37,10 @@ #include #include +#include #include -#include - namespace realm { #if __APPLE__ || __MACH__ // Wrapper for sysctl() that handles the memory management stuff @@ -100,7 +98,7 @@ namespace realm { return hash_data(mac, 6); } - std::string get_host_os_verion() { + std::string get_host_os_version() { std::array mib = {{CTL_KERN, KERN_OSRELEASE}}; size_t buffer_size; auto buffer = do_sysctl(&mib[0], mib.size(), &buffer_size); @@ -160,7 +158,7 @@ namespace realm { return std::to_string(std::hash{}(concatenated_mac_addresses)); } - std::string get_host_os_verion() { + std::string get_host_os_version() { struct utsname host_info; std::stringstream ss; if (uname(&host_info) == 0) { @@ -203,11 +201,11 @@ namespace realm { return false; } -#elif _WIN32 || _WIN64 +#elif _WIN32 std::string get_mac_address() { return "unknown"; } - std::string get_host_os_verion() { + std::string get_host_os_version() { return "unknown"; } bool debugger_attached() { @@ -217,7 +215,7 @@ namespace realm { std::string get_mac_address() { return "unknown"; } - std::string get_host_os_verion() { + std::string get_host_os_version() { return "unknown" } bool debugger_attached() { @@ -231,59 +229,55 @@ namespace realm { #endif if (!debugger_attached() || getenv("REALM_DISABLE_ANALYTICS")) return; - std::string os_name; #ifdef _WIN32 - os_name = "Windows 32-bit"; -#elif _WIN64 - os_name = "Windows 64-bit"; + #define OS_NAME "Windows"; #elif __APPLE__ || __MACH__ - os_name = "macOS"; + #define OS_NAME "macOS"; #elif __linux__ - os_name = "Linux"; + #define OS_NAME "Linux"; #elif __FreeBSD__ - os_name = "FreeBSD"; + #define OS_NAME "FreeBSD"; #elif __unix || __unix__ - os_name = "Unix"; + #define OS_NAME "Unix"; #else - os_name = "Other"; + #define OS_NAME "Other"; #endif - auto mac_address = get_mac_address(); - nlohmann::json post_data{ - {"event", "Run"}, - {"properties", {{"token", "ce0fac19508f6c8f20066d345d360fd0"}, {"distinct_id", mac_address}, {"Anonymized MAC Address", mac_address}, {"Anonymized Bundle ID", "unknown"}, {"Binding", "cpp"}, -#if __cplusplus >= 202002L - {"Language", "cpp20"}, -#else - {"Language", "cpp17"}, +#define STRINGIZE_DETAIL_(v) #v +#define STRINGIZE(v) STRINGIZE_DETAIL_(v) + auto post_payload = R"( +{ + "event": "Run", + "properties": { + "token": "ce0fac19508f6c8f20066d345d360fd0", + "distinct_id": "%1", + "Anonymized MAC Address": "%1", + "Anonymized Bundle ID": "unknown", + "Binding": "cpp",)""\n" +#if __cplusplus == 202002L + R"("Language": "cpp20",)""\n" +#elif __cplusplus == 201703L + R"("Language": "cpp17",)""\n" #endif - {"Realm Version", "0.0.0"}, - {"Target OS Type", "unknown"}, + "\"Realm Version\": \"" REALMCXX_VERSION_STRING "\",\n" #if defined(__clang__) - {"Clang Version", __clang_version__}, - {"Clang Major Version", __clang_major__}, + "\"Clang Version\": \"" STRINGIZE(__clang_major__) "\",\n" + "\"Clang Minor Version\": \"" STRINGIZE(__clang_minor__) "\",\n" #elif defined(__GNUC__) || defined(__GNUG__) - {"GCC Version", __GNUC__}, - {"GCC Minor Version", __GNUC_MINOR__}, + "\"GCC Version\": \"" STRINGIZE(__GNUC__) "\",\n" + "\"GCC Minor Version\": \"" STRINGIZE(__GNUC_MINOR__) "\",\n" #endif - {"Host OS Type", os_name}, - {"Host OS Version", get_host_os_verion()}}}}; - - std::stringstream json_ss; - json_ss << post_data; - auto json_str = json_ss.str(); + "\"Host OS Type\": \"" OS_NAME "\",\n" + R"("Host OS Version": "%2")""\n" +"}}"; + auto json_str = util::format(post_payload, get_mac_address(), get_host_os_version()); auto transport = std::make_unique(); std::vector buffer; - buffer.resize(5000); - realm::util::base64_encode(json_str.c_str(), json_str.size(), - buffer.data(), buffer.size()); - - size_t s = 0; - while (buffer[s] != '\0') { - s++; - } - buffer.resize(s); + buffer.resize(util::base64_encoded_size(json_str.size())); + auto encoded_size = util::base64_encode(json_str.c_str(), json_str.size(), + buffer.data(), buffer.size()); + buffer.resize(encoded_size); auto base64_str = std::string(buffer.begin(), buffer.end()); app::Request request; diff --git a/src/cpprealm/internal/bridge/generator/CMakeLists.txt b/src/cpprealm/internal/bridge/generator/CMakeLists.txt index e4aec94b..936b83f8 100644 --- a/src/cpprealm/internal/bridge/generator/CMakeLists.txt +++ b/src/cpprealm/internal/bridge/generator/CMakeLists.txt @@ -65,6 +65,9 @@ endforeach() configure_file(bridge_type_info_generator.cpp.in bridge_type_info_generator.cpp) add_library(BridgeTypeInfoGenerator STATIC ${CMAKE_CURRENT_BINARY_DIR}/bridge_type_info_generator.cpp) +set_target_properties(BridgeTypeInfoGenerator PROPERTIES + INTERPROCEDURAL_OPTIMIZATION OFF +) if(MSVC) target_compile_options(BridgeTypeInfoGenerator PRIVATE /O0) diff --git a/src/cpprealm/sdk.hpp b/src/cpprealm/sdk.hpp index 98d6ee08..28dad436 100644 --- a/src/cpprealm/sdk.hpp +++ b/src/cpprealm/sdk.hpp @@ -40,10 +40,10 @@ #include #include #include +#include #endif #include -#include #include #include #include