X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=development%2Fcmake%2FCMakeLists.txt;h=70f25822bd35c29213309ade14678d3b61dd2f0b;hb=0ba6efb073233867373d2fb338eaac0a8f895be8;hp=dc05731c52777cb053a3d439ab91c2cd0e6054e0;hpb=d85f8c115f2d5f18ee8bf8d608ec4173cedb319f;p=lyx.git diff --git a/development/cmake/CMakeLists.txt b/development/cmake/CMakeLists.txt index dc05731c52..70f25822bd 100644 --- a/development/cmake/CMakeLists.txt +++ b/development/cmake/CMakeLists.txt @@ -2,8 +2,8 @@ # This file is part of LyX, the document processor. # Licence details can be found in the file COPYING. # -# Copyright (c) 2006-2010 Peter Kümmel, -# Copyright (c) 2008-2010 Kornel Benko, +# Copyright (c) 2006-2011 Peter Kümmel, +# Copyright (c) 2008-2011 Kornel Benko, cmake_minimum_required(VERSION 2.6.4) @@ -13,14 +13,12 @@ if(COMMAND cmake_policy) cmake_policy(SET CMP0005 OLD) endif() -set(LYX_PROJECT lyx) -project(${LYX_PROJECT}) - set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) -# where to look first for cmake modules, -# before ${CMAKE_ROOT}/Modules is checked -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/modules") +# Supress regeneration +set(CMAKE_SUPPRESS_REGENERATION FALSE) + + include(LyXMacros) @@ -29,57 +27,88 @@ include(LyXMacros) # 2. parameter: description # 3. parameter: default value, ON or OFF # 4. parameter: system on which option is used: ALL, GCC, MSVC, ... -message(STATUS) -message(STATUS "Switch LYX_* variables by -DLYX_*=1 or 0:") -message(STATUS) -LYX_OPTION(CPACK "Use the CPack management (Implies LYX_INSTALL option)" OFF ALL) -if(LYX_CPACK) - set(LYX_INSTALL ON CACHE BOOL "INSTALL option" FORCE) -endif() -LYX_OPTION(INSTALL "Build install projects/rules (implies a bunch of other options)" OFF ALL) -if(LYX_INSTALL) - set(LYX_NLS ON CACHE BOOL "Nls option" FORCE) - set(LYX_ASPELL ON CACHE BOOL "Aspell option" FORCE) - if (WIN32) - set(LYX_HUNSPELL ON CACHE BOOL "Hunspell option" FORCE) - endif() - set(LYX_NO_CONSOLE ON CACHE BOOL "No console option" FORCE) - set(LYX_PACKAGE_SUFFIX ON CACHE BOOL "Package suffix option" FORCE) - set(LYX_RELEASE ON CACHE BOOL "Release option" FORCE) - set(LYX_DEBUG OFF CACHE BOOL "Debug option" FORCE) - set(LYX_PROFILE OFF CACHE BOOL "Profile option" FORCE) -endif() +LYX_OPTION_INIT() +# Options for all compilers/systems +LYX_OPTION(CPACK "Use the CPack management (Implies LYX_INSTALL option)" OFF ALL) +LYX_OPTION(INSTALL "Build install projects/rules (implies a bunch of other options)" OFF ALL) LYX_OPTION(NLS "Use nls" OFF ALL) LYX_OPTION(ASPELL "Require aspell" OFF ALL) LYX_OPTION(ENCHANT "Require Enchant" OFF ALL) LYX_OPTION(HUNSPELL "Require Hunspell" OFF ALL) -LYX_OPTION(DEBUG "Build debug version" OFF ALL) -LYX_OPTION(RELEASE "Build release version" ON ALL) -LYX_OPTION(PROFILE "Build profile version" OFF GCC) -LYX_OPTION(USE_EXTERNAL_BOOST "Use external boost" OFF GCC) -LYX_OPTION(USE_EXTERNAL_LIBINTL "Use external libintl" ON ALL) +LYX_OPTION(DEVEL_VERSION "Build developer version" OFF ALL) +LYX_OPTION(RELEASE "Build release version, build debug when disabled" ON ALL) LYX_OPTION(PACKAGE_SUFFIX "Use version suffix for packaging" ON ALL) -LYX_OPTION(PROGRAM_SUFFIX "Append version suffix to binaries" ON GCC) -LYX_OPTION(INSTALL_PREFIX "Install path for LyX" OFF ALL) -LYX_OPTION(NO_CONSOLE "Suppress console on Windows" OFF MSVC) -LYX_OPTION(VLD "Use VLD with MSVC" OFF MSVC) -LYX_OPTION(WALL "Enable all warnings" OFF MSVC) -LYX_OPTION(DISABLE_PCH "Disable precompiled headers" ON ALL) +LYX_OPTION(PCH "Use precompiled headers" OFF ALL) LYX_OPTION(MERGE_FILES "Merge source files into one compilation unit" OFF ALL) +LYX_OPTION(MERGE_REBUILD "Rebuild generated files from merged files build" OFF ALL) +LYX_OPTION(QUIET "Don't generate verbose makefiles" OFF ALL) +LYX_OPTION(INSTALL_PREFIX "Install path for LyX" OFF ALL) +LYX_OPTION(EXTERNAL_LIBINTL "Use external libintl" ON ALL) + +# GCC specific +LYX_OPTION(PROFILE "Build profile version" OFF GCC) +LYX_OPTION(EXTERNAL_BOOST "Use external boost" OFF GCC) +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(QUIET "Don't generate verbose makefiles" OFF ALL) -LYX_OPTION(SHARED_LIBRARIES "Build shared libraries" OFF ALL) + +# MSVC specific +LYX_OPTION(CONSOLE "Show console on Windows" ON MSVC) +LYX_OPTION(VLD "Use VLD with MSVC" OFF MSVC) +LYX_OPTION(WALL "Enable all warnings" OFF MSVC) +LYX_OPTION(CONFIGURE_CHECKS "Also run configure checks for MSVC" OFF MSVC) +LYX_OPTION(DEPENDENCIES_DOWNLOAD "Download dependencies for MSVC 10" OFF MSVC) + +# Check option dependencies +if(LYX_CPACK) + set(LYX_INSTALL ON) +endif() + +if(LYX_INSTALL) + set(LYX_NLS ON) + if (WIN32) + set(LYX_HUNSPELL ON) + endif() + set(LYX_CONSOLE OFF) + set(LYX_PACKAGE_SUFFIX ON) + set(LYX_RELEASE ON) + set(LYX_PROFILE OFF) +endif() + +if(LYX_MERGE_FILES) + set(LYX_PCH OFF) +else() + set(LYX_MERGE_REBUILD OFF) +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) + foreach(it ${deps_files}) + set(already_downloaded already_downloaded-NOTFOUND CACHE PATH "downloaded" FORCE) + find_file(already_downloaded ${it} "${LYX_DEPENDENCIES_DIR}/download") + if(NOT already_downloaded) + message(STATUS "Downloading ${it} ...") + file(DOWNLOAD ftp://ftp.devel.lyx.org/pub/contrib/windows/${it} ${LYX_DEPENDENCIES_DIR}/download/${it} SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${LYX_DEPENDENCIES_DIR}/download/${it} + WORKING_DIRECTORY ${LYX_DEPENDENCIES_DIR}) + endif() + endforeach() + set(GNUWIN32_DIR ${LYX_DEPENDENCIES_DIR}/deps20) +endif() + message(STATUS) -set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) -set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) +set(EXECUTABLE_OUTPUT_PATH ${TOP_BINARY_DIR}/bin) +set(LIBRARY_OUTPUT_PATH ${TOP_BINARY_DIR}/lib) @@ -95,15 +124,11 @@ if(UNIX OR MINGW) else() if(MSVC10) set(LYX_USE_TR1 1) - set(LYX_USE_TR1_REGEX 1) + #set(LYX_USE_TR1_REGEX 1) #TODO should we use it in ECMAScript mode? endif() endif() - -# Supress regeneration -set(CMAKE_SUPPRESS_REGENERATION TRUE) - set(VERSION_INFO "CMake Build") # Try to get some informations from configure.ac @@ -148,9 +173,10 @@ endforeach(_c_l) if (LYX_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "LyX user's choice install prefix" FORCE) + set(CMAKE_INSTALL_PREFIX ${LYX_INSTALL_PREFIX} CACHE PATH "LyX user's choice install prefix" FORCE) set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) endif() +set(LYX_INSTALL_PREFIX ${LYX_INSTALL_PREFIX} CACHE PATH "LyX user's choice install prefix" FORCE) if(LYX_PACKAGE_SUFFIX) set(PACKAGE ${PACKAGE_BASE}${LYX_INSTALL_SUFFIX}) @@ -177,7 +203,7 @@ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) endif() endif() if(WIN32) - set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/LYX_INSTALLED CACHE PATH "LyX default install prefix" FORCE) + set(CMAKE_INSTALL_PREFIX LYX_INSTALLED CACHE PATH "LyX default install prefix" FORCE) endif() endif() @@ -213,15 +239,13 @@ if(LYX_PROFILE) endif() if(LYX_RELEASE) - set(CMAKE_BUILD_TYPE Release CACHE TYPE STRING FORCE) -endif() - -if(LYX_DEBUG) - set(CMAKE_BUILD_TYPE Debug CACHE TYPE STRING FORCE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build release version" FORCE) +else() + set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build debug version" FORCE) endif() - - +# When shared libs are supported enable this option +#LYX_OPTION(SHARED_LIBRARIES "Build shared libraries" OFF ALL) if(LYX_SHARED_LIBRARIES) set(library_type SHARED) else() @@ -232,7 +256,7 @@ if(NOT MSVC) if(NOT LYX_QUIET) set(CMAKE_VERBOSE_MAKEFILE ON) endif() - set(LYX_CXX_FLAGS -Wall -Wunused-parameter) + set(LYX_CXX_FLAGS "-Wall -Wunused-parameter") if(LYX_STDLIB_DEBUG) set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC") endif() @@ -254,7 +278,7 @@ find_package(Qt4 REQUIRED) find_package(ICONV REQUIRED) find_package(ZLIB REQUIRED) -include_directories(${CMAKE_BINARY_DIR} ${TOP_SRC_DIR}/src) +include_directories(${TOP_BINARY_DIR} ${TOP_SRC_DIR}/src) if(LYX_ASPELL) find_package(ASPELL) @@ -272,7 +296,7 @@ if(LYX_HUNSPELL) endif() if(LYX_NLS) - FIND_PROGRAM(LYX_PYTHON_EXECUTABLE python) + FIND_PROGRAM(LYX_PYTHON_EXECUTABLE python HINTS ${GNUWIN32_DIR}/python) if(${LYX_PYTHON_EXECUTABLE} MATCHES "-NOTFOUND") message(FATAL_ERROR "Python 2.6 needed!") endif() @@ -281,14 +305,18 @@ if(LYX_NLS) add_subdirectory(po) endif() -if(LYX_USE_EXTERNAL_LIBINTL) +if(LYX_EXTERNAL_LIBINTL) find_package(Libintl REQUIRED) add_definitions(-DHAVE_GETTEXT) #TODO move to config.h else() - add_subdirectory(intl) + if(LYX_NLS) + add_subdirectory(intl) + else() + # do not compile if nls disabled + endif() endif() -if(LYX_USE_EXTERNAL_BOOST) +if(LYX_EXTERNAL_BOOST) message(STATUS "Searching for boost") find_package(Boost COMPONENTS signals regex) #TODO could REQUIRED be used if(Boost_FOUND) @@ -313,7 +341,7 @@ endif() if(WIN32) - if(LYX_NO_CONSOLE) + if(NOT LYX_CONSOLE) set(WIN32_CONSOLE WIN32) set(LYX_QTMAIN_LIBRARY ${QT_QTMAIN_LIBRARY}) endif() @@ -340,23 +368,22 @@ endforeach(_v) message(STATUS "") -# PCHs not supported by cmake: http://www.cmake.org/Bug/view.php?id=1260 -# Not sure if it works for all non-msvc compilers -include(PCHSupport_26) - -if(NOT LYX_DISABLE_PCH) - configure_file(${CMAKE_SOURCE_DIR}/pcheaders.h ${CMAKE_BINARY_DIR}/pcheaders.h) - configure_file(${CMAKE_SOURCE_DIR}/config.cpp.cmake ${CMAKE_BINARY_DIR}/config_pch.cpp) +if(LYX_PCH) + # PCHs not supported by cmake: http://www.cmake.org/Bug/view.php?id=1260 + # Not sure if it works for all non-msvc compilers + include(PCHSupport_26) + configure_file(${TOP_SRC_DIR}/development/cmake/pcheaders.h ${TOP_BINARY_DIR}/pcheaders.h) + configure_file(${TOP_SRC_DIR}/development/cmake/config.cpp.cmake ${TOP_BINARY_DIR}/config_pch.cpp) add_definitions(-DLYX_ENABLE_PCH) - if(MSVC AND NOT MERGE_FILES) + if(MSVC) macro(lyx_add_msvc_pch name_) set_source_files_properties(${${name_}_sources} PROPERTIES COMPILE_FLAGS "/Yuconfig.h /Fp\$(IntDir)/config.pch") - set_source_files_properties(${CMAKE_BINARY_DIR}/config_pch.cpp PROPERTIES + set_source_files_properties(${TOP_BINARY_DIR}/config_pch.cpp PROPERTIES COMPILE_FLAGS "/Ycconfig.h /Fp\$(IntDir)/config.pch") - set(${name_}_sources ${${name_}_sources} ${CMAKE_BINARY_DIR}/config_pch.cpp - ${CMAKE_BINARY_DIR}/pcheaders.h) + 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_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /DLYX_PCH_STL /DLYX_PCH_BOOST") @@ -368,11 +395,10 @@ if(NOT LYX_DISABLE_PCH) endmacro() macro(lyx_add_gcc_pch name_) add_definitions(-DLYX_PCH_STL -DLYX_PCH_BOOST -DLYX_PCH_QT4) - ADD_PRECOMPILED_HEADER(${name_} ${CMAKE_BINARY_DIR}/config_pch.cpp ${CMAKE_BINARY_DIR}/config.h.gch) + ADD_PRECOMPILED_HEADER(${name_} ${TOP_BINARY_DIR}/config_pch.cpp ${TOP_BINARY_DIR}/config.h.gch) endmacro() endif() else() - set(LYX_DISABLE_PCH TRUE CACHE TYPE STRING) macro(lyx_add_msvc_pch) endmacro(lyx_add_msvc_pch) macro(lyx_add_gcc_pch name_) @@ -387,7 +413,6 @@ if(MSVC) include(${LYX_VLD_PATH}/tools/cmake/vld.cmake) endif() - # TODO options if(LYX_WALL) # Use the highest warning level set(CMAKE_CXX_WARNING_LEVEL 4 CACHE TYPE STRING FORCE) @@ -446,14 +471,14 @@ if(LYX_DEBUG_GLIBC_PEDANTIC) endif() # compiler tests, config.h generation -if(MSVC AND NOT CONFIGURECHECKS) - configure_file(configCompiler.h.msvc ${CMAKE_BINARY_DIR}/configCompiler.h) +if(MSVC AND NOT LYX_CONFIGURE_CHECKS) + configure_file(configCompiler.h.msvc ${TOP_BINARY_DIR}/configCompiler.h) else() include(ConfigureChecks.cmake) - configure_file(configCompiler.h.cmake ${CMAKE_BINARY_DIR}/configCompiler.h) + configure_file(configCompiler.h.cmake ${TOP_BINARY_DIR}/configCompiler.h) endif() -configure_file(config.h.cmake ${CMAKE_BINARY_DIR}/config.h) +configure_file(config.h.cmake ${TOP_BINARY_DIR}/config.h) add_subdirectory(src) @@ -472,14 +497,26 @@ if(LYX_INSTALL) endif() +message(STATUS) +message(STATUS "Build options, switch LYX_* variables by -DLYX_*=1 or 0:") +message(STATUS) +LYX_OPTION_LIST_ALL() + + set(CPACK_PACKAGE_VERSION_MAJOR "${LYX_MAJOR_VERSION}") set(CPACK_PACKAGE_VERSION_MINOR "${LYX_MINOR_VERSION}") FILE(STRINGS "${TOP_SRC_DIR}/development/cmake/LyX_summary.txt" CPACK_PACKAGE_DESCRIPTION_SUMMARY) +set(CPACK_SOURCE_GENERATOR TGZ ZIP TBZ2) +set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${TOP_SRC_DIR};/") # http://www.mail-archive.com/cmake@cmake.org/msg33720.html + set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${LYX_INSTALL_SUFFIX}") + +set(CPACK_SOURCE_GENERATOR TGZ ZIP TBZ2) +set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${TOP_SRC_DIR};/") # http://www.mail-archive.com/cmake@cmake.org/msg33720.html # # needed by rpm -set(CPACK_set_DESTDIR "ON") +set(CPACK_SET_DESTDIR "ON") FILE(READ "${TOP_SRC_DIR}/development/cmake/LyX_license.txt" CPACK_RPM_PACKAGE_LICENSE) set(CPACK_RPM_PACKAGE_GROUP "Applications/Publishing") set(CPACK_RPM_PACKAGE_VENDOR "The LyX team") @@ -496,9 +533,9 @@ endif() if(ENCHANT_FOUND) set(CPACK_DEBIAN_PACKAGE_DEPENDS "libenchant1c2a (>= 1.6.0-0),${CPACK_DEBIAN_PACKAGE_DEPENDS}") endif() -if(LYX_USE_EXTERNAL_BOOST) +if(LYX_EXTERNAL_BOOST) if(Boost_FOUND) - set(CPACK_DEBIAN_PACKAGE_DEPENDS "libboost-regex1.38.0 (>= 1.38.0-6),libboost-signals1.38.0 (>= 1.38.0-6),${CPACK_DEBIAN_PACKAGE_DEPENDS}") + set(CPACK_DEBIAN_PACKAGE_DEPENDS "libboost-regex1.40.0 (>= 1.40.0-4),libboost-signals1.40.0 (>= 1.40.0-4),${CPACK_DEBIAN_PACKAGE_DEPENDS}") endif() endif() # @@ -523,7 +560,9 @@ endif() # so we do not provide infofiles for # CPACK_RESOURCE_FILE_README and CPACK_RESOURCE_FILE_WELCOME -include(CPack) +if(LYX_CPACK) + include(CPack) +endif() #Now it is possible to create some packages # cd