From 6136ff821342a0dcdd8b46c0b1498a752ec5c6ad Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Sun, 27 Aug 2023 09:36:42 +0100 Subject: [PATCH] CMakeLists.txt: explicitly ask for C99. A user just reported that 0.79 doesn't build out of the box on Ubuntu 14.04 (trusty), because although its gcc (4.8.4) does _support_ C99, it doesn't enable it without a non-default -std option. The user was able to work around the problem by defining CMAKE_C_FLAGS=-std=gnu99, but it would have been nicer if we'd done that automatically. Setting CMAKE_C_STANDARD causes cmake to do so. (This isn't a regression of 0.79 over 0.78 as far as I know; the user in question said they had last built 0.76.) I was surprised to find Ubuntu 14.04 still in use at all, but a quick web search revealed that its support has been extended until next year, so fair enough, I suppose. It's also running a cmake way older than we support, but apparently that can be worked around via Kitware's binary tarball downloads (which do still run on 14.04). This is a bit unsatisfactory: I'd prefer to ask for C standards support of _at least_ C99 level, and C11 if possible. Then I could test for the presence of C11 features via check_c_source_compiles, and use them opportunistically (e.g. in macro definitions). But as far as I can see, cmake has no built-in support for asking for a standards level of 'as new as you can get, but no older than 99'. Oh well. (In any case, the thing I'd find most useful from C11 is _Generic, and since that's in implementation namespace, compilers can - and do - support it in C99 mode anyway. So it's probably fine, at least for now.) (cherry picked from commit bd27962cd93a7ebb0098c0d6577b5d7340c7424a) --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b94d9b60..e6d884e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.7) project(putty LANGUAGES C) +set(CMAKE_C_STANDARD 99) + include(cmake/setup.cmake) # Scan the docs directory first, so that when we start calling