X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=CMakeLists.txt;h=e4cf8bb519b5b13f79875f117d388a639c0da42e;hb=3a544072a522845b192594dd2ab11fcb1fc80eeb;hp=f9a5b66a26ee9aa6ef7a8da0ac8040cfcd6cbb87;hpb=11386f4601bbe1c1e5c14c0225993a36dbd849d5;p=lyx.git diff --git a/CMakeLists.txt b/CMakeLists.txt index f9a5b66a26..e4cf8bb519 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ # Copyright (c) 2006-2011 Peter Kümmel, # Copyright (c) 2008-2011 Kornel Benko, -cmake_minimum_required(VERSION 2.6.4) +cmake_minimum_required(VERSION 3.1.0) set(LYX_PROJECT LyX) @@ -25,6 +25,12 @@ set(TOP_SCRIPT_PATH "${TOP_CMAKE_PATH}/scripts") set(CMAKE_MODULE_PATH "${TOP_MODULE_PATH}") +# RKH +if(WIN32 AND MINGW) + set(Qt5Core_DIR "/usr/i686-w64-mingw32/sys-root/mingw/lib/cmake/Qt5Core/") + set(GNUWIN32_DIR "/cvs/lyx/lyx-dependencies/lyx-windows-deps-msvc2010/") +endif() + set(CMAKE_PROJECT_NAME ${LYX_PROJECT}) message(STATUS) @@ -47,6 +53,10 @@ if(COMMAND cmake_policy) # COMPILE_DEFINITIONS are not used yet. Enable new behavior. cmake_policy(SET CMP0043 NEW) endif() + cmake_policy(SET CMP0020 NEW) + if(POLICY CMP0075) + cmake_policy(SET CMP0075 OLD) + endif() endif() set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) @@ -260,7 +270,7 @@ if(NOT CXX11COMPILER_FOUND) endif() set(LYX_GCC11_MODE) if(UNIX OR MINGW) - if (CMAKE_CXX_COMPILER_ID MATCHES "^[cC]lang$") + if (CMAKE_CXX_COMPILER_ID MATCHES "^([cC]lang|AppleClang)$") # ignore the GCC_VERSION for clang # and use the resulting CXX11_STD_REGEX found in FindCXX11Compiler.cmake message(STATUS "Using clang") @@ -270,25 +280,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() @@ -300,7 +318,12 @@ include(LyXPaths) file(STRINGS "${TOP_SRC_DIR}/configure.ac" _config_lines) if(WIN32) - set(CMAKE_PREFIX_PATH Specify-path-to-Qt CACHE PATH "Used Qt version") + # RKH + if (MINGW) + set(CMAKE_PREFIX_PATH "/usr/i686-w64-mingw32/sys-root/mingw/lib/cmake/Qt5Core/" "/usr/i686-w64-mingw32/sys-root/mingw/lib/cmake/Qt5Widgets/") + else() + set(CMAKE_PREFIX_PATH Specify-path-to-Qt CACHE PATH "Used Qt version") + endif() if(MSVC) set(LYX_3RDPARTY_BUILD ON CACHE BOOL "Build 3rdparty libraries" FORCE) endif() @@ -338,12 +361,19 @@ foreach(_c_l ${_config_lines} ) setstripped(PACKAGE_BASE ${CMAKE_MATCH_1}) setstripped(PACKAGE_VERSION ${CMAKE_MATCH_2}) setstripped(PACKAGE_BUGREPORT ${CMAKE_MATCH_3}) - if(PACKAGE_VERSION MATCHES "^\([0-9]+\)\\.\([0-9]+\)\(\\.\([0-9]+\)\)?.*$") + if(PACKAGE_VERSION MATCHES "^\([0-9]+\)\\.\([0-9]+\)\(\\.\([0-9]+\)\(\\.\([0-9]+\)\)?\)?.*$") set(LYX_MAJOR_VERSION ${CMAKE_MATCH_1}) set(LYX_MINOR_VERSION ${CMAKE_MATCH_2}) - set(LYX_PATCH_VERSION ${CMAKE_MATCH_4}) + set(LYX_RELEASE_LEVEL ${CMAKE_MATCH_4}) + set(LYX_RELEASE_PATCH ${CMAKE_MATCH_6}) set(LYX_DIR_VER "LYX_DIR_${CMAKE_MATCH_1}${CMAKE_MATCH_2}x") set(LYX_USERDIR_VER "LYX_USERDIR_${CMAKE_MATCH_1}${CMAKE_MATCH_2}x") + if (NOT LYX_RELEASE_LEVEL) + set(LYX_RELEASE_LEVEL 0) + endif() + if (NOT LYX_RELEASE_PATCH) + set(LYX_RELEASE_PATCH 0) + endif() if ("${LYX_SUFFIX_VALUE}" MATCHES "") set(LYX_INSTALL_SUFFIX "${LYX_MAJOR_VERSION}.${LYX_MINOR_VERSION}") else() @@ -358,24 +388,36 @@ endforeach(_c_l) FIND_PROGRAM(LYX_GITVERSION git) #message(STATUS "gitversion = ${LYX_GITVERSION}") -set(LYX_REVISION_VERSION ${LYX_PATCH_VERSION}) -set(LYX_PACKAGE_RELEASE "1") +set(LYX_REVISION_VERSION ${LYX_RELEASE_LEVEL}) +set(LYX_PACKAGE_RELEASE "UNDEFINED") if(LYX_GITVERSION) if (LYX_LOCALVERSIONING) - # Find the revision number and for later use + # Find the revision number for later use EXECUTE_PROCESS(COMMAND ${LYX_GITVERSION} describe --match 2.0.0 HEAD - WORKING_DIRECTORY "${TOP_SRC_DIR}" OUTPUT_VARIABLE tmp_LYX_PACKAGE_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE) - if (tmp_LYX_PACKAGE_RELEASE MATCHES "^2\\.0\\.0\\-\([0-9]+\)\\-\(.*\)$") - set(LYX_PACKAGE_RELEASE ${CMAKE_MATCH_2}) - # We will add offset of 40000 to get appropriate value to - # previous svn. - # We use this value than also to set the package-patch-value - MATH(EXPR tmp_REVISION_VERSION "(${CMAKE_MATCH_1}+40000)") - set(LYX_REVISION_VERSION "${LYX_PATCH_VERSION}-${tmp_REVISION_VERSION}git") - set(ENABLE_DIST ON) + WORKING_DIRECTORY "${TOP_SRC_DIR}" + RESULT_VARIABLE tmp_GIT_RESULT + OUTPUT_VARIABLE tmp_LYX_PACKAGE_RELEASE + ERROR_VARIABLE tmp_GIT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (tmp_GIT_RESULT EQUAL 0) + if (tmp_LYX_PACKAGE_RELEASE MATCHES "^2\\.0\\.0\\-\([0-9]+\)\\-\(.*\)$") + set(LYX_PACKAGE_RELEASE ${CMAKE_MATCH_2}) + # We will add offset of 40000 to get appropriate value to + # previous svn. + # We use this value than also to set the package-patch-value + MATH(EXPR tmp_REVISION_VERSION "(${CMAKE_MATCH_1}+40000)") + set(LYX_REVISION_VERSION "${LYX_RELEASE_LEVEL}-${tmp_REVISION_VERSION}git") + set(ENABLE_DIST ON) + endif() endif() endif() endif() +if (LYX_PACKAGE_RELEASE MATCHES "UNDEFINED") + set(LYX_PACKAGE_RELEASE "1") + if (LYX_RELEASE_PATCH GREATER 0) + set(LYX_REVISION_VERSION "${LYX_RELEASE_LEVEL}.${LYX_RELEASE_PATCH}") + endif() +endif() # Set the programs (lyx, tex2lyx, etc.) suffix # When building an OS X bundle, we will append @@ -461,12 +503,16 @@ else() set(SYSTEM_DATADIR "${CMAKE_INSTALL_PREFIX}") endif() -if(CMAKE_COMPILER_IS_GNUCXX) - message(STATUS "CMAKE_COMPILER_IS_GNUCXX = ${CMAKE_COMPILER_IS_GNUCXX}") - set(suffixing ${LYX_PROGRAM_SUFFIX}) -else() +if(NOT CMAKE_COMPILER_IS_GNUCXX) # Not a GCC compiler, programs do not have a suffix set(suffixing ${LYX_PACKAGE_SUFFIX}) +elseif(WIN32 AND MINGW) + # We want to use a suffix for the package in this case, + # even if not for the program + set(suffixing ${LYX_PACKAGE_SUFFIX}) +else() + message(STATUS "CMAKE_COMPILER_IS_GNUCXX = ${CMAKE_COMPILER_IS_GNUCXX}") + set(suffixing ${LYX_PROGRAM_SUFFIX}) endif() # The define PACKAGE below allows lyx-executable to find its default configuration files @@ -475,7 +521,6 @@ endif() # get_default_user_support_dir() # relative_system_support_dir() # in src/support/Package.cpp -# if(suffixing) set(PACKAGE ${PACKAGE_BASE}${LYX_INSTALL_SUFFIX}) else() @@ -527,13 +572,15 @@ else() endif() mark_as_advanced(LYX_MAN_DIR) -if(LYX_INSTALL AND WIN32) - message(STATUS "Configuring NSIS files") - configure_file(development/Win32/packaging/installer/lyx.nsi.cmake ${CMAKE_BINARY_DIR}/installer/lyx.nsi @ONLY) - configure_file(development/Win32/packaging/installer/settings.nsh.cmake ${CMAKE_BINARY_DIR}/installer/settings-cmake.nsh @ONLY) - configure_file(development/Win32/packaging/installer/include/declarations.nsh.cmake ${CMAKE_BINARY_DIR}/installer/declarations-cmake.nsh @ONLY) - message(STATUS "NSIS files are created in ${CMAKE_BINARY_DIR}/installer") -endif() +# The Win installer cannot be built by Cmake because one needs to install plugins for NSIS +# see the Readme.txt of the installer +#if(LYX_INSTALL AND WIN32) +# message(STATUS "Configuring NSIS files") +# configure_file(development/Win32/packaging/installer/lyx.nsi.cmake ${CMAKE_BINARY_DIR}/installer/lyx.nsi @ONLY) +# configure_file(development/Win32/packaging/installer/settings.nsh.cmake ${CMAKE_BINARY_DIR}/installer/settings-cmake.nsh @ONLY) +# configure_file(development/Win32/packaging/installer/include/declarations.nsh.cmake ${CMAKE_BINARY_DIR}/installer/declarations-cmake.nsh @ONLY) +# message(STATUS "NSIS files are created in ${CMAKE_BINARY_DIR}/installer") +#endif() if(NOT GROUP_CODE) #set(GROUP_CODE "The Golden Code") @@ -549,7 +596,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() @@ -599,12 +646,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() @@ -623,7 +670,7 @@ endif() set(min_qt5_version "5.6") if(LYX_USE_QT MATCHES "AUTO") # try qt5 first - find_package(Qt5Core QUIET) + 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}") @@ -639,14 +686,14 @@ if(LYX_USE_QT MATCHES "AUTO") endif() if(LYX_USE_QT MATCHES "QT5") # set QPA_XCB if QT uses X11 - find_package(Qt5Core REQUIRED) + find_package(Qt5Core CONFIG REQUIRED) if (Qt5Core_FOUND) - find_package(Qt5Widgets REQUIRED) + find_package(Qt5Widgets CONFIG REQUIRED) if(APPLE) - find_package(Qt5MacExtras REQUIRED) + find_package(Qt5MacExtras CONFIG REQUIRED) endif() - find_package(Qt5X11Extras QUIET) - find_package(Qt5WinExtras QUIET) + find_package(Qt5X11Extras CONFIG QUIET) + find_package(Qt5WinExtras CONFIG QUIET) set(QTVERSION ${Qt5Core_VERSION}) if (QTVERSION VERSION_LESS ${min_qt5_version}) message(STATUS "QTVERSION = \"${QTVERSION}\"") @@ -658,8 +705,11 @@ if(LYX_USE_QT MATCHES "QT5") # Subject: cmake compilation error #message(FATAL_ERROR "Wrong Qt-Version") endif() - macro (qt_use_modules) - qt5_use_modules(${ARGN}) + macro (qt_use_modules lyxtarget) + foreach (_tg ${ARGN}) + find_package(Qt5${_tg} CONFIG REQUIRED) + target_link_libraries(${lyxtarget} Qt5::${_tg}) + endforeach() endmacro() macro (qt_add_resources) qt5_add_resources(${ARGN}) @@ -696,7 +746,7 @@ endif() find_package(Magic) if(Magic_FOUND) - set(HAVE_MAGIC_H 1) + set(HAVE_MAGIC_H 1) endif() include_directories(${TOP_BINARY_DIR} ${TOP_SRC_DIR}/src) @@ -729,7 +779,7 @@ if(NOT LYX_EXTERNAL_HUNSPELL) message(STATUS " - library: ${HUNSPELL_LIBRARY}") endif() -foreach(_spell "ASPELL" "Enchant" "Hunspell") +foreach(_spell "ASPELL" "ENCHANT" "HUNSPELL") string(TOUPPER ${_spell} _upspell) if (NOT ${_upspell}_FOUND) find_package(${_spell}) @@ -784,17 +834,23 @@ if(LYX_NLS) endif() endif() -if(LYX_EXTERNAL_ICONV) - find_package(ICONV REQUIRED) +# RKH +if(WIN32 AND MINGW) + find_package(ICONV REQUIRED) + find_package(ZLIB REQUIRED) else() - add_subdirectory(3rdparty/libiconv) - set(HAVE_ICONV_CONST 1) -endif() + if(LYX_EXTERNAL_ICONV) + find_package(ICONV REQUIRED) + else() + add_subdirectory(3rdparty/libiconv) + set(HAVE_ICONV_CONST 1) + endif() -if(LYX_EXTERNAL_Z) - find_package(ZLIB REQUIRED) -else() - add_subdirectory(3rdparty/zlib) + if(LYX_EXTERNAL_Z) + find_package(ZLIB REQUIRED) + else() + add_subdirectory(3rdparty/zlib) + endif() endif() if(LYX_USE_STD_REGEX) @@ -916,7 +972,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}") @@ -940,7 +996,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") @@ -989,7 +1045,7 @@ if (CMAKE_GENERATOR MATCHES Xcode) ENDIF(XCODE_VERSION VERSION_LESS "5.0") ENDIF(CMAKE_GENERATOR MATCHES Xcode) -if (WIN32 AND Qt5Core_FOUND) +if (WIN32 AND NOT MINGW AND Qt5Core_FOUND) set(Z_PREFIX 1) endif() @@ -1039,15 +1095,17 @@ if(LYX_INSTALL) endif() include(../Install) +# By running the URL tests first, time can be saved when running the ctests in +# parallel since the URL tests take a long time to run (e.g. 10 minutes). +if(LYX_ENABLE_URLTESTS) + add_subdirectory(development/checkurls "${TOP_BINARY_DIR}/checkurls") +endif() add_subdirectory(src "${TOP_BINARY_DIR}/src") add_subdirectory(lib/lyx2lyx "${TOP_BINARY_DIR}/lyx2lyx") add_subdirectory(lib/scripts "${TOP_BINARY_DIR}/scripts") add_subdirectory(lib/examples "${TOP_BINARY_DIR}/lib/examples") add_subdirectory(sourcedoc "${TOP_BINARY_DIR}/sourcedoc") add_subdirectory(development/autotests "${TOP_BINARY_DIR}/autotests") -if(LYX_ENABLE_URLTESTS) - add_subdirectory(development/checkurls "${TOP_BINARY_DIR}/checkurls") -endif() message(STATUS) message(STATUS "Build params, switch LYX_* options by -DLYX_*=ON or OFF, LYX_* combos by -DLYX_*=value:")