X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=CMakeLists.txt;h=294dbe4c1e3bce58226f0ca9acc317f3ebb4fc3c;hb=394e1bf99c7dc9ab2912665a441a11b6e947bdd7;hp=09f94625c33c3251c571ca79a410c6e8ad3285f3;hpb=499c5cfe571a29b6cb74d84528c1b6ace0f85d67;p=lyx.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 09f94625c3..294dbe4c1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,15 @@ file(MAKE_DIRECTORY "${LYX_TESTS_USERDIR}") if(COMMAND cmake_policy) cmake_policy(SET CMP0003 OLD) cmake_policy(SET CMP0005 OLD) + # Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION + cmake_policy(SET CMP0006 NEW) + if(POLICY CMP0028) + cmake_policy(SET CMP0028 OLD) + endif() + if(POLICY CMP0043) + # COMPILE_DEFINITIONS are not used yet. Enable new behavior. + cmake_policy(SET CMP0043 NEW) + endif() endif() set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) @@ -45,6 +54,19 @@ set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) # Supress regeneration set(CMAKE_SUPPRESS_REGENERATION FALSE) +if(LYX_XMINGW) + set(CMAKE_SYSTEM_NAME Windows) + set(TOOLNAME ${LYX_XMINGW}) + set(TOOLCHAIN "${TOOLNAME}-") + set(CMAKE_C_COMPILER "${TOOLCHAIN}gcc" CACHE PATH "Mingw C compiler" FORCE) + set(CMAKE_CXX_COMPILER "${TOOLCHAIN}g++" CACHE PATH "Mingw C++ compiler" FORCE) + set(CMAKE_RC_COMPILER "${TOOLCHAIN}windres" CACHE PATH "Mingw rc compiler" FORCE) + + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + if(NOT help AND NOT HELP) # 'project' triggers the searching for a compiler project(${LYX_PROJECT}) @@ -74,6 +96,11 @@ include(LyXMacros) # 3. parameter: default value, ON or OFF # 4. parameter: system on which option is used: ALL, GCC, MSVC, ... +# Usage LYX_COMBO +# 1. parameter: name without prefix 'LYX_' +# 2. parameter: description +# 3. parameter: default value +# 4-n parameter: possible other string values LYX_OPTION_INIT() @@ -82,6 +109,7 @@ LYX_OPTION(CPACK "Use the CPack management (Implies LYX_INSTALL optio LYX_OPTION(LOCALVERSIONING "Add version info to created package name (only used if LYX_CPACK option set)" OFF ALL) LYX_OPTION(INSTALL "Build install projects/rules (implies a bunch of other options)" OFF ALL) LYX_OPTION(NLS "Enable Native Language Support (NLS)" ON ALL) +LYX_OPTION(REQUIRE_SPELLCHECK "Abort if no spellchecker available" OFF ALL) LYX_OPTION(ASPELL "Require aspell" OFF ALL) LYX_OPTION(ENCHANT "Require Enchant" OFF ALL) LYX_OPTION(HUNSPELL "Require Hunspell" OFF ALL) @@ -97,6 +125,8 @@ LYX_OPTION(QUIET "Don't generate verbose makefiles" OFF ALL) 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(ASAN "Use address sanitizer" OFF ALL) # GCC specific LYX_OPTION(PROFILE "Build profile version" OFF GCC) @@ -119,6 +149,11 @@ 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) @@ -143,7 +178,7 @@ endif() if(LYX_INSTALL) set(LYX_NLS ON) - if (WIN32) + if(WIN32 AND NOT MINGW) set(LYX_HUNSPELL ON) endif() if(LYX_CONSOLE MATCHES "FORCE") @@ -165,6 +200,7 @@ else() set(LYX_MERGE_REBUILD OFF) endif() + if(LYX_DEPENDENCIES_DOWNLOAD) message(STATUS) set(LYX_DEPENDENCIES_DIR ${TOP_BINARY_DIR}/msvc2010-deps) @@ -188,6 +224,10 @@ if(LYX_DEPENDENCIES_DOWNLOAD) 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() @@ -206,11 +246,10 @@ set(LYX_GCC11_MODE) if(UNIX OR MINGW) execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) message(STATUS "Using GCC version ${GCC_VERSION}") - if(NOT GCC_VERSION VERSION_LESS 4.4) - set(LYX_USE_TR1 1) - # GCC <= 4.5 does not support regex: there are linker errors - # http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1 - set(LYX_USE_TR1_REGEX 0) + 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() if (LYX_ENABLE_CXX11) find_package(CXX11Compiler) @@ -220,10 +259,10 @@ if(UNIX OR MINGW) set(LYX_GCC11_MODE "${CXX11_FLAG}") endif() else() - if(MSVC10) - set(LYX_USE_TR1 1) - #set(LYX_USE_TR1_REGEX 1) #TODO should we use it in ECMAScript mode? - endif() + set(LYX_USE_STD_REGEX 0) +# if(MSVC10) +# set(LYX_USE_STD_REGEX 1) #TODO should we use it in ECMAScript mode? +# endif() endif() @@ -274,63 +313,85 @@ foreach(_c_l ${_config_lines} ) endif() endforeach(_c_l) -if (LYX_LOCALVERSIONING) - # Find the revision number and for later use - FIND_PROGRAM(LYX_GITVERSION git) - #message(STATUS "gitversion = ${LYX_GITVERSION}") - if(LYX_GITVERSION) - EXECUTE_PROCESS(COMMAND ${LYX_GITVERSION} describe --match 2.0.0 HEAD - WORKING_DIRECTORY "${TOP_SRC_DIR}" OUTPUT_VARIABLE LYX_PACKAGE_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE) - if (LYX_PACKAGE_RELEASE MATCHES "^2\\.0\\.0\\-\([0-9]+\)\\-.*$") - # 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) - endif() - else() - set(LYX_REVISION_VERSION git) #TODO use date - endif() -else() - set(LYX_REVISION_VERSION ${LYX_PATCH_VERSION}) +FIND_PROGRAM(LYX_GITVERSION git) +#message(STATUS "gitversion = ${LYX_GITVERSION}") +set(LYX_REVISION_VERSION ${LYX_PATCH_VERSION}) +if(LYX_GITVERSION) + if (LYX_LOCALVERSIONING) + # Find the revision number and for later use + EXECUTE_PROCESS(COMMAND ${LYX_GITVERSION} describe --match 2.0.0 HEAD + WORKING_DIRECTORY "${TOP_SRC_DIR}" OUTPUT_VARIABLE LYX_PACKAGE_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE) + if (LYX_PACKAGE_RELEASE MATCHES "^2\\.0\\.0\\-\([0-9]+\)\\-.*$") + # 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) + endif() + endif() endif() -if(LYX_PROGRAM_SUFFIX) +# Set the programs (lyx, tex2lyx, etc.) suffix +# When building an OS X bundle, we will append +# the suffix only to the bundle, not to the programs +set(PROGRAM_SUFFIX "") +if(LYX_PROGRAM_SUFFIX AND NOT (APPLE AND LYX_BUNDLE)) set(PROGRAM_SUFFIX "${LYX_INSTALL_SUFFIX}") -else() - set(PROGRAM_SUFFIX "") endif() +set(_lyx "${PACKAGE_BASE}${PROGRAM_SUFFIX}") +set(_tex2lyx tex2lyx${PROGRAM_SUFFIX}) add_custom_target(lyx_version ALL COMMAND ${CMAKE_COMMAND} -DTOP_SRC_DIR=${TOP_SRC_DIR} -DTOP_CMAKE_PATH=${TOP_CMAKE_PATH} -DTOP_BINARY_DIR=${TOP_BINARY_DIR} -DLYX_DATE=${LYX_DATE} -P ${TOP_SCRIPT_PATH}/LyXGetVersion.cmake ) set_target_properties(lyx_version PROPERTIES FOLDER "applications") -if(APPLE) - set(osx_bundle_program_name ${PACKAGE_BASE}${PROGRAM_SUFFIX}) - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/development/MacOSX/Info.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") -endif() +# Default paths for installed utilities (tex2lyx, lyxclient, etc.) +set(LYX_UTILITIES_INSTALL_PATH bin) if(LYX_BUNDLE) set(LYX_CPACK ON) + message(STATUS) message(STATUS "Bundle creation is enabled (experimental):") message(STATUS " make") message(STATUS " make install/strip") message(STATUS " make package") if(APPLE) + set(MACOSX_BUNDLE TRUE) + # This sets the bundle + executable names + set(_lyx "${PACKAGE_BASE}${LYX_INSTALL_SUFFIX}") + # This sets the Info.plist executable name + set(osx_bundle_program_name ${_lyx}) + # Bundle name + set(LYX_BUNDLE_NAME ${_lyx}) + + # This will contain the list of files that need to be included + # in the bundle and their location within the bundle + set(OSX_BUNDLE_FILES "${TOP_SRC_DIR}/development/MacOSX/LyX.sdef;${TOP_SRC_DIR}/development/MacOSX/LyXapp.icns;${CMAKE_BINARY_DIR}/lyxrc.dist") + set(OSX_BUNDLE_DIRS "Resources;Resources;Resources") + + # Process Info.plist and lyxrc.dist + 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(CPACK_BUNDLE_NAME ${PACKAGE_BASE}${PROGRAM_SUFFIX}) + set(LYX_DATA_SUBDIR ${LYX_BUNDLE_NAME}.app/Contents/Resources/ CACHE STRING "Bundle Contents dir" FORCE) + + # Variables used by CPack + set(CPACK_BUNDLE_NAME ${LYX_BUNDLE_NAME}) set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") - set(LYX_DATA_SUBDIR ${PACKAGE_BASE}${PROGRAM_SUFFIX}.app/Contents/Resources/ CACHE STRING "Bundle Contents dir" FORCE) - set(MACOSX_BUNDLE_STARTUP_COMMAND ${PACKAGE_BASE}${PROGRAM_SUFFIX}.app) + set(MACOSX_BUNDLE_STARTUP_COMMAND ${LYX_BUNDLE_NAME}.app) + + # Set the install paths + set(LYX_UTILITIES_INSTALL_PATH ${LYX_BUNDLE_NAME}.app/Contents/MacOS) if(NOT LYX_INSTALL_PREFIX) set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/LyX CACHE PATH "Mac bundle dir" FORCE) set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) endif() # Change the owner so that the install can work - install(CODE "set(BU_CHMOD_BUNDLE_ITEMS 1)") + install(CODE "set(BU_CHMOD_BUNDLE_ITEMS 1)" COMPONENT Runtime) elseif(UNIX) message(STATUS "To embed Qt in this bundle don't build with your system Qt:") message(STATUS " - fix PATH so a other qmake is found by cmake") @@ -346,13 +407,14 @@ 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(LYX_PACKAGE_SUFFIX) set(PACKAGE ${PACKAGE_BASE}${LYX_INSTALL_SUFFIX}) else() set(PACKAGE ${PACKAGE_BASE}) endif() - if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) # see http://www.cmake.org/pipermail/cmake/2006-October/011559.html if (UNIX) @@ -389,8 +451,11 @@ set(LYX_LOCALEDIR "locale") set(LYX_ABS_INSTALLED_LOCALEDIR "${LYX_ABS_INSTALLED_DATADIR}/${LYX_DATA_SUBDIR}${LYX_LOCALEDIR}") set(LYX_ABS_TOP_SRCDIR "${TOP_SRC_DIR}") -set(LYX_MAN_DIR "/usr/local/man" CACHE STRING - "Install location for man pages.") +if(LYX_BUNDLE AND APPLE) + set(LYX_MAN_DIR "${LYX_DATA_SUBDIR}" CACHE STRING "Install location for man pages.") +else() + set(LYX_MAN_DIR "/usr/local/man/man1" CACHE STRING "Install location for man pages.") +endif() mark_as_advanced(LYX_MAN_DIR) if(LYX_INSTALL AND WIN32) @@ -407,8 +472,8 @@ if(NOT GROUP_CODE) endif() # lyx's source files -set(LYX_CPP_FILES *.cpp) -set(LYX_HPP_FILES *.h) +set(LYX_CPP_FILES [a-zA-Z]*.cpp) +set(LYX_HPP_FILES [a-zA-Z]*.h) set(LYX_MOC_FILES moc_*.cpp) include(ProjectSourceGroup) @@ -453,7 +518,7 @@ 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_STDLIB_DEBUG) set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC") endif() @@ -477,20 +542,32 @@ if(LYX_CXX_FLAGS_EXTRA) endforeach() endif() -find_package(Qt5Core QUIET) -if (Qt5Core_FOUND) - find_package(Qt5Widgets REQUIRED) - set(QTVERSION ${Qt5Core_VERSION}) - macro (qt_use_modules) - qt5_use_modules(${ARGN}) - endmacro() - macro (qt_add_resources) - qt5_add_resources(${ARGN}) - endmacro() - macro (qt_wrap_uifiles) - qt5_wrap_ui(${ARGN}) - endmacro() -else() +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() +if(LYX_USE_QT MATCHES "QT5") + find_package(Qt5Core REQUIRED) + if (Qt5Core_FOUND) + find_package(Qt5Widgets REQUIRED) + if(APPLE) + 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}) + endmacro() + macro (qt_add_resources) + qt5_add_resources(${ARGN}) + endmacro() + macro (qt_wrap_uifiles) + qt5_wrap_ui(${ARGN}) + endmacro() + message(STATUS "Found Qt-Version ${QTVERSION}") + endif() +elseif(LYX_USE_QT MATCHES "QT4") find_package(Qt4 "4.5.0" REQUIRED) macro (qt_use_modules) endmacro() @@ -500,6 +577,8 @@ else() macro (qt_wrap_uifiles) qt4_wrap_ui(${ARGN}) endmacro() +else() + message(FATAL_ERROR "Unhandled value for LYX_USE_QT (${LYX_USE_QT})") endif() find_package(Magic) @@ -509,20 +588,25 @@ endif() include_directories(${TOP_BINARY_DIR} ${TOP_SRC_DIR}/src) -if(LYX_ASPELL) - find_package(ASPELL) - include_directories(${ASPELL_INCLUDE_DIR}) -endif() - -if(LYX_ENCHANT) - find_package(Enchant REQUIRED) - include_directories(${ENCHANT_INCLUDE_DIR}) -endif() - -if(LYX_HUNSPELL) - find_package(Hunspell REQUIRED) - include_directories(${HUNSPELL_INCLUDE_DIR}) -endif() +set(Spelling_FOUND OFF) +set(Include_used_spellchecker) # String will be inserted into config.h + +foreach(_spell "ASPELL" "Enchant" "Hunspell") + string(TOUPPER ${_spell} _upspell) + find_package(${_spell}) + if (${_upspell}_FOUND) + include_directories(${${_upspell}_INCLUDE_DIR}) + set(Spelling_FOUND ON) + message(STATUS "Building with USE_${_upspell}") + set(Include_used_spellchecker "${Include_used_spellchecker}#define USE_${_upspell} 1\n") + else() + if(LYX_${_upspell}) + message(FATAL_ERROR "Required ${_spell} devel package not found") + else() + message(STATUS "${_upspell} not found, building without ${_spell} support") + endif() + endif() +endforeach() if(LYX_NLS) FIND_PROGRAM(LYX_PYTHON_EXECUTABLE python2 python HINTS ${GNUWIN32_DIR}/python) @@ -540,6 +624,7 @@ if(LYX_NLS) endif() endif() + find_package(ICONV REQUIRED) find_package(ZLIB REQUIRED) @@ -554,12 +639,13 @@ if(LYX_EXTERNAL_BOOST) message(FATAL_ERROR "Boost not found" ${Boost_ERROR_REASON}) endif() else() - if(LYX_USE_TR1_REGEX) + if(LYX_USE_STD_REGEX) set(Lyx_Boost_Libraries boost_signals) else() set(Lyx_Boost_Libraries boost_signals boost_regex) endif() add_definitions(-DBOOST_USER_CONFIG="") + add_definitions(-DBOOST_SIGNALS_NO_DEPRECATION_WARNING=1) include_directories(${TOP_SRC_DIR}/boost) add_subdirectory(boost "${TOP_BINARY_DIR}/boost") endif() @@ -613,8 +699,8 @@ if(LYX_PCH) COMPILE_FLAGS "/Ycconfig.h /Fp\$(IntDir)/config.pch") set(${name_}_sources ${${name_}_sources} ${TOP_BINARY_DIR}/config_pch.cpp ${TOP_BINARY_DIR}/pcheaders.h) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /DLYX_PCH_STL /DLYX_PCH_BOOST /DLYX_PCH_QT4") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /DLYX_PCH_STL /DLYX_PCH_BOOST /DLYX_PCH_QT4") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /DLYX_PCH_STL /DLYX_PCH_BOOST /DLYX_PCH_QT") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /DLYX_PCH_STL /DLYX_PCH_BOOST /DLYX_PCH_QT") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /DLYX_PCH_STL /DLYX_PCH_BOOST") endmacro(lyx_add_msvc_pch) macro(lyx_add_gcc_pch name_) @@ -623,7 +709,7 @@ if(LYX_PCH) macro(lyx_add_msvc_pch name_) endmacro() macro(lyx_add_gcc_pch name_) - add_definitions(-DLYX_PCH_STL -DLYX_PCH_BOOST -DLYX_PCH_QT4) + add_definitions(-DLYX_PCH_STL -DLYX_PCH_BOOST -DLYX_PCH_QT) ADD_PRECOMPILED_HEADER(${name_} ${TOP_BINARY_DIR}/config_pch.cpp ${TOP_BINARY_DIR}/config.h.gch) endmacro() endif() @@ -706,16 +792,17 @@ endif() # Xcode compiler if (CMAKE_GENERATOR MATCHES Xcode) - # Automatically select the Xcode compiler if not set - if (NOT DEFINED CMAKE_XCODE_ATTRIBUTE_GCC_VERSION) - # XCode >= 3.1 has gcc 4.2 (up to actual Xcode) - if (XCODE_VERSION VERSION_GREATER "3.1") - SET(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42") - ENDIF(XCODE_VERSION VERSION_GREATER "3.1") - ENDIF(NOT DEFINED CMAKE_XCODE_ATTRIBUTE_GCC_VERSION) - - # Print the selected compiler version - MESSAGE(STATUS "---- Using XCode compiler CMAKE_XCODE_ATTRIBUTE_GCC_VERSION=${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION}") + if (XCODE_VERSION VERSION_LESS "5.0") + # Automatically select the Xcode compiler if not set + if (NOT DEFINED CMAKE_XCODE_ATTRIBUTE_GCC_VERSION) + # XCode >= 3.1 has gcc 4.2 (up to actual Xcode) + if (XCODE_VERSION VERSION_GREATER "3.1") + SET(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42") + ENDIF(XCODE_VERSION VERSION_GREATER "3.1") + ENDIF(NOT DEFINED CMAKE_XCODE_ATTRIBUTE_GCC_VERSION) + # Print the selected compiler version + MESSAGE(STATUS "---- Using XCode compiler CMAKE_XCODE_ATTRIBUTE_GCC_VERSION=${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION}") + ENDIF(XCODE_VERSION VERSION_LESS "5.0") ENDIF(CMAKE_GENERATOR MATCHES Xcode) if (WIN32 AND Qt5Core_FOUND) @@ -736,8 +823,6 @@ 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() -set(_lyx "${PACKAGE_BASE}${PROGRAM_SUFFIX}") -set(_tex2lyx tex2lyx${PROGRAM_SUFFIX}) set (cmd ${CMAKE_CTEST_COMMAND}) if (MSVC) @@ -748,25 +833,32 @@ endif () add_custom_target (lyx_run_tests COMMAND ${cmd}) set_target_properties(lyx_run_tests PROPERTIES FOLDER "tests") - -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") - +if(LYX_ASAN) + set(LYX_CXX_FLAGS "-fsanitize=address -fno-omit-frame-pointer -g") + message(STATUS) + message(STATUS "Address sanitizer enabled. Usage:") + message(STATUS " wget https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py") + message(STATUS " chmod +x ./asan_symbolize.py") + message(STATUS " ./bin/lyx2.2 2>&1 | ./asan_symbolize.py | c++filt ") + message(STATUS) +endif() if(LYX_INSTALL) if(${LYX_PYTHON_EXECUTABLE} MATCHES "-NOTFOUND") message(STATUS "Python required to create doc!") else() - add_subdirectory(${LYX_CMAKE_DIR}/man "${TOP_BINARY_DIR}/man") + if(UNIX) + add_subdirectory(${LYX_CMAKE_DIR}/man "${TOP_BINARY_DIR}/man") + endif() add_subdirectory(${LYX_CMAKE_DIR}/doc "${TOP_BINARY_DIR}/doc") endif() - if(NOT(LYX_BUNDLE AND APPLE)) - include(../Install) - endif() + include(../Install) 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) @@ -774,8 +866,9 @@ if(LYX_ENABLE_URLTESTS) endif() message(STATUS) -message(STATUS "Build options, switch LYX_* variables by -DLYX_*=ON or OFF:") +message(STATUS "Build params, switch LYX_* options by -DLYX_*=ON or OFF, LYX_* combos by -DLYX_*=value:") message(STATUS) + LYX_OPTION_LIST_ALL(used) @@ -792,6 +885,17 @@ if(LYX_NLS) message(STATUS) endif() +# Apple has builtin native spell checker, +# no need to warn for missing Aspell, Hunspell or Enchant +if(NOT Spelling_FOUND AND NOT APPLE) + if(LYX_REQUIRE_SPELLCHECK) + set(_mode "FATAL_ERROR") + else() + set(_mode "STATUS") + endif() + message(${_mode} "No spellcheck libraries found. LyX will be unable use spellchecking") +endif() + include("${TOP_CMAKE_PATH}/LyxPackaging.cmake") if(ENABLE_DIST) @@ -811,4 +915,8 @@ if(ENABLE_DIST) add_custom_target(git-archive DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DIST_NAME}) endif() +# Last directory to be included so that the fixup code (OS X) +# can be run last +add_subdirectory(development/cmake/post_install) + message(STATUS)