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)
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
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)
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})
# 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}")
- 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()
+ 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()
+ 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)
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)
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")
if (${QtVal}Core_FOUND)
find_package(${QtVal}Widgets CONFIG REQUIRED)
if(APPLE)
- find_package(${QtVal}MacExtras 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(${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")
- 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 <jeanpierre.chretien@free.fr>
# Date 11.03.2017
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()
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-")
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()