From f6d7a214f8d5460ef7a66c772b76f095fbfc1864 Mon Sep 17 00:00:00 2001 From: Misa Date: Mon, 21 Mar 2022 20:07:37 -0700 Subject: [PATCH] CMake: Add workaround for setting `-std=` below 3.1.3 Previously, if the user had a CMake version below 3.1.3, we told them to set `-std` themselves. However, we are going to go to C99 soon (because of FAudio, see #869), and CentOS 7's CMake is too old to set `-std=` automatically, defaulting to C90. This is bad because it fails the CI. To work around this, we set `-std=` ourselves, but first we have to clear any existing `-std=` flag in C_FLAGS or CXX_FLAGS. Amusingly enough, MSVC does not have `/std:` switches for either C90 or C++98, so we just get to do nothing. --- desktop_version/CMakeLists.txt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/desktop_version/CMakeLists.txt b/desktop_version/CMakeLists.txt index 30e303aa..006c9488 100644 --- a/desktop_version/CMakeLists.txt +++ b/desktop_version/CMakeLists.txt @@ -25,7 +25,17 @@ if(OFFICIAL_BUILD AND NOT MAKEANDPLAY) endif() if(${CMAKE_VERSION} VERSION_LESS "3.1.3") - message(WARNING "Your CMake version is too old; set -std=c90 -std=c++98 yourself!") + message(WARNING "Your CMake version is too old; using workaround") + + if(MSVC) + # MSVC doesn't have /std:c90 or /std:c++98 switches! + else() + string(REGEX REPLACE "-std=[a-z0-9]+" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c90") + + string(REGEX REPLACE "-std=[a-z0-9+]+" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") + endif() else() set(CMAKE_C_STANDARD 90) set(CMAKE_C_EXTENSIONS OFF)