shithub: puzzles

Download patch

ref: c0c64dc1051bcbdd3ffe839f63d6c609ea5954e6
parent: c212b4eda364ba17f2ff34f4958bfb49d0de258c
author: Simon Tatham <anakin@pobox.com>
date: Sun Apr 4 10:58:39 EDT 2021

Advertise user-configurable cmake-time config options.

Various cmake variables that I was informally expecting users to set
on the cmake command line (e.g. cmake -DSTRICT=ON, or cmake
-DPUZZLES_GTK_VERSION=2) are now labelled explicitly with the CACHE
tag, and provided with a documentation string indicating what they're
for.

One effect of this is that GUI-like interfaces to your cmake build
directory, such as ccmake or cmake-gui, will show those variables
explicitly to give you a hint that you might want to change them.

Another is that when you do change them, cmake will recognise that it
needs to redo the rest of its configuration. Previously, if you sat in
an existing cmake build directory and did 'cmake -DSTRICT=ON .'
followed by 'cmake -DSTRICT=OFF .', nothing would happen, even though
you obviously meant it to.

--- a/cmake/platforms/unix.cmake
+++ b/cmake/platforms/unix.cmake
@@ -1,10 +1,22 @@
+set(PUZZLES_GTK_VERSION "ANY"
+  CACHE STRING "Which major version of GTK to build with")
+set_property(CACHE PUZZLES_GTK_VERSION
+  PROPERTY STRINGS ANY 3 2 1)
+
+set(STRICT OFF
+  CACHE BOOL "Enable extra compiler warnings and make them errors")
+
+set(NAME_PREFIX ""
+  CACHE STRING "Prefix to prepend to puzzle binary names to avoid clashes \
+in a crowded bin directory, e.g. \"sgt-\"")
+
 find_package(PkgConfig REQUIRED)
 
 set(PUZZLES_GTK_FOUND FALSE)
 macro(try_gtk_package VER PACKAGENAME)
   if(NOT PUZZLES_GTK_FOUND AND
-      (NOT DEFINED PUZZLES_GTK_VERSION OR
-        PUZZLES_GTK_VERSION STREQUAL ${VER}))
+      (PUZZLES_GTK_VERSION STREQUAL ANY OR
+       PUZZLES_GTK_VERSION STREQUAL ${VER}))
     pkg_check_modules(GTK ${PACKAGENAME})
     if(GTK_FOUND)
       set(PUZZLES_GTK_FOUND TRUE)
@@ -35,8 +47,8 @@
   set(build_icons FALSE)
 endif()
 
-if(DEFINED STRICT AND (CMAKE_C_COMPILER_ID MATCHES "GNU" OR
-                       CMAKE_C_COMPILER_ID MATCHES "Clang"))
+if(STRICT AND (CMAKE_C_COMPILER_ID MATCHES "GNU" OR
+               CMAKE_C_COMPILER_ID MATCHES "Clang"))
   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wwrite-strings -std=c99 -pedantic -Werror")
 endif()
 
--- a/cmake/setup.cmake
+++ b/cmake/setup.cmake
@@ -1,3 +1,7 @@
+set(PUZZLES_ENABLE_UNFINISHED ""
+  CACHE STRING "List of puzzles in the 'unfinished' subdirectory \
+to build as if official (separated by ';')")
+
 set(build_individual_puzzles TRUE)
 set(build_cli_programs TRUE)
 set(build_icons FALSE)