X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=CMakeLists.txt;h=933a8f38455e8ce82adf86fdd64d41b609210446;hb=0d92eaeb11a8d84d58f1c7a87c5e55b332fe207a;hp=6cdd52c52fe43084c0fdce877931155388e1832b;hpb=9dd695b17adfd47a35ea49b9c19cf5984d2d68be;p=lyx.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 6cdd52c52f..933a8f3845 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,10 +139,13 @@ LYX_OPTION(INSTALL_PREFIX "Install path for LyX" OFF ALL) LYX_OPTION(BUNDLE "Build bundle (experimental) " OFF ALL) LYX_OPTION(ENABLE_URLTESTS "Enable for URL tests" OFF ALL) LYX_OPTION(ENABLE_EXPORT_TESTS "Enable for export tests" OFF ALL) +LYX_OPTION(ENABLE_KEYTESTS "Enable for keytests" OFF ALL) LYX_OPTION(ASAN "Use address sanitizer" OFF ALL) LYX_COMBO(USE_QT "Use Qt version as frontend" QT4 QT5) -LYX_OPTION(3RDPARTY_BUILD "Build 3rdparty libs" OFF ALL) -LYX_COMBO(ENABLE_CXX11 "Build with options for c++11-mode" AUTO ON OFF) +#LYX_OPTION(3RDPARTY_BUILD "Build 3rdparty libs" OFF ALL) +LYX_OPTION(EXTERNAL_Z "Build 3rdparty lib zlib" ON ALL) +LYX_OPTION(EXTERNAL_ICONV "Build 3rdparty lib iconvlib" ON ALL) +LYX_OPTION(EXTERNAL_HUNSPELL "Build 3rdparty lib hunspelllib" ON ALL) # GCC specific LYX_OPTION(PROFILE "Build profile version" OFF GCC) @@ -157,7 +160,6 @@ LYX_OPTION(PROFILE "Build with options for gprof" OFF GCC) LYX_OPTION(CONSOLE "Show console on Windows, enforce with =FORCE" ON MSVC) LYX_OPTION(VLD "Use VLD with MSVC" OFF MSVC) LYX_OPTION(WALL "Enable all warnings" OFF MSVC) -LYX_OPTION(CONFIGURE_CHECKS "Also run configure checks for MSVC" OFF MSVC) LYX_OPTION(DEPENDENCIES_DOWNLOAD "Download dependencies for MSVC 10" OFF MSVC) # APPLE specific @@ -209,20 +211,21 @@ else() set(LYX_MERGE_REBUILD OFF) endif() - if(LYX_DEPENDENCIES_DOWNLOAD) message(STATUS) - if(MSVC12) - set(LYX_DEPENDENCIES_DIR ${TOP_BINARY_DIR}/msvc2013-deps) - set(deps_files lyx-windows-deps-msvc2013.zip) - set(deps_server http://ftp.lyx.de/LyX-Windows-Deps) - set(GNUWIN32_DIR ${LYX_DEPENDENCIES_DIR}/lyx-windows-deps-msvc2013) - else() - set(LYX_DEPENDENCIES_DIR ${TOP_BINARY_DIR}/msvc2010-deps) - set(deps_files lyx20-deps-msvc2010-x86.zip) - set(deps_server http://downloads.sourceforge.net/project/lyx/Win_installers/Dependencies) - set(GNUWIN32_DIR ${LYX_DEPENDENCIES_DIR}/deps20) - endif() + if(MSVC14) + set(LYX_DEPENDENCIES_DIR ${TOP_BINARY_DIR}/msvc2015-deps) + set(deps_files lyx-windows-deps-msvc2015.zip) + set(deps_server http://ftp.lyx.de/LyX-Windows-Deps) + set(GNUWIN32_DIR ${LYX_DEPENDENCIES_DIR}/lyx-windows-deps-msvc2015) + elseif(MSVC10) + set(LYX_DEPENDENCIES_DIR ${TOP_BINARY_DIR}/msvc2010-deps) + set(deps_files lyx-windows-deps-msvc2010.zip) + set(deps_server http://ftp.lyx.de/LyX-Windows-Deps) + set(GNUWIN32_DIR ${LYX_DEPENDENCIES_DIR}/lyx-windows-deps-msvc2010) + else() + message(FATAL_ERROR "error: no dependency package known for the selected MSVC version.") + endif() message(STATUS "Using downloaded dependencies in ${LYX_DEPENDENCIES_DIR}") foreach(it ${deps_files}) set(already_downloaded already_downloaded-NOTFOUND CACHE PATH "downloaded" FORCE) @@ -254,48 +257,37 @@ else() endif() -if(LYX_ENABLE_CXX11 MATCHES "AUTO") - # Set to some meaningful default - find_package(CXX11Compiler) - if(NOT CXX11COMPILER_FOUND) - set(LYX_ENABLE_CXX11 OFF CACHE TYPE STRING FORCE) - else() - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) - set(LYX_ENABLE_CXX11 ON CACHE TYPE STRING FORCE) - else() - # Not a gnu compiler - if(CMAKE_CXX_COMPILER_ID MATCHES "^[cC]lang$") - set(LYX_ENABLE_CXX11 ON CACHE TYPE STRING FORCE) - else() - set(LYX_ENABLE_CXX11 OFF CACHE TYPE STRING FORCE) - endif() - endif() - endif() +# Set to some meaningful default +find_package(CXX11Compiler) +if(NOT CXX11COMPILER_FOUND) + message(FATAL_ERROR "A C++11 compatible compiler is required.") endif() set(LYX_GCC11_MODE) if(UNIX OR MINGW) - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) - message(STATUS "Using GCC version ${GCC_VERSION}") - if(GCC_VERSION VERSION_LESS 4.9) - if(GCC_VERSION VERSION_LESS 4.3) - message(FATAL_ERROR "gcc >= 4.3 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 (CMAKE_CXX_COMPILER_ID MATCHES "^[cC]lang$") + # ignore the GCC_VERSION for clang + # and use the resulting CXX11_STD_REGEX found in FindCXX11Compiler.cmake + message(STATUS "Using clang") + if(CXX11_STD_REGEX) + set(LYX_USE_STD_REGEX 1) + else() + set(LYX_USE_STD_REGEX 0) + endif() else() - if (LYX_ENABLE_CXX11) - set(LYX_USE_STD_REGEX 1) - endif() - endif() - if (LYX_ENABLE_CXX11) - find_package(CXX11Compiler) - if(NOT CXX11COMPILER_FOUND) - message(FATAL_ERROR "A C++11 compatible compiler is required.") - endif() - set(LYX_GCC11_MODE "${CXX11_FLAG}") + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + 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) + else() + set(LYX_USE_STD_REGEX 1) + endif() endif() + set(LYX_GCC11_MODE "${CXX11_FLAG}") else() set(LYX_USE_STD_REGEX 0) # if(MSVC10) @@ -323,6 +315,14 @@ else() set(USE_POSIX_PACKAGING ON) endif() +if(LYX_3RDPARTY_BUILD) + # LYX_3RDPARTY_BUILD is not cached anymore, but for compatibility reasons + # this enables the build of all 3rd_party libs + set(LYX_EXTERNAL_Z OFF CACHE BOOL "Build 3rdparty lib zlib" FORCE) + set(LYX_EXTERNAL_ICONV OFF CACHE BOOL "Build 3rdparty iconvlib" FORCE) + set(LYX_EXTERNAL_HUNSPELL OFF CACHE BOOL "Build 3rdparty hunspelllib" FORCE) +endif() + macro(setstripped _varname) if(${ARGC} GREATER 1) string(STRIP "${ARGV1}" _v) @@ -453,9 +453,22 @@ if(LYX_INSTALL_PREFIX) endif() set(LYX_INSTALL_PREFIX ${LYX_INSTALL_PREFIX} CACHE PATH "LyX user's choice install prefix" FORCE) -string(REGEX REPLACE "/lyx${LYX_INSTALL_SUFFIX}$" "/share" SYSTEM_DATADIR ${CMAKE_INSTALL_PREFIX}) +if(UNIX) + set(SYSTEM_DATADIR "${CMAKE_INSTALL_PREFIX}/share") +elseif(CMAKE_INSTALL_PREFIX MATCHES "/lyx${LYX_INSTALL_SUFFIX}$") + string(REGEX REPLACE "/lyx${LYX_INSTALL_SUFFIX}$" "/share" SYSTEM_DATADIR ${CMAKE_INSTALL_PREFIX}) +else() + set(SYSTEM_DATADIR "${CMAKE_INSTALL_PREFIX}") +endif() -if(LYX_PACKAGE_SUFFIX) +# The define below allows lyx-executable to find its default configuration files +# see routines +# Package::messages_file() +# get_default_user_support_dir() +# relative_system_support_dir() +# in src/support/Package.cpp +# +if(LYX_PROGRAM_SUFFIX) set(PACKAGE ${PACKAGE_BASE}${LYX_INSTALL_SUFFIX}) else() set(PACKAGE ${PACKAGE_BASE}) @@ -566,7 +579,15 @@ if(NOT MSVC) if(NOT LYX_QUIET) set(CMAKE_VERBOSE_MAKEFILE ON) endif() - set(LYX_CXX_FLAGS "-Wall -Wunused-parameter ${LYX_GCC11_MODE}") + set(LYX_CXX_FLAGS "-Wall -Wunused-parameter ${LYX_GCC11_MODE}") + if(LYX_CXX_FLAGS MATCHES "\\+\\+(14|11|98)") + # Thanks to Brad King + # for the pointer to https://cmake.org/cmake/help/v3.6/variable/CMAKE_CXX_STANDARD.html + # This allows us to use QT5.7 with recent g++ (version >= 4.9) compilers + # and still use our own c++ extension tests + set(CMAKE_CXX_STANDARD ${CMAKE_MATCH_1}) + message(STATUS "CMAKE_CXX_STANDARD set to ${CMAKE_CXX_STANDARD}") + endif() if(LYX_STDLIB_DEBUG) set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC") endif() @@ -591,7 +612,6 @@ if(LYX_XMINGW) list(APPEND CMAKE_FIND_ROOT_PATH ${GNUWIN32_DIR}) endif() -set(QPA_XCB) if(LYX_USE_QT MATCHES "QT5") # set QPA_XCB if QT uses X11 find_package(Qt5Core REQUIRED) @@ -601,9 +621,6 @@ if(LYX_USE_QT MATCHES "QT5") find_package(Qt5MacExtras REQUIRED) endif() find_package(Qt5X11Extras QUIET) - if(Qt5X11Extras_FOUND) - set(QPA_XCB 1) - endif() find_package(Qt5WinExtras QUIET) set(QTVERSION ${Qt5Core_VERSION}) macro (qt_use_modules) @@ -634,8 +651,9 @@ elseif(LYX_USE_QT MATCHES "QT4") macro (qt_wrap_uifiles) qt4_wrap_ui(${ARGN}) endmacro() + set(LYX_QTMAIN_LIBRARY ${QT_QTSVG_LIBRARY}) if(WIN32) - set(LYX_QTMAIN_LIBRARY ${QT_QTMAIN_LIBRARIES}) + list(APPEND LYX_QTMAIN_LIBRARY ${QT_QTMAIN_LIBRARIES}) endif() else() message(FATAL_ERROR "Unhandled value for LYX_USE_QT (${LYX_USE_QT})") @@ -651,7 +669,7 @@ include_directories(${TOP_BINARY_DIR} ${TOP_SRC_DIR}/src) set(Spelling_FOUND OFF) set(Include_used_spellchecker) # String will be inserted into config.h -if(LYX_3RDPARTY_BUILD) +if(NOT LYX_EXTERNAL_HUNSPELL) add_subdirectory(3rdparty/hunspell) add_definitions(-DHUNSPELL_STATIC) set(HUNSPELL_FOUND ON) @@ -715,23 +733,23 @@ if(LYX_NLS) endif() endif() -if(UNIX) - find_package(ICONV REQUIRED) - find_package(ZLIB REQUIRED) +if(LYX_EXTERNAL_ICONV) + find_package(ICONV REQUIRED) else() - if(LYX_3RDPARTY_BUILD) - add_subdirectory(3rdparty/libiconv) - set(HAVE_ICONV_CONST 1) - add_subdirectory(3rdparty/zlib) - endif() + add_subdirectory(3rdparty/libiconv) + set(HAVE_ICONV_CONST 1) +endif() + +if(LYX_EXTERNAL_Z) + find_package(ZLIB REQUIRED) +else() + add_subdirectory(3rdparty/zlib) endif() if(LYX_EXTERNAL_BOOST) message(STATUS "Searching for boost") - if(LYX_USE_STD_REGEX) - find_package(Boost COMPONENTS signals) - else() - find_package(Boost COMPONENTS signals regex) + if(NOT LYX_USE_STD_REGEX) + find_package(Boost COMPONENTS regex) endif() if(Boost_FOUND) message(STATUS "Boost found") @@ -748,13 +766,10 @@ if(LYX_EXTERNAL_BOOST) message(FATAL_ERROR "Boost not found" ${Boost_ERROR_REASON}) endif() else() - if(LYX_USE_STD_REGEX) - set(Lyx_Boost_Libraries boost_signals) - else() - set(Lyx_Boost_Libraries boost_signals boost_regex) + if(NOT LYX_USE_STD_REGEX) + set(Lyx_Boost_Libraries boost_regex) endif() add_definitions(-DBOOST_USER_CONFIG="") - add_definitions(-DBOOST_SIGNALS_NO_DEPRECATION_WARNING=1) include_directories(${TOP_SRC_DIR}/3rdparty/boost) add_subdirectory(3rdparty/boost "${TOP_BINARY_DIR}/3rdparty/boost") endif() @@ -769,10 +784,14 @@ if(WIN32) set(WIN32_CONSOLE WIN32) endif() if(MSVC) - add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DNOMINMAX) + # -DPSAPI_VERSION=1 is needed to run on vista (bug 10186) + add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DNOMINMAX -DPSAPI_VERSION=1) # disable checked iterators for msvc release builds to get maximum speed set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /D_SECURE_SCL=0") else() + # -DPSAPI_VERSION=1 is not needed for mingw, since the mingw psapi.h + # does not use it and always declares the vista compatible API. + # If this ever changes then -DPSAPI_VERSION might be needed here as well. add_definitions(-DWINVER=0x0500) endif() endif() @@ -919,13 +938,9 @@ if (WIN32 AND Qt5Core_FOUND) set(Z_PREFIX 1) endif() -# compiler tests, config.h generation -if(MSVC AND NOT LYX_CONFIGURE_CHECKS) - configure_file(${LYX_CMAKE_DIR}/configCompiler.h.msvc ${TOP_BINARY_DIR}/configCompiler.h) -else() - include(${LYX_CMAKE_DIR}/ConfigureChecks.cmake) - configure_file(${LYX_CMAKE_DIR}/configCompiler.h.cmake ${TOP_BINARY_DIR}/configCompiler.h) -endif() +# compiler tests, config.h generation LYX_CONFIGURE_CHECKS +include(${LYX_CMAKE_DIR}/ConfigureChecks.cmake) +configure_file(${LYX_CMAKE_DIR}/configCompiler.h.cmake ${TOP_BINARY_DIR}/configCompiler.h) configure_file(${LYX_CMAKE_DIR}/config.h.cmake ${TOP_BINARY_DIR}/config.h)