Advertisement
timcowchip

CMakeLists

Jul 7th, 2015
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.51 KB | None | 0 0
  1. #################################################################
  2. #
  3. # This file is part of RSS Guard.
  4. #
  5. # Copyright (C) 2011-2015 by Martin Rotter <rotter.martinos@gmail.com>
  6. #
  7. # RSS Guard is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation, either version 3 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # RSS Guard is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with RSS Guard. If not, see <http:# www.gnu.org/licenses/>.
  19. #
  20. #
  21. # This is RSS Guard compilation script for CMake.
  22. #
  23. # Usage:
  24. # a) DEBUG build for testing.
  25. # cmake -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr -DUSE_QT_5=ON
  26. #
  27. # b) RELEASE build for production use.
  28. # cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/usr -DUSE_QT_5=ON
  29. #
  30. # Arguments:
  31. # -DCMAKE_INSTALL_PREFIX=/usr
  32. # Installation path, replace with something like "C:\rssguard" on Windows.
  33. #
  34. # -DUSE_QT_5=OFF
  35. # Specifies which major Qt version to use. Qt 4 and Qt 5 are supported.
  36. # If "OFF" is passed as an argument, then Qt 4 is used. Default is "OFF".
  37. #
  38. # -DENABLE_OS2_RC=OFF
  39. # If "ON" then icon is compiled into executable file on OS/2. Defaults to "OFF".
  40. #
  41. # Refreshing translation sources:
  42. # make lupdate
  43. #
  44. # Generating source tarballs:
  45. # make dist or make package_source
  46. #
  47. # Generating binary tarballs:
  48. # make package
  49. #
  50. # Other information:
  51. # - supports Windows, Linux, OS/2 (eComStation),
  52. # - Qt 4.7.3 and higher is required,
  53. # - resource compiler (windres.exe) is needed on MinGW,
  54. # - resource compiler (rc.exe) is recommended on OS/2.
  55. #
  56. # Authors and contributors:
  57. # - Martin Rotter (project leader),
  58. # - Elbert Pol (huge OS/2-related contributions)
  59. #
  60. #################################################################
  61.  
  62.  
  63. # Setup basic variables.
  64. project(rssguard)
  65.  
  66. set(APP_NAME "RSS Guard")
  67. set(APP_LOW_NAME "rssguard")
  68. set(APP_VERSION "2.4.0")
  69. set(FILE_VERSION "2,4,0,0")
  70. set(APP_AUTHOR "Martin Rotter")
  71. set(APP_URL "http://bitbucket.org/skunkos/rssguard")
  72. set(APP_URL_ISSUES "http://bitbucket.org/skunkos/rssguard/issues")
  73. set(APP_URL_ISSUES_NEW_GITHUB "https://github.com/martinrotter/rssguard/issues/new")
  74. set(APP_URL_ISSUES_NEW_BITBUCKET "http://bitbucket.org/skunkos/rssguard/issues/new")
  75. set(APP_URL_WIKI "https://bitbucket.org/skunkos/rssguard/wiki/Home")
  76. set(APP_EMAIL "rotter.martinos@gmail.com")
  77. set(MINIMUM_QT_VERSION 4.7.3)
  78. set(EXE_NAME ${APP_LOW_NAME})
  79.  
  80. if(APPLE)
  81. set(APP_URL_BACKWARDS "org.bitbucket.${APP_LOW_NAME}")
  82. endif(APPLE)
  83.  
  84. # Options declaration.
  85. option(USE_QT_5 "Use Qt 5 for building" OFF)
  86.  
  87. if(OS2)
  88. option(ENABLE_OS2_RC "Compile application icon on OS/2" OFF)
  89. endif(OS2)
  90.  
  91. if(WIN32)
  92. option(USE_NSIS "Use NSIS generator to produce installer" OFF)
  93. endif(WIN32)
  94.  
  95. # Set appropriate CMake policies.
  96. if(POLICY CMP0012)
  97. cmake_policy(SET CMP0012 NEW)
  98. endif()
  99.  
  100. if(USE_QT_5)
  101. cmake_minimum_required(VERSION 2.8.10)
  102. else(USE_QT_5)
  103. cmake_minimum_required(VERSION 2.8.0)
  104. endif(USE_QT_5)
  105.  
  106. if(${APPLE})
  107. if(NOT USE_QT_5)
  108. message(FATAL_ERROR "[${APP_LOW_NAME}] Only Qt 5.x.x is supported on Mac OS X.")
  109. endif(NOT USE_QT_5)
  110. endif(${APPLE})
  111.  
  112. message(STATUS "")
  113. message(STATUS "[${APP_LOW_NAME}] ==== Options summary ====")
  114. message(STATUS "[${APP_LOW_NAME}] Use Qt 5 for building -> ${USE_QT_5}")
  115.  
  116. if(OS2)
  117. message(STATUS "[${APP_LOW_NAME}] Compile application icon on OS/2 -> ${ENABLE_OS2_RC}")
  118. endif(OS2)
  119.  
  120. if(WIN32)
  121. message(STATUS "[${APP_LOW_NAME}] Use NSIS generator to produce installer -> ${USE_NSIS}")
  122. endif(WIN32)
  123.  
  124. message(STATUS "[${APP_LOW_NAME}] ==== Options summary ====")
  125. message(STATUS "")
  126.  
  127. message(STATUS "[${APP_LOW_NAME}] Welcome to ${APP_NAME} compilation process.")
  128. message(STATUS "[${APP_LOW_NAME}] Compilation process begins right now.")
  129.  
  130. # Setup misc options.
  131. set(CMAKE_COLOR_MAKEFILE ON)
  132. set(CMAKE_MODULE_PATH
  133. ${PROJECT_SOURCE_DIR}/resources/nsis
  134. ${CMAKE_MODULE_PATH})
  135. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  136.  
  137. # Eliminate a warning when building in Windows that relates
  138. # to static linking of Qt executables to qtmain.lib.
  139. # This policy was introduced in CMake version 2.8.11.
  140. # CMake version 2.8.11.2 warns when the policy is not set
  141. # and uses OLD behavior.
  142. if(POLICY CMP0020)
  143. cmake_policy(SET CMP0020 NEW)
  144. endif(POLICY CMP0020)
  145.  
  146. # Select which Qt version to use.
  147. if(USE_QT_5)
  148. message(STATUS "[${APP_LOW_NAME}] Using Qt 5 library for building.")
  149.  
  150. # Instruct CMake to run moc automatically when needed.
  151. set(CMAKE_AUTOMOC ON)
  152. else(USE_QT_5)
  153. message(STATUS "[${APP_LOW_NAME}] Using Qt 4 library for building.")
  154. endif(USE_QT_5)
  155.  
  156. # Obtain revision number if available.
  157. message(STATUS "[${APP_LOW_NAME}] Obtaining revision number.")
  158.  
  159. if(EXISTS "${PROJECT_SOURCE_DIR}/.git")
  160. find_package(Git)
  161.  
  162. if(GIT_FOUND)
  163. execute_process(
  164. COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
  165. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  166. OUTPUT_VARIABLE GIT_REVISION
  167. )
  168.  
  169. string(REGEX REPLACE "\n" "" GIT_REVISION "${GIT_REVISION}")
  170. set(APP_REVISION ${GIT_REVISION})
  171. else(GIT_FOUND)
  172. # Git was not found, we cannot determine current revision.
  173. set(APP_REVISION "-")
  174. endif(GIT_FOUND)
  175. else(EXISTS "${PROJECT_SOURCE_DIR}/.git")
  176. # Not information for Git are available, this is stripped
  177. # build environment
  178. set(APP_REVISION "-")
  179. endif(EXISTS "${PROJECT_SOURCE_DIR}/.git")
  180.  
  181. message(STATUS "[${APP_LOW_NAME}] Revision number obtained: ${APP_REVISION}.")
  182.  
  183. # Configure desktop entry for Linux.
  184. if(UNIX)
  185. message(STATUS "[${APP_LOW_NAME}] Generating desktop entry for Linux.")
  186. configure_file (
  187. ${PROJECT_SOURCE_DIR}/resources/desktop/rssguard.desktop.in
  188. ${CMAKE_BINARY_DIR}/resources/desktop/rssguard.desktop
  189. )
  190. set(DESKTOP_ENTRY_PATH ${CMAKE_INSTALL_PREFIX}/share/applications)
  191. endif(UNIX)
  192.  
  193. # Configure internal C++ defines.
  194. configure_file (
  195. ${PROJECT_SOURCE_DIR}/src/definitions/definitions.h.in
  196. ${CMAKE_BINARY_DIR}/src/definitions/definitions.h
  197. )
  198.  
  199. # Define some useful DEBUG for, ehrm, debug build.
  200. if(CMAKE_BUILD_TYPE STREQUAL "release" OR CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RELEASE")
  201. message(STATUS "[${APP_LOW_NAME}] A release build (non-debug) is chosen. Debugging outputs are silently ignored.")
  202. set(CMAKE_BUILD_TYPE MinSizeRel)
  203. message(STATUS "[${APP_LOW_NAME}] Output executable file is optimized for minimum size.")
  204. else(CMAKE_BUILD_TYPE STREQUAL "release" OR CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RELEASE")
  205. message(STATUS "[${APP_LOW_NAME}] A debug build is chosen.")
  206. add_definitions(-DDEBUG)
  207. set(CMAKE_BUILD_TYPE Debug)
  208.  
  209. # Enable compiler warnings.
  210. # See http://stackoverflow.com/questions/2368811/how-to-set-warning-level-in-cmake
  211. message(STATUS "[${APP_LOW_NAME}] Enabling verbose makefile and full warning reports.")
  212. if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
  213. add_definitions(-pedantic -Wall) # -Wextra -Wno-unused-variable
  214. endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
  215.  
  216. # Verbose compiling outputs.
  217. set(CMAKE_VERBOSE_MAKEFILE ON)
  218. endif(CMAKE_BUILD_TYPE STREQUAL "release" OR CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RELEASE")
  219.  
  220. # Force Qt to use string builders.
  221. add_definitions(-DQT_USE_QSTRINGBUILDER)
  222.  
  223. # Force Unicode.
  224. add_definitions(-DUNICODE -D_UNICODE)
  225.  
  226. # Check for C++ 11 features availability.
  227. # See http://stackoverflow.com/questions/10984442/how-to-detect-c11-support-of-a-compiler-with-cmake
  228. if(USE_QT_5)
  229. if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
  230. execute_process(
  231. COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION
  232. )
  233.  
  234. if(${GCC_VERSION} VERSION_GREATER 4.7 OR ${GCC_VERSION} VERSION_EQUAL 4.7)
  235. add_definitions(-std=c++11)
  236. else(${GCC_VERSION} VERSION_GREATER 4.7 OR ${GCC_VERSION} VERSION_EQUAL 4.7)
  237. message(FATAL_ERROR "[${APP_LOW_NAME}] Your C++ compiler does not support C++ 11.")
  238. endif(${GCC_VERSION} VERSION_GREATER 4.7 OR ${GCC_VERSION} VERSION_EQUAL 4.7)
  239.  
  240. elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
  241. add_definitions(-std=c++11 -stdlib=libc++)
  242. elseif(${MSVC_VERSION} VERSION_LESS 1600)
  243. message(FATAL_ERROR "[${APP_LOW_NAME}] Your C++ compiler does not support C++ 11.")
  244. endif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
  245. endif(USE_QT_5)
  246.  
  247. # Setup libraries.
  248. if(USE_QT_5)
  249. find_package(Qt5 REQUIRED Sql WebKit WebKitWidgets Widgets Xml XmlPatterns Network LinguistTools PrintSupport)
  250. else(USE_QT_5)
  251. set(QT_MIN_VERSION ${MINIMUM_QT_VERSION})
  252. find_package(Qt4 REQUIRED QtCore QtGui QtSql QtNetwork QtWebkit QtXml QtXmlPatterns)
  253. include(${QT_USE_FILE})
  254. endif(USE_QT_5)
  255.  
  256. # Configure QStringBuilder behavior.
  257. if(USE_QT_5)
  258. message(STATUS "[${APP_LOW_NAME}] Enabling fast QString concatenation.")
  259.  
  260. add_definitions(-DQT_USE_FAST_CONCATENATION)
  261. add_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
  262. elseif(NOT ${QTVERSION} VERSION_LESS 4.8.0)
  263. message(STATUS "[${APP_LOW_NAME}] Enabling fast QString concatenation.")
  264.  
  265. add_definitions(-DQT_USE_FAST_CONCATENATION)
  266. add_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
  267. else(NOT ${QTVERSION} VERSION_LESS 4.8.0)
  268. message(STATUS "[${APP_LOW_NAME}] Disabling fast QString concatenation.")
  269. endif(USE_QT_5)
  270.  
  271. # Configure executable "properties" for Windows or OS2.
  272. if(WIN32)
  273. message(STATUS "[${APP_LOW_NAME}] Generating executable file properties for Windows.")
  274. configure_file (
  275. ${PROJECT_SOURCE_DIR}/resources/executable_properties/rssguard_win.rc.in
  276. ${CMAKE_BINARY_DIR}/resources/executable_properties/rssguard_win.rc
  277. )
  278. elseif(OS2 AND ENABLE_OS2_RC)
  279. message(STATUS "[${APP_LOW_NAME}] Generating executable file properties for OS2.")
  280. configure_file (
  281. ${PROJECT_SOURCE_DIR}/resources/executable_properties/rssguard_os2.rc.in
  282. ${CMAKE_BINARY_DIR}/resources/executable_properties/rssguard_os2.rc
  283. )
  284. endif(WIN32)
  285.  
  286. # Set special linker flag for Windows XP & MSVC++ 2013 support.
  287. if(WIN32 AND MSVC)
  288. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,5.01" )
  289. endif(WIN32 AND MSVC)
  290.  
  291. # Compile application icon if compiling with MinGW on WIN32 or with OS2.
  292. if(WIN32 AND MINGW)
  293. enable_language(RC)
  294. set(CMAKE_RC_COMPILER_INIT windres)
  295. message(STATUS "[${APP_LOW_NAME}] Icon file binary will be builded for Windows.")
  296. message(STATUS "[${APP_LOW_NAME}] Used tool is: ${CMAKE_RC_COMPILER}")
  297. set(CMAKE_RC_COMPILE_OBJECT
  298. "<CMAKE_RC_COMPILER> -i <SOURCE> -o <OBJECT>")
  299.  
  300. set(APP_SOURCES
  301. ${APP_SOURCES}
  302. ${CMAKE_BINARY_DIR}/resources/executable_properties/rssguard_win.rc)
  303. elseif(OS2)
  304. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Zstack 0x2000 -Zlinker \"DISABLE 1121\" -s -Zlinker /PM:PM -Zno-fork -Zhigh-mem -Zmap")
  305.  
  306. if(${ENABLE_OS2_RC})
  307. enable_language(RC)
  308. set(CMAKE_RC_COMPILER_INIT rc)
  309. message(STATUS "[${APP_LOW_NAME}] Icon file binary will be builded for OS2.")
  310. message(STATUS "[${APP_LOW_NAME}] Used tool is: ${CMAKE_RC_COMPILER}")
  311. set(CMAKE_RC_COMPILE_OBJECT
  312. "<CMAKE_RC_COMPILER> -n -r <SOURCE> <OBJECT>")
  313.  
  314. set(APP_SOURCES
  315. ${APP_SOURCES}
  316. ${CMAKE_BINARY_DIR}/resources/executable_properties/rssguard_os2.rc)
  317. endif(${ENABLE_OS2_RC})
  318. elseif(WIN32 AND MSVC)
  319. # MSVC takes care of this automatically - no need to use windres.exe
  320. # for MSVC compilers.
  321. set(APP_SOURCES ${APP_SOURCES} ${CMAKE_BINARY_DIR}/resources/executable_properties/rssguard_win.rc)
  322. endif(WIN32 AND MINGW)
  323.  
  324. # APP source files.
  325. set(APP_SOURCES
  326. ${APP_SOURCES}
  327.  
  328. # QTSINGLEAPPLICATION sources.
  329. src/qtsingleapplication/qtlocalpeer.cpp
  330. src/qtsingleapplication/qtsinglecoreapplication.cpp
  331. src/qtsingleapplication/qtsingleapplication.cpp
  332.  
  333. # GUI sources.
  334. src/gui/formmain.cpp
  335. src/gui/systemtrayicon.cpp
  336. src/gui/formsettings.cpp
  337. src/gui/formabout.cpp
  338. src/gui/baselineedit.cpp
  339. src/gui/locationlineedit.cpp
  340. src/gui/tabwidget.cpp
  341. src/gui/tabbar.cpp
  342. src/gui/tabcontent.cpp
  343. src/gui/feedmessageviewer.cpp
  344. src/gui/feedsview.cpp
  345. src/gui/messagesview.cpp
  346. src/gui/statusbar.cpp
  347. src/gui/formcategorydetails.cpp
  348. src/gui/formfeeddetails.cpp
  349. src/gui/plaintoolbutton.cpp
  350. src/gui/lineeditwithstatus.cpp
  351. src/gui/widgetwithstatus.cpp
  352. src/gui/labelwithstatus.cpp
  353. src/gui/messagebox.cpp
  354. src/gui/formupdate.cpp
  355. src/gui/comboboxwithstatus.cpp
  356. src/gui/basetoolbar.cpp
  357. src/gui/messagestoolbar.cpp
  358. src/gui/feedstoolbar.cpp
  359. src/gui/toolbareditor.cpp
  360. src/gui/messagessearchlineedit.cpp
  361. src/gui/formimportexport.cpp
  362. src/gui/styleditemdelegatewithoutfocus.cpp
  363. src/gui/formbackupdatabasesettings.cpp
  364. src/gui/formrestoredatabasesettings.cpp
  365. src/gui/edittableview.cpp
  366. src/gui/squeezelabel.cpp
  367. src/gui/formdatabasecleanup.cpp
  368.  
  369. # DYNAMIC-SHORTCUTS sources.
  370. src/dynamic-shortcuts/shortcutcatcher.cpp
  371. src/dynamic-shortcuts/shortcutbutton.cpp
  372. src/dynamic-shortcuts/dynamicshortcutswidget.cpp
  373. src/dynamic-shortcuts/dynamicshortcuts.cpp
  374.  
  375. # MISCELLANEOUS sources.
  376. src/miscellaneous/application.cpp
  377. src/miscellaneous/debugging.cpp
  378. src/miscellaneous/settings.cpp
  379. src/miscellaneous/systemfactory.cpp
  380. src/miscellaneous/localization.cpp
  381. src/miscellaneous/textfactory.cpp
  382. src/miscellaneous/databasefactory.cpp
  383. src/miscellaneous/skinfactory.cpp
  384. src/miscellaneous/iconfactory.cpp
  385. src/miscellaneous/iofactory.cpp
  386. src/miscellaneous/autosaver.cpp
  387. src/miscellaneous/mutex.cpp
  388. src/miscellaneous/databasecleaner.cpp
  389.  
  390. # EXCEPTIONS sources.
  391. src/exceptions/applicationexception.cpp
  392. src/exceptions/ioexception.cpp
  393.  
  394. # CORE sources.
  395. src/core/messagesmodel.cpp
  396. src/core/messagesproxymodel.cpp
  397. src/core/feedsmodel.cpp
  398. src/core/feedsproxymodel.cpp
  399. src/core/feedsmodelcategory.cpp
  400. src/core/feedsmodelrootitem.cpp
  401. src/core/feedsmodelfeed.cpp
  402. src/core/parsingfactory.cpp
  403. src/core/feeddownloader.cpp
  404. src/core/feedsimportexportmodel.cpp
  405. src/core/feedsmodelrecyclebin.cpp
  406. src/core/feedsselection.cpp
  407.  
  408. # NETWORK-WEB sources.
  409. src/network-web/basenetworkaccessmanager.cpp
  410. src/network-web/webpage.cpp
  411. src/network-web/webbrowsernetworkaccessmanager.cpp
  412. src/network-web/silentnetworkaccessmanager.cpp
  413. src/network-web/networkfactory.cpp
  414. src/network-web/webfactory.cpp
  415. src/network-web/webbrowser.cpp
  416. src/network-web/webview.cpp
  417. src/network-web/downloader.cpp
  418. src/network-web/downloadmanager.cpp
  419. src/network-web/discoverfeedsbutton.cpp
  420.  
  421. # MAIN sources.
  422. src/main.cpp
  423. )
  424.  
  425. # APP headers.
  426. set(APP_HEADERS
  427. ${APP_HEADERS}
  428.  
  429. # QTSINGLEAPPLICATION headers.
  430. src/qtsingleapplication/qtlocalpeer.h
  431. src/qtsingleapplication/qtsinglecoreapplication.h
  432. src/qtsingleapplication/qtsingleapplication.h
  433.  
  434. # GUI headers.
  435. src/gui/formmain.h
  436. src/gui/systemtrayicon.h
  437. src/gui/formsettings.h
  438. src/gui/formabout.h
  439. src/gui/baselineedit.h
  440. src/gui/locationlineedit.h
  441. src/gui/tabwidget.h
  442. src/gui/tabbar.h
  443. src/gui/tabcontent.h
  444. src/gui/feedmessageviewer.h
  445. src/gui/feedsview.h
  446. src/gui/messagesview.h
  447. src/gui/statusbar.h
  448. src/gui/formcategorydetails.h
  449. src/gui/formfeeddetails.h
  450. src/gui/plaintoolbutton.h
  451. src/gui/lineeditwithstatus.h
  452. src/gui/widgetwithstatus.h
  453. src/gui/labelwithstatus.h
  454. src/gui/messagebox.h
  455. src/gui/formupdate.h
  456. src/gui/comboboxwithstatus.h
  457. src/gui/basetoolbar.h
  458. src/gui/messagestoolbar.h
  459. src/gui/feedstoolbar.h
  460. src/gui/toolbareditor.h
  461. src/gui/messagessearchlineedit.h
  462. src/gui/formimportexport.h
  463. src/gui/formbackupdatabasesettings.h
  464. src/gui/formrestoredatabasesettings.h
  465. src/gui/edittableview.h
  466. src/gui/squeezelabel.h
  467. src/gui/formdatabasecleanup.h
  468.  
  469. # DYNAMIC-SHORTCUTS headers.
  470. src/dynamic-shortcuts/dynamicshortcutswidget.h
  471. src/dynamic-shortcuts/shortcutcatcher.h
  472. src/dynamic-shortcuts/shortcutbutton.h
  473.  
  474. # MISCELLANEOUS headers.
  475. src/miscellaneous/application.h
  476. src/miscellaneous/settings.h
  477. src/miscellaneous/localization.h
  478. src/miscellaneous/systemfactory.h
  479. src/miscellaneous/databasefactory.h
  480. src/miscellaneous/iconfactory.h
  481. src/miscellaneous/skinfactory.h
  482. src/miscellaneous/autosaver.h
  483. src/miscellaneous/mutex.h
  484. src/miscellaneous/databasecleaner.h
  485.  
  486. # CORE headers.
  487. src/core/messagesmodel.h
  488. src/core/messagesproxymodel.h
  489. src/core/feedsmodel.h
  490. src/core/feedsproxymodel.h
  491. src/core/feeddownloader.h
  492. src/core/feedsimportexportmodel.h
  493. src/core/feedsselection.h
  494.  
  495. # NETWORK-WEB headers.
  496. src/network-web/webpage.h
  497. src/network-web/basenetworkaccessmanager.h
  498. src/network-web/webbrowsernetworkaccessmanager.h
  499. src/network-web/silentnetworkaccessmanager.h
  500. src/network-web/webfactory.h
  501. src/network-web/webbrowser.h
  502. src/network-web/webview.h
  503. src/network-web/downloader.h
  504. src/network-web/downloadmanager.h
  505. src/network-web/discoverfeedsbutton.h
  506. )
  507.  
  508. # APP form files.
  509. set(APP_FORMS
  510. src/gui/formupdate.ui
  511. src/gui/formmain.ui
  512. src/gui/formsettings.ui
  513. src/gui/formabout.ui
  514. src/gui/formcategorydetails.ui
  515. src/gui/formfeeddetails.ui
  516. src/gui/toolbareditor.ui
  517. src/gui/formimportexport.ui
  518. src/gui/formbackupdatabasesettings.ui
  519. src/gui/formrestoredatabasesettings.ui
  520. src/gui/formdatabasecleanup.ui
  521. src/network-web/downloadmanager.ui
  522. src/network-web/downloaditem.ui
  523. )
  524.  
  525. # APP translations.
  526. set(APP_TRANSLATIONS
  527. localization/rssguard-cs_CZ.ts
  528. localization/rssguard-da_DK.ts
  529. localization/rssguard-de_DE.ts
  530. localization/rssguard-en_GB.ts
  531. localization/rssguard-en_US.ts
  532. localization/rssguard-fr_FR.ts
  533. localization/rssguard-it_IT.ts
  534. localization/rssguard-nl_NL.ts
  535. localization/rssguard-sv_SE.ts
  536. localization/qtbase-cs_CZ.ts
  537. localization/qtbase-da_DK.ts
  538. localization/qtbase-de_DE.ts
  539. localization/qtbase-fr_FR.ts
  540. localization/qtbase-it_IT.ts
  541. localization/qtbase-sv_SE.ts
  542. )
  543.  
  544. set(APP_TRANSLATIONS_WO_QT
  545. localization/rssguard-cs_CZ.ts
  546. localization/rssguard-de_DE.ts
  547. localization/rssguard-en_GB.ts
  548. localization/rssguard-en_US.ts
  549. localization/rssguard-fr_FR.ts
  550. localization/rssguard-it_IT.ts
  551. localization/rssguard-nl_NL.ts
  552. localization/rssguard-sv_SE.ts
  553. )
  554.  
  555. set(APP_TEXT
  556. resources/text/CHANGELOG
  557. resources/text/COPYING_GNU_GPL
  558. resources/text/COPYING_GNU_GPL_HTML
  559. resources/text/COPYING_BSD
  560. )
  561.  
  562. if(WIN32)
  563. set(APP_DLLS_QT4_MSVC2013
  564. resources/binaries/windows/deployment/qt4-msvc2013/libeay32.dll
  565. resources/binaries/windows/deployment/qt4-msvc2013/msvcp120.dll
  566. resourcegit coms/binaries/windows/deployment/qt4-msvc2013/msvcr120.dll
  567. resources/binaries/windows/deployment/qt4-msvc2013/QtCore4.dll
  568. resources/binaries/windows/deployment/qt4-msvc2013/QtGui4.dll
  569. resources/binaries/windows/deployment/qt4-msvc2013/QtNetwork4.dll
  570. resources/binaries/windows/deployment/qt4-msvc2013/QtSql4.dll
  571. resources/binaries/windows/deployment/qt4-msvc2013/QtWebKit4.dll
  572. resources/binaries/windows/deployment/qt4-msvc2013/QtXml4.dll
  573. resources/binaries/windows/deployment/qt4-msvc2013/ssleay32.dll
  574. resources/binaries/windows/deployment/qt4-msvc2013/libmysql.dll
  575. )
  576.  
  577. set(APP_DLLS_QT4_MSVC2013_IMAGEFORMATS
  578. resources/binaries/windows/deployment/qt4-msvc2013/imageformats/qgif4.dll
  579. resources/binaries/windows/deployment/qt4-msvc2013/imageformats/qico4.dll
  580. resources/binaries/windows/deployment/qt4-msvc2013/imageformats/qjpeg4.dll
  581. resources/binaries/windows/deployment/qt4-msvc2013/imageformats/qmng4.dll
  582. resources/binaries/windows/deployment/qt4-msvc2013/imageformats/qsvg4.dll
  583. resources/binaries/windows/deployment/qt4-msvc2013/imageformats/qtga4.dll
  584. resources/binaries/windows/deployment/qt4-msvc2013/imageformats/qtiff4.dll
  585. )
  586.  
  587. set(APP_DLLS_QT4_MSVC2013_SQLDRIVERS
  588. resources/binaries/windows/deployment/qt4-msvc2013/sqldrivers/qsqlite4.dll
  589. resources/binaries/windows/deployment/qt4-msvc2013/sqldrivers/qsqlmysql4.dll
  590. )
  591.  
  592. set(APP_DLLS_QT5_MSVC2013
  593. resources/binaries/windows/deployment/qt5-msvc2013/icudt53.dll
  594. resources/binaries/windows/deployment/qt5-msvc2013/icuin53.dll
  595. resources/binaries/windows/deployment/qt5-msvc2013/icuuc53.dll
  596. resources/binaries/windows/deployment/qt5-msvc2013/libeay32.dll
  597. resources/binaries/windows/deployment/qt5-msvc2013/libEGL.dll
  598. resources/binaries/windows/deployment/qt5-msvc2013/libGLESv2.dll
  599. resources/binaries/windows/deployment/qt5-msvc2013/libmysql.dll
  600. resources/binaries/windows/deployment/qt5-msvc2013/msvcp120.dll
  601. resources/binaries/windows/deployment/qt5-msvc2013/msvcr120.dll
  602. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Core.dll
  603. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Gui.dll
  604. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Multimedia.dll
  605. resources/binaries/windows/deployment/qt5-msvc2013/Qt5MultimediaWidgets.dll
  606. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Network.dll
  607. resources/binaries/windows/deployment/qt5-msvc2013/Qt5OpenGL.dll
  608. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Positioning.dll
  609. resources/binaries/windows/deployment/qt5-msvc2013/Qt5PrintSupport.dll
  610. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Qml.dll
  611. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Quick.dll
  612. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Sensors.dll
  613. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Sql.dll
  614. resources/binaries/windows/deployment/qt5-msvc2013/Qt5WebChannel.dll
  615. resources/binaries/windows/deployment/qt5-msvc2013/Qt5WebKit.dll
  616. resources/binaries/windows/deployment/qt5-msvc2013/Qt5WebKitWidgets.dll
  617. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Widgets.dll
  618. resources/binaries/windows/deployment/qt5-msvc2013/Qt5Xml.dll
  619. resources/binaries/windows/deployment/qt5-msvc2013/ssleay32.dll
  620. )
  621.  
  622. set(APP_DLLS_QT5_MSVC2013_IMAGEFORMATS
  623. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qdds.dll
  624. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qgif.dll
  625. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qicns.dll
  626. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qico.dll
  627. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qjpeg.dll
  628. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qmng.dll
  629. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qsvg.dll
  630. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qtga.dll
  631. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qtiff.dll
  632. resources/binaries/windows/deployment/qt5-msvc2013/imageformats/qwbmp.dll
  633. )
  634.  
  635. set(APP_DLLS_QT5_MSVC2013_SQLDRIVERS
  636. resources/binaries/windows/deployment/qt5-msvc2013/sqldrivers/qsqlite.dll
  637. resources/binaries/windows/deployment/qt5-msvc2013/sqldrivers/qsqlmysql.dll
  638. )
  639.  
  640. set(APP_DLLS_QT5_MSVC2013_PLATFORMS
  641. resources/binaries/windows/deployment/qt5-msvc2013/platforms/qminimal.dll
  642. resources/binaries/windows/deployment/qt5-msvc2013/platforms/qwindows.dll
  643. )
  644.  
  645. set(APP_DLLS_QT5_MSVC2013_PRINTSUPPORT
  646. resources/binaries/windows/deployment/qt5-msvc2013/printsupport/windowsprintersupport.dll
  647. )
  648. endif(WIN32)
  649.  
  650. # Add custom icon on Mac OS X.
  651. if(APPLE)
  652. SET (APP_SOURCES ${APP_SOURCES} resources/macosx/rssguard.icns)
  653. endif(APPLE)
  654.  
  655. # Wrap files, create moc files.
  656. if(USE_QT_5)
  657. qt5_wrap_ui(APP_UI ${APP_FORMS})
  658.  
  659. # Load translations.
  660. if(${Qt5LinguistTools_FOUND})
  661. message(STATUS "[${APP_LOW_NAME}] Qt Linguist Tools found. Translations will get compiled.")
  662. qt5_add_translation(APP_QM ${APP_TRANSLATIONS})
  663. else(${Qt5LinguistTools_FOUND})
  664. message(STATUS "[${APP_LOW_NAME}] Qt Linguist Tools NOT found. No compilation for translations.")
  665. endif(${Qt5LinguistTools_FOUND})
  666. else(USE_QT_5)
  667. qt4_wrap_cpp(APP_MOC ${APP_HEADERS})
  668. qt4_wrap_ui(APP_UI ${APP_FORMS})
  669.  
  670. # Load translations.
  671. qt4_add_translation(APP_QM ${APP_TRANSLATIONS})
  672. endif(USE_QT_5)
  673.  
  674. # Include additional directory paths.
  675. include_directories (
  676. ${CMAKE_SOURCE_DIR}/src
  677. ${CMAKE_SOURCE_DIR}/src/gui
  678. ${CMAKE_SOURCE_DIR}/src/network-web
  679. ${CMAKE_SOURCE_DIR}/src/dynamic-shortcuts
  680. ${CMAKE_BINARY_DIR}/src
  681. )
  682.  
  683. # Compile "rssguard"
  684. if(USE_QT_5)
  685. add_executable(${EXE_NAME} WIN32 MACOSX_BUNDLE
  686. ${APP_SOURCES}
  687. ${APP_FORMS}
  688. ${APP_RCC}
  689. ${APP_QM}
  690. )
  691.  
  692. if(WIN32)
  693. target_link_libraries(${EXE_NAME} Qt5::WinMain)
  694. endif(WIN32)
  695.  
  696. # Use modules from Qt.
  697. qt5_use_modules(${EXE_NAME}
  698. Core
  699. Widgets
  700. Sql
  701. Network
  702. Xml
  703. WebKit
  704. WebKitWidgets
  705. PrintSupport
  706. )
  707. # Setup compilation for Qt 4.
  708. else(USE_QT_5)
  709. add_executable(${EXE_NAME} WIN32 MACOSX_BUNDLE
  710. ${APP_SOURCES}
  711. ${APP_FORMS}
  712. ${APP_MOC}
  713. ${APP_RCC}
  714. ${APP_QM}
  715. )
  716.  
  717. # Link modules from Qt.
  718. target_link_libraries(${EXE_NAME}
  719. ${QT_QTCORE_LIBRARY}
  720. ${QT_QTGUI_LIBRARY}
  721. ${QT_QTNETWORK_LIBRARY}
  722. ${QT_QTSQL_LIBRARY}
  723. ${QT_QTXML_LIBRARY}
  724. ${QT_QTMAIN_LIBRARY}
  725. ${QT_QTWEBKIT_LIBRARY}
  726. )
  727. endif(USE_QT_5)
  728.  
  729. # Installation stage.
  730. if(WIN32 OR OS2)
  731. message(STATUS "[${APP_LOW_NAME}] You will probably install on Windows or OS/2.")
  732. install(TARGETS ${EXE_NAME} RUNTIME DESTINATION ./)
  733.  
  734. # Copy DLLs and other binary files for main installation.
  735. if(WIN32 AND USE_QT_5)
  736. install(FILES ${APP_DLLS_QT5_MSVC2013} DESTINATION ./)
  737. install(FILES ${APP_DLLS_QT5_MSVC2013_IMAGEFORMATS} DESTINATION ./imageformats)
  738. install(FILES ${APP_DLLS_QT5_MSVC2013_SQLDRIVERS} DESTINATION ./sqldrivers)
  739. install(FILES ${APP_DLLS_QT5_MSVC2013_PLATFORMS} DESTINATION ./platforms)
  740. install(FILES ${APP_DLLS_QT5_MSVC2013_PRINTSUPPORT} DESTINATION ./printsupport)
  741. endif(WIN32 AND USE_QT_5)
  742.  
  743. if(WIN32 AND NOT USE_QT_5)
  744. install(FILES ${APP_DLLS_QT4_MSVC2013} DESTINATION ./)
  745. install(FILES ${APP_DLLS_QT4_MSVC2013_IMAGEFORMATS} DESTINATION ./imageformats)
  746. install(FILES ${APP_DLLS_QT4_MSVC2013_SQLDRIVERS} DESTINATION ./sqldrivers)
  747. endif(WIN32 AND NOT USE_QT_5)
  748.  
  749. install(DIRECTORY resources/graphics/icons/mini-kfaenza DESTINATION ./icons)
  750. install(DIRECTORY resources/skins/base
  751. DESTINATION ./skins)
  752. install(DIRECTORY resources/misc
  753. DESTINATION ./)
  754. install(DIRECTORY resources/initial_feeds
  755. DESTINATION ./)
  756. install(FILES resources/graphics/${APP_LOW_NAME}_128.png
  757. DESTINATION ./
  758. RENAME ${APP_LOW_NAME}.png)
  759. install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png
  760. DESTINATION ./
  761. RENAME ${APP_LOW_NAME}_plain.png)
  762. install(FILES resources/graphics/${APP_LOW_NAME}.ico
  763. DESTINATION ./)
  764. install(FILES ${APP_QM}
  765. DESTINATION ./l10n)
  766. install(FILES ${APP_TEXT}
  767. DESTINATION ./)
  768. elseif(APPLE)
  769. message(STATUS "[${APP_LOW_NAME}] You will probably install on Mac OS X.")
  770.  
  771. set_target_properties(${EXE_NAME}
  772. PROPERTIES
  773. MACOSX_BUNDLE_INFO_PLIST
  774. "${CMAKE_SOURCE_DIR}/resources/macosx/Info.plist.in")
  775.  
  776. set_source_files_properties(${CMAKE_SOURCE_DIR}/resources/macosx/${APP_LOW_NAME}.icns
  777. PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  778.  
  779. set(MACOSX_BUNDLE_ICON_FILE ${APP_LOW_NAME}.icns)
  780. set(MACOSX_BUNDLE_INFO_STRING "${EXE_NAME} ${APP_VERSION}")
  781. set(MACOSX_BUNDLE_GUI_IDENTIFIER "${APP_URL_BACKWARDS}")
  782. set(MACOSX_BUNDLE_LONG_VERSION_STRING "${APP_VERSION}")
  783. set(MACOSX_BUNDLE_BUNDLE_NAME "${EXE_NAME}")
  784. set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${APP_VERSION}")
  785. set(MACOSX_BUNDLE_BUNDLE_VERSION "${APP_VERSION}")
  786. set(MACOSX_BUNDLE_COPYRIGHT "(c) ${APP_AUTHOR}")
  787.  
  788. install(TARGETS ${EXE_NAME} BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX})
  789.  
  790. # Setup custom "bundle" prefix.
  791. set(APPLE_PREFIX ${CMAKE_INSTALL_PREFIX}/${EXE_NAME}.app/Contents/Resources)
  792.  
  793. install(DIRECTORY resources/initial_feeds DESTINATION ${APPLE_PREFIX})
  794. install(DIRECTORY resources/graphics/icons/mini-kfaenza DESTINATION ${APPLE_PREFIX}/icons)
  795. install(DIRECTORY resources/skins DESTINATION ${APPLE_PREFIX})
  796. install(DIRECTORY resources/misc DESTINATION ${APPLE_PREFIX})
  797. install(FILES resources/graphics/${APP_LOW_NAME}_128.png DESTINATION ${APPLE_PREFIX} RENAME ${APP_LOW_NAME}.png)
  798. install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png DESTINATION ${APPLE_PREFIX} RENAME ${APP_LOW_NAME}_plain.png)
  799. install(FILES ${APP_QM} DESTINATION ${APPLE_PREFIX}/l10n)
  800. install(FILES ${APP_TEXT} DESTINATION ${APPLE_PREFIX}/information)
  801. elseif(UNIX)
  802. message(STATUS "[${APP_LOW_NAME}] You will probably install on Linux.")
  803.  
  804. install(TARGETS ${EXE_NAME} RUNTIME DESTINATION bin)
  805. install(DIRECTORY resources/initial_feeds DESTINATION share/${APP_LOW_NAME})
  806. install(DIRECTORY resources/graphics/icons/mini-kfaenza DESTINATION share/${APP_LOW_NAME}/icons)
  807. install(DIRECTORY resources/skins/base DESTINATION share/${APP_LOW_NAME}/skins)
  808. install(DIRECTORY resources/misc DESTINATION share/${APP_LOW_NAME})
  809. install(FILES ${CMAKE_BINARY_DIR}/resources/desktop/${APP_LOW_NAME}.desktop DESTINATION share/applications)
  810. install(FILES resources/graphics/${APP_LOW_NAME}_128.png DESTINATION share/pixmaps RENAME ${APP_LOW_NAME}.png)
  811. install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png DESTINATION share/rssguard/icons RENAME ${APP_LOW_NAME}_plain.png)
  812. install(FILES ${APP_QM} DESTINATION share/${APP_LOW_NAME}/l10n)
  813. install(FILES ${APP_TEXT} DESTINATION share/${APP_LOW_NAME}/information)
  814. endif(WIN32 OR OS2)
  815.  
  816. # Custom target for packaging.
  817. if(WIN32)
  818. if(USE_NSIS)
  819. set(CPACK_GENERATOR "NSIS")
  820. else(USE_NSIS)
  821. set(CPACK_GENERATOR "ZIP")
  822. endif(USE_NSIS)
  823. else(WIN32)
  824. set(CPACK_GENERATOR "ZIP")
  825. endif(WIN32)
  826.  
  827. set(CPACK_PACKAGE_NAME ${APP_LOW_NAME})
  828. set(CPACK_PACKAGE_VERSION ${APP_VERSION})
  829. set(CPACK_PACKAGE_VERSION_PATCH "0")
  830. set(CPACK_PACKAGE_VENDOR ${APP_AUTHOR})
  831. set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY ${APP_NAME})
  832. set(CPACK_IGNORE_FILES "/resources/aur/;\\\\.psd$;/resources/deployment;/CVS/;/\\\\.svn/;/\\\\.git/;\\\\.swp$;/CMakeLists.txt.user;\\\\.#;/#;\\\\.tar.gz$;/CMakeFiles/;CMakeCache.txt;\\\\.qm$;/build/;\\\\.diff$;.DS_Store'")
  833. set(CPACK_SOURCE_GENERATOR "TGZ")
  834. set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
  835. set(CPACK_SOURCE_IGNORE_FILES ${CPACK_IGNORE_FILES})
  836.  
  837. set(CPACK_NSIS_INSTALLED_ICON_NAME "${APP_LOW_NAME}.ico")
  838. set(CPACK_NSIS_HELP_LINK ${APP_URL})
  839. set(CPACK_NSIS_URL_INFO_ABOUT ${APP_URL})
  840. set(CPACK_NSIS_CONTACT ${APP_EMAIL})
  841.  
  842. # Load packaging facilities.
  843. include(CPack)
  844.  
  845. # Configure file with custom definitions for NSIS.
  846. configure_file(
  847. ${CMAKE_CURRENT_SOURCE_DIR}/resources/nsis/NSIS.definitions.nsh.in
  848. ${CMAKE_CURRENT_BINARY_DIR}/resources/nsis/NSIS.definitions.nsh
  849. )
  850.  
  851. # make dist implementation.
  852. add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
  853.  
  854. # make lupdate implementation.
  855. if(USE_QT_5)
  856. add_custom_target(lupdate
  857. ${Qt5Core_QMAKE_EXECUTABLE} -project -o ${CMAKE_BINARY_DIR}/${APP_LOW_NAME}.pro
  858. COMMAND ${Qt5_LUPDATE_EXECUTABLE} -no-obsolete -ts ${APP_TRANSLATIONS_WO_QT} -pro ${CMAKE_BINARY_DIR}/${APP_LOW_NAME}.pro
  859. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  860. )
  861. else(USE_QT_5)
  862. add_custom_target(lupdate
  863. ${QT_QMAKE_EXECUTABLE} -project -o ${CMAKE_BINARY_DIR}/${APP_LOW_NAME}.pro
  864. COMMAND ${QT_LUPDATE_EXECUTABLE} -no-obsolete -ts ${APP_TRANSLATIONS_WO_QT} -pro ${CMAKE_BINARY_DIR}/${APP_LOW_NAME}.pro
  865. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  866. )
  867. endif(USE_QT_5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement