X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=CMakeLists.txt;h=38e11b8a0b4707a936f1655be47d17111ca44503;hb=011c3d73c0c3137dcd67bf8bb09644ac064b2342;hp=c3eed1a52d4a0d39719ae4f385b508e36ed50d41;hpb=fa704d50f70e2ead66f34594023aebb50714926c;p=lyx.git diff --git a/CMakeLists.txt b/CMakeLists.txt index c3eed1a52d..38e11b8a0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -217,9 +217,9 @@ else() unset(LYX_ENABLE_VALGRIND_TESTS CACHE) endif() endif() -LYX_OPTION(ASAN "Use address sanitizer" OFF ALL) +LYX_COMBO(DEBUG_SANITIZE "Use sanitize check" NONE ADDRESS UNSPECIFIED) #LYX_COMBO(USE_FILEDIALOG "Use native or QT file dialog" QT NATIVE) -LYX_COMBO(USE_QT "Use Qt version as frontend" AUTO QT4 QT5 QT6) +LYX_COMBO(USE_QT "Use Qt version as frontend" AUTO QT5 QT6) LYX_COMBO(USE_IPO "Interprocedural optimization" OFF AUTO ON) #LYX_OPTION(3RDPARTY_BUILD "Build 3rdparty libs" OFF ALL) LYX_OPTION(DISABLE_CALLSTACK_PRINTING "do not print a callstack when crashing" OFF ALL) @@ -235,6 +235,7 @@ LYX_OPTION(EXTERNAL_BOOST "Use external boost" ${DefaultExternalLibs} 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(DEBUG_GLIBC_ASSERTIONS "Enable stdlib-assertions debug mode" OFF GCC) LYX_OPTION(STDLIB_DEBUG "Use debug stdlib" ${DefaultLyxStdlibDebug} GCC) # MSVC specific @@ -659,6 +660,26 @@ else() set(LYX_DEBUG ON) endif() +set(min_qt5_version "5.6") +if(LYX_USE_QT MATCHES "AUTO") + # try qt6 first + find_package(Qt6Core CONFIG QUIET) + if (Qt6Core_Found) + set(LYX_USE_QT "QT6" CACHE STRING "Valid qt version" FORCE) + message(STATUS "Qt5Core_VERSION = ${Qt5Core_VERSION}") + else() + find_package(Qt5Core CONFIG QUIET) + if(Qt5Core_FOUND) + set(LYX_USE_QT "QT5" CACHE STRING "Valid qt version" FORCE) + message(STATUS "Qt5Core_VERSION = ${Qt5Core_VERSION}") + if(Qt5Core_VERSION VERSION_LESS ${min_qt5_version}) + message(FATAL_ERROR "No appropriate QT-version found") + endif() + else() + message(FATAL_ERROR "No appropriate QT-version found") + endif() + endif() +endif() # When shared libs are supported enable this option #LYX_OPTION(SHARED_LIBRARIES "Build shared libraries" OFF ALL) @@ -674,6 +695,19 @@ else() set(LYX_CXX_FLAGS "") endif() +if (LYX_DEBUG_SANITIZE MATCHES "ADDRESS") + set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") + message(STATUS) + message(STATUS "Address sanitizer enabled. Usage:") + message(STATUS " wget https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py") + message(STATUS " chmod +x ./asan_symbolize.py") + message(STATUS " ./bin/${_lyx} 2>&1 | ./asan_symbolize.py | c++filt ") + message(STATUS) +elseif (LYX_DEBUG_SANITIZE MATCHES "UNSPECIFIED") + set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer") +endif() + if(MSVC) if (CXX11_FLAG MATCHES "\\+\\+([0-9]+)") set(CMAKE_CXX_STANDARD ${CMAKE_MATCH_1}) @@ -701,21 +735,26 @@ else() # check_cxx_source_compiles("..." HAVE_DEF_MAKE_UNIQUE) include(CheckCXXCompilerFlag) unset(CHECK_WNODEPRECATEDCOPY_FLAG CACHE) - CHECK_CXX_COMPILER_FLAG("-Wno-deprecated-copy" CHECK_WNODEPRECATEDCOPY_FLAG) + CHECK_CXX_COMPILER_FLAG("-Wdeprecated-copy" CHECK_WNODEPRECATEDCOPY_FLAG) if(${CHECK_WNODEPRECATEDCOPY_FLAG}) set(LYX_CXX_FLAGS "-Wall -Wextra -Wno-deprecated-copy ${LYX_GCC11_MODE}${LYX_CXX_FLAGS}") else() set(LYX_CXX_FLAGS "-Wall -Wextra ${LYX_GCC11_MODE}${LYX_CXX_FLAGS}") endif() - if(LYX_STDLIB_DEBUG) - set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC") - else() - if(LYX_DEBUG_GLIBC) - set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG") - endif() - if(LYX_DEBUG_GLIBC_PEDANTIC) - set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG_PEDANTIC") - endif() + message(STATUS "LYX_USE_QT = ${LYX_USE_QT}") + if(LYX_USE_QT MATCHES "QT6") + if (LYX_DEBUG_GLIBC OR LYX_DEBUG_GLIBC_PEDANTIC) + message(WARNING "Compiling LyX with stdlib-debug and Qt6 library may lead to crashes. Consider dropping -DLYX_DEBUG_GLIBC=ON and -DLYX_DEBUG_GLIBC_PEDANTIC=ON") + endif() + endif() + if(LYX_STDLIB_DEBUG OR LYX_DEBUG_GLIBC_ASSERTIONS) + set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_ASSERTIONS") + endif() + if(LYX_DEBUG_GLIBC) + set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG") + endif() + if(LYX_DEBUG_GLIBC_PEDANTIC) + set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG_PEDANTIC") endif() 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) @@ -726,16 +765,6 @@ else() endif() endif() -if(LYX_ASAN) - set(CMAKE_CXX_FLAGS "-fsanitize=address -fno-omit-frame-pointer -g ${CMAKE_CXX_FLAGS}") - message(STATUS) - message(STATUS "Address sanitizer enabled. Usage:") - message(STATUS " wget https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py") - message(STATUS " chmod +x ./asan_symbolize.py") - message(STATUS " ./bin/${_lyx} 2>&1 | ./asan_symbolize.py | c++filt ") - message(STATUS) -endif() - set(LYX_CXX_FLAGS_EXTRA "" CACHE STRING "Desired semicolon separated list of extra cxx compile flags, like '-Werror'") mark_as_advanced(LYX_CXX_FLAGS_EXTRA) if(LYX_CXX_FLAGS_EXTRA) @@ -748,30 +777,6 @@ if(LYX_XMINGW) list(APPEND CMAKE_FIND_ROOT_PATH ${GNUWIN32_DIR}) endif() -set(min_qt5_version "5.6") -if(LYX_USE_QT MATCHES "AUTO") - # try qt6 first - find_package(Qt6Core CONFIG QUIET) - if (Qt6Core_Found) - set(LYX_USE_QT "QT6" CACHE STRING "Valid qt version" FORCE) - message(STATUS "Qt5Core_VERSION = ${Qt5Core_VERSION}") - else() - find_package(Qt5Core CONFIG QUIET) - if(Qt5Core_FOUND) - set(LYX_USE_QT "QT5" CACHE STRING "Valid qt version" FORCE) - message(STATUS "Qt5Core_VERSION = ${Qt5Core_VERSION}") - if(Qt5Core_VERSION VERSION_LESS ${min_qt5_version}) - find_package(Qt4 "4.5.0" QUIET) - if(QT4_FOUND) - set(LYX_USE_QT "QT4" CACHE STRING "Valid qt version" FORCE) - endif() - endif() - else() - set(LYX_USE_QT "QT4" CACHE STRING "Valid qt version" FORCE) - endif() - endif() -endif() - set(QtCore5CompatLibrary) set(QtCore5CompatModule) if(LYX_USE_QT MATCHES "QT6|QT5") @@ -808,8 +813,8 @@ if(LYX_USE_QT MATCHES "QT6|QT5") set(QTVERSION ${${QtVal}Core_VERSION}) if (QTVERSION VERSION_LESS ${min_qt5_version}) message(STATUS "QTVERSION = \"${QTVERSION}\"") - message(STATUS "This version is not recommended, try either option -DLYX_USE_QT=QT4 or") - message(STATUS "install QT-Version >= \"${min_qt5_version}\"") + message(STATUS "This version is not recommended,") + message(STATUS "please install QT-Version >= \"${min_qt5_version}\"") # see thread in lyx-devel list # From: Jean-Pierre Chrétien # Date 11.03.2017 @@ -828,30 +833,19 @@ if(LYX_USE_QT MATCHES "QT6|QT5") endif() if (LYX_USE_QT MATCHES "QT6") get_target_property(QT_MOC_EXECUTABLE Qt6::moc LOCATION) - find_package(Qt6 COMPONENTS Core5Compat REQUIRED) + #find_package(Qt6 COMPONENTS Core5Compat REQUIRED) + # We don't know why QtZlib is included, and ideally we + # would have a different fix than relying on this + # variable (which as "Private" in the name indicates, + # it might be a fragile workaround). + # See ML discussion here: + # https://www.mail-archive.com/search?l=mid&q=CAGU9VOqpkngYBumnNh%3DcuzQ585GsS7TJbhHa903nJSfy-davRg%40mail.gmail.com + list(REMOVE_ITEM Qt6Core5Compat_INCLUDE_DIRS ${_Qt6ZlibPrivate_OWN_INCLUDE_DIRS}) include_directories(${Qt6Core5Compat_INCLUDE_DIRS}) - set(QtCore5CompatLibrary Qt6::Core5Compat) - set(QtCore5CompatModule Core5Compat) + #set(QtCore5CompatLibrary Qt6::Core5Compat) + #set(QtCore5CompatModule Core5Compat) endif() endif() -elseif(LYX_USE_QT MATCHES "QT4") - if(LYX_XMINGW) - set(QT_MINGW_DIR ${LYX_QT4} CACHE PATH "Qt for Mingw" FORCE) - list(APPEND CMAKE_FIND_ROOT_PATH ${QT_MINGW_DIR} ${GNUWIN32_DIR}) - endif() - find_package(Qt4 "4.5.0" REQUIRED) - macro (qt_use_modules) - endmacro() - macro (qt_add_resources) - qt4_add_resources(${ARGN}) - endmacro() - macro (qt_wrap_uifiles) - qt4_wrap_ui(${ARGN}) - endmacro() - set(LYX_QTMAIN_LIBRARY ${QT_QTSVG_LIBRARY}) - if(WIN32) - list(APPEND LYX_QTMAIN_LIBRARY ${QT_QTMAIN_LIBRARIES}) - endif() else() message(FATAL_ERROR "Unhandled value for LYX_USE_QT (${LYX_USE_QT})") endif() @@ -1109,7 +1103,7 @@ if(MSVC) endif() - if (NOT Qt5Core_FOUND) + if (NOT (Qt5Core_FOUND OR Qt6Core_FOUND)) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Zc:wchar_t-") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zc:wchar_t-") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /Zc:wchar_t-") @@ -1191,7 +1185,7 @@ unset(opts) unset(tmp_vi) if(QTVERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*") - MATH(EXPR QT4_VERSION "(${CMAKE_MATCH_1}<<16)|(${CMAKE_MATCH_2}<<8)|${CMAKE_MATCH_3}") + MATH(EXPR QTx_VERSION "(${CMAKE_MATCH_1}<<16)|(${CMAKE_MATCH_2}<<8)|${CMAKE_MATCH_3}") endif()