X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=CMakeLists.txt;h=f759d8f45bdeb314939bf5e1b75169b24cd2f2c2;hb=231b36d95011f99993684add6e0cdd6012ec13d4;hp=d36eb710dc9f940545cbc5594fbde01efd87851c;hpb=1ae013f816de562a4181696d32186d0845835748;p=lyx.git diff --git a/CMakeLists.txt b/CMakeLists.txt index d36eb710dc..f759d8f45b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,6 +81,14 @@ if(NOT help AND NOT HELP) message(FATAL_ERROR "Exiting") endif() endif() + # Enable LTO if supported and not debugging + if (POLICY CMP0069) + if (LYX_DEBUG) + cmake_policy(SET CMP0069 OLD) + else() + cmake_policy(SET CMP0069 NEW) + endif() + endif() endif() if(UNIX) @@ -143,19 +151,19 @@ LYX_OPTION(ASAN "Use address sanitizer" OFF ALL) LYX_COMBO(USE_FILEDIALOG "Use native or QT file dialog" QT NATIVE) LYX_COMBO(USE_QT "Use Qt version as frontend" AUTO QT4 QT5) #LYX_OPTION(3RDPARTY_BUILD "Build 3rdparty libs" OFF ALL) +LYX_OPTION(DISABLE_CALLSTACK_PRINTING "do not print a callstack when crashing" OFF ALL) LYX_OPTION(EXTERNAL_Z "OFF := Build 3rdparty lib zlib" ON ALL) LYX_OPTION(EXTERNAL_ICONV "OFF := Build 3rdparty lib iconvlib" ON ALL) LYX_OPTION(EXTERNAL_HUNSPELL "OFF := Build 3rdparty lib hunspelllib" ON ALL) LYX_COMBO(EXTERNAL_MYTHES "OFF := Build 3rdparty lib mytheslib" AUTO OFF ON) # GCC specific -LYX_OPTION(PROFILE "Build profile version" OFF GCC) +LYX_OPTION(PROFILE "Build with options for gprof" OFF GCC) LYX_OPTION(EXTERNAL_BOOST "Use external boost" OFF GCC) LYX_OPTION(PROGRAM_SUFFIX "Append version suffix to binaries" ON GCC) LYX_OPTION(DEBUG_GLIBC "Enable libstdc++ debug mode" OFF GCC) LYX_OPTION(DEBUG_GLIBC_PEDANTIC "Enable libstdc++ pedantic debug mode" OFF GCC) LYX_OPTION(STDLIB_DEBUG "Use debug stdlib" OFF GCC) -LYX_OPTION(PROFILE "Build with options for gprof" OFF GCC) # MSVC specific LYX_OPTION(CONSOLE "Show console on Windows" ON MSVC) @@ -270,25 +278,33 @@ if(UNIX OR MINGW) set(LYX_USE_STD_REGEX 0) endif() else() - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpfullversion OUTPUT_VARIABLE GCC_VERSION ERROR_VARIABLE _error RESULT_VARIABLE _err OUTPUT_STRIP_TRAILING_WHITESPACE) + #message(STATUS "dumpfullversion: error = ${_error}, result = ${_err}") + if (_err) + # previous check failed, try again with _old_ parameter + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION ERROR_VARIABLE _error RESULT_VARIABLE _err OUTPUT_STRIP_TRAILING_WHITESPACE) + #message(STATUS "dumpversion: error = ${_error}, result = ${_err}") + endif() message(STATUS "Using GCC version ${GCC_VERSION}") - if(GCC_VERSION VERSION_LESS 4.9) - if(GCC_VERSION VERSION_LESS 4.6) - message(FATAL_ERROR "gcc >= 4.6 is required.") - endif() - # in gcc is unusable in versions less than 4.9.0 - # see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631 - set(LYX_USE_STD_REGEX 0) + if(GCC_VERSION VERSION_LESS 4.6) + message(FATAL_ERROR "gcc >= 4.6 is required.") + elseif(GCC_VERSION VERSION_LESS 4.9) + # in gcc is unusable in versions less than 4.9.0 + # see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631 + set(LYX_USE_STD_REGEX 0) else() - set(LYX_USE_STD_REGEX 1) + set(LYX_USE_STD_REGEX 1) endif() endif() set(LYX_GCC11_MODE "${CXX11_FLAG}") else() - set(LYX_USE_STD_REGEX 0) -# if(MSVC10) -# set(LYX_USE_STD_REGEX 1) #TODO should we use it in ECMAScript mode? -# endif() + if(MSVC_VERSION LESS 1900) + # Drop support for msvc versions prior to 1900 (Visual Studio 2015) + message(FATAL_ERROR "Visual Studio >= 2015 is required.") + set(LYX_USE_STD_REGEX 0) + else() + set(LYX_USE_STD_REGEX 1) + endif() endif() @@ -323,6 +339,9 @@ endif() macro(setstripped _varname) if(${ARGC} GREATER 1) string(STRIP "${ARGV1}" _v) + if (_v MATCHES "^\\[\(.+\)\\]$") + set(_v ${CMAKE_MATCH_1}) + endif() if(USE_POSIX_PACKAGING) string(TOLOWER ${_v} ${_varname}) else() @@ -335,9 +354,14 @@ endmacro(setstripped) foreach(_c_l ${_config_lines} ) if(_c_l MATCHES "^AC_INIT\\(\([^,]+\),\([^,]+\), *\\[\([^,]+\)\\] *,\(.*\)") - setstripped(PACKAGE_BASE ${CMAKE_MATCH_1}) - setstripped(PACKAGE_VERSION ${CMAKE_MATCH_2}) - setstripped(PACKAGE_BUGREPORT ${CMAKE_MATCH_3}) + # Not using CMAKE_MATCH_ directly is needed, because + # its value is now changed inside macro setstripped + set(_PB ${CMAKE_MATCH_1}) + set(_PV ${CMAKE_MATCH_2}) + set(_PBU ${CMAKE_MATCH_3}) + setstripped(PACKAGE_BASE ${_PB}) + setstripped(PACKAGE_VERSION ${_PV}) + setstripped(PACKAGE_BUGREPORT ${_PBU}) if(PACKAGE_VERSION MATCHES "^\([0-9]+\)\\.\([0-9]+\)\(\\.\([0-9]+\)\)?.*$") set(LYX_MAJOR_VERSION ${CMAKE_MATCH_1}) set(LYX_MINOR_VERSION ${CMAKE_MATCH_2}) @@ -554,7 +578,7 @@ include(ProjectSourceGroup) if(LYX_PROFILE AND NOT MSVC) - set(CMAKE_BUILD_TYPE Profile CACHE TYPE STRING FORCE) + set(CMAKE_BUILD_TYPE Profile CACHE STRING "Profile build type" FORCE) set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE} -pg") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") else() @@ -604,12 +628,12 @@ if(NOT MSVC) if(LYX_STDLIB_DEBUG) set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC") endif() - set(CMAKE_CXX_FLAGS "${LYX_CXX_FLAGS} -fno-strict-aliasing " CACHE TYPE STRING FORCE) - set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -D_DEBUG" CACHE TYPE STRING FORCE) + set(CMAKE_CXX_FLAGS "${LYX_CXX_FLAGS} -fno-strict-aliasing " CACHE STRING "Set CXX flags" FORCE) + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -D_DEBUG" CACHE STRING "Set debug flags" FORCE) if(MINGW) - set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG" CACHE TYPE STRING FORCE) + set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG" CACHE STRING "Set release flags for Mingw" FORCE) else() - set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE TYPE STRING FORCE) + set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "Set release flags" FORCE) endif() endif() @@ -767,7 +791,7 @@ unset(LYX_PYTHON_EXECUTABLE CACHE) unset(PYTHON_VERSION_MAJOR) unset(PYTHON_VERSION_MINOR) unset(PYTHON_VERSION_STRING) -find_package(PythonInterp 3.3 QUIET) +find_package(PythonInterp 3.5 QUIET) if(NOT PYTHONINTERP_FOUND) unset(PYTHON_EXECUTABLE CACHE) find_package(PythonInterp 2.0 REQUIRED) @@ -925,7 +949,7 @@ if(MSVC) if(LYX_WALL) # Use the highest warning level - set(CMAKE_CXX_WARNING_LEVEL 4 CACHE TYPE STRING FORCE) + set(CMAKE_CXX_WARNING_LEVEL 4 CACHE STRING "Warning level" FORCE) if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") @@ -949,7 +973,7 @@ if(MSVC) set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /Wp64 ${MSVC_W_ERROR} ${MSVC_W_DISABLE}") else() - set(CMAKE_CXX_WARNING_LEVEL 3 CACHE TYPE STRING FORCE) + set(CMAKE_CXX_WARNING_LEVEL 3 CACHE STRING "Warning level" FORCE) # add here warnings which should produce an error /weXXXX set(MSVC_W_ERROR "/we4101 /we4189")