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
.
This commit is contained in:
parent
55be67b2e6
commit
43acd7e3e4
|
@ -713,7 +713,6 @@ if(RUN_CLANG_TIDY)
|
|||
endif()
|
||||
|
||||
if(ENABLE_TESTS)
|
||||
include(CTest)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
@ -793,6 +792,7 @@ if(GIT_FOUND)
|
|||
COMMAND "${CMAKE_SOURCE_DIR}/code_style.sh"
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
)
|
||||
set_property(TARGET check-format format PROPERTY FOLDER "utility")
|
||||
endif()
|
||||
unset(TR_GIT_ROOT)
|
||||
endif()
|
||||
|
|
|
@ -117,7 +117,7 @@ macro(tr_add_external_auto_library ID DIRNAME LIBNAME)
|
|||
BUILD_BYPRODUCTS "${${ID}_LIBRARY}"
|
||||
)
|
||||
|
||||
set_property(TARGET ${${ID}_UPSTREAM_TARGET} PROPERTY FOLDER "ThirdParty")
|
||||
set_property(TARGET ${${ID}_UPSTREAM_TARGET} PROPERTY FOLDER "third-party")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
|
|
@ -94,6 +94,8 @@ if(ENABLE_NLS)
|
|||
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
|
||||
|
|
|
@ -2,18 +2,14 @@ project(trmac)
|
|||
|
||||
include_directories(${CMAKE_SOURCE_DIR})
|
||||
|
||||
if(CMAKE_GENERATOR STREQUAL "Xcode")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC ON)
|
||||
else()
|
||||
add_definitions(-fobjc-arc)
|
||||
endif()
|
||||
|
||||
add_compile_options(-fmodules -fcxx-modules)
|
||||
add_compile_options(
|
||||
-fcxx-modules
|
||||
-fmodules
|
||||
-fobjc-arc)
|
||||
|
||||
find_program(ACTOOL_EXECUTABLE actool REQUIRED)
|
||||
find_program(CODESIGN_EXECUTABLE codesign REQUIRED)
|
||||
find_program(IBTOOL_EXECUTABLE ibtool REQUIRED)
|
||||
find_program(ICONUTIL_EXECUTABLE iconutil REQUIRED)
|
||||
find_program(TIFFUTIL_EXECUTABLE tiffutil REQUIRED)
|
||||
find_program(INSTALL_NAME_TOOL_EXECUTABLE install_name_tool REQUIRED)
|
||||
|
||||
macro(tr_wrap_xib IFILE OFILE)
|
||||
get_filename_component(twx_nib_dir "${OFILE}" DIRECTORY)
|
||||
|
@ -25,20 +21,9 @@ macro(tr_wrap_xib IFILE OFILE)
|
|||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
VERBATIM
|
||||
)
|
||||
source_group("Generated Files" FILES ${OFILE})
|
||||
endmacro()
|
||||
|
||||
function(tr_tiff_from_pngs OFILE)
|
||||
get_filename_component(ODIR "${OFILE}" DIRECTORY)
|
||||
add_custom_command(
|
||||
OUTPUT ${OFILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${ODIR}
|
||||
COMMAND ${TIFFUTIL_EXECUTABLE} -cathidpicheck ${ARGN} -out ${OFILE}
|
||||
DEPENDS ${ARGN}
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
VERBATIM
|
||||
)
|
||||
endfunction()
|
||||
|
||||
set(${PROJECT_NAME}_SOURCES
|
||||
AboutWindowController.mm
|
||||
AddMagnetWindowController.mm
|
||||
|
@ -195,51 +180,22 @@ set(${PROJECT_NAME}_XIB_FILES
|
|||
StatusBar.xib
|
||||
URLSheetWindow.xib
|
||||
)
|
||||
|
||||
set(APPICONSET_DIR "${PROJECT_SOURCE_DIR}/Images/Images.xcassets/AppIcon.appiconset")
|
||||
set(APPICON_FILE "${PROJECT_BINARY_DIR}/Transmission.icns")
|
||||
add_custom_command(
|
||||
OUTPUT "${APPICON_FILE}"
|
||||
COMMAND "${CMAKE_COMMAND}" -E rm -rf
|
||||
"${PROJECT_BINARY_DIR}/Transmission.iconset"
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory
|
||||
"${APPICONSET_DIR}"
|
||||
"${PROJECT_BINARY_DIR}/Transmission.iconset"
|
||||
COMMAND "${CMAKE_COMMAND}" -E rm
|
||||
"${PROJECT_BINARY_DIR}/Transmission.iconset/Contents.json"
|
||||
COMMAND "${ICONUTIL_EXECUTABLE}"
|
||||
--convert icns
|
||||
--output "${APPICON_FILE}"
|
||||
"${PROJECT_BINARY_DIR}/Transmission.iconset"
|
||||
DEPENDS
|
||||
"${APPICONSET_DIR}/icon_128x128.png"
|
||||
"${APPICONSET_DIR}/icon_128x128@2x.png"
|
||||
"${APPICONSET_DIR}/icon_16x16.png"
|
||||
"${APPICONSET_DIR}/icon_16x16@2x.png"
|
||||
"${APPICONSET_DIR}/icon_256x256.png"
|
||||
"${APPICONSET_DIR}/icon_256x256@2x.png"
|
||||
"${APPICONSET_DIR}/icon_32x32.png"
|
||||
"${APPICONSET_DIR}/icon_32x32@2x.png"
|
||||
"${APPICONSET_DIR}/icon_512x512.png"
|
||||
"${APPICONSET_DIR}/icon_512x512@2x.png"
|
||||
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
|
||||
VERBATIM
|
||||
)
|
||||
source_group(Resources FILES ${${PROJECT_NAME}_XIB_FILES})
|
||||
|
||||
set(${PROJECT_NAME}_RESOURCES
|
||||
Defaults.plist
|
||||
Credits.rtf
|
||||
sparkle_dsa_pub.pem
|
||||
../COPYING
|
||||
"${APPICON_FILE}"
|
||||
Images/TransmissionDocument.icns
|
||||
)
|
||||
source_group(Resources FILES ${${PROJECT_NAME}_RESOURCES})
|
||||
|
||||
set_source_files_properties(${${PROJECT_NAME}_RESOURCES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources
|
||||
)
|
||||
|
||||
set(${PROJECT_NAME}_HIDPI_IMAGES
|
||||
set(${PROJECT_NAME}_IMAGESETS
|
||||
ActionHover
|
||||
Bandwidth
|
||||
CleanupTemplate
|
||||
|
@ -247,8 +203,10 @@ set(${PROJECT_NAME}_HIDPI_IMAGES
|
|||
CreateLarge
|
||||
DownArrowGroupTemplate
|
||||
DownArrowTemplate
|
||||
DownloadBadge
|
||||
EllipsisTemplate
|
||||
FavIcon
|
||||
GearshapeTemplate
|
||||
Globe
|
||||
Groups
|
||||
InfoActivity
|
||||
|
@ -293,38 +251,58 @@ set(${PROJECT_NAME}_HIDPI_IMAGES
|
|||
Transfers
|
||||
UpArrowGroupTemplate
|
||||
UpArrowTemplate
|
||||
UploadBadge
|
||||
YingYangGroupTemplate
|
||||
YingYangTemplate
|
||||
)
|
||||
|
||||
foreach(IMG ${${PROJECT_NAME}_HIDPI_IMAGES})
|
||||
set(IMG_DIR "Images/Images.xcassets/${IMG}.imageset")
|
||||
list(APPEND ${PROJECT_NAME}_RESOURCES ${IMG_DIR}/${IMG}.png ${IMG_DIR}/${IMG}@2x.png)
|
||||
if(COMBINE_HIDPI_ARTWORK)
|
||||
list(APPEND ${PROJECT_NAME}_RESOURCES ${PROJECT_BINARY_DIR}/Images/${IMG}.tiff)
|
||||
tr_tiff_from_pngs(${PROJECT_BINARY_DIR}/Images/${IMG}.tiff ${IMG_DIR}/${IMG}.png ${IMG_DIR}/${IMG}@2x.png)
|
||||
set_source_files_properties(${PROJECT_BINARY_DIR}/Images/${IMG}.tiff PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources
|
||||
)
|
||||
else()
|
||||
set_source_files_properties(${IMG_DIR}/${IMG}.png ${IMG_DIR}/${IMG}@2x.png PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources
|
||||
)
|
||||
endif()
|
||||
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 ${PROJECT_NAME}_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()
|
||||
|
||||
set(${PROJECT_NAME}_LODPI_IMAGES
|
||||
DownloadBadge
|
||||
UploadBadge
|
||||
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)
|
||||
|
||||
foreach(IMG ${${PROJECT_NAME}_LODPI_IMAGES})
|
||||
set(IMG_DIR "Images/Images.xcassets/${IMG}.imageset")
|
||||
list(APPEND ${PROJECT_NAME}_RESOURCES ${IMG_DIR}/${IMG}.png)
|
||||
set_source_files_properties(${IMG_DIR}/${IMG}.png PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources
|
||||
)
|
||||
endforeach()
|
||||
list(APPEND ${PROJECT_NAME}_RESOURCES ${COMPILED_IMAGE_ASSETS})
|
||||
|
||||
set_source_files_properties(${COMPILED_IMAGE_ASSETS} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources)
|
||||
|
||||
set(${PROJECT_NAME}_LINGUAS
|
||||
da
|
||||
|
@ -383,6 +361,7 @@ foreach(F ${${PROJECT_NAME}_LANG_XIB_FILES})
|
|||
tr_wrap_xib("${F_XIB}" "${F_NIB}")
|
||||
list(APPEND ${PROJECT_NAME}_BASE_XIB_FILES "${F_XIB}")
|
||||
list(APPEND ${PROJECT_NAME}_BASE_NIB_FILES "${F_NIB}")
|
||||
source_group(Resources/Base.lproj FILES ${F_XIB})
|
||||
endforeach()
|
||||
|
||||
foreach(LANG ${${PROJECT_NAME}_ENABLED_LINGUAS})
|
||||
|
@ -396,6 +375,7 @@ foreach(LANG ${${PROJECT_NAME}_ENABLED_LINGUAS})
|
|||
foreach(F ${${PROJECT_NAME}_LANG_STRINGS_FILES})
|
||||
list(APPEND ${PROJECT_NAME}_${LANG}_STRINGS_FILES ${LANG}.lproj/${F})
|
||||
endforeach()
|
||||
source_group(Resources/${LANG}.lproj FILES ${${PROJECT_NAME}_${LANG}_STRINGS_FILES})
|
||||
endforeach()
|
||||
|
||||
include_directories(
|
||||
|
@ -414,13 +394,23 @@ add_library(vdkqueue STATIC
|
|||
VDKQueue/VDKQueue.h
|
||||
)
|
||||
|
||||
set_property(TARGET vdkqueue PROPERTY FOLDER "third-party")
|
||||
|
||||
set(BASE_NIB_FILES_RESOURCES_DIR Resources)
|
||||
if(NOT CMAKE_GENERATOR STREQUAL Xcode)
|
||||
string(APPEND BASE_NIB_FILES_RESOURCES_DIR /Base.lproj)
|
||||
endif()
|
||||
set_source_files_properties(${${PROJECT_NAME}_BASE_NIB_FILES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources/Base.lproj)
|
||||
MACOSX_PACKAGE_LOCATION ${BASE_NIB_FILES_RESOURCES_DIR})
|
||||
|
||||
foreach(LANG ${${PROJECT_NAME}_ENABLED_LINGUAS})
|
||||
list(APPEND ${PROJECT_NAME}_RESOURCES ${${PROJECT_NAME}_${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(${${PROJECT_NAME}_${LANG}_STRINGS_FILES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources/${LANG}.lproj)
|
||||
MACOSX_PACKAGE_LOCATION ${STRINGS_FILES_RESOURCES_DIR})
|
||||
endforeach()
|
||||
|
||||
add_executable(${TR_NAME}-mac MACOSX_BUNDLE
|
||||
|
@ -447,6 +437,11 @@ target_link_libraries(${TR_NAME}-mac
|
|||
"-framework Security"
|
||||
)
|
||||
|
||||
if(NOT CMAKE_GENERATOR STREQUAL Xcode)
|
||||
add_custom_command(TARGET ${TR_NAME}-mac POST_BUILD
|
||||
COMMAND ${CODESIGN_EXECUTABLE} -s - -o linker-signed $<TARGET_BUNDLE_DIR:${TR_NAME}-mac>)
|
||||
endif()
|
||||
|
||||
set(MAC_BUNDLE_NAME Transmission)
|
||||
|
||||
set_target_properties(${TR_NAME}-mac PROPERTIES
|
||||
|
|
|
@ -34,7 +34,9 @@
|
|||
<key>CFBundleHelpBookName</key>
|
||||
<string>Transmission Help</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>Transmission</string>
|
||||
<string>@APPICON_NAME@</string>
|
||||
<key>CFBundleIconName</key>
|
||||
<string>@APPICON_NAME@</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.m0k.transmission</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
|
|
|
@ -36,18 +36,24 @@ set(${PROJECT_NAME}_LANG_STRINGS_FILES
|
|||
set(${PROJECT_NAME}_RESOURCES
|
||||
style.css
|
||||
)
|
||||
source_group(Resources FILES ${${PROJECT_NAME}_RESOURCES})
|
||||
|
||||
set_source_files_properties(${${PROJECT_NAME}_RESOURCES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources)
|
||||
|
||||
foreach(LANG ${${PROJECT_NAME}_ENABLED_LINGUAS})
|
||||
set(${PROJECT_NAME}_${LANG}_STRINGS_FILES)
|
||||
set(STRINGS_FILES_RESOURCES_DIR Resources)
|
||||
if(NOT CMAKE_GENERATOR STREQUAL Xcode)
|
||||
string(APPEND STRINGS_FILES_RESOURCES_DIR /${LANG}.lproj)
|
||||
endif()
|
||||
foreach(F ${${PROJECT_NAME}_LANG_STRINGS_FILES})
|
||||
list(APPEND ${PROJECT_NAME}_${LANG}_STRINGS_FILES ${LANG}.lproj/${F})
|
||||
list(APPEND ${PROJECT_NAME}_RESOURCES ${${PROJECT_NAME}_${LANG}_STRINGS_FILES})
|
||||
set_source_files_properties(${${PROJECT_NAME}_${LANG}_STRINGS_FILES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources/${LANG}.lproj)
|
||||
MACOSX_PACKAGE_LOCATION ${STRINGS_FILES_RESOURCES_DIR})
|
||||
endforeach()
|
||||
source_group(Resources/${LANG}.lproj FILES ${${PROJECT_NAME}_${LANG}_STRINGS_FILES})
|
||||
endforeach()
|
||||
|
||||
add_library(${TR_NAME}-mac-ql MODULE
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
project(trqt)
|
||||
|
||||
set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP "Generated Files")
|
||||
set_property(GLOBAL PROPERTY AUTOMOC_SOURCE_GROUP "Generated Files")
|
||||
set_property(GLOBAL PROPERTY AUTORCC_SOURCE_GROUP "Generated Files")
|
||||
set_property(GLOBAL PROPERTY AUTOUIC_SOURCE_GROUP "Generated Files")
|
||||
|
||||
set(${PROJECT_NAME}_SOURCES
|
||||
AboutDialog.cc
|
||||
AddData.cc
|
||||
|
@ -120,7 +125,7 @@ set(${PROJECT_NAME}_HEADERS
|
|||
WatchDir.h
|
||||
)
|
||||
|
||||
tr_qt_wrap_ui(${PROJECT_NAME}_UI_SOURCES
|
||||
set(${PROJECT_NAME}_UI_FILES
|
||||
AboutDialog.ui
|
||||
DetailsDialog.ui
|
||||
LicenseDialog.ui
|
||||
|
@ -134,13 +139,19 @@ tr_qt_wrap_ui(${PROJECT_NAME}_UI_SOURCES
|
|||
StatsDialog.ui
|
||||
TrackersDialog.ui
|
||||
)
|
||||
source_group(Ui FILES ${${PROJECT_NAME}_UI_FILES})
|
||||
|
||||
tr_qt_wrap_ui(${PROJECT_NAME}_UI_SOURCES ${${PROJECT_NAME}_UI_FILES})
|
||||
source_group("Generated Files" FILES ${${PROJECT_NAME}_UI_SOURCES})
|
||||
|
||||
set(${PROJECT_NAME}_QRC_FILES application.qrc)
|
||||
if(WIN32 OR APPLE)
|
||||
list(APPEND ${PROJECT_NAME}_QRC_FILES icons/Faenza/Faenza.qrc)
|
||||
endif()
|
||||
source_group(Resources FILES ${${PROJECT_NAME}_QRC_FILES})
|
||||
|
||||
tr_qt_add_resources(${PROJECT_NAME}_QRC_SOURCES ${${PROJECT_NAME}_QRC_FILES})
|
||||
source_group("Generated Files" FILES ${${PROJECT_NAME}_QRC_SOURCES})
|
||||
|
||||
set(${PROJECT_NAME}_LINGUAS
|
||||
af
|
||||
|
@ -188,6 +199,7 @@ endforeach()
|
|||
|
||||
if(${PROJECT_NAME}_TS_FILES)
|
||||
tr_qt_add_translation(${PROJECT_NAME}_QM_FILES ${${PROJECT_NAME}_TS_FILES})
|
||||
source_group("Generated Files" FILES ${${PROJECT_NAME}_QM_FILES})
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
add_library(gtestall STATIC
|
||||
${THIRD_PARTY_DIR}/googletest/googletest/src/gtest-all.cc
|
||||
${THIRD_PARTY_DIR}/googletest/googletest/src/gtest_main.cc)
|
||||
|
||||
set_property(TARGET gtestall PROPERTY FOLDER "third-party")
|
||||
|
|
|
@ -51,6 +51,8 @@ add_executable(libtransmission-test
|
|||
watchdir-test.cc
|
||||
web-utils-test.cc)
|
||||
|
||||
set_property(TARGET libtransmission-test PROPERTY FOLDER "tests")
|
||||
|
||||
target_compile_definitions(libtransmission-test
|
||||
PRIVATE
|
||||
-DLIBTRANSMISSION_TEST_ASSETS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/assets"
|
||||
|
@ -94,6 +96,8 @@ add_custom_command(
|
|||
add_executable(subprocess-test
|
||||
subprocess-test-program.cc)
|
||||
|
||||
set_property(TARGET subprocess-test PROPERTY FOLDER "tests")
|
||||
|
||||
target_include_directories(subprocess-test
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/libtransmission)
|
||||
|
|
Loading…
Reference in New Issue