transmission/macosx/CMakeLists.txt

442 lines
11 KiB
CMake

if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS MACOS_SUPPORT_MINIMUM)
message(FATAL_ERROR "Targeting macOS versions before ${MACOS_SUPPORT_MINIMUM} is not supported for the macOS project, please adjust CMAKE_OSX_DEPLOYMENT_TARGET (${CMAKE_OSX_DEPLOYMENT_TARGET})")
endif()
set(MAC_BUNDLE_NAME Transmission)
add_compile_options(
-fcxx-modules
-fmodules
-fobjc-arc
# #warnings are good practice in development
"-Wno-#warnings"
# GNU extensions are good practice in Objective-C
-Wno-gnu)
find_program(ACTOOL_EXECUTABLE actool REQUIRED)
find_program(CODESIGN_EXECUTABLE codesign REQUIRED)
add_subdirectory(QuickLookPlugin)
add_subdirectory(VDKQueue)
add_executable(${TR_NAME}-mac MACOSX_BUNDLE)
target_sources(${TR_NAME}-mac
PRIVATE
AboutWindowController.h
AboutWindowController.mm
AddMagnetWindowController.h
AddMagnetWindowController.mm
AddWindowController.h
AddWindowController.mm
Badger.h
Badger.mm
BadgeView.h
BadgeView.mm
BlocklistDownloader.h
BlocklistDownloader.mm
BlocklistDownloaderViewController.h
BlocklistDownloaderViewController.mm
BlocklistScheduler.h
BlocklistScheduler.mm
BonjourController.h
BonjourController.mm
ButtonToolbarItem.h
ButtonToolbarItem.mm
CocoaCompatibility.h
ColorTextField.h
ColorTextField.mm
Controller.h
Controller.mm
CreatorWindowController.h
CreatorWindowController.mm
DragOverlayView.h
DragOverlayView.mm
DragOverlayWindow.h
DragOverlayWindow.mm
ExpandedPathToIconTransformer.h
ExpandedPathToIconTransformer.mm
ExpandedPathToPathTransformer.h
ExpandedPathToPathTransformer.mm
FileListNode.h
FileListNode.mm
FileNameCell.h
FileNameCell.mm
FileOutlineController.h
FileOutlineController.mm
FileOutlineView.h
FileOutlineView.mm
FilePriorityCell.h
FilePriorityCell.mm
FileRenameSheetController.h
FileRenameSheetController.mm
FilterBarController.h
FilterBarController.mm
FilterBarView.h
FilterBarView.mm
FilterButton.h
FilterButton.mm
GlobalOptionsPopoverViewController.h
GlobalOptionsPopoverViewController.mm
GroupPopUpButtonCell.h
GroupPopUpButtonCell.mm
GroupsController.h
GroupsController.mm
GroupsPrefsController.h
GroupsPrefsController.mm
GroupTextCell.h
GroupTextCell.mm
GroupToolbarItem.h
GroupToolbarItem.mm
InfoActivityViewController.h
InfoActivityViewController.mm
InfoFileViewController.h
InfoFileViewController.mm
InfoGeneralViewController.h
InfoGeneralViewController.mm
InfoOptionsViewController.h
InfoOptionsViewController.mm
InfoPeersViewController.h
InfoPeersViewController.mm
InfoTextField.h
InfoTextField.mm
InfoTrackersViewController.h
InfoTrackersViewController.mm
InfoViewController.h
InfoWindowController.h
InfoWindowController.mm
main.mm
MessageWindowController.h
MessageWindowController.mm
NSApplicationAdditions.h
NSApplicationAdditions.mm
NSDataAdditions.h
NSDataAdditions.mm
NSImageAdditions.h
NSImageAdditions.mm
NSKeyedUnarchiverAdditions.h
NSKeyedUnarchiverAdditions.mm
NSMutableArrayAdditions.h
NSMutableArrayAdditions.mm
NSStringAdditions.h
NSStringAdditions.mm
PeerProgressIndicatorCell.h
PeerProgressIndicatorCell.mm
PeerTableView.h
PeerTableView.mm
PiecesView.h
PiecesView.mm
PortChecker.h
PortChecker.mm
PredicateEditorRowTemplateAny.h
PredicateEditorRowTemplateAny.mm
PrefsController.h
PrefsController.mm
PrefsWindow.h
PrefsWindow.mm
PriorityPopUpButtonCell.h
PriorityPopUpButtonCell.mm
ProgressGradients.h
ProgressGradients.mm
ShareToolbarItem.h
ShareToolbarItem.mm
ShareTorrentFileHelper.h
ShareTorrentFileHelper.mm
SparkleProxy.mm
StatsWindowController.h
StatsWindowController.mm
StatusBarController.h
StatusBarController.mm
StatusBarView.h
StatusBarView.mm
Toolbar.h
Toolbar.mm
Torrent.h
Torrent.mm
TorrentCell.h
TorrentCell.mm
TorrentGroup.h
TorrentGroup.mm
TorrentTableView.h
TorrentTableView.mm
TrackerCell.h
TrackerCell.mm
TrackerNode.h
TrackerNode.mm
TrackerTableView.h
TrackerTableView.mm
URLSheetWindowController.h
URLSheetWindowController.mm
WebSeedTableView.h
WebSeedTableView.mm)
set(XIB_FILES
AboutWindow.xib
BlocklistStatusWindow.xib
FileRenameSheetController.xib
FilterBar.xib
InfoFileView.xib
InfoPeersView.xib
InfoTrackersView.xib
InfoWindow.xib
MessageWindow.xib
StatsWindow.xib
StatusBar.xib
URLSheetWindow.xib)
set(RESOURCES
Defaults.plist
Credits.rtf
sparkle_dsa_pub.pem
../COPYING
Images/TransmissionDocument.icns)
source_group(Resources
FILES ${RESOURCES})
set_source_files_properties(
${RESOURCES}
PROPERTIES
MACOSX_PACKAGE_LOCATION Resources)
set(IMAGESETS
ActionHover
Bandwidth
CleanupTemplate
CompleteCheck
CreateLarge
DownArrowGroupTemplate
DownArrowTemplate
DownloadBadge
EllipsisTemplate
FavIcon
GearshapeTemplate
Globe
Groups
InfoActivity
InfoFiles
InfoGeneral
InfoOptions
InfoPeers
InfoTracker
Lock
Magnet
PauseHover
PauseOff
PauseOn
PinTemplate
PriorityControlHigh
PriorityControlLow
PriorityControlNormal
PriorityHighTemplate
PriorityLowTemplate
PriorityNormalTemplate
Remote
ResumeHover
ResumeNoWaitHover
ResumeNoWaitOff
ResumeNoWaitOn
ResumeOff
ResumeOn
RevealHover
RevealOff
RevealOn
ToolbarCreateTemplate
ToolbarFilterTemplate
ToolbarInfoTemplate
ToolbarOpenTemplate
ToolbarOpenWebTemplate
ToolbarPauseAllTemplate
ToolbarPauseSelectedTemplate
ToolbarRemoveTemplate
ToolbarResumeAllTemplate
ToolbarResumeSelectedTemplate
TortoiseTemplate
Transfers
UpArrowGroupTemplate
UpArrowTemplate
UploadBadge
YingYangGroupTemplate
YingYangTemplate)
set(APPICON_NAME AppIcon)
set(IMAGE_ASSETS_DIR Images/Images.xcassets)
set(APPICONSET_DIR "${IMAGE_ASSETS_DIR}/${APPICON_NAME}.appiconset")
set(IMAGE_ASSETS
${IMAGE_ASSETS_DIR}/Contents.json
${APPICONSET_DIR}/Contents.json)
foreach(IMG IN LISTS IMAGESETS)
set(IMG_DIR "${IMAGE_ASSETS_DIR}/${IMG}.imageset")
list(APPEND IMAGE_ASSETS
${IMG_DIR}/${IMG}.png
${IMG_DIR}/${IMG}@2x.png
${IMG_DIR}/Contents.json)
endforeach()
foreach(SIZE IN ITEMS 16 32 128 256 512)
list(APPEND IMAGE_ASSETS
${APPICONSET_DIR}/icon_${SIZE}x${SIZE}.png
${APPICONSET_DIR}/icon_${SIZE}x${SIZE}@2x.png)
endforeach()
set(COMPILED_IMAGE_ASSETS
"${CMAKE_CURRENT_BINARY_DIR}/${APPICON_NAME}.icns"
"${CMAKE_CURRENT_BINARY_DIR}/Assets.car")
add_custom_command(
OUTPUT
${COMPILED_IMAGE_ASSETS}
${APPICON_NAME}.Info.plist
COMMAND
${ACTOOL_EXECUTABLE}
--compile "${CMAKE_CURRENT_BINARY_DIR}"
--platform macosx
--minimum-deployment-target ${CMAKE_OSX_DEPLOYMENT_TARGET}
--app-icon ${APPICON_NAME}
--output-partial-info-plist "${CMAKE_CURRENT_BINARY_DIR}/${APPICON_NAME}.Info.plist"
${IMAGE_ASSETS_DIR}
DEPENDS ${IMAGE_ASSETS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
source_group("Generated Files"
FILES
${COMPILED_IMAGE_ASSETS}
${APPICON_NAME}.Info.plist)
list(APPEND RESOURCES
${COMPILED_IMAGE_ASSETS})
set_source_files_properties(
${COMPILED_IMAGE_ASSETS}
PROPERTIES
MACOSX_PACKAGE_LOCATION Resources)
set(LINGUAS
da
de
en
es
fr
it
nl
pt_PT
ru
tr)
if(ENABLE_NLS)
set(ENABLED_LINGUAS ${LINGUAS})
else()
set(ENABLED_LINGUAS en)
endif()
set(BASE_XIB_FILES
AddMagnetWindow.xib
AddWindow.xib
Creator.xib
GlobalOptionsPopover.xib
GroupRules.xib
InfoActivityView.xib
InfoGeneralView.xib
InfoOptionsView.xib
MainMenu.xib
PrefsWindow.xib)
list(TRANSFORM BASE_XIB_FILES
PREPEND Base.lproj/)
set(LANG_STRINGS_FILES
InfoPlist.strings
Localizable.strings)
foreach(LANG ${ENABLED_LINGUAS})
set(${LANG}_STRINGS_FILES)
if(NOT LANG STREQUAL "en")
foreach(F ${BASE_XIB_FILES})
get_filename_component(F_BASE "${F}" NAME_WE)
list(APPEND ${LANG}_STRINGS_FILES ${LANG}.lproj/${F_BASE}.strings)
endforeach()
endif()
foreach(F ${LANG_STRINGS_FILES})
list(APPEND ${LANG}_STRINGS_FILES ${LANG}.lproj/${F})
endforeach()
source_group(Resources/${LANG}.lproj
FILES ${${LANG}_STRINGS_FILES})
endforeach()
foreach(LANG ${ENABLED_LINGUAS})
list(APPEND RESOURCES ${${LANG}_STRINGS_FILES})
set(STRINGS_FILES_RESOURCES_DIR Resources)
if(NOT CMAKE_GENERATOR STREQUAL Xcode)
string(APPEND STRINGS_FILES_RESOURCES_DIR /${LANG}.lproj)
endif()
set_source_files_properties(
${${LANG}_STRINGS_FILES}
PROPERTIES
MACOSX_PACKAGE_LOCATION ${STRINGS_FILES_RESOURCES_DIR})
endforeach()
target_sources(${TR_NAME}-mac
PRIVATE
${RESOURCES})
tr_target_xib_files(${TR_NAME}-mac
${XIB_FILES}
${BASE_XIB_FILES})
target_include_directories(${TR_NAME}-mac
PRIVATE
${CMAKE_SOURCE_DIR})
target_include_directories(${TR_NAME}-mac SYSTEM
PRIVATE
${LIBFMT_INCLUDE_DIRS})
find_library(SPARKLE_FRAMEWORK Sparkle
PATHS ${CMAKE_CURRENT_SOURCE_DIR}
NO_DEFAULT_PATHS)
target_link_libraries(${TR_NAME}-mac
PRIVATE
${TR_NAME}
vdkqueue
${SPARKLE_FRAMEWORK}
"-framework AppKit"
"-framework Carbon"
"-framework Foundation"
"-framework IOKit"
"-framework Quartz"
"-framework Security"
"-weak_framework UserNotifications")
if(NOT CMAKE_GENERATOR STREQUAL Xcode)
add_custom_command(
TARGET ${TR_NAME}-mac
POST_BUILD
COMMAND ${CODESIGN_EXECUTABLE} -s - $<TARGET_BUNDLE_DIR:${TR_NAME}-mac>)
endif()
set_target_properties(
${TR_NAME}-mac
PROPERTIES
OUTPUT_NAME ${MAC_BUNDLE_NAME}
MACOSX_BUNDLE_GUI_IDENTIFIER "org.m0k.transmission"
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in
INSTALL_RPATH "@executable_path;@executable_path/../Frameworks")
install(
TARGETS ${TR_NAME}-mac
DESTINATION Applications)
install(
DIRECTORY TransmissionHelp
DESTINATION Applications/${MAC_BUNDLE_NAME}.app/Contents/Resources)
tr_install_web(Applications/${MAC_BUNDLE_NAME}.app/Contents/Resources)
install(CODE
"list(APPEND CMAKE_MODULE_PATH \"${CMAKE_SOURCE_DIR}/cmake\")
include(TrMacros)
include(GetPrerequisites)
tr_fixup_bundle_item(
\"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/Applications/${MAC_BUNDLE_NAME}.app\"
\"Contents/MacOS/${MAC_BUNDLE_NAME}\" \"${CMAKE_CURRENT_SOURCE_DIR}\")")