1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-24 16:52:39 +00:00
transmission/gtk/CMakeLists.txt
Mike Gelfand 43acd7e3e4
Remove Xcode project in favor of CMake (#4147)
* Compile images into an assets catalog

* Optionally sign resulting Mac bundle

* Move 3rd-party/utility/test targets to their own folders

* Enable ARC via compile options unconditionally

* Install base and localized resources into correct directory

This seems like a Xcode quirk: if subdirectory containing the resource file
matches the destination directory name (and probably if there's more than one
resource file being installed there), the resulting folder structure then
contains an extra subdirectory, i.e. Resources/dirname/dirname/resname.

* Group source files for better structure in IDEs (Xcode, VS)

* Remove Xcode project

Using Xcode is still possible via "Xcode" CMake generator.

* Use ad-hoc signature if one is not specified

* Always use ad-hoc signature on link, leave proper signing to CPack

* Install localized resources into correct directory (QL plugin)

* Don't include CTest (we don't use additional targets it provides)

* Revert "Remove Xcode project"

This reverts commit dc069f654f.
2022-11-12 20:01:57 +00:00

263 lines
7.5 KiB
CMake

project(trgtk)
add_compile_options(${C_WARNING_FLAGS})
execute_process(
COMMAND
${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_resources
OUTPUT_VARIABLE
GLIB_COMPILE_RESOURCES_EXECUTABLE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GLIB_COMPILE_RESOURCES_EXECUTABLE)
message(SEND_ERROR "Unable to find glib-compile-resources executable")
endif()
find_program(APPSTREAM appstreamcli)
if(GTK_VERSION EQUAL 4)
set(UI_SUBDIR ui/gtk4)
else()
set(UI_SUBDIR ui/gtk3)
endif()
set(${PROJECT_NAME}_UI_FILES
${UI_SUBDIR}/AddTrackerDialog.ui
${UI_SUBDIR}/DetailsDialog.ui
${UI_SUBDIR}/EditTrackersDialog.ui
${UI_SUBDIR}/FilterBar.ui
${UI_SUBDIR}/MainWindow.ui
${UI_SUBDIR}/MakeDialog.ui
${UI_SUBDIR}/MakeProgressDialog.ui
${UI_SUBDIR}/MessageLogWindow.ui
${UI_SUBDIR}/OptionsDialog.ui
${UI_SUBDIR}/PrefsDialog.ui
${UI_SUBDIR}/RelocateDialog.ui
${UI_SUBDIR}/StatsDialog.ui
${UI_SUBDIR}/TorrentUrlChooserDialog.ui
)
macro(gtr_compile_resources NAME INPUT_DIR INPUT_FILE OUTPUT_FILE_BASE)
add_custom_command(
OUTPUT
"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.c"
"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.h"
COMMAND
"${GLIB_COMPILE_RESOURCES_EXECUTABLE}"
"--target=${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.c"
"--sourcedir=${INPUT_DIR}"
--generate-source
--c-name "${NAME}"
"${INPUT_DIR}/${INPUT_FILE}"
COMMAND
"${GLIB_COMPILE_RESOURCES_EXECUTABLE}"
"--target=${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.h"
"--sourcedir=${INPUT_DIR}"
--generate-header
--c-name "${NAME}"
"${INPUT_DIR}/${INPUT_FILE}"
DEPENDS
"${INPUT_DIR}/${INPUT_FILE}"
${ARGN}
WORKING_DIRECTORY
"${INPUT_DIR}"
)
endmacro()
gtr_compile_resources(transmission ${CMAKE_CURRENT_SOURCE_DIR} transmission.gresource.xml transmission-resources
icons/hicolor_apps_scalable_transmission.svg
icons/lock.svg
icons/options-symbolic.svg
icons/ratio-symbolic.svg
icons/turtle-symbolic.svg
transmission-ui.css
transmission-ui.xml
)
gtr_compile_resources(transmission_ui ${CMAKE_CURRENT_SOURCE_DIR}/${UI_SUBDIR} transmission-ui.gresource.xml transmission-ui-resources
${${PROJECT_NAME}_UI_FILES}
)
if(ENABLE_NLS)
set(${PROJECT_NAME}_DESKTOP_FILE "${PROJECT_BINARY_DIR}/${TR_NAME}-gtk.desktop")
add_custom_command(
OUTPUT ${${PROJECT_NAME}_DESKTOP_FILE}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --desktop -d ${CMAKE_SOURCE_DIR}/po --template ${PROJECT_SOURCE_DIR}/transmission-gtk.desktop.in -o ${${PROJECT_NAME}_DESKTOP_FILE}
DEPENDS ${PROJECT_SOURCE_DIR}/transmission-gtk.desktop.in
VERBATIM
)
set(${PROJECT_NAME}_METAINFO_FILE "${PROJECT_BINARY_DIR}/${TR_NAME}-gtk.metainfo.xml")
add_custom_command(
OUTPUT ${${PROJECT_NAME}_METAINFO_FILE}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --xml -d ${CMAKE_SOURCE_DIR}/po --template ${PROJECT_SOURCE_DIR}/transmission-gtk.metainfo.xml.in -o ${${PROJECT_NAME}_METAINFO_FILE}
DEPENDS ${PROJECT_SOURCE_DIR}/transmission-gtk.metainfo.xml.in
VERBATIM
)
source_group("Generated Files" FILES ${${PROJECT_NAME}_DESKTOP_FILE} ${${PROJECT_NAME}_METAINFO_FILE})
endif()
set(${PROJECT_NAME}_SOURCES
Actions.cc
Application.cc
DetailsDialog.cc
Dialogs.cc
FaviconCache.cc
FileList.cc
FilterBar.cc
FreeSpaceLabel.cc
IconCache.cc
main.cc
MainWindow.cc
MakeDialog.cc
MessageLogWindow.cc
Notify.cc
OptionsDialog.cc
PathButton.cc
Prefs.cc
PrefsDialog.cc
RelocateDialog.cc
Session.cc
StatsDialog.cc
SystemTrayIcon.cc
TorrentCellRenderer.cc
Utils.cc
${CMAKE_CURRENT_BINARY_DIR}/transmission-resources.c
${CMAKE_CURRENT_BINARY_DIR}/transmission-ui-resources.c
)
set(${PROJECT_NAME}_HEADERS
Actions.h
Application.h
DetailsDialog.h
Dialogs.h
FaviconCache.h
FileList.h
FilterBar.h
FreeSpaceLabel.h
HigWorkarea.h
IconCache.h
MainWindow.h
MakeDialog.h
MessageLogWindow.h
Notify.h
OptionsDialog.h
PathButton.h
Prefs.h
PrefsDialog.h
RelocateDialog.h
Session.h
StatsDialog.h
SystemTrayIcon.h
TorrentCellRenderer.h
Utils.h
${CMAKE_CURRENT_BINARY_DIR}/transmission-resources.h
${CMAKE_CURRENT_BINARY_DIR}/transmission-ui-resources.h
)
include_directories(
${CMAKE_SOURCE_DIR}
${PROJECT_BINARY_DIR}
)
include_directories(
SYSTEM
${GTK${GTK_VERSION}_INCLUDE_DIRS}
${CURL_INCLUDE_DIRS}
${EVENT2_INCLUDE_DIRS}
)
if(WITH_APPINDICATOR)
include_directories(SYSTEM ${APPINDICATOR_INCLUDE_DIRS})
endif()
link_directories(
${GTK${GTK_VERSION}_LIBRARY_DIRS}
)
add_definitions(
"-DTRANSMISSIONLOCALEDIR=\"${CMAKE_INSTALL_FULL_LOCALEDIR}\""
"-DGETTEXT_PACKAGE=\"${TR_NAME}-gtk\""
-DG_DISABLE_DEPRECATED
-DGDK_PIXBUF_DISABLE_DEPRECATED
-DGDK_DISABLE_DEPRECATED
-DGTK_DISABLE_DEPRECATED
-DPANGO_DISABLE_DEPRECATED
# FIXME: these break libnotify's headers
# -DG_DISABLE_SINGLE_INCLUDES
# -DGTK_DISABLE_SINGLE_INCLUDES
-DGDKMM_DISABLE_DEPRECATED
-DGIOMM_DISABLE_DEPRECATED
-DGLIBMM_DISABLE_DEPRECATED
-DGTKMM_DISABLE_DEPRECATED
-DPANGOMM_DISABLE_DEPRECATED
-DSIGCXX_DISABLE_DEPRECATED
${GTK${GTK_VERSION}_CFLAGS_OTHER}
)
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()
tr_win32_app_info(${PROJECT_NAME}_WIN32_RC_FILE
"Transmission GTK+ Client"
"${TR_NAME}-gtk"
"${TR_NAME}-gtk.exe"
"${TR_NAME}.ico")
add_executable(${TR_NAME}-gtk WIN32
${${PROJECT_NAME}_SOURCES}
${${PROJECT_NAME}_HEADERS}
${${PROJECT_NAME}_DESKTOP_FILE}
${${PROJECT_NAME}_METAINFO_FILE}
${${PROJECT_NAME}_WIN32_RC_FILE}
)
target_link_libraries(${TR_NAME}-gtk
${TR_NAME}
${GTK${GTK_VERSION}_LIBRARIES}
${CURL_LIBRARIES}
${EVENT2_LIBRARIES}
)
if(WITH_APPINDICATOR)
target_link_libraries(${TR_NAME}-gtk ${APPINDICATOR_LIBRARIES})
endif()
if(NOT MSVC)
target_compile_options(${TR_NAME}-gtk PRIVATE -Wno-exit-time-destructors)
endif()
if(MSVC)
tr_append_target_property(${TR_NAME}-gtk LINK_FLAGS "/ENTRY:mainCRTStartup")
endif()
install(TARGETS ${TR_NAME}-gtk DESTINATION ${CMAKE_INSTALL_BINDIR})
set(${PROJECT_NAME}_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 ${${PROJECT_NAME}_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 ${${PROJECT_NAME}_DESKTOP_FILE} DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES ${${PROJECT_NAME}_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()