Warning, /graphics/glaxnimate/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0002 # SPDX-License-Identifier: BSD-2-Clause
0003
0004 cmake_minimum_required (VERSION 3.16 FATAL_ERROR)
0005 # cmake_policy(SET CMP0076 NEW)
0006 cmake_policy(SET CMP0077 NEW)
0007
0008
0009 project(Glaxnimate VERSION 0.5.5 LANGUAGES CXX)
0010 include(FeatureSummary)
0011
0012 set(PROJECT_SLUG "glaxnimate")
0013 set(LIB_NAME_CORE "${PROJECT_SLUG}_core")
0014 set(LIB_NAME_GUI "${PROJECT_SLUG}_gui")
0015 set(LIB_NAME_PYTHON "${PROJECT_SLUG}_python_lib")
0016 set(LIB_NAME_DESKTOP "${PROJECT_SLUG}_desktop")
0017 set(DATA_INSTALL "share/${PROJECT_SLUG}/${PROJECT_SLUG}")
0018 set(PROJECT_ID "org.mattbas.Glaxnimate")
0019
0020 set(PROJECT_HOMEPAGE_URL "https://glaxnimate.mattbas.org/")
0021 set(URL_DOCS "https://glaxnimate.mattbas.org/")
0022 set(URL_ISSUES "https://gitlab.com/mattbas/glaxnimate/-/issues")
0023 set(URL_DONATE "https://glaxnimate.mattbas.org/donate/")
0024
0025 # You can use it to change the url used by `make docs`
0026 set(DOCS_SITE_URL ${URL_DOCS} CACHE STRING "")
0027 set(DOCS_REPO_URL "https://gitlab.com/mattbas/glaxnimate")
0028 set(DOCS_CHAT_URL "https://t.me/Glaxnimate")
0029
0030 set(PROJECT_DESCRIPTION "Simple vector animation program")
0031 set(PROJECT_MANINTAINER_NAME "Mattia Basaglia")
0032 set(PROJECT_MANINTAINER_EMAIL "glanimate@mattbas.org")
0033 set(PROJECT_MANINTAINER "${PROJECT_MANINTAINER_NAME} <${PROJECT_MANINTAINER_EMAIL}>")
0034
0035 option(MOBILE_UI "Build the mobile user interface" OFF)
0036
0037 add_definitions(-DTRANSLATION_DOMAIN=\"glaxnimate\")
0038
0039 if (ANDROID)
0040 set(MOBILE_UI ON)
0041 endif()
0042
0043 if(MOBILE_UI)
0044 message(STATUS "Using mobile UI")
0045 add_compile_definitions(MOBILE_UI)
0046 else()
0047 message(STATUS "Using desktop UI")
0048 endif()
0049
0050 # CMake modules
0051 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
0052 include(misc)
0053
0054 # C++
0055 set(CMAKE_CXX_STANDARD 17)
0056 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0057
0058 # Git
0059 set(VERSION_NAKED ${PROJECT_VERSION})
0060 set(VERSION_SUFFIX "-git-" CACHE STRING "")
0061
0062 if (VERSION_SUFFIX STREQUAL "-git-" AND EXISTS ${CMAKE_SOURCE_DIR}/.git)
0063 # Probably a Git workspace; determine the revision.
0064 find_package(Git QUIET)
0065 if(GIT_FOUND)
0066 exec_program(${GIT_EXECUTABLE} ${CMAKE_SOURCE_DIR}
0067 ARGS "log -n 1 --pretty=format:\"%h\""
0068 OUTPUT_VARIABLE GIT_REVISION)
0069 message(STATUS "Git revision: ${GIT_REVISION}")
0070 set(PROJECT_VERSION "${PROJECT_VERSION}-git-${GIT_REVISION}")
0071 else()
0072 message(STATUS "Git revision could not be determined")
0073 endif()
0074 elseif(VERSION_SUFFIX MATCHES "^\\..*")
0075 set(PROJECT_VERSION "${PROJECT_VERSION}${VERSION_SUFFIX}")
0076 elseif(NOT VERSION_SUFFIX STREQUAL "")
0077 set(PROJECT_VERSION "${PROJECT_VERSION}+${VERSION_SUFFIX}")
0078 endif()
0079
0080 message(STATUS "Building ${PROJECT_NAME} ${PROJECT_VERSION}")
0081
0082 # Snapcraft stuff here because we don't care if cmake fails on CI
0083 configure_file(
0084 "${CMAKE_CURRENT_SOURCE_DIR}/deploy/snapcraft.in.yaml"
0085 "${CMAKE_CURRENT_BINARY_DIR}/snapcraft.yaml"
0086 )
0087 option(SNAP_IS_SUCH_A_PAIN "" OFF)
0088 if ( SNAP_IS_SUCH_A_PAIN )
0089 return()
0090 endif()
0091
0092 # Fucking Windows being shit
0093 if ( WIN32 AND MinGW )
0094 # Without this shit it gives a bunch of errors like this:
0095 # * referenced in section `.rdata' of * defined in discarded section `.gnu.linkonce.*`
0096 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-lto")
0097 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-lto")
0098 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-lto")
0099 set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE)
0100 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
0101 set(CMAKE_ENABLE_EXPORTS TRUE)
0102 endif()
0103
0104
0105 # Python
0106 if ( NOT ANDROID )
0107 set(PYTHON_SCRIPTING_ENABLED ON)
0108 else()
0109 set(PYTHON_SCRIPTING_ENABLED OFF)
0110 endif()
0111
0112 if ( PYTHON_SCRIPTING_ENABLED )
0113 find_program(PYTHON_PIP pip3)
0114 if(NOT PYTHON_PIP)
0115 find_program(PYTHON_PIP pip)
0116 endif()
0117
0118 find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
0119 message(STATUS ${Python3_EXECUTABLE})
0120 else()
0121 message(STATUS "Python Disabled")
0122 endif()
0123
0124 # QT_MAJOR_VERSION is the common name in KDE apps and infrastructure.
0125 # However some third-party submodules use QT_VERSION_MAJOR so we need to set that too.
0126 if (NOT DEFINED QT_MAJOR_VERSION)
0127 set(QT_MAJOR_VERSION 5)
0128 endif()
0129 set(QT_VERSION_MAJOR ${QT_MAJOR_VERSION})
0130
0131 # Qt
0132 find_package(Qt${QT_MAJOR_VERSION} COMPONENTS Core Widgets Xml UiTools Concurrent Network Svg REQUIRED)
0133 message(STATUS "Using Qt ${QT_MAJOR_VERSION}")
0134
0135 # KF
0136 set(KF_DEP_VERSION "5.92.0")
0137 find_package(ECM ${KF_DEP_VERSION} REQUIRED CONFIG)
0138 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH})
0139 include(KDEInstallDirs)
0140 include(KDECMakeSettings)
0141 include(KDECompilerSettings)
0142
0143 # TODO: The following definitons should be enabled
0144 remove_definitions(
0145 -DQT_NO_CAST_FROM_ASCII
0146 )
0147
0148 if (NOT DEFINED KF_MAJOR)
0149 set(KF_MAJOR ${QT_MAJOR_VERSION})
0150 endif()
0151
0152 if (KF_MAJOR STREQUAL "6")
0153 set(KF_DEP_VERSION "5.240.0")
0154 endif()
0155
0156 find_package(KF${KF_MAJOR} ${KF_DEP_VERSION}
0157 REQUIRED COMPONENTS
0158 I18n
0159 CoreAddons
0160 WidgetsAddons
0161 XmlGui
0162 Archive
0163 Completion
0164 IconThemes
0165 )
0166 if ( NOT ANDROID )
0167 find_package(KF${KF_MAJOR} ${KF_DEP_VERSION}
0168 REQUIRED COMPONENTS
0169 Crash
0170 )
0171 endif()
0172
0173
0174 set(CMAKE_AUTOMOC ON)
0175 set(CMAKE_AUTOUIC ON)
0176 set(CMAKE_AUTORCC ON)
0177 set(CMAKE_INCLUDE_CURRENT_DIR ON)
0178
0179 # Potrace
0180 option(GLAXNIMATE_SYSTEM_POTRACE "Use the system potrace libarary" ON)
0181 if (NOT GLAXNIMATE_SYSTEM_POTRACE)
0182 message(STATUS "Using bundled potrace")
0183 set(CMAKE_C_COMPILE_OBJECT ${CMAKE_CXX_COMPILE_OBJECT})
0184 add_subdirectory(external/potrace/)
0185 set(Potrace_LIBRARIES potrace)
0186 include_directories(external/potrace/src/)
0187 else()
0188 find_package(Potrace REQUIRED)
0189 endif()
0190
0191 # Debug flags
0192 if(CMAKE_BUILD_TYPE STREQUAL "")
0193 set(CMAKE_BUILD_TYPE "Debug")
0194 endif()
0195 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -pedantic -Wextra")
0196 message(STATUS "${CMAKE_BUILD_TYPE} build")
0197
0198 # sub projects and stuff
0199
0200 SET(BUILD_STATIC_LIBS ON CACHE BOOL "")
0201 SET(BUILD_SHARED_LIBS OFF CACHE BOOL "")
0202 add_definitions(-DQTCOLORWIDGETS_STATICALLY_LINKED)
0203
0204 add_subdirectory(external/QtAppSetup)
0205
0206 add_subdirectory(src bin)
0207
0208 set(QTCOLORWIDGETS_DESIGNER_PLUGIN ON)
0209 add_subdirectory(external/Qt-Color-Widgets EXCLUDE_FROM_ALL)
0210
0211 set(ALL_SOURCE_DIRECTORIES src)
0212 find_sources(ALL_SOURCES *.cpp *.hpp)
0213
0214 add_subdirectory(data ${DATA_INSTALL})
0215
0216 if(BUILD_TESTING)
0217 find_package(Qt${QT_MAJOR_VERSION}Test REQUIRED)
0218 message(STATUS "Tests enabled")
0219 add_subdirectory(test)
0220 endif()
0221
0222 add_subdirectory(docs)
0223
0224 # Doxygen
0225
0226 set(DOXYGEN_FOUND ON)
0227 find_package(Doxygen QUIET)
0228 if(DOXYGEN_FOUND)
0229 create_doxygen_target(doxygen)
0230 endif(DOXYGEN_FOUND)
0231
0232 # Release
0233
0234 add_custom_target(
0235 release_0
0236 COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/deploy/release_0.sh ${CMAKE_CURRENT_BINARY_DIR}/CMakeCache.txt
0237 )
0238 add_custom_target(
0239 release_1
0240 COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/deploy/release_1.sh ${CMAKE_CURRENT_BINARY_DIR}/CMakeCache.txt
0241 )
0242 add_custom_target(
0243 release_check
0244 COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/deploy/release_check.py ${VERSION_NAKED}
0245 )
0246
0247 # Misc files
0248 if (ANDROID)
0249 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/android/android/version.gradle.in ${CMAKE_BINARY_DIR}/version.gradle)
0250 endif()
0251 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/deploy/org.mattbas.Glaxnimate.metainfo.xml DESTINATION share/metainfo)
0252
0253 ki18n_install(po)
0254 file(CREATE_LINK ${CMAKE_CURRENT_BINARY_DIR}/locale ${CMAKE_CURRENT_BINARY_DIR}/share/locale SYMBOLIC)
0255
0256 # Packaging
0257 # -- see https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators
0258 set(CPACK_PACKAGE_CONTACT ${PROJECT_MANINTAINER})
0259 set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
0260 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION})
0261
0262 execute_process(COMMAND dpkg-architecture -qDEB_BUILD_ARCH OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
0263 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5xml5 (>= 5.10.0), libqt5widgets5 (>= 5.10.0), libpython3.10 (>= 3.10.0), zlib1g (>= 1:1.2.11), libpotrace0 (>= 1.16-2), libavformat58, libswscale5, qt5-image-formats-plugins, libarchive13")
0264 set(CPACK_DEBIAN_PACKAGE_SECTION "graphics")
0265 set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PROJECT_HOMEPAGE_URL})
0266
0267 set(CPACK_BUNDLE_NAME ${PROJECT_NAME})
0268 configure_file(
0269 "${CMAKE_CURRENT_SOURCE_DIR}/deploy/bundle.xml.plist"
0270 "${CMAKE_CURRENT_BINARY_DIR}/bundle.xml.plist"
0271 )
0272 set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/bundle.xml.plist")
0273 set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_BINARY_DIR}/glaxnimate.icns")
0274
0275 include(CPack)
0276
0277 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)