]> git.lyx.org Git - lyx.git/blobdiff - CMakeLists.txt
ctests: Ignore some MergedManual tests with permanent problems
[lyx.git] / CMakeLists.txt
index 3fc69ab1d4bbc813e5423d97f7425504107cb38f..965f22f3c54427cb0008287e4246193f95223887 100644 (file)
@@ -4,7 +4,7 @@
 # Copyright (c) 2006-2011 Peter Kümmel, <syntheticpp@gmx.net>
 # Copyright (c) 2008-2011 Kornel Benko, <Kornel.Benko@berlin.de>
 
-cmake_minimum_required(VERSION 2.6.4)
+cmake_minimum_required(VERSION 3.1.0)
 
 set(LYX_PROJECT LyX)
 
@@ -47,6 +47,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)
@@ -256,7 +260,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")
@@ -281,10 +285,11 @@ if(UNIX OR MINGW)
        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 1915)
+               set(LYX_USE_STD_REGEX 0)
+       else()
+               set(LYX_USE_STD_REGEX 1)
+       endif()
 endif()
 
 
@@ -337,7 +342,7 @@ foreach(_c_l ${_config_lines} )
                if(PACKAGE_VERSION MATCHES "^\([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_VERSION ${CMAKE_MATCH_4})
                        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 ("${LYX_SUFFIX_VALUE}" MATCHES "")
@@ -354,7 +359,7 @@ endforeach(_c_l)
 
 FIND_PROGRAM(LYX_GITVERSION git)
 #message(STATUS "gitversion = ${LYX_GITVERSION}")
-set(LYX_REVISION_VERSION ${LYX_PATCH_VERSION})
+set(LYX_REVISION_VERSION ${LYX_RELEASE_VERSION})
 set(LYX_PACKAGE_RELEASE "1")
 if(LYX_GITVERSION)
   if (LYX_LOCALVERSIONING)
@@ -367,7 +372,7 @@ if(LYX_GITVERSION)
       # 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(LYX_REVISION_VERSION "${LYX_RELEASE_VERSION}-${tmp_REVISION_VERSION}git")
       set(ENABLE_DIST ON)
     endif()
   endif()
@@ -415,8 +420,8 @@ if(LYX_BUNDLE)
                set(OSX_BUNDLE_DIRS "Resources;Resources;Resources")
 
                # Process Info.plist and lyxrc.dist
+               # See development/cmake/Install.cmake
                configure_file("${CMAKE_CURRENT_SOURCE_DIR}/development/MacOSX/Info.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
-               configure_file("${CMAKE_CURRENT_SOURCE_DIR}/development/MacOSX/lyxrc.dist.in" "${CMAKE_CURRENT_BINARY_DIR}/lyxrc.dist")
 
                set(LYX_BUILD_BUNDLE MACOSX_BUNDLE)
                set(LYX_DATA_SUBDIR ${LYX_BUNDLE_NAME}.app/Contents/Resources/ CACHE STRING "Bundle Contents dir" FORCE)
@@ -457,12 +462,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
@@ -471,7 +480,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()
@@ -547,7 +555,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()
@@ -597,12 +605,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()
 
@@ -621,7 +629,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}")
@@ -637,14 +645,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}\"")
@@ -656,8 +664,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})
@@ -694,7 +705,8 @@ endif()
 
 find_package(Magic)
 if(Magic_FOUND)
-       set(HAVE_MAGIC_H 1)
+  set(HAVE_MAGIC_H 1)
+  include_directories(${Magic_INCLUDE_DIR})
 endif()
 
 include_directories(${TOP_BINARY_DIR} ${TOP_SRC_DIR}/src)
@@ -853,7 +865,7 @@ endif()
 
 message(STATUS "")
 foreach(_v PACKAGE PACKAGE_VERSION
-       PROGRAM_SUFFIX LYX_DATE LYX_DIR_VER LYX_USERDIR_VER
+       PROGRAM_SUFFIX LYX_DIR_VER LYX_USERDIR_VER
        LYX_ABS_TOP_SRCDIR
        LYX_ABS_INSTALLED_DATADIR LYX_ABS_INSTALLED_LOCALEDIR LYX_INSTALL_SUFFIX)
        if(NOT DEFINED ${_v})
@@ -914,7 +926,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}")
@@ -938,7 +950,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")
@@ -1037,15 +1049,18 @@ 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()
+add_subdirectory(development/batchtests "${TOP_BINARY_DIR}/batchtests")
 
 message(STATUS)
 message(STATUS "Build params, switch LYX_* options by -DLYX_*=ON or OFF, LYX_* combos by -DLYX_*=value:")