X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=CMakeLists.txt;h=5e9c7c860b93ae77a46cdb056819eb05076fc075;hb=90ea50811191dc891d2b3407c01527f1f2d745dd;hp=f8ca0c10fdd39c5e699ac8bdca8cd490570f44da;hpb=b3e3404f06db71354bf060497bd015a1cb47b59f;p=lyx.git diff --git a/CMakeLists.txt b/CMakeLists.txt index f8ca0c10fd..5e9c7c860b 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) +LYX_COMBO(USE_QT "Use Qt version as frontend" AUTO QT4 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) @@ -674,6 +674,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}) @@ -699,7 +712,14 @@ else() # The following setting with LYX_GCC11_MODE is needed because cmake does not honor # CMAKE_CXX_STANDARD while performing tests like # check_cxx_source_compiles("..." HAVE_DEF_MAKE_UNIQUE) - set(LYX_CXX_FLAGS "-Wall -Wextra -Wno-deprecated-copy ${LYX_GCC11_MODE}${LYX_CXX_FLAGS}") + include(CheckCXXCompilerFlag) + unset(CHECK_WNODEPRECATEDCOPY_FLAG CACHE) + 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() @@ -719,16 +739,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) @@ -743,32 +753,62 @@ endif() set(min_qt5_version "5.6") if(LYX_USE_QT MATCHES "AUTO") - # try qt5 first - find_package(Qt5Core CONFIG QUIET) - if(Qt5Core_FOUND) - set(LYX_USE_QT "QT5" CACHE STRING "Valid qt version" FORCE) + # 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}") - 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) + 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() - else() - set(LYX_USE_QT "QT4" CACHE STRING "Valid qt version" FORCE) endif() endif() -if(LYX_USE_QT MATCHES "QT5") + +set(QtCore5CompatLibrary) +set(QtCore5CompatModule) +if(LYX_USE_QT MATCHES "QT6|QT5") + if (LYX_USE_QT MATCHES "QT6") + set(QtVal "Qt6") + macro (qt_add_resources) + Qt6_add_resources(${ARGN}) + endmacro() + macro (qt_wrap_uifiles) + Qt6_wrap_ui(${ARGN}) + endmacro() + else() + set(QtVal "Qt5") + macro (qt_add_resources) + Qt5_add_resources(${ARGN}) + endmacro() + macro (qt_wrap_uifiles) + Qt5_wrap_ui(${ARGN}) + endmacro() + endif() # set QPA_XCB if QT uses X11 - find_package(Qt5Core CONFIG REQUIRED) - if (Qt5Core_FOUND) - find_package(Qt5Widgets CONFIG REQUIRED) + find_package(${QtVal}Core CONFIG REQUIRED) + if (${QtVal}Core_FOUND) + find_package(${QtVal}Widgets CONFIG REQUIRED) if(APPLE) - find_package(Qt5MacExtras CONFIG REQUIRED) + if (LYX_USE_QT MATCHES "QT6") + find_package(${QtVal}MacExtras CONFIG QUIET) + else() + find_package(${QtVal}MacExtras CONFIG REQUIRED) + endif() endif() - find_package(Qt5X11Extras CONFIG QUIET) - find_package(Qt5WinExtras CONFIG QUIET) - set(QTVERSION ${Qt5Core_VERSION}) + find_package(${QtVal}X11Extras CONFIG QUIET) + find_package(${QtVal}WinExtras CONFIG QUIET) + 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") @@ -781,19 +821,20 @@ if(LYX_USE_QT MATCHES "QT5") endif() macro (qt_use_modules lyxtarget) foreach (_tg ${ARGN}) - find_package(Qt5${_tg} CONFIG REQUIRED) - target_link_libraries(${lyxtarget} Qt5::${_tg}) + find_package(${QtVal}${_tg} CONFIG REQUIRED) + target_link_libraries(${lyxtarget} ${QtVal}::${_tg}) endforeach() endmacro() - macro (qt_add_resources) - qt5_add_resources(${ARGN}) - endmacro() - macro (qt_wrap_uifiles) - qt5_wrap_ui(${ARGN}) - endmacro() message(STATUS "Found Qt-Version ${QTVERSION}") if(WIN32) - set(LYX_QTMAIN_LIBRARY ${Qt5Core_QTMAIN_LIBRARIES}) + set(LYX_QTMAIN_LIBRARY ${${QtVal}Core_QTMAIN_LIBRARIES}) + endif() + if (LYX_USE_QT MATCHES "QT6") + get_target_property(QT_MOC_EXECUTABLE Qt6::moc LOCATION) + find_package(Qt6 COMPONENTS Core5Compat REQUIRED) + include_directories(${Qt6Core5Compat_INCLUDE_DIRS}) + set(QtCore5CompatLibrary Qt6::Core5Compat) + set(QtCore5CompatModule Core5Compat) endif() endif() elseif(LYX_USE_QT MATCHES "QT4") @@ -1071,7 +1112,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-")