seafile-client/fsplugin/CMakeLists.txt
feiniks 2d0a8140a3
Support compile universal (#1460)
Co-authored-by: yangheran <heran.yang@seafile.com>
2023-05-13 17:33:13 +08:00

129 lines
4.6 KiB
CMake

CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
PROJECT(seafile-fsplugin)
SET(PROJECT_VERSION "1.0.0")
IF (NOT (${CMAKE_BUILD_TYPE} MATCHES Release))
SET(CMAKE_BUILD_TYPE Debug)
ENDIF()
SET(CODESIGN_CERTIFICATE "-" CACHE STRING "the certificate to sign code")
MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
IF (NOT APPLE)
MESSAGE(FATAL_ERROR "Support only on OS X")
ENDIF()
IF (NOT CMAKE_GENERATOR STREQUAL Xcode)
MESSAGE(FATAL_ERROR "Support only for Xcode generator")
ENDIF()
## Build with warnings
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wsign-compare -Wno-long-long -Wno-unused-parameter")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wsign-compare -Wno-long-long -Wno-unused-parameter -Woverloaded-virtual")
## Find the dependencies
FIND_LIBRARY(AppKit_LIBRARY AppKit)
FIND_LIBRARY(FinderSync_LIBRARY FinderSync)
FIND_LIBRARY(PlugInKit_LIBRARY PlugInKit
PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks/)
if (NOT PlugInKit_LIBRARY)
MESSAGE(FATAL_ERROR "PlugInKit not found")
endif()
ADD_DEFINITIONS(-fapplication-extension -fmodules)
SET(CMAKE_EXE_LINKER_FLAGS "-fapplication-extension -e _NSExtensionMain -fobjc-arc -fobjc-link-runtime ${CMAKE_EXE_LINKER_FLAGS}")
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
SET(FSPLUGIN_SRC
../src/utils/stl.cpp
../src/utils/stl.h
FinderSync.mm
FinderSyncClient.mm
)
## update en.lproj
ADD_CUSTOM_TARGET(update-lproj
COMMAND genstrings -o en.lproj ${FSPLUGIN_SRC}
DEPENDS ${FSPLUGIN_SRC})
ADD_EXECUTABLE(seafile-finder-sync MACOSX_BUNDLE
${FSPLUGIN_SRC}
)
SET_TARGET_PROPERTIES(seafile-finder-sync PROPERTIES
OUTPUT_NAME "Seafile FinderSync"
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "10.14"
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks @executable_path/../../../../Frameworks"
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES"
XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11"
XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++"
XCODE_ATTRIBUTE_DEVELOPMENT_LANGUAGE "English"
XCODE_ATTRIBUTE_LOCALIZED_RESOURCES_FOLDER_PATH "Seafile FinderSync.appex/English.lproj"
XCODE_ATTRIBUTE_INFOSTRINGS_PATH "Seafile FinderSync.appex/English.lproj/InfoPlist.strings"
XCODE_ATTRIBUTE_UNLOCALIZED_RESOURCES_FOLDER_PATH "Seafile FinderSync.appex"
)
TARGET_LINK_LIBRARIES(seafile-finder-sync
${FinderSync_LIBRARY}
${PlugInKit_LIBRARY}
${AppKit_LIBRARY}
)
### rename to Seafile Client.appex and copy related resource files
SET(BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CONFIGURATION}/Seafile FinderSync.app")
SET(TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}/Seafile FinderSync.appex")
ADD_CUSTOM_TARGET(clean_old_target
COMMAND ${CMAKE_COMMAND} -E remove -f ${TARGET_DIR}
)
ADD_CUSTOM_TARGET(copy_fsplugin
COMMAND ${CMAKE_COMMAND} -E copy_directory ${BUILD_DIR} ${TARGET_DIR}
DEPENDS seafile-finder-sync clean_old_target
)
ADD_CUSTOM_TARGET(create_resource_dir
COMMAND ${CMAKE_COMMAND} -E make_directory ${TARGET_DIR}/Contents/Resources
DEPENDS copy_fsplugin
)
ADD_CUSTOM_TARGET(copy_resources_icns
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/../seafile.icns ${TARGET_DIR}/Contents/Resources/
COMMAND ${CMAKE_COMMAND} -E copy status-done.icns ${TARGET_DIR}/Contents/Resources/
COMMAND ${CMAKE_COMMAND} -E copy status-error.icns ${TARGET_DIR}/Contents/Resources/
COMMAND ${CMAKE_COMMAND} -E copy status-syncing.icns ${TARGET_DIR}/Contents/Resources/
COMMAND ${CMAKE_COMMAND} -E copy status-ignored.icns ${TARGET_DIR}/Contents/Resources/
COMMAND ${CMAKE_COMMAND} -E copy status-locked.icns ${TARGET_DIR}/Contents/Resources/
COMMAND ${CMAKE_COMMAND} -E copy status-locked-by-me.icns ${TARGET_DIR}/Contents/Resources/
DEPENDS create_resource_dir
)
ADD_CUSTOM_TARGET(copy_resources_lproj
DEPENDS create_resource_dir)
SET(FSPLUGIN_LANGS)
file(GLOB FSPLUGIN_LPROJS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.lproj")
FOREACH(LPROJ ${FSPLUGIN_LPROJS})
STRING(REGEX REPLACE "^.*/([a-z]+)\\.lproj/.*$" "\\1" _LANG ${LPROJ})
LIST(FIND FSPLUGIN_LANGS "${_LANG}" _INDEX)
IF(_INDEX EQUAL -1)
LIST(APPEND FSPLUGIN_LANGS ${_LANG})
ADD_CUSTOM_TARGET(copy_resources_lproj_${_LANG}
COMMAND cp -r ${_LANG} ${TARGET_DIR}/Contents/Resources/
DEPENDS create_resource_dir)
ADD_DEPENDENCIES(copy_resources_lproj copy_resources_lproj_${_LANG})
ENDIF(_INDEX EQUAL -1)
ENDFOREACH()
### codesign
FIND_PROGRAM(CODESIGN codesign)
ADD_CUSTOM_TARGET(codesign ALL
COMMAND ${CODESIGN} --force --sign ${CODESIGN_CERTIFICATE} --entitlements ${CMAKE_CURRENT_SOURCE_DIR}/seafile-fsplugin.entitlements ${TARGET_DIR}
DEPENDS copy_resources_icns copy_resources_lproj
)