gnucash master: Set C and C++ standards the modern Cmake way, and set C++ to C++17.

John Ralls jralls at code.gnucash.org
Sat Oct 12 20:05:13 EDT 2019


Updated	 via  https://github.com/Gnucash/gnucash/commit/931cf50f (commit)
	from  https://github.com/Gnucash/gnucash/commit/1d4d244c (commit)



commit 931cf50f69a37d038009210ff2eed701989be85e
Author: John Ralls <jralls at ceridwen.us>
Date:   Sat Oct 12 16:39:09 2019 -0700

    Set C and C++ standards the modern Cmake way, and set C++ to C++17.
    
    Take 2, accepts pre-1.67 versions of boost that have been patched to
    remove boost::locale's dependence on auto_ptr.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 283c48521..89d47462a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -512,14 +512,29 @@ set (Boost_FIND_QUIETLY ON)
 if (NOT DEFINED ${BOOST_ROOT})
   set(BOOST_ROOT $ENV{BOOST_ROOT})
 endif()
-find_package (Boost 1.54.0 REQUIRED COMPONENTS date_time regex locale filesystem system)
+find_package (Boost 1.67.0 COMPONENTS date_time regex locale filesystem system)
 
 if (Boost_FOUND)
   include_directories(${Boost_INCLUDE_DIRS})
   set(HAVE_BOOST 1)
-else (Boost_FOUND)
-  message (SEND_ERROR "Boost 1.54.0 or later is not installed, and is required. Please install it and ensure that the following libraries are built: chrono, date_time, filesystem, log, program_options, regex, signals, system, and test.")
-endif (Boost_FOUND)
+else ()
+  find_package (Boost 1.60.0 REQUIRED COMPONENTS date_time regex locale filesystem system)
+  if (Boost_FOUND)
+    include (CheckIncludeFileCXX)
+    set(CMAKE_REQUIRED_FLAGS "-std=c++17")
+    set(CMAKE_REQUIRED_INCLUDES ${Boost_INCLUDE_DIR})
+    check_include_file_cxx("boost/locale.hpp" AUTO_PTR)
+    unset(CMAKE_REQUIRED_FLAGS)
+    unset(CMAKE_REQUIRED_INCLUDES)
+    if(AUTO_PTR)
+      include_directories(${Boost_INCLUDE_DIRS})
+      set(HAVE_BOOST 1)
+    endif()
+  endif()
+endif()
+if (NOT HAVE_BOOST)
+message (SEND_ERROR "A suitable Boost is not installed, and is required. GnuCash requires that Boost be compatible and compiled with C++17. Boost 1.67 is the first compatible release but some distributions have patched earlier ones to work with C++17. Please install it and ensure that the following libraries are built: date_time, filesystem, locale, and regex.")
+endif ()
 
 
 # Compiler flags
@@ -534,18 +549,22 @@ endif()
 add_definitions(-D_GNU_SOURCE)
 
 # Also, set the C++ version to c++11
-set(CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}")  # FIXME: should be -std=c++11
-
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+set(CMAKE_C_EXTENSIONS ON)
 
 if (UNIX)
   set( CMAKE_C_FLAGS "-Werror -Wdeclaration-after-statement -Wno-pointer-sign -Wall -Wmissing-prototypes -Wmissing-declarations -Wno-unused ${CMAKE_C_FLAGS}")
-  set( CMAKE_C_FLAGS "-Wno-error=deprecated-declarations -std=gnu11 -Wno-error=parentheses ${CMAKE_C_FLAGS}")
+  set( CMAKE_C_FLAGS "-Wno-error=deprecated-declarations -Wno-error=parentheses ${CMAKE_C_FLAGS}")
   set( CMAKE_CXX_FLAGS "-Werror -Wall -Wmissing-declarations -Wno-unused -Wno-error=parentheses ${CMAKE_CXX_FLAGS}")
   set( CMAKE_CXX_FLAGS "-Wno-error=deprecated-declarations ${REGISTER_CXXFLAG} ${CMAKE_CXX_FLAGS}")
   set( CMAKE_C_FLAGS_RELEASE "-O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 ${CMAKE_C_FLAGS}")
 endif (UNIX)
 if (MINGW)
-  set( CMAKE_C_FLAGS "-Werror -Wdeclaration-after-statement -Wno-pointer-sign -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations  -Wno-unused -Wno-error=deprecated-declarations -std=gnu11 ${CMAKE_C_FLAGS}")
+  set( CMAKE_C_FLAGS "-Werror -Wdeclaration-after-statement -Wno-pointer-sign -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations  -Wno-unused -Wno-error=deprecated-declarations ${CMAKE_C_FLAGS}")
   set( CMAKE_CXX_FLAGS "-DWINVER=0x0500 -D_EMULATE_GLIBC=0 ${CMAKE_CXX_FLAGS}") # Workaround for bug in gtest on mingw, see https://github.com/google/googletest/issues/893 and https://github.com/google/googletest/issues/920
 endif (MINGW)
 



Summary of changes:
 CMakeLists.txt | 35 +++++++++++++++++++++++++++--------
 1 file changed, 27 insertions(+), 8 deletions(-)



More information about the gnucash-changes mailing list