From 1470c9530b1cff33d11170b9b891d94be62c4194 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Sun, 19 Feb 2023 23:20:29 +0000 Subject: Try to stop CMake disabling assertions in release builds Assertion failures are ugly, but they're better than the alternative. Defensive coding is a general principle throughout Puzzles and I don't think it's sensible to selectively turn that off. The mechanism by which we re-enable assertions is stolen from PuTTY (with an enhancement to cover MinSizeRel builds as well) and is pretty ugly because CMake doesn't seem to have a good way to do it. --- cmake/setup.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cmake/setup.cmake b/cmake/setup.cmake index 8f879e4..ea8d1bf 100644 --- a/cmake/setup.cmake +++ b/cmake/setup.cmake @@ -8,6 +8,16 @@ set(build_gui_programs TRUE) set(build_icons FALSE) set(need_c_icons FALSE) +# Don't disable assertions, even in release mode. Our assertions +# generally aren't expensive and protect against more annoying crashes +# and memory corruption. +string(REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") +string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") +string(REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") +string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") +string(REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") +string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + # Include one of platforms/*.cmake to define platform-specific stuff. # Each of these is expected to: # - define get_platform_puzzle_extra_source_files(), used below -- cgit v1.1