diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-10-09 23:19:01 +0100 |
---|---|---|
committer | Sergio Martins <smartins@kde.org> | 2019-10-09 23:19:01 +0100 |
commit | 3d4b6abfd8373a130d476ea795c9c09dcd17b0f7 (patch) | |
tree | 6b64cc0d39e845fc42b8a0f59e6b92dfaf9e0043 | |
parent | 5e7a57c36dbb502bb5f0e9489d08208c35661c11 (diff) |
Fix build with MSVC
Fixes the MSVC compiler error:
"C2026: string too big, trailing characters truncated"
Due to checks.json.h being too big
splitted strings works fine
REVIEW: D24506
-rw-r--r-- | CMakeLists.txt | 28 | ||||
-rw-r--r-- | checks.json.h.in | 2 |
2 files changed, 29 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 57e39e9a..67d82dc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -263,7 +263,35 @@ else() install(TARGETS clazy-standalone DESTINATION bin PERMISSIONS OWNER_WRITE OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE) endif() +function(to_raw_string_literal input_string output_string) + if (MSVC) + # Work around "C2026: string too big, trailing characters truncated" + # https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2026?view=vs-2019 + # The limit is 16380 single-byte characters, so split up the string as + # suggested on the site. + set(str ${input_string}) + set(chunk_size 1000) + set(result "\n") + string(LENGTH ${str} str_size) + while (${str_size} GREATER ${chunk_size}) + string(SUBSTRING ${str} 0 ${chunk_size} chunk) + string(SUBSTRING ${str} ${chunk_size} -1 str) + set(chunk "R\"meta(${chunk})meta\"\n") + string(APPEND result ${chunk}) + string(LENGTH ${str} str_size) + endwhile() + if (str_size GREATER 0) + string(APPEND result "R\"meta(${str})meta\"\n") + endif() + set(${output_string} ${result} PARENT_SCOPE) + else() + set(result "\nR\"meta(${input_string})meta\"\n") + set(${output_string} ${result} PARENT_SCOPE) + endif() +endfunction() + file(READ checks.json SUPPORTED_CHECKS_JSON_STR) +to_raw_string_literal(${SUPPORTED_CHECKS_JSON_STR} SUPPORTED_CHECKS_JSON_STR) configure_file(checks.json.h.in checks.json.h) install(FILES org.kde.clazy.metainfo.xml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo) diff --git a/checks.json.h.in b/checks.json.h.in index 5cec985b..b6a1f58e 100644 --- a/checks.json.h.in +++ b/checks.json.h.in @@ -22,7 +22,7 @@ #ifndef CHECKS_JSON_H #define CHECKS_JSON_H -const char SUPPORTED_CHECKS_JSON_STR[] = R"meta(${SUPPORTED_CHECKS_JSON_STR})meta"; +const char SUPPORTED_CHECKS_JSON_STR[] = ${SUPPORTED_CHECKS_JSON_STR}; #endif // CHECKS_JSON_H |