rssguard/CMakeLists.txt

249 lines
7.9 KiB
CMake
Raw Normal View History

2022-01-31 10:41:17 +01:00
#################################################################
#
# For license of this file, see <project-root-folder>/LICENSE.md.
#
# This is RSS Guard compilation script for cmake.
#
# Usage (out of source build type, we have two side by side folders:
# empty "build-dir" and RSS Guard repository "rssguard-dir"):
# a) DEBUG build for testing.
# cd build-dir
# cmake -DCMAKE_BUILD_TYPE="Debug" ../rssguard-dir/
# cmake --build .
# cmake --install .
#
# b) RELEASE build for production use.
# cd build-dir
# cmake -DCMAKE_BUILD_TYPE="Release" ../rssguard-dir/
# cmake --build .
# cmake --install .
#
# Variables:
# USE_WEBENGINE - if specified, then QtWebEngine module for internal web browser is used.
# Otherwise simple text component is used and some features will be disabled.
# Default value is "false". If QtWebEngine is installed during compilation, then
# value of this variable is tweaked automatically.
# {FEEDLY,GMAIL,INOREADER}_CLIENT_ID - preconfigured OAuth cliend ID.
# {FEEDLY,GMAIL,INOREADER}_CLIENT_SECRET - preconfigured OAuth cliend SECRET.
#
# Other information:
# - supports Windows, Linux, macOS, OS/2, Android,
# - Qt 5.9.0 or newer is required,
# - cmake 3.9.0 or newer is required,
# - if you wish to make packages for Windows, then you must initialize all submodules within repository before compilation,
# - C++ 11/17 is required.
#
# Building on OS/2:
# RSS Guard can run on OS/2 and if you want to compile it by yourself, you need to make sure that
# your OS/2 distro is up-to-date and you have all dependencies installed: os2-base, all gcc-* packages,
# libc and libcx up-to-date, kbuild-make, ash, binutils, all relevant qt5-* packages.
#
# After your dependecies are installed, then you can compile via standard `qmake -> make -> make install` steps
# and package with: 7z.exe a -t7z -mmt -mx9 "rssguard.7z" "<build-folder\src\rssguard\app\*" command.
#
# Authors and contributors:
# - Martin Rotter (project leader),
# - Elbert Pol (OS/2-related contributions),
# - CyberTailor (cmake-related contributions.
#
#################################################################
2022-01-31 09:11:48 +01:00
cmake_minimum_required(VERSION 3.9.0)
2022-01-31 10:41:17 +01:00
# Global variables describing the project.
set(APP_NAME "RSS Guard")
2022-01-31 11:57:06 +01:00
set(APP_EMAIL "rotter.martinos@gmail.com")
2022-01-31 10:41:17 +01:00
set(APP_AUTHOR "Martin Rotter")
set(APP_COPYRIGHT "\\251 2011-2022 ${APP_AUTHOR}")
set(APP_REVERSE_NAME "com.github.rssguard")
2022-01-31 11:57:06 +01:00
set(APP_DONATE_URL "https://github.com/sponsors/martinrotter")
2022-01-31 10:41:17 +01:00
set(APP_VERSION "4.2.0")
2022-01-31 11:57:06 +01:00
set(APP_URL "https://github.com/martinrotter/rssguard")
set(APP_URL_DOCUMENTATION "https://github.com/martinrotter/rssguard/blob/master/resources/docs/Documentation.md")
set(APP_URL_ISSUES "https://github.com/martinrotter/rssguard/issues")
set(APP_URL_ISSUES_NEW "https://github.com/martinrotter/rssguard/issues/new")
2022-01-31 10:41:17 +01:00
set(TYPEINFO "????")
project(rssguard VERSION ${APP_VERSION} LANGUAGES CXX)
2022-01-31 09:11:48 +01:00
2022-01-31 13:11:53 +01:00
# Basic C++ related behavior of cmake.
2022-01-31 09:11:48 +01:00
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
2022-01-31 10:41:17 +01:00
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
2022-01-31 13:11:53 +01:00
if(UNIX)
add_compile_options(-fPIC)
endif()
if(APPLE)
add_compile_options(-stdlib=libc++)
add_link_options(-stdlib=libc++)
endif()
if(${FORCE_COLORED_OUTPUT})
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
add_compile_options(-fdiagnostics-color=always)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_compile_options(-fcolor-diagnostics)
endif()
endif()
# Global compilation switches.
2022-01-31 09:11:48 +01:00
option(USE_WEBENGINE "Use QtWebEngine for embedded web browser" ON)
option(UPDATE_TRANSLATIONS "Call lupdate to update translation files from source" OFF)
option(FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GCC/Clang only)" OFF)
2022-01-31 10:41:17 +01:00
option(REVISION_FROM_GIT "Get revision using `git rev-parse`" ON)
2022-01-31 09:11:48 +01:00
set(FEEDLY_CLIENT_ID "" CACHE STRING "Feedly client ID")
set(FEEDLY_CLIENT_SECRET "" CACHE STRING "Feedly client secret")
set(GMAIL_CLIENT_ID "" CACHE STRING "GMail client ID")
set(GMAIL_CLIENT_SECRET "" CACHE STRING "GMail client secret")
set(INOREADER_CLIENT_ID "" CACHE STRING "Inoreader client ID")
set(INOREADER_CLIENT_SECRET "" CACHE STRING "Inoreader client secret")
2022-01-31 13:11:53 +01:00
# Import Qt libraries.
2022-01-31 09:11:48 +01:00
find_package(QT NAMES Qt6 Qt5 REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS
2022-01-31 10:41:17 +01:00
Core
Gui
LinguistTools
Network
Qml
Sql
Widgets
Xml
2022-01-31 09:11:48 +01:00
)
if(QT_VERSION_MAJOR EQUAL 6)
2022-01-31 10:41:17 +01:00
find_package(Qt6 COMPONENTS Core5Compat REQUIRED)
2022-01-31 09:11:48 +01:00
endif()
if(USE_WEBENGINE)
2022-01-31 10:41:17 +01:00
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS WebEngineWidgets REQUIRED)
add_compile_definitions(USE_WEBENGINE)
2022-01-31 09:11:48 +01:00
endif()
if(NOT OS2)
2022-01-31 10:41:17 +01:00
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Multimedia REQUIRED)
macro(qt_add_resources)
qt_add_big_resources(${ARGN})
endmacro()
2022-01-31 09:11:48 +01:00
endif()
if(UNIX AND NOT APPLE AND NOT ANDROID)
2022-01-31 10:41:17 +01:00
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS DBus REQUIRED)
2022-01-31 09:11:48 +01:00
endif()
2022-01-31 13:11:53 +01:00
# Process oauth service secrets.
2022-01-31 09:11:48 +01:00
if(NOT FEEDLY_CLIENT_ID STREQUAL "" AND NOT FEEDLY_CLIENT_SECRET STREQUAL "")
2022-01-31 10:41:17 +01:00
add_compile_definitions(
FEEDLY_OFFICIAL_SUPPORT
FEEDLY_CLIENT_ID="${FEEDLY_CLIENT_ID}"
FEEDLY_CLIENT_SECRET="${FEEDLY_CLIENT_SECRET}"
)
2022-01-31 09:11:48 +01:00
else()
2022-01-31 11:57:06 +01:00
message(STATUS "Feedly client ID/secret variables are not set. Disabling official support.")
2022-01-31 09:11:48 +01:00
endif()
if(NOT GMAIL_CLIENT_ID STREQUAL "" AND NOT GMAIL_CLIENT_SECRET STREQUAL "")
2022-01-31 10:41:17 +01:00
add_compile_definitions(
GMAIL_OFFICIAL_SUPPORT
GMAIL_CLIENT_ID="${GMAIL_CLIENT_ID}"
GMAIL_CLIENT_SECRET="${GMAIL_CLIENT_SECRET}"
)
2022-01-31 09:11:48 +01:00
else()
2022-01-31 11:57:06 +01:00
message(STATUS "GMail client ID/secret variables are not set. Disabling official support.")
2022-01-31 09:11:48 +01:00
endif()
if(NOT INOREADER_CLIENT_ID STREQUAL "" AND NOT INOREADER_CLIENT_SECRET STREQUAL "")
2022-01-31 10:41:17 +01:00
add_compile_definitions(
INOREADER_OFFICIAL_SUPPORT
INOREADER_CLIENT_ID="${INOREADER_CLIENT_ID}"
INOREADER_CLIENT_SECRET="${INOREADER_CLIENT_SECRET}"
)
2022-01-31 09:11:48 +01:00
else()
2022-01-31 11:57:06 +01:00
message(STATUS "Inoreader client ID/secret variables are not set. Disabling official support.")
2022-01-31 09:11:48 +01:00
endif()
2022-01-31 13:11:53 +01:00
# Load git commit hash.
2022-01-31 09:11:48 +01:00
if(REVISION_FROM_GIT AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
2022-01-31 11:57:06 +01:00
execute_process(COMMAND "git" "rev-parse" "--short" "HEAD"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE APP_REVISION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message(STATUS "Detected git revision: '${APP_REVISION}'.")
2022-01-31 09:11:48 +01:00
else()
2022-01-31 10:41:17 +01:00
set(APP_REVISION "")
2022-01-31 09:11:48 +01:00
endif()
if(NOT USE_WEBENGINE)
2022-01-31 10:41:17 +01:00
set(APP_REVISION "${APP_REVISION}-nowebengine")
2022-01-31 09:11:48 +01:00
endif()
2022-01-31 13:11:53 +01:00
# Pass needed defines.
2022-01-31 09:11:48 +01:00
add_compile_definitions(
2022-01-31 10:41:17 +01:00
APP_AUTHOR="${APP_AUTHOR}"
2022-01-31 11:57:06 +01:00
APP_DONATE_URL="${APP_DONATE_URL}"
APP_EMAIL="${APP_EMAIL}"
2022-01-31 10:41:17 +01:00
APP_LONG_NAME="${APP_NAME} ${CMAKE_PROJECT_VERSION}"
APP_LOW_H_NAME=".${CMAKE_PROJECT_NAME}"
APP_LOW_NAME="${CMAKE_PROJECT_NAME}"
APP_NAME="${APP_NAME}"
APP_REVISION="${APP_REVISON}"
APP_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}"
APP_SYSTEM_VERSION="${CMAKE_SYSTEM_PROCESSOR}"
2022-01-31 11:57:06 +01:00
APP_URL="${APP_URL}"
APP_URL_DOCUMENTATION="${APP_URL_DOCUMENTATION}"
APP_URL_ISSUES="${APP_URL_ISSUES}"
APP_URL_ISSUES_NEW="${APP_URL_ISSUES_NEW}"
2022-01-31 10:41:17 +01:00
APP_USERAGENT="${APP_NAME}/${CMAKE_PROJECT_VERSION}"
APP_VERSION="${CMAKE_PROJECT_VERSION}"
QT_USE_QSTRINGBUILDER
QT_USE_FAST_CONCATENATION
QT_USE_FAST_OPERATOR_PLUS
UNICODE
_UNICODE
2022-01-31 09:11:48 +01:00
)
2022-01-31 13:11:53 +01:00
# Configure and copy some needed files.
2022-01-31 09:11:48 +01:00
if(WIN32)
2022-01-31 10:41:17 +01:00
configure_file(
resources/rssguard.rc.in
${CMAKE_BINARY_DIR}/rssguard.rc
NEWLINE_STYLE WIN32
)
configure_file(
resources/nsis/NSIS.definitions.nsh.in
${CMAKE_BINARY_DIR}/NSIS.definitions.nsh
)
file(COPY resources/nsis/NSIS.template.in DESTINATION ${CMAKE_BINARY_DIR})
file(COPY resources/graphics/${CMAKE_PROJECT_NAME}.ico DESTINATION ${CMAKE_BINARY_DIR})
2022-01-31 09:11:48 +01:00
elseif(APPLE)
2022-01-31 10:41:17 +01:00
configure_file(
resources/macosx/Info.plist.in
${CMAKE_BINARY_DIR}/Info.plist
)
2022-01-31 09:11:48 +01:00
endif()
add_subdirectory(localization)
add_subdirectory(src/librssguard)
add_subdirectory(src/rssguard)