]> git.lyx.org Git - lyx.git/blobdiff - CMakeLists.txt
Set makeindex as index processor in the docs
[lyx.git] / CMakeLists.txt
index b445ab7b92fc2b20a3f17513b843f30feb0da90e..8c3a947243797a109c80158823a6f42fba507e95 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)
 
@@ -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()
-                 # <regex> 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)
+               # <regex> 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()
@@ -461,12 +484,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 +502,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()
@@ -551,7 +577,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()
@@ -601,12 +627,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()
 
@@ -625,7 +651,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}")
@@ -641,14 +667,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}\"")
@@ -660,8 +686,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})
@@ -698,7 +727,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)
@@ -786,17 +815,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)
@@ -918,7 +953,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}")
@@ -942,7 +977,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")
@@ -991,7 +1026,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()
 
@@ -1041,15 +1076,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:")