From 41c605ae2a287cd09c33b078a2a95acaf952f7cd Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Mon, 4 Nov 2019 12:23:44 -0500 Subject: [PATCH] Start with basic template for kirigami app using cmake. --- .gitmodules | 9 +++++++ 3rdparty/CMakeLists.txt | 3 +++ 3rdparty/breeze-icons | 1 + 3rdparty/ecm/ECMConfig.cmake | 39 +++++++++++++++++++++++++++++ 3rdparty/ecm/ECMConfigVersion.cmake | 31 +++++++++++++++++++++++ 3rdparty/extra-cmake-modules | 1 + 3rdparty/kirigami | 1 + CMakeLists.txt | 21 ++++++++++++++-- src/CMakeLists.txt | 18 +++++++++++-- src/kirigami-icons.qrc | 15 +++++++++++ 10 files changed, 135 insertions(+), 4 deletions(-) create mode 100644 .gitmodules create mode 100644 3rdparty/CMakeLists.txt create mode 160000 3rdparty/breeze-icons create mode 100644 3rdparty/ecm/ECMConfig.cmake create mode 100644 3rdparty/ecm/ECMConfigVersion.cmake create mode 160000 3rdparty/extra-cmake-modules create mode 160000 3rdparty/kirigami create mode 100644 src/kirigami-icons.qrc diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..89bbe1a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "3rdparty/kirigami"] + path = 3rdparty/kirigami + url = git://anongit.kde.org/kirigami.git +[submodule "3rdparty/breeze-icons"] + path = 3rdparty/breeze-icons + url = git://anongit.kde.org/breeze-icons.git +[submodule "3rdparty/extra-cmake-modules"] + path = 3rdparty/extra-cmake-modules + url = git://anongit.kde.org/extra-cmake-modules.git diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt new file mode 100644 index 0000000..e10afb2 --- /dev/null +++ b/3rdparty/CMakeLists.txt @@ -0,0 +1,3 @@ +set(BUILD_SHARED_LIBS 0) + +add_subdirectory(kirigami) diff --git a/3rdparty/breeze-icons b/3rdparty/breeze-icons new file mode 160000 index 0000000..4a9d61a --- /dev/null +++ b/3rdparty/breeze-icons @@ -0,0 +1 @@ +Subproject commit 4a9d61afe228c51953844e8d260706cd8462a684 diff --git a/3rdparty/ecm/ECMConfig.cmake b/3rdparty/ecm/ECMConfig.cmake new file mode 100644 index 0000000..07271fc --- /dev/null +++ b/3rdparty/ecm/ECMConfig.cmake @@ -0,0 +1,39 @@ + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was ECMConfig.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +set(ECM_FIND_MODULE_DIR "${PACKAGE_PREFIX_DIR}/extra-cmake-modules/find-modules/") + +set(ECM_MODULE_DIR "${PACKAGE_PREFIX_DIR}/extra-cmake-modules/modules/") + +set(ECM_KDE_MODULE_DIR "${PACKAGE_PREFIX_DIR}/extra-cmake-modules/kde-modules/") + +set(ECM_PREFIX "${PACKAGE_PREFIX_DIR}") + +set(ECM_MODULE_PATH "${ECM_MODULE_DIR}" "${ECM_FIND_MODULE_DIR}" "${ECM_KDE_MODULE_DIR}") + +set(ECM_GLOBAL_FIND_VERSION "${ECM_FIND_VERSION}") + +include("${ECM_MODULE_DIR}/ECMUseFindModules.cmake") diff --git a/3rdparty/ecm/ECMConfigVersion.cmake b/3rdparty/ecm/ECMConfigVersion.cmake new file mode 100644 index 0000000..d5fe9ff --- /dev/null +++ b/3rdparty/ecm/ECMConfigVersion.cmake @@ -0,0 +1,31 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "5.63.0") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "") + math(EXPR installedBits " * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/3rdparty/extra-cmake-modules b/3rdparty/extra-cmake-modules new file mode 160000 index 0000000..f3f4893 --- /dev/null +++ b/3rdparty/extra-cmake-modules @@ -0,0 +1 @@ +Subproject commit f3f4893b5bd20a32dd48b147fdd243c3226a06f3 diff --git a/3rdparty/kirigami b/3rdparty/kirigami new file mode 160000 index 0000000..307ab1d --- /dev/null +++ b/3rdparty/kirigami @@ -0,0 +1 @@ +Subproject commit 307ab1db97ba0c571d1650540e72bfd454a841c4 diff --git a/CMakeLists.txt b/CMakeLists.txt index c52d0fb..b8c9688 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,24 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.2) -find_package(Qt5 REQUIRED COMPONENTS Gui Qml) +if (POLICY CMP0063) + cmake_policy(SET CMP0063 NEW) +endif() + +set(ECM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/ecm) +find_package(ECM REQUIRED CONFIG) +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH}) +set(BREEZEICONS_DIR ${CMAKE_SOURCE_DIR}/3rdparty/breeze-icons/) + +find_package(Qt5 5.12 REQUIRED Core Quick Multimedia Test Widgets QuickControls2) + +include(KDEInstallDirs) +include(KDECompilerSettings) +include(KDECMakeSettings) set(CMAKE_AUTOMOC ON) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_EXTENSIONS OFF) + +add_subdirectory(3rdparty) add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7150aeb..800b1ca 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,18 @@ -qt5_add_resources(qiflora_SRCS resources.qrc) +include_directories(${CMAKE_SOURCE_DIR}/3rdparty/kirigami/src) +include(${CMAKE_SOURCE_DIR}/3rdparty/kirigami/KF5Kirigami2Macros.cmake) + +qt5_add_resources(qiflora_SRCS kirigami-icons.qrc resources.qrc) + +if (CMAKE_SYSTEM_NAME STREQUAL "Android") + set(qiflora_EXTRA_LIBS Qt5::AndroidExtras + #FIXME: we shouldn't have to link to it but otherwise the lib won't be packaged on Android + Qt5::QuickControls2) +else () +#qstyle-based qqc2 style needs a QApplication + set(qiflora_EXTRA_LIBS Qt5::Widgets) +endif() + add_executable(qiflora main.cpp ${qiflora_SRCS}) -target_link_libraries(qiflora Qt5::Qml Qt5::Gui) +target_link_libraries(qiflora kirigamiplugin Qt5::Core Qt5::Qml Qt5::Quick Qt5::QuickControls2 ${qiflora_EXTRA_LIBS}) +kirigami_package_breeze_icons(ICONS application-menu document-decrypt folder-sync go-next go-previous go-up handle-left handle-right view-list-icons applications-graphics media-record-symbolic) diff --git a/src/kirigami-icons.qrc b/src/kirigami-icons.qrc new file mode 100644 index 0000000..f8992e1 --- /dev/null +++ b/src/kirigami-icons.qrc @@ -0,0 +1,15 @@ + + + ../3rdparty/breeze-icons/icons/actions/32/application-menu.svg + ../3rdparty/breeze-icons/icons/actions/32/document-decrypt.svg + ../3rdparty/breeze-icons/icons/actions/32/folder-sync.svg + ../3rdparty/breeze-icons/icons/actions/22/go-next.svg + ../3rdparty/breeze-icons/icons/actions/22/go-previous.svg + ../3rdparty/breeze-icons/icons/actions/22/go-up.svg + ../3rdparty/breeze-icons/icons/actions/22/handle-left.svg + ../3rdparty/breeze-icons/icons/actions/22/handle-right.svg + ../3rdparty/breeze-icons/icons/actions/32/view-list-icons.svg + ../3rdparty/breeze-icons/icons/categories/32/applications-graphics.svg + ../3rdparty/breeze-icons/icons/actions/symbolic/media-record-symbolic.svg + + -- GitLab