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)