X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=CMakeLists.txt;h=a5b85132b21481c2cc8d233cc418854ce9402d24;hb=3ed174cc03b9ca14f1c8e09dd990d9eb0b4461b4;hp=978e63c53659d57d20cecc97188f2d7986ea9f4c;hpb=6f34a8a6407823d6ef746f484a3100392f45d988;p=lyx.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 978e63c536..a5b85132b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,8 +10,9 @@ set(LYX_PROJECT LyX) enable_testing() -get_filename_component(lyx_dir_readme ${CMAKE_SOURCE_DIR}/README ABSOLUTE) +get_filename_component(lyx_dir_readme ${CMAKE_SOURCE_DIR}/README REALPATH) # Resolve symlinks get_filename_component(TOP_SRC_DIR ${lyx_dir_readme} PATH) +message(STATUS "TOP_SRC_DIR = ${TOP_SRC_DIR}") set(LYX_CMAKE_DIR "development/cmake") set(TOP_CMAKE_PATH "${TOP_SRC_DIR}/${LYX_CMAKE_DIR}") @@ -40,6 +41,9 @@ if(COMMAND cmake_policy) cmake_policy(SET CMP0005 OLD) # Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION cmake_policy(SET CMP0006 NEW) + if(POLICY CMP0020) + cmake_policy(SET CMP0020 OLD) + endif() if(POLICY CMP0028) cmake_policy(SET CMP0028 OLD) endif() @@ -68,8 +72,15 @@ if(LYX_XMINGW) endif() if(NOT help AND NOT HELP) - # 'project' triggers the searching for a compiler - project(${LYX_PROJECT}) + # 'project' triggers the searching for a compiler + project(${LYX_PROJECT}) + if (CMAKE_COMPILER_IS_GNUCXX) + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.0") + message(STATUS "Gnu CXX compiler version = ${CMAKE_CXX_COMPILER_VERSION}") + message(STATUS "is too old, should be >= 4.0") + message(FATAL_ERROR "Exiting") + endif() + endif() endif() if(UNIX) @@ -127,6 +138,7 @@ 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(ASAN "Use address sanitizer" OFF ALL) +LYX_COMBO(USE_QT "Use Qt version as frontend" QT4 QT5) # GCC specific LYX_OPTION(PROFILE "Build profile version" OFF GCC) @@ -135,7 +147,6 @@ 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(STDLIB_DEBUG "Use debug stdlib" OFF GCC) -LYX_OPTION(CONCEPT_CHECKS "Enable concept-checks" OFF GCC) LYX_OPTION(PROFILE "Build with options for gprof" OFF GCC) LYX_OPTION(ENABLE_CXX11 "Build with options for c++11-mode" OFF GCC) @@ -149,11 +160,6 @@ LYX_OPTION(DEPENDENCIES_DOWNLOAD "Download dependencies for MSVC 10" OFF MSVC) # APPLE specific LYX_OPTION(DMG "Build as Mac bundle, needed for .dmg (experimental) " OFF MAC) LYX_OPTION(COCOA "Use Cocoa on Mac" OFF MAC) -if(LYX_XMINGW) - LYX_COMBO(USE_QT "Use Qt version as frontend for MINGW" QT4) -else() - LYX_COMBO(USE_QT "Use Qt version as frontend" QT4 QT5) -endif() if(help OR HELP) @@ -203,10 +209,18 @@ endif() if(LYX_DEPENDENCIES_DOWNLOAD) message(STATUS) - set(LYX_DEPENDENCIES_DIR ${TOP_BINARY_DIR}/msvc2010-deps) - message(STATUS "Using downloaded dependencies in ${LYX_DEPENDENCIES_DIR}") - set(deps_files lyx20-deps-msvc2010-x86.zip) - set(deps_server http://downloads.sourceforge.net/project/lyx/Win_installers/Dependencies) + 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() + message(STATUS "Using downloaded dependencies in ${LYX_DEPENDENCIES_DIR}") foreach(it ${deps_files}) set(already_downloaded already_downloaded-NOTFOUND CACHE PATH "downloaded" FORCE) find_file(already_downloaded ${it} "${LYX_DEPENDENCIES_DIR}/download") @@ -223,11 +237,6 @@ if(LYX_DEPENDENCIES_DOWNLOAD) WORKING_DIRECTORY ${LYX_DEPENDENCIES_DIR}) endif() endforeach() - set(GNUWIN32_DIR ${LYX_DEPENDENCIES_DIR}/deps20) - if(MSVC12) - # handle error in msvc12 when linking against msvc10 libs - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /vd2") - endif() endif() @@ -244,14 +253,17 @@ endif() set(LYX_GCC11_MODE) if(UNIX OR MINGW) - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) message(STATUS "Using GCC version ${GCC_VERSION}") -# disabled because of missing match_partial -# if(GCC_VERSION VERSION_LESS 4.9) + if(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) -# 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) @@ -260,7 +272,6 @@ if(UNIX OR MINGW) set(LYX_GCC11_MODE "${CXX11_FLAG}") endif() else() -# disabled because of missing match_partial set(LYX_USE_STD_REGEX 0) # if(MSVC10) # set(LYX_USE_STD_REGEX 1) #TODO should we use it in ECMAScript mode? @@ -524,9 +535,6 @@ if(NOT MSVC) if(LYX_STDLIB_DEBUG) set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC") endif() - if(LYX_CONCEPT_CHECKS) - set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCPP_CONCEPT_CHECKS") - endif() set(CMAKE_CXX_FLAGS "${LYX_CXX_FLAGS} -fno-strict-aliasing " CACHE TYPE STRING FORCE) set(CMAKE_CXX_FLAGS_DEBUG "${LYX_CXX_FLAGS} -fno-strict-aliasing -O0 -g3 -D_DEBUG" CACHE TYPE STRING FORCE) if(MINGW) @@ -545,9 +553,9 @@ if(LYX_CXX_FLAGS_EXTRA) endif() 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}) + list(APPEND CMAKE_FIND_ROOT_PATH ${GNUWIN32_DIR}) endif() + if(LYX_USE_QT MATCHES "QT5") find_package(Qt5Core REQUIRED) if (Qt5Core_FOUND) @@ -556,6 +564,7 @@ if(LYX_USE_QT MATCHES "QT5") find_package(Qt5MacExtras REQUIRED) endif() find_package(Qt5X11Extras QUIET) + find_package(Qt5WinExtras QUIET) set(QTVERSION ${Qt5Core_VERSION}) macro (qt_use_modules) qt5_use_modules(${ARGN}) @@ -567,8 +576,15 @@ if(LYX_USE_QT MATCHES "QT5") qt5_wrap_ui(${ARGN}) endmacro() message(STATUS "Found Qt-Version ${QTVERSION}") + if(WIN32) + set(LYX_QTMAIN_LIBRARY ${Qt5Core_QTMAIN_LIBRARIES}) + 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() @@ -578,6 +594,9 @@ elseif(LYX_USE_QT MATCHES "QT4") macro (qt_wrap_uifiles) qt4_wrap_ui(${ARGN}) endmacro() + if(WIN32) + set(LYX_QTMAIN_LIBRARY ${QT_QTMAIN_LIBRARIES}) + endif() else() message(FATAL_ERROR "Unhandled value for LYX_USE_QT (${LYX_USE_QT})") endif() @@ -609,8 +628,24 @@ foreach(_spell "ASPELL" "Enchant" "Hunspell") endif() endforeach() +find_package(PythonInterp 2.7 QUIET) +if(PYTHONINTERP_FOUND) + if(PYTHON_VERSION_STRING VERSION_GREATER 2.8) + unset(PYTHONINTERP_FOUND) + endif() +endif() + +if (NOT PYTHONINTERP_FOUND) + unset(PYTHON_EXECUTABLE CACHE) + unset(PYTHON_VERSION_MAJOR) + unset(PYTHON_VERSION_MINOR) + unset(PYTHON_VERSION_STRING) + find_package(PythonInterp 3.3 REQUIRED) +endif() + +set(LYX_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "Python to be used by LyX") + if(LYX_NLS) - FIND_PROGRAM(LYX_PYTHON_EXECUTABLE python2 python HINTS ${GNUWIN32_DIR}/python) find_package(LyXGettext) if(LYX_PYTHON_EXECUTABLE AND GETTEXT_FOUND) add_subdirectory(po "${TOP_BINARY_DIR}/po") @@ -631,11 +666,22 @@ find_package(ZLIB REQUIRED) if(LYX_EXTERNAL_BOOST) message(STATUS "Searching for boost") - find_package(Boost COMPONENTS signals regex) #TODO could REQUIRED be used + if(LYX_USE_STD_REGEX) + find_package(Boost COMPONENTS signals) + else() + find_package(Boost COMPONENTS signals regex) + endif() if(Boost_FOUND) message(STATUS "Boost found") message(STATUS "Boost-libs = ${Boost_LIBRARIES}") set(Lyx_Boost_Libraries ${Boost_LIBRARIES}) + if (LYX_STDLIB_DEBUG) + # Comment from Jean-Marc Lasgouttes: + # In general, system boost libraries are incompatible with + # the use of stdlib-debug in libstdc++. See ticket #9736 for + # details. + message(WARNING "Compiling LyX with stdlib-debug and system boost libraries may lead to crashes. Consider using '-DLYX_STDLIB_DEBUG=OFF' or using '-DLYX_EXTERNAL_BOOST=OFF'") + endif() else() message(FATAL_ERROR "Boost not found" ${Boost_ERROR_REASON}) endif() @@ -655,9 +701,10 @@ endif() if(WIN32) - if(NOT LYX_CONSOLE) + if(LYX_CONSOLE) + set(LYX_QTMAIN_LIBRARY) + else() set(WIN32_CONSOLE WIN32) - set(LYX_QTMAIN_LIBRARY ${QT_QTMAIN_LIBRARY}) endif() if(MSVC) add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DNOMINMAX) @@ -824,6 +871,10 @@ if(QTVERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*") MATH(EXPR QT4_VERSION "(${CMAKE_MATCH_1}<<16)|(${CMAKE_MATCH_2}<<8)|${CMAKE_MATCH_3}") endif() +if (NOT HAVE_REGEX) + set(LYX_USE_STD_REGEX 0) +endif() + set (cmd ${CMAKE_CTEST_COMMAND}) if (MSVC)