CMakeLists.txt 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. project( calamares CXX )
  2. # The partition manager uses ECM but ECMConfig.cmake
  3. # will complain if we require CMake less than 2.8.13,
  4. # so never change this.
  5. cmake_minimum_required( VERSION 2.8.12 )
  6. set( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules" )
  7. if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
  8. message( STATUS "Found Clang ${CMAKE_CXX_COMPILER_VERSION}, setting up Clang-specific compiler flags." )
  9. set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99" )
  10. set( CMAKE_C_FLAGS_DEBUG "-g" )
  11. set( CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" )
  12. set( CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG" )
  13. set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g" )
  14. set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything -std=c++14" )
  15. set( CMAKE_CXX_FLAGS_DEBUG "-g" )
  16. set( CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG" )
  17. set( CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG" )
  18. set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" )
  19. set( CMAKE_TOOLCHAIN_PREFIX "llvm-" )
  20. set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
  21. else()
  22. set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99" )
  23. set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wl,--no-undefined" )
  24. set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wl,--fatal-warnings -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type" )
  25. endif()
  26. if( CMAKE_COMPILER_IS_GNUCXX )
  27. if( CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9 OR
  28. CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.9 )
  29. message( STATUS "Found GNU g++ ${CMAKE_CXX_COMPILER_VERSION}, enabling colorized error messages." )
  30. set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=auto" )
  31. endif()
  32. endif()
  33. cmake_policy( SET CMP0023 OLD )
  34. cmake_policy( SET CMP0028 NEW ) # double colons in KF5::Foo and Qt5::Foo are necessarily IMPORTED or ALIAS targets, don't search further
  35. # Keep cmake 3.0 quiet
  36. if( POLICY CMP0043 )
  37. cmake_policy( SET CMP0043 OLD )
  38. endif()
  39. include( MacroOptionalFindPackage )
  40. include( MacroLogFeature )
  41. set( QT_VERSION 5.6.0 )
  42. find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core Gui Widgets LinguistTools Svg Quick QuickWidgets )
  43. find_package( YAMLCPP 0.5.1 REQUIRED )
  44. find_package( PolkitQt5-1 REQUIRED )
  45. option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON )
  46. option( WITH_CRASHREPORTER "Build with CrashReporter" ON )
  47. option( INSTALL_CONFIG "Install configuration files" ON)
  48. option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." OFF )
  49. if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libcrashreporter-qt/CMakeLists.txt" )
  50. message( STATUS "Build of crashreporter disabled." )
  51. set( WITH_CRASHREPORTER OFF )
  52. endif()
  53. macro_optional_find_package( PythonLibs 3.3 )
  54. macro_log_feature(
  55. PYTHONLIBS_FOUND
  56. "Python"
  57. "C interface libraries for the Python 3 interpreter."
  58. "http://python.org"
  59. FALSE "3.3"
  60. "Python 3 is used for some Calamares job modules."
  61. )
  62. if ( PYTHONLIBS_FOUND )
  63. include( BoostPython3 )
  64. find_boost_python3( 1.54.0 ${PYTHONLIBS_VERSION_STRING} CALAMARES_BOOST_PYTHON3_FOUND )
  65. macro_log_feature(
  66. CALAMARES_BOOST_PYTHON3_FOUND
  67. "Boost.Python"
  68. "A C++ library which enables seamless interoperability between C++ and Python 3."
  69. "http://www.boost.org"
  70. FALSE "1.54.0"
  71. "Boost.Python is used for interfacing with Calamares job modules written in Python 3."
  72. )
  73. macro_optional_find_package( PythonQt )
  74. macro_log_feature( PYTHONQT_FOUND
  75. "PythonQt"
  76. "A Python embedding solution for Qt applications."
  77. "http://pythonqt.sourceforge.net"
  78. FALSE "3.1"
  79. "PythonQt is used for the Python modules API."
  80. )
  81. endif()
  82. if ( PYTHONLIBS_NOTFOUND OR NOT CALAMARES_BOOST_PYTHON3_FOUND )
  83. set( WITH_PYTHON OFF )
  84. endif()
  85. if ( PYTHONLIBS_NOTFOUND OR NOT PYTHONQT_FOUND )
  86. set( WITH_PYTHONQT OFF )
  87. endif()
  88. ###
  89. ### Calamares application info
  90. ###
  91. set( CALAMARES_ORGANIZATION_NAME "Calamares" )
  92. set( CALAMARES_ORGANIZATION_DOMAIN "github.com/calamares" )
  93. set( CALAMARES_APPLICATION_NAME "Calamares" )
  94. set( CALAMARES_DESCRIPTION_SUMMARY "The distribution-independent installer framework" )
  95. set( CALAMARES_TRANSLATION_LANGUAGES ar ast bg ca cs_CZ da de el en en_GB es_MX es eu fr hr hu id is it_IT ja lt nl pl pt_BR pt_PT ro ru sk sv th tr_TR zh_CN zh_TW )
  96. ### Bump version here
  97. set( CALAMARES_VERSION_MAJOR 3 )
  98. set( CALAMARES_VERSION_MINOR 1 )
  99. set( CALAMARES_VERSION_PATCH 0 )
  100. set( CALAMARES_VERSION_RC 0 )
  101. set( CALAMARES_VERSION ${CALAMARES_VERSION_MAJOR}.${CALAMARES_VERSION_MINOR}.${CALAMARES_VERSION_PATCH} )
  102. set( CALAMARES_VERSION_SHORT "${CALAMARES_VERSION}" )
  103. if( CALAMARES_VERSION_RC )
  104. set( CALAMARES_VERSION ${CALAMARES_VERSION}rc${CALAMARES_VERSION_RC} )
  105. endif()
  106. # additional info for non-release builds
  107. if( NOT BUILD_RELEASE AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git/" )
  108. include( CMakeDateStamp )
  109. set( CALAMARES_VERSION_DATE "${CMAKE_DATESTAMP_YEAR}${CMAKE_DATESTAMP_MONTH}${CMAKE_DATESTAMP_DAY}" )
  110. if( CALAMARES_VERSION_DATE GREATER 0 )
  111. set( CALAMARES_VERSION ${CALAMARES_VERSION}.${CALAMARES_VERSION_DATE} )
  112. endif()
  113. include( CMakeVersionSource )
  114. if( CMAKE_VERSION_SOURCE )
  115. set( CALAMARES_VERSION ${CALAMARES_VERSION}-${CMAKE_VERSION_SOURCE} )
  116. endif()
  117. endif()
  118. # enforce using constBegin, constEnd for const-iterators
  119. add_definitions( "-DQT_STRICT_ITERATORS" )
  120. # set paths
  121. set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
  122. set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
  123. set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
  124. # Better default installation paths: GNUInstallDirs defines
  125. # CMAKE_INSTALL_FULL_SYSCONFDIR to be CMAKE_INSTALL_PREFIX/etc by default
  126. # but we really want /etc
  127. if( NOT DEFINED CMAKE_INSTALL_SYSCONFDIR )
  128. set( CMAKE_INSTALL_SYSCONFDIR "/etc" )
  129. endif()
  130. # make predefined install dirs available everywhere
  131. include( GNUInstallDirs )
  132. # make uninstall support
  133. configure_file(
  134. "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
  135. "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  136. IMMEDIATE @ONLY
  137. )
  138. # Early configure these files as we need them later on
  139. configure_file( CalamaresUse.cmake.in "${PROJECT_BINARY_DIR}/CalamaresUse.cmake" @ONLY )
  140. file( COPY CalamaresAddLibrary.cmake DESTINATION "${PROJECT_BINARY_DIR}" )
  141. file( COPY CalamaresAddModuleSubdirectory.cmake DESTINATION "${PROJECT_BINARY_DIR}" )
  142. file( COPY CalamaresAddPlugin.cmake DESTINATION "${PROJECT_BINARY_DIR}" )
  143. file( COPY CalamaresAddBrandingSubdirectory.cmake DESTINATION "${PROJECT_BINARY_DIR}" )
  144. set( CALAMARES_LIBRARIES calamares )
  145. set( THIRDPARTY_DIR "${CMAKE_SOURCE_DIR}/thirdparty" )
  146. add_subdirectory( thirdparty )
  147. add_subdirectory( src )
  148. macro_display_feature_log()
  149. if ( NOT WITH_PYTHON )
  150. message( "-- WARNING: Building Calamares without Python support. Legacy Python job modules will not work.\n" )
  151. endif()
  152. if ( NOT WITH_PYTHONQT )
  153. message( "-- WARNING: Building Calamares without PythonQt support. Python modules will not work.\n" )
  154. endif()
  155. if ( NOT INSTALL_CONFIG )
  156. message( "-- WARNING: Configuration files will not be installed.\n" )
  157. endif()
  158. # Add all targets to the build-tree export set
  159. set( CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/Calamares" CACHE PATH "Installation directory for CMake files" )
  160. set( CMAKE_INSTALL_FULL_CMAKEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" )
  161. export( TARGETS calamares
  162. FILE "${PROJECT_BINARY_DIR}/CalamaresLibraryDepends.cmake" )
  163. # Export the package for use from the build-tree
  164. # (this registers the build-tree with a global CMake-registry)
  165. export( PACKAGE Calamares )
  166. # Create a CalamaresBuildTreeSettings.cmake file for the use from the build tree
  167. configure_file( CalamaresBuildTreeSettings.cmake.in "${PROJECT_BINARY_DIR}/CalamaresBuildTreeSettings.cmake" @ONLY )
  168. # Create the CalamaresConfig.cmake and CalamaresConfigVersion files
  169. file( RELATIVE_PATH CONF_REL_INCLUDE_DIR "${CMAKE_INSTALL_FULL_CMAKEDIR}" "${CMAKE_INSTALL_FULL_INCLUDEDIR}" )
  170. configure_file( CalamaresConfig.cmake.in "${PROJECT_BINARY_DIR}/CalamaresConfig.cmake" @ONLY )
  171. configure_file( CalamaresConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/CalamaresConfigVersion.cmake" @ONLY )
  172. # Install the cmake files
  173. install(
  174. FILES
  175. "${PROJECT_BINARY_DIR}/CalamaresConfig.cmake"
  176. "${PROJECT_BINARY_DIR}/CalamaresConfigVersion.cmake"
  177. "${PROJECT_BINARY_DIR}/CalamaresUse.cmake"
  178. "${PROJECT_BINARY_DIR}/CalamaresAddPlugin.cmake"
  179. "${PROJECT_BINARY_DIR}/CalamaresAddModuleSubdirectory.cmake"
  180. "${PROJECT_BINARY_DIR}/CalamaresAddLibrary.cmake"
  181. "${PROJECT_BINARY_DIR}/CalamaresAddBrandingSubdirectory.cmake"
  182. DESTINATION
  183. "${CMAKE_INSTALL_CMAKEDIR}"
  184. )
  185. # Install the export set for use with the install-tree
  186. install(
  187. EXPORT
  188. CalamaresLibraryDepends
  189. DESTINATION
  190. "${CMAKE_INSTALL_CMAKEDIR}"
  191. )
  192. if (INSTALL_CONFIG)
  193. install(
  194. FILES
  195. settings.conf
  196. DESTINATION
  197. share/calamares
  198. )
  199. endif()
  200. install(
  201. FILES
  202. com.github.calamares.calamares.policy
  203. DESTINATION
  204. "${POLKITQT-1_POLICY_FILES_INSTALL_DIR}"
  205. )
  206. install(
  207. FILES
  208. calamares.desktop
  209. DESTINATION
  210. ${CMAKE_INSTALL_DATADIR}/applications
  211. )
  212. # uninstall target
  213. configure_file(
  214. "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
  215. "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  216. IMMEDIATE @ONLY
  217. )
  218. add_custom_target( uninstall
  219. COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
  220. )