shithub: puzzles

Download patch

ref: 1470c9530b1cff33d11170b9b891d94be62c4194
parent: bb16b5a70ddf77d03f1e985cb761ad5aa6c19b2c
author: Ben Harris <bjh21@bjh21.me.uk>
date: Sun Feb 19 18:20:29 EST 2023

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.

--- a/cmake/setup.cmake
+++ b/cmake/setup.cmake
@@ -8,6 +8,16 @@
 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