Mercurial > minori
diff CMakeLists.txt @ 343:1faa72660932
*: transfer back to cmake from autotools
autotools just made lots of things more complicated than
they should have and many things broke (i.e. translations)
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Thu, 20 Jun 2024 05:56:06 -0400 |
parents | |
children | d085c05247bd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CMakeLists.txt Thu Jun 20 05:56:06 2024 -0400 @@ -0,0 +1,259 @@ +cmake_minimum_required(VERSION 3.18) +project(minori LANGUAGES CXX VERSION 0.1.0) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}") + +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) +option(USE_QT6 "Force build with Qt 6" OFF) +option(USE_QT5 "Force build with Qt 5" OFF) +option(UPDATE_TRANSLATIONS "Update *.ts translation files" OFF) + +add_subdirectory(dep/animone) +add_subdirectory(dep/anitomy) +add_subdirectory(dep/pugixml) +add_subdirectory(dep/utf8proc) +add_subdirectory(dep/fmt) + +# Fix for mingw64 +list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a") + +if(USE_QT6 AND USE_QT5) + message(FATAL_ERROR "Can't build with Qt 5 and Qt 6 at the same time...") +elseif(USE_QT6) + set(QT_VERSION_MAJOR 6) +elseif(USE_QT5) + set(QT_VERSION_MAJOR 5) +else() + find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) +endif() + +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools) + +find_package(CURL REQUIRED) + +set(LIBRARIES + ${CURL_LIBRARIES} + ${Qt${QT_VERSION_MAJOR}Widgets_LIBRARIES} + anitomy + animia + pugixml + utf8proc + fmt +) + +set(QT_MOC_FILES + include/core/http.h + include/core/session.h + include/gui/dialog/about.h + include/gui/dialog/licenses.h + include/gui/dialog/information.h + include/gui/dialog/settings.h + include/gui/pages/anime_list.h + include/gui/pages/history.h + include/gui/pages/now_playing.h + include/gui/pages/search.h + include/gui/pages/seasons.h + include/gui/pages/statistics.h + include/gui/pages/torrents.h + include/gui/translate/anilist.h + include/gui/translate/anime.h + include/gui/translate/config.h + include/gui/widgets/anime_button.h + include/gui/widgets/anime_info.h + include/gui/widgets/clickable_label.h + include/gui/widgets/drop_list_widget.h + include/gui/widgets/graph.h + include/gui/widgets/optional_date.h + include/gui/widgets/poster.h + include/gui/widgets/sidebar.h + include/gui/widgets/text.h + include/gui/widgets/elided_label.h + include/gui/locale.h + include/gui/theme.h + include/gui/window.h +) + +set(SRC_FILES + # Main entrypoint + src/main.cc + + # Core files and datatype declarations... + src/core/anime.cc + src/core/anime_db.cc + src/core/anime_season.cc + src/core/config.cc + src/core/date.cc + src/core/filesystem.cc + src/core/http.cc + src/core/json.cc + src/core/session.cc + src/core/strings.cc + src/core/time.cc + + # Main window + src/gui/window.cc + src/gui/theme.cc + src/gui/locale.cc + + # Main window pages + src/gui/pages/anime_list.cc + src/gui/pages/now_playing.cc + src/gui/pages/statistics.cc + src/gui/pages/search.cc + src/gui/pages/seasons.cc + src/gui/pages/torrents.cc + src/gui/pages/history.cc + + # Custom widgets + src/gui/widgets/anime_button.cc + src/gui/widgets/anime_info.cc + src/gui/widgets/clickable_label.cc + src/gui/widgets/drop_list_widget.cc + src/gui/widgets/elided_label.cc + src/gui/widgets/poster.cc + src/gui/widgets/sidebar.cc + src/gui/widgets/text.cc + src/gui/widgets/optional_date.cc + + # Dialogs + src/gui/dialog/about.cc + src/gui/dialog/licenses.cc + src/gui/dialog/information.cc + src/gui/dialog/settings.cc + src/gui/dialog/settings/application.cc + src/gui/dialog/settings/services.cc + src/gui/dialog/settings/torrents.cc + src/gui/dialog/settings/recognition.cc + src/gui/dialog/settings/library.cc + + # Translate + src/gui/translate/anime.cc + src/gui/translate/anilist.cc + src/gui/translate/config.cc + + # Services + src/services/services.cc + src/services/anilist.cc + src/services/kitsu.cc + + # Library + src/library/library.cc + + # Tracking + src/track/media.cc + + # Qt resources + rc/icons/icons.qrc + rc/sys/win32/dark/dark.qrc + rc/animone.qrc + rc/licenses.qrc +) + +set(INCLUDE + include + dep/pugixml/src + dep/animia/include + dep/fmt/include + dep/utf8proc + dep/anitomy + dep +) + +set(TS_FILES + rc/locale/en_GB.ts +) + +set(DEFINES) + +list(APPEND DEFINES MINORI_VERSION_MAJOR=${minori_VERSION_MAJOR}) +list(APPEND DEFINES MINORI_VERSION_MINOR=${minori_VERSION_MINOR}) +list(APPEND DEFINES MINORI_VERSION_PATCH=${minori_VERSION_PATCH}) + +########################################################################### +# moc + +cmake_language(CALL qt${QT_VERSION_MAJOR}_wrap_cpp SRC_FILES ${QT_MOC_FILES}) + +########################################################################### +# Translations + +set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/rc/locale") + +if(UPDATE_TRANSLATIONS) + cmake_language(CALL qt${QT_VERSION_MAJOR}_create_translation ${SRC_FILES} ${TS_FILES} OPTIONS "-tr-function-alias tr+=Translate -I${CMAKE_CURRENT_SOURCE_DIR}/include") +endif() +cmake_language(CALL qt${QT_VERSION_MAJOR}_add_translation QM_FILES ${TS_FILES}) +list(APPEND SRC_FILES ${QM_FILES}) + +set(LOCALE_QRC_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/rc/locale.qrc") +set(QRC "<!DOCTYPE rcc><RCC version=\"1.0\">\n\t<qresource>\n") +get_filename_component(DIR "${LOCALE_QRC_LOCATION}" DIRECTORY) +foreach (qm ${QM_FILES}) + file(RELATIVE_PATH name ${DIR} ${qm}) + string(APPEND QRC "\t\t<file>${name}</file>\n") +endforeach() +string(APPEND QRC "\t</qresource>\n</RCC>\n") +file(WRITE "${LOCALE_QRC_LOCATION}" ${QRC}) + +list(APPEND SRC_FILES "${LOCALE_QRC_LOCATION}") + +########################################################################### +# Platform specific stuff + +# This is also used in the Win32 rc file +set(RC_INFO_STRING "A lightweight anime tracker built with Qt.") + +if(APPLE) # Mac OS X (or OS X (or macOS)) + set(MACOSX_BUNDLE_BUNDLE_NAME "Minori") + set(MACOSX_BUNDLE_BUNDLE_VERSION ${minori_VERSION}) + set(MACOSX_BUNDLE_COPYRIGHT "Copyright (C) Paper 2023-2024") + set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.eu.us.paper.minori") + set(MACOSX_BUNDLE_INFO_STRING ${RC_INFO_STRING}) + + find_library(FOUNDATION_LIBRARY Foundation) + find_library(APPKIT_LIBRARY AppKit) + list(APPEND SRC_FILES src/sys/osx/dark_theme.cc src/sys/osx/permissions.cc) + list(APPEND LIBRARIES ${FOUNDATION_LIBRARY} ${APPKIT_LIBRARY}) + list(APPEND DEFINES MACOSX) +elseif(WIN32) # Windows + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/rc/sys/win32/version.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/rc/version.rc + @ONLY + ) + list(APPEND SRC_FILES + src/sys/win32/dark_theme.cc + ${CMAKE_CURRENT_BINARY_DIR}/rc/version.rc + ) + list(APPEND DEFINES WIN32) +else() + find_package(PkgConfig) + if (PKG_CONFIG_FOUND) + pkg_check_modules(GLIB gio-2.0 glib-2.0) + if (GLIB_FOUND) + list(APPEND SRC_FILES src/sys/glib/dark_theme.cc) + list(APPEND INCLUDE ${GLIB_INCLUDE_DIRS}) + list(APPEND LIBRARIES ${GLIB_LINK_LIBRARIES}) + list(APPEND DEFINES GLIB) + endif() + endif() +endif() + +########################################################################### + +add_executable(minori WIN32 MACOSX_BUNDLE ${SRC_FILES}) +set_property(TARGET minori PROPERTY CXX_STANDARD 17) +set_property(TARGET minori PROPERTY AUTORCC ON) + +target_include_directories(minori PRIVATE ${Qt${QT_VERSION_MAJOR}Widgets_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} PUBLIC ${INCLUDE}) +target_link_libraries(minori PRIVATE ${LIBRARIES}) +target_compile_options(minori PRIVATE -Wall -Wpedantic -Wextra -Wsuggest-override -Wold-style-cast) +target_compile_definitions(minori PRIVATE ${DEFINES}) + +if(APPLE) + set_target_properties(minori PROPERTIES MACOSX_BUNDLE TRUE) +elseif(WIN32) + install(FILES $<TARGET_RUNTIME_DLLS:minori> TYPE BIN) +endif()