1 # This file is part of LyX, the document processor.
2 # Licence details can be found in the file COPYING.
4 # Copyright (c) 2006-2011 Peter Kümmel, <syntheticpp@gmx.net>
5 # Copyright (c) 2008-2011 Kornel Benko, <Kornel.Benko@berlin.de>
7 cmake_minimum_required(VERSION 2.6.4)
12 set(LYX_CMAKE_DIR "development/cmake")
13 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/${LYX_CMAKE_DIR}/modules")
15 get_filename_component(lyx_dir_readme ${CMAKE_SOURCE_DIR}/README ABSOLUTE)
16 get_filename_component(TOP_SRC_DIR ${lyx_dir_readme} PATH)
18 set(CMAKE_PROJECT_NAME ${LYX_PROJECT})
21 if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
22 message(STATUS "Building in-source")
23 set(TOP_BINARY_DIR "${CMAKE_BINARY_DIR}/build")
25 message(STATUS "Building out-of-source")
26 set(TOP_BINARY_DIR "${CMAKE_BINARY_DIR}")
30 if(COMMAND cmake_policy)
31 cmake_policy(SET CMP0003 OLD)
32 cmake_policy(SET CMP0005 OLD)
35 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
37 # Supress regeneration
38 set(CMAKE_SUPPRESS_REGENERATION FALSE)
40 if(NOT help AND NOT HELP)
41 # 'project' triggers the searching for a compiler
42 project(${LYX_PROJECT})
48 # 1. parameter: option name without prefix 'LYX_'
49 # 2. parameter: description
50 # 3. parameter: default value, ON or OFF
51 # 4. parameter: system on which option is used: ALL, GCC, MSVC, ...
56 # Options for all compilers/systems
57 LYX_OPTION(CPACK "Use the CPack management (Implies LYX_INSTALL option)" OFF ALL)
58 LYX_OPTION(INSTALL "Build install projects/rules (implies a bunch of other options)" OFF ALL)
59 LYX_OPTION(NLS "Enable Native Language Support (NLS)" ON ALL)
60 LYX_OPTION(ASPELL "Require aspell" OFF ALL)
61 LYX_OPTION(ENCHANT "Require Enchant" OFF ALL)
62 LYX_OPTION(HUNSPELL "Require Hunspell" OFF ALL)
63 LYX_OPTION(DEVEL_VERSION "Build developer version" OFF ALL)
64 LYX_OPTION(RELEASE "Build release version, build debug when disabled" OFF ALL)
65 LYX_OPTION(DEBUG "Enforce debug build" OFF ALL)
66 LYX_OPTION(NO_OPTIMIZE "Don't use any optimization/debug flags" OFF ALL)
67 LYX_OPTION(PACKAGE_SUFFIX "Use version suffix for packaging" ON ALL)
68 LYX_OPTION(PCH "Use precompiled headers" OFF ALL)
69 LYX_OPTION(MERGE_FILES "Merge source files into one compilation unit" OFF ALL)
70 LYX_OPTION(MERGE_REBUILD "Rebuild generated files from merged files build" OFF ALL)
71 LYX_OPTION(QUIET "Don't generate verbose makefiles" OFF ALL)
72 LYX_OPTION(INSTALL_PREFIX "Install path for LyX" OFF ALL)
73 LYX_OPTION(EXTERNAL_LIBINTL "Use external libintl" ON ALL)
74 LYX_OPTION(BUNDLE "Build bundle (experimental) " OFF ALL)
77 LYX_OPTION(PROFILE "Build profile version" OFF GCC)
78 LYX_OPTION(EXTERNAL_BOOST "Use external boost" OFF GCC)
79 LYX_OPTION(PROGRAM_SUFFIX "Append version suffix to binaries" ON GCC)
80 LYX_OPTION(DEBUG_GLIBC "Enable libstdc++ debug mode" OFF GCC)
81 LYX_OPTION(DEBUG_GLIBC_PEDANTIC "Enable libstdc++pedantic debug mode" OFF GCC)
82 LYX_OPTION(STDLIB_DEBUG "Use debug stdlib" OFF GCC)
83 LYX_OPTION(CONCEPT_CHECKS "Enable concept-checks" OFF GCC)
86 LYX_OPTION(CONSOLE "Show console on Windows" ON MSVC)
87 LYX_OPTION(VLD "Use VLD with MSVC" OFF MSVC)
88 LYX_OPTION(WALL "Enable all warnings" OFF MSVC)
89 LYX_OPTION(CONFIGURE_CHECKS "Also run configure checks for MSVC" OFF MSVC)
90 LYX_OPTION(DEPENDENCIES_DOWNLOAD "Download dependencies for MSVC 10" OFF MSVC)
93 LYX_OPTION(DMG "Build as Mac bundle, needed for .dmg (experimental) " OFF MAC)
94 LYX_OPTION(COCOA "Use Cocoa on Mac" OFF MAC)
99 message(STATUS "Available options: (dis/enable with -D=0/1)")
101 LYX_OPTION_LIST_ALL(help)
106 # Check option dependencies
124 set(LYX_PACKAGE_SUFFIX ON)
133 set(LYX_MERGE_REBUILD OFF)
136 if(LYX_DEPENDENCIES_DOWNLOAD)
138 set(LYX_DEPENDENCIES_DIR ${TOP_BINARY_DIR}/msvc2010-deps)
139 message(STATUS "Using downloaded dependencies in ${LYX_DEPENDENCIES_DIR}")
140 set(deps_files lyx20-deps-msvc2010-x86.zip)
141 foreach(it ${deps_files})
142 set(already_downloaded already_downloaded-NOTFOUND CACHE PATH "downloaded" FORCE)
143 find_file(already_downloaded ${it} "${LYX_DEPENDENCIES_DIR}/download")
144 if(NOT already_downloaded)
145 message(STATUS "Downloading ${it} ...")
146 file(DOWNLOAD ftp://ftp.devel.lyx.org/pub/contrib/windows/${it} ${LYX_DEPENDENCIES_DIR}/download/${it} SHOW_PROGRESS)
147 execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${LYX_DEPENDENCIES_DIR}/download/${it}
148 WORKING_DIRECTORY ${LYX_DEPENDENCIES_DIR})
151 set(GNUWIN32_DIR ${LYX_DEPENDENCIES_DIR}/deps20)
158 set(EXECUTABLE_OUTPUT_PATH ${TOP_BINARY_DIR}/bin)
159 set(LIBRARY_OUTPUT_PATH ${TOP_BINARY_DIR}/lib)
164 execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
165 message(STATUS "Using GCC version ${GCC_VERSION}")
166 if(NOT GCC_VERSION VERSION_LESS 4.4)
168 # GCC <= 4.5 does not support regex: there are linker errors
169 # http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1
170 set(LYX_USE_TR1_REGEX 0)
175 #set(LYX_USE_TR1_REGEX 1) #TODO should we use it in ECMAScript mode?
180 set(VERSION_INFO "CMake Build")
182 # Try to get some informations from configure.ac
185 file(STRINGS "${TOP_SRC_DIR}/configure.ac" _config_lines)
188 set(USE_WINDOWS_PACKAGING 1)
190 set(USE_MACOSX_PACKAGING 1)
192 set(USE_POSIX_PACKAGING 1)
195 macro(setstripped _varname _value)
196 string(STRIP ${_value} _v)
197 if(USE_POSIX_PACKAGING)
198 string(TOLOWER ${_v} ${_varname})
200 set(${_varname} ${_v})
202 endmacro(setstripped)
204 foreach(_c_l ${_config_lines} )
205 if(_c_l MATCHES "^AC_INIT\\(\([^,]+\),\([^,]+\), *\\[\([^,]+\)\\] *,\(.*\)")
206 setstripped(PACKAGE_BASE ${CMAKE_MATCH_1})
207 setstripped(PACKAGE_VERSION ${CMAKE_MATCH_2})
208 setstripped(PACKAGE_BUGREPORT ${CMAKE_MATCH_3})
209 if(PACKAGE_VERSION MATCHES "^\([0-9]+\)\\.\([0-9]+\).*$")
210 set(LYX_MAJOR_VERSION ${CMAKE_MATCH_1})
211 set(LYX_MINOR_VERSION ${CMAKE_MATCH_2})
212 set(LYX_PATCH_VERSION 0) # TODO 2.1.0svn, LYX_PATCH_VERSION == 0
213 set(LYX_DIR_VER "LYX_DIR_${CMAKE_MATCH_1}${CMAKE_MATCH_2}x")
214 set(LYX_USERDIR_VER "LYX_USERDIR_${CMAKE_MATCH_1}${CMAKE_MATCH_2}x")
215 set(LYX_INSTALL_SUFFIX "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}")
218 if(_c_l MATCHES "^AC_SUBST\\( *LYX_DATE *, *\\[\\\"(.*)\\\"\\].*")
219 set(LYX_DATE "${CMAKE_MATCH_1}")
224 if(LYX_PROGRAM_SUFFIX)
225 set(PROGRAM_SUFFIX "${LYX_INSTALL_SUFFIX}")
227 set(PROGRAM_SUFFIX "")
233 set(LYX_BUILD_BUNDLE MACOSX_BUNDLE)
234 set(LYX_DATA_SUBDIR ${PACKAGE_BASE}${PROGRAM_SUFFIX}.app/Contents/Resources/ CACHE STRING "Bundle Contents dir" FORCE)
235 set(MACOSX_BUNDLE_STARTUP_COMMAND ${PACKAGE_BASE}${PROGRAM_SUFFIX}.app)
236 if(NOT LYX_INSTALL_PREFIX)
237 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/LyX CACHE PATH "Mac bundle dir" FORCE)
238 set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
243 message(STATUS "Bundle creation is enabled (experimental):")
244 message(STATUS " make")
245 message(STATUS " make install/strip")
246 message(STATUS " make package")
247 message(STATUS "To increase turn around speed use:")
248 message(STATUS " cmake -DLYX_MERGE_FILES=1 -DLYX_NO_OPTIMIZE=1 -DLYX_INSTALL=1 -DLYX_DMG=1 ../trunk")
249 message(STATUS "or use the shell script 'development/cmake/dmg'")
254 if(LYX_INSTALL_PREFIX)
255 set(CMAKE_INSTALL_PREFIX ${LYX_INSTALL_PREFIX} CACHE PATH "LyX user's choice install prefix" FORCE)
256 set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
258 set(LYX_INSTALL_PREFIX ${LYX_INSTALL_PREFIX} CACHE PATH "LyX user's choice install prefix" FORCE)
260 if(LYX_PACKAGE_SUFFIX)
261 set(PACKAGE ${PACKAGE_BASE}${LYX_INSTALL_SUFFIX})
263 set(PACKAGE ${PACKAGE_BASE})
268 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
269 # see http://www.cmake.org/pipermail/cmake/2006-October/011559.html
271 # don't use the default "/usr/local"
272 # but respect the user-choice on the command-line
273 if(LYX_INSTALL_SUFFIX)
274 set(CMAKE_INSTALL_PREFIX "/usr/local/lyx${LYX_INSTALL_SUFFIX}" CACHE PATH "LyX default install prefix" FORCE)
276 set(CMAKE_INSTALL_PREFIX "/usr/local/${LYX_PROJECT}" CACHE PATH "LyX default install prefix" FORCE)
280 set(CMAKE_INSTALL_PREFIX LYX_INSTALLED CACHE PATH "LyX default install prefix" FORCE)
284 set(CMAKE_INSTALL_PREFIX_ABSOLUTE ${CMAKE_INSTALL_PREFIX})
286 set(CMAKE_INSTALL_PREFIX_ABSOLUTE ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_PREFIX})
291 if(NOT LYX_DATA_SUBDIR)
293 set(LYX_DATA_SUBDIR "Resources/" CACHE STRING "Subdirectory for all lyx-system-data" FORCE)
295 set(LYX_DATA_SUBDIR "" CACHE STRING "Subdirectory for all lyx-system-data" FORCE)
299 set(LYX_ABS_INSTALLED_DATADIR "${CMAKE_INSTALL_PREFIX}")
300 set(LYX_LOCALEDIR "locale")
301 set(LYX_ABS_INSTALLED_LOCALEDIR "${LYX_ABS_INSTALLED_DATADIR}/${LYX_DATA_SUBDIR}${LYX_LOCALEDIR}")
302 set(LYX_ABS_TOP_SRCDIR "${TOP_SRC_DIR}")
307 #set(GROUP_CODE "The Golden Code")
312 set(LYX_CPP_FILES *.cpp)
313 set(LYX_HPP_FILES *.h)
314 set(LYX_MOC_FILES moc_*.cpp)
316 include(ProjectSourceGroup)
320 set(CMAKE_BUILD_TYPE Profile CACHE TYPE STRING FORCE)
321 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg" CACHE TYPE STRING FORCE)
326 set(CMAKE_BUILD_TYPE None)
330 set(CMAKE_BUILD_TYPE Release)
333 set(CMAKE_BUILD_TYPE Debug)
337 # When shared libs are supported enable this option
338 #LYX_OPTION(SHARED_LIBRARIES "Build shared libraries" OFF ALL)
339 if(LYX_SHARED_LIBRARIES)
340 set(library_type SHARED)
342 set(library_type STATIC)
347 set(CMAKE_VERBOSE_MAKEFILE ON)
349 set(LYX_CXX_FLAGS "-Wall -Wunused-parameter")
351 set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC")
353 if(LYX_CONCEPT_CHECKS)
354 set(LYX_CXX_FLAGS "${LYX_CXX_FLAGS} -D_GLIBCPP_CONCEPT_CHECKS")
356 set(CMAKE_CXX_FLAGS "${LYX_CXX_FLAGS} -fno-strict-aliasing " CACHE TYPE STRING FORCE)
357 set(CMAKE_CXX_FLAGS_DEBUG "${LYX_CXX_FLAGS} -fno-strict-aliasing -O0 -g -D_DEBUG" CACHE TYPE STRING FORCE)
359 set(CMAKE_CXX_FLAGS_RELEASE "${LYX_CXX_FLAGS} -O2 -DNDEBUG" CACHE TYPE STRING FORCE)
361 set(CMAKE_CXX_FLAGS_RELEASE "${LYX_CXX_FLAGS} -O3 -DNDEBUG" CACHE TYPE STRING FORCE)
363 set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE} -pg" CACHE TYPE STRING FORCE)
367 find_package(Qt4 REQUIRED)
370 include_directories(${TOP_BINARY_DIR} ${TOP_SRC_DIR}/src)
374 include_directories(${ASPELL_INCLUDE_DIR})
378 find_package(Enchant REQUIRED)
379 include_directories(${ENCHANT_INCLUDE_DIR})
383 find_package(Hunspell REQUIRED)
384 include_directories(${HUNSPELL_INCLUDE_DIR})
388 FIND_PROGRAM(LYX_PYTHON_EXECUTABLE python HINTS ${GNUWIN32_DIR}/python)
389 if(${LYX_PYTHON_EXECUTABLE} MATCHES "-NOTFOUND")
390 message(FATAL_ERROR "Python 2.6 needed!")
392 find_package(LyXGettext REQUIRED)
393 include_directories(${TOP_SRC_DIR}/po)
394 add_subdirectory(po "${TOP_BINARY_DIR}/po")
398 if(LYX_EXTERNAL_LIBINTL)
399 find_package(Libintl REQUIRED)
400 if(DEFINED LIBINTL_LIBRARIES)
401 # find getext when configuring
402 list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBINTL_LIBRARIES})
403 # on mac use iconv also form ports
404 get_filename_component(ICONV_RELATIVE_TO_LIBINTL ${LIBINTL_LIBRARIES} PATH)
407 add_subdirectory(intl "${TOP_BINARY_DIR}/intl")
411 find_package(ICONV REQUIRED)
412 find_package(ZLIB REQUIRED)
414 if(LYX_EXTERNAL_BOOST)
415 message(STATUS "Searching for boost")
416 find_package(Boost COMPONENTS signals regex) #TODO could REQUIRED be used
418 message(STATUS "Boost found")
419 message(STATUS "Boost-libs = ${Boost_LIBRARIES}")
420 set(Lyx_Boost_Libraries ${Boost_LIBRARIES})
422 message(FATAL_ERROR "Boost not found" ${Boost_ERROR_REASON})
425 if(LYX_USE_TR1_REGEX)
426 set(Lyx_Boost_Libraries boost_signals)
428 set(Lyx_Boost_Libraries boost_signals boost_regex)
430 add_definitions(-DBOOST_USER_CONFIG="<config.h>")
431 include_directories(${TOP_SRC_DIR}/boost)
432 add_subdirectory(boost "${TOP_BINARY_DIR}/boost")
440 set(WIN32_CONSOLE WIN32)
441 set(LYX_QTMAIN_LIBRARY ${QT_QTMAIN_LIBRARY})
444 add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DNOMINMAX)
445 # disable checked iterators for msvc release builds to get maximum speed
446 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /D_SECURE_SCL=0")
448 add_definitions(-DWINVER=0x0500)
453 foreach(_v PACKAGE PACKAGE_VERSION
454 PROGRAM_SUFFIX LYX_DATE LYX_DIR_VER LYX_USERDIR_VER
456 LYX_ABS_INSTALLED_DATADIR LYX_ABS_INSTALLED_LOCALEDIR LYX_INSTALL_SUFFIX)
457 if(NOT DEFINED ${_v})
458 message(FATAL_ERROR "${_v} not defined")
460 string(SUBSTRING "${_v} " 0 28 _v1)
461 message(STATUS "----- ${_v1}: ${${_v}}")
467 # PCHs not supported by cmake: http://www.cmake.org/Bug/view.php?id=1260
468 # Not sure if it works for all non-msvc compilers
469 include(PCHSupport_26)
470 configure_file(${TOP_SRC_DIR}/${LYX_CMAKE_DIR}/pcheaders.h ${TOP_BINARY_DIR}/pcheaders.h)
471 configure_file(${TOP_SRC_DIR}/${LYX_CMAKE_DIR}/config.cpp.cmake ${TOP_BINARY_DIR}/config_pch.cpp)
472 add_definitions(-DLYX_ENABLE_PCH)
475 macro(lyx_add_msvc_pch name_)
476 set_source_files_properties(${${name_}_sources} PROPERTIES
477 COMPILE_FLAGS "/Yuconfig.h /Fp\$(IntDir)/config.pch")
478 set_source_files_properties(${TOP_BINARY_DIR}/config_pch.cpp PROPERTIES
479 COMPILE_FLAGS "/Ycconfig.h /Fp\$(IntDir)/config.pch")
480 set(${name_}_sources ${${name_}_sources} ${TOP_BINARY_DIR}/config_pch.cpp
481 ${TOP_BINARY_DIR}/pcheaders.h)
482 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /DLYX_PCH_STL /DLYX_PCH_BOOST /DLYX_PCH_QT4")
483 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /DLYX_PCH_STL /DLYX_PCH_BOOST /DLYX_PCH_QT4")
484 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /DLYX_PCH_STL /DLYX_PCH_BOOST")
485 endmacro(lyx_add_msvc_pch)
486 macro(lyx_add_gcc_pch name_)
489 macro(lyx_add_msvc_pch name_)
491 macro(lyx_add_gcc_pch name_)
492 add_definitions(-DLYX_PCH_STL -DLYX_PCH_BOOST -DLYX_PCH_QT4)
493 ADD_PRECOMPILED_HEADER(${name_} ${TOP_BINARY_DIR}/config_pch.cpp ${TOP_BINARY_DIR}/config.h.gch)
497 macro(lyx_add_msvc_pch)
498 endmacro(lyx_add_msvc_pch)
499 macro(lyx_add_gcc_pch name_)
505 set(LYX_LEAK_DETECTION 1 CACHE TYPE STRING FORCE)
506 set(LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH})
507 set(LYX_VLD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../Win32/vld)
508 include(${LYX_VLD_PATH}/tools/cmake/vld.cmake)
512 # Use the highest warning level
513 set(CMAKE_CXX_WARNING_LEVEL 4 CACHE TYPE STRING FORCE)
515 if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
516 string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
518 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
521 if(CMAKE_C_FLAGS MATCHES "/W[0-4]")
522 string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
524 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
527 # add here warnings which should produce an error /weXXXX
528 set(MSVC_W_ERROR "/we4101 /we4189")
529 # add here warnings which should be disabled /wdXXXX
530 set(MSVC_W_DISABLE "/wd4288 /wd4355 /wd4800 /wd4996 /wd4311 /wd4312 /wd4505 /wd4267 /wd4512 /wd4245 /wd4127 /wd4180 /wd4231")
532 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Wp64 ${MSVC_W_ERROR} ${MSVC_W_DISABLE}")
533 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Wp64 ${MSVC_W_ERROR} ${MSVC_W_DISABLE}")
534 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /Wp64 ${MSVC_W_ERROR} ${MSVC_W_DISABLE}")
537 set(CMAKE_CXX_WARNING_LEVEL 3 CACHE TYPE STRING FORCE)
539 # add here warnings which should produce an error /weXXXX
540 set(MSVC_W_ERROR "/we4101 /we4189")
541 # add here warnings which should be disabled /wdXXXX
542 set(MSVC_W_DISABLE "/wd4288 /wd4355 /wd4800 /wd4996 /wd4267 /wd4180 /wd4231")
544 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MSVC_W_ERROR} ${MSVC_W_DISABLE}")
545 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MSVC_W_ERROR} ${MSVC_W_DISABLE}")
546 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${MSVC_W_ERROR} ${MSVC_W_DISABLE}")
549 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Zc:wchar_t-")
550 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zc:wchar_t-")
551 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /Zc:wchar_t-")
553 message(STATUS "----- Warning level : ${CMAKE_CXX_WARNING_LEVEL} ${WARNING_LEVEL_MESSAGE}")
554 message(STATUS "----- Warnings as errors : ${MSVC_W_ERROR}")
555 message(STATUS "----- Warnings disabled : ${MSVC_W_DISABLE}")
561 set(_GLIBCXX_DEBUG 1)
564 if(LYX_DEBUG_GLIBC_PEDANTIC)
565 set(_GLIBCXX_DEBUG_PEDANTIC 1)
568 # compiler tests, config.h generation
569 if(MSVC AND NOT LYX_CONFIGURE_CHECKS)
570 configure_file(${LYX_CMAKE_DIR}/configCompiler.h.msvc ${TOP_BINARY_DIR}/configCompiler.h)
572 include(${LYX_CMAKE_DIR}/ConfigureChecks.cmake)
573 configure_file(${LYX_CMAKE_DIR}/configCompiler.h.cmake ${TOP_BINARY_DIR}/configCompiler.h)
576 configure_file(${LYX_CMAKE_DIR}/config.h.cmake ${TOP_BINARY_DIR}/config.h)
579 add_subdirectory(src "${TOP_BINARY_DIR}/src")
580 add_subdirectory(lib/lyx2lyx "${TOP_BINARY_DIR}/lyx2lyx")
581 add_subdirectory(lib/scripts "${TOP_BINARY_DIR}/scripts")
585 #FIND_PROGRAM(LYX_PERL_EXECUTABLE perl)
586 if(${LYX_PYTHON_EXECUTABLE} MATCHES "-NOTFOUND")
587 message(STATUS "Python required to create doc!")
589 add_subdirectory(${LYX_CMAKE_DIR}/man "${TOP_BINARY_DIR}/man")
590 add_subdirectory(${LYX_CMAKE_DIR}/doc "${TOP_BINARY_DIR}/doc")
595 add_subdirectory(sourcedoc "${TOP_BINARY_DIR}/sourcedoc")
598 message(STATUS "Build options, switch LYX_* variables by -DLYX_*=1 or 0:")
600 LYX_OPTION_LIST_ALL(used)
605 message(STATUS "Building Native Language Support (LYX_NLS is set), used libraries:")
607 message(STATUS " * intl")
608 message(STATUS " - header : ${LIBINTL_HEADER}")
609 message(STATUS " - library: ${LIBINTL_LIBRARIES}")
610 message(STATUS " * iconv")
611 message(STATUS " - header : ${ICONV_HEADER}")
612 message(STATUS " - library: ${ICONV_LIBRARY}")
613 message(STATUS " * zlib")
614 message(STATUS " - header : ${ZLIB_HEADER}")
615 message(STATUS " - library: ${ZLIB_LIBRARY}")
622 # http://cmake.org/cmake/help/cmake-2-8-docs.html#module:CPack
624 set(CPACK_PACKAGE_VERSION_MAJOR "${LYX_MAJOR_VERSION}")
625 set(CPACK_PACKAGE_VERSION_MINOR "${LYX_MINOR_VERSION}")
626 FILE(STRINGS "${TOP_SRC_DIR}/${LYX_CMAKE_DIR}/LyX_summary.txt" CPACK_PACKAGE_DESCRIPTION_SUMMARY)
628 set(CPACK_SOURCE_GENERATOR TGZ ZIP TBZ2)
629 set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${TOP_SRC_DIR};/") # http://www.mail-archive.com/cmake@cmake.org/msg33720.html
631 set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${LYX_INSTALL_SUFFIX}")
633 set(CPACK_SOURCE_GENERATOR TGZ ZIP TBZ2)
634 set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${TOP_SRC_DIR};/") # http://www.mail-archive.com/cmake@cmake.org/msg33720.html
637 set(CPACK_SET_DESTDIR "ON")
638 FILE(READ "${TOP_SRC_DIR}/${LYX_CMAKE_DIR}/LyX_license.txt" CPACK_RPM_PACKAGE_LICENSE)
639 set(CPACK_RPM_PACKAGE_GROUP "Applications/Publishing")
640 set(CPACK_RPM_PACKAGE_VENDOR "The LyX team")
642 # the next ones are needed by deb
643 set(CPACK_PACKAGE_CONTACT "${PACKAGE_BUGREPORT}")
644 set(CPACK_SOURCE_PACKAGE_FILE_NAME "${LYX_PROJECT}-${LYX_INSTALL_SUFFIX}")
646 # This is experimental, valid on _my_ system (Kornel)
647 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqtgui4 (>= 4.4.3-0)")
649 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libaspell15 (>= 0.60.6-1),${CPACK_DEBIAN_PACKAGE_DEPENDS}")
652 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libenchant1c2a (>= 1.6.0-0),${CPACK_DEBIAN_PACKAGE_DEPENDS}")
654 if(LYX_EXTERNAL_BOOST)
656 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}")
660 # for the next ones, cpack insists on data with values in some file
661 set(CPACK_PACKAGE_DESCRIPTION_FILE "${TOP_SRC_DIR}/${LYX_CMAKE_DIR}/LyX_description.txt")
662 set(CPACK_RESOURCE_FILE_LICENSE "${TOP_SRC_DIR}/${LYX_CMAKE_DIR}/LyX_license.txt")
664 # Find the revision number and use it as the release in rpm-package-build.
665 # This way we may omit the otherwise needed "--force" parameter when
666 # installing from that rpm package.
667 FIND_PROGRAM(LYX_SVNVERSION svnversion)
668 #message(STATUS "svnversion = ${LYX_SVNVERSION}")
670 EXECUTE_PROCESS(COMMAND ${LYX_SVNVERSION} WORKING_DIRECTORY "${TOP_SRC_DIR}" OUTPUT_VARIABLE CPACK_RPM_PACKAGE_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE)
671 # We use this value also to set the package-patch-value
672 if(CPACK_RPM_PACKAGE_RELEASE MATCHES "^\([0-9]+\)")
673 set(CPACK_PACKAGE_VERSION_PATCH ${CMAKE_MATCH_1}) # TODO this is not the patch level
674 set(LYX_REVISION_VERSION ${CMAKE_MATCH_1})
677 set(LYX_REVISION_VERSION svn) #TODO use date
681 # we do not have a readme or welcome data,
682 # so we do not provide infofiles for
683 # CPACK_RESOURCE_FILE_README and CPACK_RESOURCE_FILE_WELCOME
686 set(CPACK_GENERATOR STGZ)
687 set(CPACK_SOURCE_GENERATOR TGZ TBZ2)
689 set(CPACK_GENERATOR NSIS ZIP)
690 set(CPACK_BINARY_ZIP 1)
691 set(CPACK_SOURCE_GENERATOR ZIP)
695 set(CPACK_STRIP_FILES 1)
698 set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${TOP_SRC_DIR};/") # http://www.mail-archive.com/cmake@cmake.org/msg33720.html
703 set(CPACK_PACKAGE_NAME LyX)
705 set(CPACK_GENERATOR DragNDrop)
707 message(STATUS "Configuring NSIS files")
708 configure_file(development/Win32/packaging/installer/lyx.nsi.cmake ${CMAKE_BINARY_DIR}/installer/lyx.nsi @ONLY)
709 configure_file(development/Win32/packaging/installer/settings.nsh.cmake ${CMAKE_BINARY_DIR}/installer/settings-cmake.nsh @ONLY)
710 configure_file(development/Win32/packaging/installer/include/declarations.nsh.cmake ${CMAKE_BINARY_DIR}/installer/declarations-cmake.nsh @ONLY)
711 set(CPACK_GENERATOR ZIP)
712 message(STATUS "NSIS files are created in ${CMAKE_BINARY_DIR}/installer")
713 message(STATUS "A zipped only release could be created by building the 'PACKAGE' project")
715 message(STATUS "Building self extracting binary bundle.")
716 message(STATUS "To embed Qt in this bundle don't build with your system Qt:")
717 message(STATUS " - fix PATH so a other qmake is found by cmake")
718 message(STATUS " - fix LD_LIBRARY_PATH so lyx doesn't use system's Qt")
725 #Now it is possible to create some packages
728 #############################################################################################
729 # So, e.g. for variables
730 # CMAKE_PROJECT_NAME : lyx
731 # CPACK_PACKAGE_VERSION_MAJOR : 2
732 # CPACK_PACKAGE_VERSION_MINOR : 0
733 # CPACK_PACKAGE_VERSION_PATCH : 1
734 # CMAKE_SYSTEM_NAME : Linux
735 # CPACK_BINARY_DEB:BOOL : ON
737 # the package name builds as "lyx-2.0.1-Linux.deb"
739 ############################## rpm ################################### deb ##################
740 # create # cpack -G RPM --config CPackConfig.cmake # cpack -G DEB --config CPackConfig.cmake
741 # creates =># lyx-2.0.1-Linux.rpm # lyx-2.0.1-Linux.deb
742 # list # rpm -qlp lyx-2.0.1-Linux.rpm # dpkg-deb -c lyx-2.0.1-Linux.deb
743 # install # rpm -U lyx-2.0.1-Linux.rpm # dpkg -i lyx-2.0.1-Linux.deb