Files
transmission/gtk/CMakeLists.txt
Mike Gelfand bc380511db Modernize CMake code (ongoing refactoring) (#4507)
* Reformat CMake code

* Bump minimum CMake version to 3.12

* Add target sources separately via `target_source()`

* Make `tr_win32_app_info()` add target sources on its own

* Don't use `include_directories()`

* Don't use `add_definitions()`

* Limit use of `add_compile_options()`

* Move VDKQueue target declaration to a subdirectory

* Add `tr_disable_source_files_compile()` helper

* Add `tr_target_glib_resources()` helper

* Add `tr_gettext_msgfmt()` helper

* Enable AUTOUIC for Qt client

* Enable AUTORCC for Qt client

* Remove AUTO{MOC,RCC,UIC} source group overrides

* Add `tr_target_idl_files()` helper

* Move source group setup to `tr_qt_add_translation()`

* Add `tr_target_xib_files()` helper

* Prefer `target_sources()` to intermediate variables

* Use explicit visibility versions of `target_*()` commands

* Prefer genexes to conditions in `target_*()` commands

* Add `tr_allow_compile_if()` helper

* Leave only top-level `project()`, remove the rest

* Minor fixups

* Fixup Mac QL plugin install

* Fixup IDE target folders and source groups
2023-01-01 19:49:48 +00:00

246 lines
6.5 KiB
CMake

find_program(APPSTREAM appstreamcli)
add_executable(${TR_NAME}-gtk WIN32)
target_sources(${TR_NAME}-gtk
PRIVATE
Actions.cc
Actions.h
Application.cc
Application.h
DetailsDialog.cc
DetailsDialog.h
Dialogs.cc
Dialogs.h
FaviconCache.cc
FaviconCache.h
FileList.cc
FileList.h
FilterBar.cc
FilterBar.h
Flags.h
FreeSpaceLabel.cc
FreeSpaceLabel.h
GtkCompat.h
HigWorkarea.h
IconCache.cc
IconCache.h
ListModelAdapter.cc
ListModelAdapter.h
main.cc
MainWindow.cc
MainWindow.h
MakeDialog.cc
MakeDialog.h
MessageLogWindow.cc
MessageLogWindow.h
Notify.cc
Notify.h
OptionsDialog.cc
OptionsDialog.h
PathButton.cc
PathButton.h
Prefs.cc
Prefs.h
PrefsDialog.cc
PrefsDialog.h
RelocateDialog.cc
RelocateDialog.h
Session.cc
Session.h
StatsDialog.cc
StatsDialog.h
SystemTrayIcon.cc
SystemTrayIcon.h
Torrent.cc
Torrent.h
TorrentCellRenderer.cc
TorrentCellRenderer.h
TorrentFilter.cc
TorrentFilter.h
TorrentSorter.cc
TorrentSorter.h
Utils.cc
Utils.h)
target_sources(${TR_NAME}-gtk
PRIVATE
ui/gtk3/AddTrackerDialog.ui
ui/gtk3/DetailsDialog.ui
ui/gtk3/EditTrackersDialog.ui
ui/gtk3/FilterBar.ui
ui/gtk3/MainWindow.ui
ui/gtk3/MakeDialog.ui
ui/gtk3/MakeProgressDialog.ui
ui/gtk3/MessageLogWindow.ui
ui/gtk3/OptionsDialog.ui
ui/gtk3/PrefsDialog.ui
ui/gtk3/RelocateDialog.ui
ui/gtk3/StatsDialog.ui
ui/gtk3/TorrentUrlChooserDialog.ui)
source_group(Ui/GTK3
REGULAR_EXPRESSION [[ui/gtk3/.*\.ui$]])
target_sources(${TR_NAME}-gtk
PRIVATE
ui/gtk4/AddTrackerDialog.ui
ui/gtk4/DetailsDialog.ui
ui/gtk4/EditTrackersDialog.ui
ui/gtk4/FilterBar.ui
ui/gtk4/MainWindow.ui
ui/gtk4/MakeDialog.ui
ui/gtk4/MakeProgressDialog.ui
ui/gtk4/MessageLogWindow.ui
ui/gtk4/OptionsDialog.ui
ui/gtk4/PrefsDialog.ui
ui/gtk4/RelocateDialog.ui
ui/gtk4/StatsDialog.ui
ui/gtk4/TorrentUrlChooserDialog.ui)
source_group(Ui/GTK4
REGULAR_EXPRESSION [[ui/gtk4/.*\.ui$]])
target_link_directories(${TR_NAME}-gtk
PRIVATE
${GTK${GTK_VERSION}_LIBRARY_DIRS})
if(WITH_APPINDICATOR)
set_property(
SOURCE SystemTrayIcon.cc
APPEND
PROPERTY COMPILE_DEFINITIONS
HAVE_APPINDICATOR)
if(APPINDICATOR_IS_AYATANA)
set_property(
SOURCE SystemTrayIcon.cc
APPEND
PROPERTY COMPILE_DEFINITIONS
APPINDICATOR_IS_AYATANA)
endif()
endif()
if(GTK_VERSION EQUAL 4)
set(UI_SUBDIR ui/gtk4)
else()
set(UI_SUBDIR ui/gtk3)
endif()
tr_target_glib_resources(${TR_NAME}-gtk
transmission.gresource.xml
${UI_SUBDIR}/transmission-ui.gresource.xml)
if(ENABLE_NLS)
set(DESKTOP_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TR_NAME}-gtk.desktop")
tr_gettext_msgfmt(${TR_NAME}-gtk
${DESKTOP_FILE}
${CMAKE_CURRENT_SOURCE_DIR}/transmission-gtk.desktop.in)
target_sources(${TR_NAME}-gtk
PRIVATE
${DESKTOP_FILE})
set(METAINFO_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TR_NAME}-gtk.metainfo.xml")
tr_gettext_msgfmt(${TR_NAME}-gtk
${METAINFO_FILE}
${CMAKE_CURRENT_SOURCE_DIR}/transmission-gtk.metainfo.xml.in)
target_sources(${TR_NAME}-gtk
PRIVATE
${METAINFO_FILE})
endif()
target_compile_definitions(${TR_NAME}-gtk
PRIVATE
TRANSMISSIONLOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}"
GETTEXT_PACKAGE="${TR_NAME}-gtk"
G_DISABLE_DEPRECATED
GDK_PIXBUF_DISABLE_DEPRECATED
GDK_DISABLE_DEPRECATED
GTK_DISABLE_DEPRECATED
PANGO_DISABLE_DEPRECATED
# FIXME: these break libnotify's headers
# G_DISABLE_SINGLE_INCLUDES
# GTK_DISABLE_SINGLE_INCLUDES
GDKMM_DISABLE_DEPRECATED
GIOMM_DISABLE_DEPRECATED
GLIBMM_DISABLE_DEPRECATED
GTKMM_DISABLE_DEPRECATED
PANGOMM_DISABLE_DEPRECATED
SIGCXX_DISABLE_DEPRECATED
$<$<BOOL:${ENABLE_UTP}>:WITH_UTP>)
target_compile_options(${TR_NAME}-gtk
PRIVATE
${GTK${GTK_VERSION}_CFLAGS_OTHER}
$<$<BOOL:${ENABLE_WERROR}>:$<IF:$<CXX_COMPILER_ID:MSVC>,/WX,-Werror>>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-exit-time-destructors>)
target_include_directories(${TR_NAME}-gtk
PRIVATE
${CMAKE_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(${TR_NAME}-gtk SYSTEM
PRIVATE
${LIBFMT_INCLUDE_DIRS}
${GTK${GTK_VERSION}_INCLUDE_DIRS}
${CURL_INCLUDE_DIRS}
${EVENT2_INCLUDE_DIRS}
$<$<BOOL:${WITH_APPINDICATOR}>:${APPINDICATOR_INCLUDE_DIRS}>)
target_link_libraries(${TR_NAME}-gtk
PRIVATE
${TR_NAME}
${GTK${GTK_VERSION}_LIBRARIES}
${CURL_LIBRARIES}
${EVENT2_LIBRARIES}
$<$<BOOL:${WITH_APPINDICATOR}>:${APPINDICATOR_LIBRARIES}>)
if(MSVC)
tr_append_target_property(${TR_NAME}-gtk LINK_FLAGS "/ENTRY:mainCRTStartup")
endif()
tr_win32_app_info(${TR_NAME}-gtk
"Transmission GTK+ Client"
"${TR_NAME}-gtk"
"${TR_NAME}-gtk.exe"
"${TR_NAME}.ico")
install(
TARGETS ${TR_NAME}-gtk
DESTINATION ${CMAKE_INSTALL_BINDIR})
set(PUBLIC_ICONS
hicolor_apps_scalable_transmission.svg
hicolor_apps_scalable_transmission-devel.svg
hicolor_apps_symbolic_transmission-symbolic.svg)
set(ICON_NAME_REGEX "^([^_]+)_([^_]+)_([^_]+)_(.+)$")
foreach(ICON ${PUBLIC_ICONS})
string(REGEX REPLACE ${ICON_NAME_REGEX} "\\1/\\3/\\2" ICON_DIR ${ICON})
string(REGEX REPLACE ${ICON_NAME_REGEX} "\\4" ICON_NAME ${ICON})
install(
FILES icons/${ICON}
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/${ICON_DIR}/
RENAME ${ICON_NAME})
endforeach()
if(INSTALL_DOC)
install(
FILES ${TR_NAME}-gtk.1
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
endif()
if(ENABLE_NLS)
install(
FILES ${DESKTOP_FILE}
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(
FILES ${METAINFO_FILE}
DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
else()
install(
FILES transmission-gtk.desktop.in
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
RENAME ${TR_NAME}-gtk.desktop)
endif()