You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
544 lines
21 KiB
544 lines
21 KiB
cmake_minimum_required(VERSION 3.10)
|
|
|
|
set(APP_VERSION 2.2.1)
|
|
set(APP_ID "io.github.nuttyartist.notes")
|
|
set(APP_AUTHOR "Ruby Mamistvalove")
|
|
set(APP_AUTHOR_EMAIL "ruby.mamistvalove@gmail.com")
|
|
set(APP_WEBSITE "https://www.get-notes.com/")
|
|
set(APP_REPOSITORY "https://github.com/nuttyartist/notes")
|
|
string(TIMESTAMP CURRENT_YEAR "%Y")
|
|
|
|
# Any of the options below can be changed by passing -D<option name>=<value> to CMake.
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET
|
|
"10.15"
|
|
CACHE STRING "Minimum macOS version to target for deployment")
|
|
set(USE_QT_VERSION
|
|
""
|
|
CACHE STRING "Use a specific version of Qt to build the app")
|
|
option(GIT_REVISION
|
|
"Append the current git revision to the app's version string" OFF)
|
|
option(UPDATE_CHECKER
|
|
"Enable or disable both the update checker and auto-updater" ON)
|
|
option(PRO_VERSION "Enable or disable Notes Pro features" ON)
|
|
|
|
project(
|
|
Notes
|
|
VERSION ${APP_VERSION}
|
|
DESCRIPTION "Note-taking app. Write down your thoughts"
|
|
LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_AUTOUIC ON)
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
if(POLICY CMP0083)
|
|
cmake_policy(SET CMP0083 NEW)
|
|
include(CheckPIESupported)
|
|
check_pie_supported()
|
|
endif()
|
|
|
|
if(PRO_VERSION)
|
|
add_definitions(-DPRO_VERSION)
|
|
endif()
|
|
|
|
# List of Qt components required to build the app.
|
|
set(QT_COMPONENTS
|
|
Core
|
|
Concurrent
|
|
Gui
|
|
Network
|
|
Sql
|
|
Test
|
|
Widgets
|
|
Quick)
|
|
|
|
# No Qt version was specified, try to use either Qt 6 (preferred) or Qt 5.
|
|
if(USE_QT_VERSION STREQUAL "")
|
|
# This can probably be simplified once the following bug gets resolved:
|
|
# https://gitlab.kitware.com/cmake/cmake/-/issues/23575
|
|
message(STATUS "Trying to find Qt 6...")
|
|
|
|
find_package(QT NAMES Qt6 QUIET)
|
|
|
|
if(NOT DEFINED QT_VERSION_MAJOR)
|
|
message(STATUS "Could not find Qt 6, will try Qt 5 next...")
|
|
|
|
find_package(QT NAMES Qt5 QUIET)
|
|
|
|
if(NOT DEFINED QT_VERSION_MAJOR)
|
|
message(FATAL_ERROR "Could not find Qt 5, aborting compilation.")
|
|
endif()
|
|
endif()
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS ${QT_COMPONENTS})
|
|
else()
|
|
if(NOT USE_QT_VERSION STREQUAL "5" AND NOT USE_QT_VERSION STREQUAL "6")
|
|
message(
|
|
FATAL_ERROR
|
|
"An unsupported version of Qt was specified: '${USE_QT_VERSION}'. Valid values are: 5 or 6."
|
|
)
|
|
endif()
|
|
message(STATUS "Trying to find Qt ${USE_QT_VERSION} (manually specified)...")
|
|
|
|
find_package(QT NAMES Qt${USE_QT_VERSION} QUIET)
|
|
|
|
if(NOT DEFINED QT_VERSION_MAJOR)
|
|
message(
|
|
FATAL_ERROR "Could not find Qt ${USE_QT_VERSION}, aborting compilation.")
|
|
endif()
|
|
|
|
find_package(Qt${USE_QT_VERSION} REQUIRED COMPONENTS ${QT_COMPONENTS})
|
|
endif()
|
|
|
|
message(STATUS "Success! Configuration details:")
|
|
message(STATUS "App name: ${PROJECT_NAME}")
|
|
message(STATUS "App version: ${PROJECT_VERSION}")
|
|
message(STATUS "Qt version: ${QT_VERSION}")
|
|
message(STATUS "Update checker: ${UPDATE_CHECKER}")
|
|
message(STATUS "Pro Version: ${PRO_VERSION}")
|
|
if(CMAKE_BUILD_TYPE STREQUAL "")
|
|
message(STATUS "Build type: (not set)")
|
|
else()
|
|
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
endif()
|
|
|
|
set(GIT_REV "")
|
|
if(GIT_REVISION)
|
|
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
|
execute_process(
|
|
COMMAND git rev-parse --short HEAD
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
OUTPUT_VARIABLE GIT_REV
|
|
ERROR_VARIABLE GIT_REV_ERR
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
|
|
if(GIT_REV)
|
|
message(STATUS "Git revision: ${GIT_REV}")
|
|
string(PREPEND GIT_REV "+g")
|
|
else()
|
|
message(FATAL_ERROR "Failed to retrieve git revision: ${GIT_REV_ERR}")
|
|
endif()
|
|
else()
|
|
message(
|
|
WARNING
|
|
"The GIT_REVISION option was set, but this is not a git repository.")
|
|
endif()
|
|
endif()
|
|
|
|
set(SOURCES
|
|
${PROJECT_SOURCE_DIR}/src/aboutwindow.cpp
|
|
${PROJECT_SOURCE_DIR}/src/aboutwindow.h
|
|
${PROJECT_SOURCE_DIR}/src/allnotebuttontreedelegateeditor.cpp
|
|
${PROJECT_SOURCE_DIR}/src/allnotebuttontreedelegateeditor.h
|
|
${PROJECT_SOURCE_DIR}/src/customapplicationstyle.cpp
|
|
${PROJECT_SOURCE_DIR}/src/customapplicationstyle.h
|
|
${PROJECT_SOURCE_DIR}/src/customdocument.cpp
|
|
${PROJECT_SOURCE_DIR}/src/customDocument.h
|
|
${PROJECT_SOURCE_DIR}/src/customMarkdownHighlighter.cpp
|
|
${PROJECT_SOURCE_DIR}/src/customMarkdownHighlighter.h
|
|
${PROJECT_SOURCE_DIR}/src/dbmanager.cpp
|
|
${PROJECT_SOURCE_DIR}/src/dbmanager.h
|
|
${PROJECT_SOURCE_DIR}/src/defaultnotefolderdelegateeditor.cpp
|
|
${PROJECT_SOURCE_DIR}/src/defaultnotefolderdelegateeditor.h
|
|
${PROJECT_SOURCE_DIR}/src/editorsettingsoptions.h
|
|
${PROJECT_SOURCE_DIR}/src/editorsettingsoptions.cpp
|
|
${PROJECT_SOURCE_DIR}/src/elidedlabel.cpp
|
|
${PROJECT_SOURCE_DIR}/src/elidedlabel.h
|
|
${PROJECT_SOURCE_DIR}/src/foldertreedelegateeditor.cpp
|
|
${PROJECT_SOURCE_DIR}/src/foldertreedelegateeditor.h
|
|
${PROJECT_SOURCE_DIR}/src/fontloader.cpp
|
|
${PROJECT_SOURCE_DIR}/src/fontloader.h
|
|
${PROJECT_SOURCE_DIR}/src/labeledittype.cpp
|
|
${PROJECT_SOURCE_DIR}/src/labeledittype.h
|
|
${PROJECT_SOURCE_DIR}/src/listviewlogic.cpp
|
|
${PROJECT_SOURCE_DIR}/src/listviewlogic.h
|
|
${PROJECT_SOURCE_DIR}/src/lqtutils_enum.h
|
|
${PROJECT_SOURCE_DIR}/src/main.cpp
|
|
${PROJECT_SOURCE_DIR}/src/mainwindow.cpp
|
|
${PROJECT_SOURCE_DIR}/src/mainwindow.h
|
|
${PROJECT_SOURCE_DIR}/src/nodedata.cpp
|
|
${PROJECT_SOURCE_DIR}/src/nodedata.h
|
|
${PROJECT_SOURCE_DIR}/src/nodepath.cpp
|
|
${PROJECT_SOURCE_DIR}/src/nodepath.h
|
|
${PROJECT_SOURCE_DIR}/src/nodetreedelegate.cpp
|
|
${PROJECT_SOURCE_DIR}/src/nodetreedelegate.h
|
|
${PROJECT_SOURCE_DIR}/src/nodetreemodel.cpp
|
|
${PROJECT_SOURCE_DIR}/src/nodetreemodel.h
|
|
${PROJECT_SOURCE_DIR}/src/nodetreeview.cpp
|
|
${PROJECT_SOURCE_DIR}/src/nodetreeview.h
|
|
${PROJECT_SOURCE_DIR}/src/nodetreeview_p.h
|
|
${PROJECT_SOURCE_DIR}/src/noteeditorlogic.cpp
|
|
${PROJECT_SOURCE_DIR}/src/noteeditorlogic.h
|
|
${PROJECT_SOURCE_DIR}/src/notelistdelegate.cpp
|
|
${PROJECT_SOURCE_DIR}/src/notelistdelegateeditor.cpp
|
|
${PROJECT_SOURCE_DIR}/src/notelistdelegateeditor.h
|
|
${PROJECT_SOURCE_DIR}/src/notelistdelegate.h
|
|
${PROJECT_SOURCE_DIR}/src/notelistmodel.cpp
|
|
${PROJECT_SOURCE_DIR}/src/notelistmodel.h
|
|
${PROJECT_SOURCE_DIR}/src/notelistview.cpp
|
|
${PROJECT_SOURCE_DIR}/src/notelistview.h
|
|
${PROJECT_SOURCE_DIR}/src/notelistview_p.h
|
|
${PROJECT_SOURCE_DIR}/src/pushbuttontype.cpp
|
|
${PROJECT_SOURCE_DIR}/src/pushbuttontype.h
|
|
${PROJECT_SOURCE_DIR}/src/singleinstance.cpp
|
|
${PROJECT_SOURCE_DIR}/src/singleinstance.h
|
|
${PROJECT_SOURCE_DIR}/src/splitterstyle.cpp
|
|
${PROJECT_SOURCE_DIR}/src/splitterstyle.h
|
|
${PROJECT_SOURCE_DIR}/src/tagdata.cpp
|
|
${PROJECT_SOURCE_DIR}/src/tagdata.h
|
|
${PROJECT_SOURCE_DIR}/src/taglistdelegate.cpp
|
|
${PROJECT_SOURCE_DIR}/src/taglistdelegate.h
|
|
${PROJECT_SOURCE_DIR}/src/taglistmodel.cpp
|
|
${PROJECT_SOURCE_DIR}/src/taglistmodel.h
|
|
${PROJECT_SOURCE_DIR}/src/taglistview.cpp
|
|
${PROJECT_SOURCE_DIR}/src/taglistview.h
|
|
${PROJECT_SOURCE_DIR}/src/tagpool.cpp
|
|
${PROJECT_SOURCE_DIR}/src/tagpool.h
|
|
${PROJECT_SOURCE_DIR}/src/tagtreedelegateeditor.cpp
|
|
${PROJECT_SOURCE_DIR}/src/tagtreedelegateeditor.h
|
|
${PROJECT_SOURCE_DIR}/src/trashbuttondelegateeditor.cpp
|
|
${PROJECT_SOURCE_DIR}/src/trashbuttondelegateeditor.h
|
|
${PROJECT_SOURCE_DIR}/src/treeviewlogic.cpp
|
|
${PROJECT_SOURCE_DIR}/src/treeviewlogic.h
|
|
# ui
|
|
${PROJECT_SOURCE_DIR}/src/aboutwindow.ui
|
|
${PROJECT_SOURCE_DIR}/src/mainwindow.ui
|
|
# qrc files
|
|
${PROJECT_SOURCE_DIR}/src/fonts.qrc
|
|
${PROJECT_SOURCE_DIR}/src/images.qrc
|
|
${PROJECT_SOURCE_DIR}/src/styles.qrc)
|
|
|
|
if(QT_VERSION VERSION_LESS 6.0)
|
|
list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/src/qml.qrc)
|
|
endif()
|
|
|
|
# Third-party source files.
|
|
set(SOURCES_3RD_PARTY
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qautostart/src/qautostart.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qautostart/src/qautostart.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/linenumberarea.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/markdownhighlighter.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/markdownhighlighter.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/qmarkdowntextedit.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/qmarkdowntextedit.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/qownlanguagedata.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/qownlanguagedata.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/qplaintexteditsearchwidget.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit/qplaintexteditsearchwidget.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt/qxtglobal.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt/qxtglobal.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt/qxtglobalshortcut.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt/qxtglobalshortcut.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt/qxtglobalshortcut_p.h)
|
|
|
|
if(UPDATE_CHECKER)
|
|
list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/src/updaterwindow.cpp
|
|
${PROJECT_SOURCE_DIR}/src/updaterwindow.h
|
|
${PROJECT_SOURCE_DIR}/src/updaterwindow.ui)
|
|
|
|
list(
|
|
APPEND
|
|
SOURCES_3RD_PARTY
|
|
${PROJECT_SOURCE_DIR}/3rdParty/QSimpleUpdater/include/QSimpleUpdater.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/QSimpleUpdater/src/Downloader.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/QSimpleUpdater/src/Downloader.h
|
|
${PROJECT_SOURCE_DIR}/3rdParty/QSimpleUpdater/src/QSimpleUpdater.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/QSimpleUpdater/src/Updater.cpp
|
|
${PROJECT_SOURCE_DIR}/3rdParty/QSimpleUpdater/src/Updater.h)
|
|
endif()
|
|
|
|
if(APPLE)
|
|
list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/src/framelesswindow.mm
|
|
${PROJECT_SOURCE_DIR}/src/framelesswindow.h
|
|
${PROJECT_SOURCE_DIR}/src/images/notes_icon.icns)
|
|
|
|
list(APPEND SOURCES_3RD_PARTY
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt/qxtglobalshortcut_mac.cpp)
|
|
elseif(UNIX)
|
|
list(APPEND SOURCES_3RD_PARTY
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt/qxtglobalshortcut_x11.cpp)
|
|
elseif(WIN32)
|
|
list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/src/framelesswindow.cpp
|
|
${PROJECT_SOURCE_DIR}/src/framelesswindow.h
|
|
${PROJECT_SOURCE_DIR}/src/images/notes.rc)
|
|
|
|
list(APPEND SOURCES_3RD_PARTY
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt/qxtglobalshortcut_win.cpp)
|
|
endif()
|
|
|
|
add_executable(${PROJECT_NAME} WIN32 MACOSX_BUNDLE ${SOURCES}
|
|
${SOURCES_3RD_PARTY})
|
|
|
|
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/src)
|
|
|
|
# Include third-party headers as 'system' files, in order to silence compiler warnings on them.
|
|
target_include_directories(
|
|
${PROJECT_NAME} SYSTEM
|
|
PUBLIC ${PROJECT_SOURCE_DIR}/3rdParty/qautostart/src
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qmarkdowntextedit
|
|
${PROJECT_SOURCE_DIR}/3rdParty/qxt)
|
|
|
|
if(UPDATE_CHECKER)
|
|
target_include_directories(
|
|
${PROJECT_NAME} SYSTEM
|
|
PUBLIC ${PROJECT_SOURCE_DIR}/3rdParty/QSimpleUpdater/include)
|
|
|
|
add_definitions(-DUPDATE_CHECKER)
|
|
endif()
|
|
|
|
target_compile_definitions(
|
|
${PROJECT_NAME}
|
|
PUBLIC APP_VERSION="${PROJECT_VERSION}${GIT_REV}" APP_ID="${APP_ID}"
|
|
QT_DISABLE_DEPRECATED_BEFORE=0x050900 QSU_INCLUDE_MOC=1)
|
|
|
|
# Enable useful compiler warnings (except on third-party code).
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES
|
|
"Clang")
|
|
target_compile_options(${PROJECT_NAME} PUBLIC -Wall -Wextra -Wpedantic
|
|
-Wshadow)
|
|
set_source_files_properties(${SOURCES_3RD_PARTY} PROPERTIES COMPILE_FLAGS -w)
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND MSVC_VERSION GREATER_EQUAL
|
|
1920)
|
|
target_compile_options(${PROJECT_NAME} PUBLIC /W4)
|
|
set_source_files_properties(${SOURCES_3RD_PARTY} PROPERTIES COMPILE_FLAGS /w)
|
|
endif()
|
|
|
|
if(QT_VERSION VERSION_GREATER_EQUAL 6.2)
|
|
set(QML_FILES
|
|
src/qml/CheckBoxMaterial.qml
|
|
src/qml/CustomHorizontalScrollBar.qml
|
|
src/qml/CustomTextArea.qml
|
|
src/qml/CustomTextField.qml
|
|
src/qml/CustomVerticalScrollBar.qml
|
|
src/qml/EditorSettings.qml
|
|
src/qml/FontChooserButton.qml
|
|
src/qml/FontIconLoader.qml
|
|
src/qml/FontIconsCodes.qml
|
|
src/qml/IconButton.qml
|
|
src/qml/OptionItemButton.qml
|
|
src/qml/SubscriptionWindow.qml
|
|
src/qml/SwitchButton.qml
|
|
src/qml/TextButton.qml
|
|
src/qml/ThemeChooserButton.qml
|
|
src/qml/TodoColumnDelegate.qml
|
|
src/qml/TodoTaskDelegate.qml
|
|
src/qml/Utilities.js
|
|
src/qml/ViewChooserButton.qml
|
|
src/qml/kanbanMain.qml)
|
|
|
|
foreach(file IN LISTS QML_FILES)
|
|
get_filename_component(fileName ${file} NAME)
|
|
set_source_files_properties(${file} PROPERTIES QT_RESOURCE_ALIAS
|
|
${fileName})
|
|
|
|
# This whole shenanigans is required to silence compiler warnings on files auto-generated by rcc.
|
|
# It isn't pretty, but unfortunately there's no nicer way to do this yet:
|
|
# https://discourse.cmake.org/t/qt-autogen-source-files-custom-compilation-flags/3002
|
|
string(REPLACE "." "_" file_qml_cpp ${fileName})
|
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES
|
|
"Clang")
|
|
set_source_files_properties(
|
|
${CMAKE_CURRENT_BINARY_DIR}/.rcc/qmlcache/${PROJECT_NAME}_src/qml/${file_qml_cpp}.cpp
|
|
PROPERTIES COMPILE_FLAGS -w)
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND MSVC_VERSION GREATER_EQUAL
|
|
1920)
|
|
set_source_files_properties(
|
|
${CMAKE_CURRENT_BINARY_DIR}/.rcc/qmlcache/${PROJECT_NAME}_src/qml/${file_qml_cpp}.cpp
|
|
PROPERTIES COMPILE_FLAGS /w)
|
|
endif()
|
|
endforeach()
|
|
|
|
# Silence an extra warning given by Clang:
|
|
# build/.rcc/qmlcache/Notes_qmlcache_loader.cpp#L46
|
|
# must specify at least one argument for '...' parameter of variadic macro [-Wgnu-zero-variadic-macro-arguments]
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
set_source_files_properties(
|
|
${CMAKE_CURRENT_BINARY_DIR}/.rcc/qmlcache/${PROJECT_NAME}_qmlcache_loader.cpp
|
|
PROPERTIES COMPILE_FLAGS -w)
|
|
endif()
|
|
|
|
qt_add_qml_module(
|
|
${PROJECT_NAME}
|
|
URI
|
|
${APP_ID}
|
|
VERSION
|
|
${PROJECT_VERSION}
|
|
NO_PLUGIN
|
|
RESOURCE_PREFIX
|
|
"/qt/qml"
|
|
QML_FILES
|
|
${QML_FILES}
|
|
NO_RESOURCE_TARGET_PATH)
|
|
endif()
|
|
|
|
target_link_libraries(
|
|
${PROJECT_NAME}
|
|
PUBLIC Qt${QT_VERSION_MAJOR}::Concurrent
|
|
Qt${QT_VERSION_MAJOR}::Core
|
|
Qt${QT_VERSION_MAJOR}::CorePrivate
|
|
Qt${QT_VERSION_MAJOR}::Gui
|
|
Qt${QT_VERSION_MAJOR}::GuiPrivate
|
|
Qt${QT_VERSION_MAJOR}::Network
|
|
Qt${QT_VERSION_MAJOR}::Sql
|
|
Qt${QT_VERSION_MAJOR}::Widgets
|
|
Qt${QT_VERSION_MAJOR}::WidgetsPrivate
|
|
Qt${QT_VERSION_MAJOR}::Quick)
|
|
|
|
if(APPLE)
|
|
set(COPYRIGHT_TEXT
|
|
"Copyright (c) 2015-${CURRENT_YEAR} ${APP_AUTHOR} and contributors.")
|
|
|
|
set_target_properties(
|
|
${PROJECT_NAME}
|
|
PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}
|
|
MACOSX_BUNDLE_GUI_IDENTIFIER ${APP_ID}
|
|
MACOSX_BUNDLE_ICON_FILE "notes_icon.icns"
|
|
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
|
|
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION}
|
|
MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION}
|
|
MACOSX_BUNDLE_COPYRIGHT ${COPYRIGHT_TEXT}
|
|
MACOSX_BUNDLE_INFO_STRING ${COPYRIGHT_TEXT})
|
|
|
|
set_source_files_properties(${PROJECT_SOURCE_DIR}/src/images/notes_icon.icns
|
|
PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
|
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC "-framework Carbon"
|
|
"-framework Cocoa")
|
|
elseif(UNIX)
|
|
# On Linux, it's conventional for executables to be all lowercase.
|
|
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWERCASE)
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME
|
|
${PROJECT_NAME_LOWERCASE})
|
|
|
|
find_package(X11 REQUIRED)
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC ${X11_LIBRARIES})
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
configure_file(${PROJECT_SOURCE_DIR}/packaging/linux/common/notes.desktop.in
|
|
${CMAKE_BINARY_DIR}/${APP_ID}.desktop)
|
|
install(FILES ${CMAKE_BINARY_DIR}/${APP_ID}.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
|
|
|
|
configure_file(
|
|
${PROJECT_SOURCE_DIR}/packaging/linux/common/notes.appdata.xml.in
|
|
${CMAKE_BINARY_DIR}/${APP_ID}.metainfo.xml)
|
|
install(FILES ${CMAKE_BINARY_DIR}/${APP_ID}.metainfo.xml
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo)
|
|
|
|
foreach(ICON_SIZE 128 256 512)
|
|
install(
|
|
FILES
|
|
${PROJECT_SOURCE_DIR}/packaging/linux/common/icons/${ICON_SIZE}x${ICON_SIZE}/notes.png
|
|
DESTINATION
|
|
${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${ICON_SIZE}x${ICON_SIZE}/apps
|
|
RENAME ${APP_ID}.png)
|
|
endforeach()
|
|
|
|
install(
|
|
FILES ${PROJECT_SOURCE_DIR}/LICENSE
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME_LOWERCASE})
|
|
|
|
# On Debian-based distros, compress the changelog file and install the copyright file.
|
|
# FIXME: Find out if it's possible to only do this when creating a deb package with CPack.
|
|
if(EXISTS /etc/debian_version)
|
|
string(TIMESTAMP DATE_NOW_UTC "%a, %d %b %Y %H:%M:%S +0000")
|
|
|
|
configure_file(${PROJECT_SOURCE_DIR}/packaging/linux/debian/changelog.in
|
|
${CMAKE_BINARY_DIR}/changelog.Debian)
|
|
|
|
add_custom_command(
|
|
COMMAND gzip ARGS -9 -c -f -k -n ${CMAKE_BINARY_DIR}/changelog.Debian >
|
|
${CMAKE_BINARY_DIR}/changelog.gz
|
|
OUTPUT ${CMAKE_BINARY_DIR}/changelog.gz)
|
|
|
|
add_custom_target(changelog ALL DEPENDS ${CMAKE_BINARY_DIR}/changelog.gz)
|
|
|
|
install(
|
|
FILES ${CMAKE_BINARY_DIR}/changelog.gz
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWERCASE})
|
|
|
|
configure_file(${PROJECT_SOURCE_DIR}/packaging/linux/debian/copyright.in
|
|
${CMAKE_BINARY_DIR}/copyright)
|
|
|
|
install(
|
|
FILES ${CMAKE_BINARY_DIR}/copyright
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWERCASE})
|
|
endif()
|
|
|
|
set(CPACK_PACKAGE_NAME ${PROJECT_NAME_LOWERCASE})
|
|
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}${GIT_REV})
|
|
set(CPACK_PACKAGE_VENDOR ${APP_AUTHOR})
|
|
set(CPACK_PACKAGE_CONTACT "${APP_AUTHOR} <${APP_AUTHOR_EMAIL}>")
|
|
set(CPACK_STRIP_FILES TRUE)
|
|
|
|
# Package description.
|
|
# Please keep the character count for every line at 80 (max) - it's a lintian rule.
|
|
string(CONCAT CPACK_PACKAGE_DESCRIPTION
|
|
"Note-taking app that is both beautiful and powerful.\n"
|
|
" It is written in C++ using the Qt framework.")
|
|
|
|
# Workaround for older CMake versions, where CPACK_PACKAGE_DESCRIPTION didn't exist.
|
|
if(CMAKE_VERSION VERSION_LESS 3.12)
|
|
string(CONCAT CPACK_DEBIAN_PACKAGE_DESCRIPTION "${PROJECT_DESCRIPTION}\n"
|
|
" ${CPACK_PACKAGE_DESCRIPTION}")
|
|
endif()
|
|
|
|
# deb-specific
|
|
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
|
|
if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "qt6-qpa-plugins")
|
|
if(QT_VERSION_MINOR VERSION_GREATER_EQUAL 2)
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS
|
|
"${CPACK_DEBIAN_PACKAGE_DEPENDS}, qml6-module-qtqml-workerscript, qml6-module-qtquick-controls, qml6-module-qtquick-layouts, qml6-module-qtquick-particles, qml6-module-qtquick-templates, qml6-module-qtquick-window"
|
|
)
|
|
endif()
|
|
elseif(QT_VERSION_MAJOR VERSION_EQUAL 5)
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS
|
|
"qml-module-qtquick2, qml-module-qtquick-controls2, qml-module-qtquick-window2"
|
|
)
|
|
endif()
|
|
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
|
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${APP_WEBSITE})
|
|
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
|
|
|
|
# rpm-specific
|
|
set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
|
|
if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
|
|
if(UNIX
|
|
AND NOT APPLE
|
|
AND EXISTS /etc/os-release)
|
|
file(READ /etc/os-release DISTRO_INFO)
|
|
if(DISTRO_INFO MATCHES "SUSE")
|
|
# Note: Different from Fedora 36, the SQLite library we need is not a dependency
|
|
# of the base Qt 6 package on openSUSE Leap 15.4, so we have to manually include it here.
|
|
set(CPACK_RPM_PACKAGE_REQUIRES "qt6-sql-sqlite")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
set(CPACK_RPM_PACKAGE_LICENSE MPL-2.0)
|
|
set(CPACK_RPM_PACKAGE_URL ${APP_WEBSITE})
|
|
set(CPACK_RPM_PACKAGE_GROUP Applications/Text)
|
|
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/share/icons)
|
|
# Remove any leading whitespace character from the description text we added for the deb package.
|
|
string(REGEX REPLACE "\n +" "\n" CPACK_RPM_PACKAGE_DESCRIPTION
|
|
${CPACK_PACKAGE_DESCRIPTION})
|
|
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/share/icons)
|
|
|
|
include(CPack)
|
|
elseif(WIN32)
|
|
target_compile_definitions(${PROJECT_NAME} PUBLIC QXT_STATIC)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC user32)
|
|
endif()
|
|
|
|
install(
|
|
TARGETS ${PROJECT_NAME}
|
|
RUNTIME DESTINATION bin
|
|
BUNDLE DESTINATION bin
|
|
LIBRARY DESTINATION lib)
|