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)