aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2019-10-09 23:19:01 +0100
committerSergio Martins <smartins@kde.org>2019-10-09 23:19:01 +0100
commit3d4b6abfd8373a130d476ea795c9c09dcd17b0f7 (patch)
tree6b64cc0d39e845fc42b8a0f59e6b92dfaf9e0043
parent5e7a57c36dbb502bb5f0e9489d08208c35661c11 (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.txt28
-rw-r--r--checks.json.h.in2
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