CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
PROJECT(seafile-client)
SET(SEAFILE_CLIENT_VERSION_MAJOR 6)
SET(SEAFILE_CLIENT_VERSION_MINOR 2)
SET(SEAFILE_CLIENT_VERSION_PATCH 11)
SET(PROJECT_VERSION "${SEAFILE_CLIENT_VERSION_MAJOR}.${SEAFILE_CLIENT_VERSION_MINOR}.${SEAFILE_CLIENT_VERSION_PATCH}")
ADD_DEFINITIONS(-DSEAFILE_CLIENT_VERSION=${PROJECT_VERSION})
INCLUDE(FindPkgConfig)
#library set (charlecao)
set(JANSSON_LIBRARIES libjansson)
set(LIBSEARPC_LIBRARIES libsearpc)
set(LIBSEAFILE_LIBRARIES libseafile)
set(LIBEVENT_LIBRARIES libevent)
set(GLIB_LIBRARIES libglib-2.0)
set(GLOBJECT_LIBRARIES libgobject-2.0)
## Build crash repoter on release build as default
IF (NOT (${CMAKE_BUILD_TYPE} MATCHES Release))
SET(CMAKE_BUILD_TYPE Debug)
ENDIF()
# CMake's builtin UNIX variable is true on Mac/Linux/BSD, but sometimes we want
# to detect for LINUX.
IF (UNIX AND NOT APPLE)
SET(LINUX TRUE)
ENDIF()
IF (APPLE AND NOT CMAKE_OSX_DEPLOYMENT_TARGET)
SET(CMAKE_OSX_DEPLOYMENT_TARGET "10.7")
ENDIF()
FIND_PROGRAM(git_executable NAMES git git.exe git.cmd)
IF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git AND NOT (${CMAKE_BUILD_TYPE} MATCHES Release))
EXECUTE_PROCESS(COMMAND
${git_executable} rev-list HEAD --count
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE SEAFILE_CLIENT_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE )
ADD_DEFINITIONS(-DSEAFILE_CLIENT_REVISION=${SEAFILE_CLIENT_REVISION})
ENDIF()
SET(PATH_TO_BREAKPAD_ROOT CACHE "Path to breakpad's root" "")
OPTION(BUILD_TESTING "Build Test" OFF)
OPTION(BUILD_DOCS "Build Documents" OFF)
OPTION(BUILD_SHIBBOLETH_SUPPORT "Build Shibboleth support" OFF)
option(BUILD_ENABLE_WARNINGS "Enable compiler warnings." ON)
option(BUILD_SPARKLE_SUPPORT "Build Sparkle support" OFF)
IF (BUILD_SPARKLE_SUPPORT)
ADD_DEFINITIONS(-DHAVE_SPARKLE_SUPPORT)
IF (LINUX)
message(FATAL_ERROR "Sparkle Support is not available for linux." )
ENDIF()
SET(platform_specific_moc_headers ${platform_specific_moc_headers} src/auto-update-service.h)
SET(platform_specific_sources ${platform_specific_sources} src/auto-update-service.cpp)
IF (NOT (${CMAKE_BUILD_TYPE} MATCHES Release))
ADD_DEFINITIONS(-DSEAFILE_SPARKLE_DEBUG)
ENDIF()
ENDIF()
MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
## build in PIC mode
IF (NOT WIN32)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
ENDIF()
## Setup warnings ouput if enabled
## but don't warning on unsupported warnings
if(BUILD_ENABLE_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")
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-warning-option")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -Wno-inconsistent-missing-override")
endif()
endif()
## color diagnostics fix
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcolor-diagnostics")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcolor-diagnostics")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
execute_process(COMMAND ${CMAKE_CXX_COMPILER}
-dumpversion OUTPUT_VARIABLE GCC_VERSION)
if(GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=always")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always")
endif()
endif()
IF (WIN32)
CONFIGURE_FILE(
${CMAKE_SOURCE_DIR}/seafile-applet.rc.in
${CMAKE_BINARY_DIR}/seafile-applet.rc
)
SET(EXTRA_LIBS ${EXTRA_LIBS} psapi ws2_32 shlwapi mpr crypt32)
SET(EXTRA_SOURCES ${EXTRA_SOURCES} ${CMAKE_BINARY_DIR}/seafile-applet.rc)
IF (${CMAKE_BUILD_TYPE} MATCHES Release)
SET(GUI_TYPE WIN32)
ENDIF()
SET(platform_specific_moc_headers ${platform_specific_moc_headers} src/ext-handler.h)
SET(platform_specific_sources ${platform_specific_sources} src/ext-handler.cpp)
IF (BUILD_SPARKLE_SUPPORT)
IF(NOT EXISTS "${CMAKE_SOURCE_DIR}/WinSparkle.lib")
message(FATAL_ERROR "File ${CMAKE_SOURCE_DIR}/WinSparkle.lib not found in current directory. Please setup winsparkle correctly." )
ENDIF()
SET(SPARKLE_LIBS ${CMAKE_SOURCE_DIR}/WinSparkle.lib)
ENDIF()
ELSEIF (LINUX)
INCLUDE_DIRECTORIES(${QT_QTDBUS_INCLUDE_DIR})
LINK_DIRECTORIES(${QT_QTDBUS_LIBRARIES})
SET(EXTRA_LIBS ${EXTRA_LIBS} ${QT_QTDBUS_LIBRARIES})
ELSEIF (APPLE)
IF (BUILD_SPARKLE_SUPPORT)
SET(platform_specific_sources ${platform_specific_sources} src/mac-sparkle-support.mm)
SET_SOURCE_FILES_PROPERTIES(src/mac-sparkle-support.mm
PROPERTIES COMPILE_FLAGS -fobjc-arc)
SET(SPARKLE_FRAMEWORK /usr/local/Sparkle.framework)
IF(NOT EXISTS "${SPARKLE_FRAMEWORK}")
message(FATAL_ERROR "File ${SPARKLE_FRAMEWORK} not found. Please setup it correctly.")
ENDIF()
INCLUDE_DIRECTORIES(${SPARKLE_FRAMEWORK}/Headers)
SET(EXTRA_LIBS ${EXTRA_LIBS} ${SPARKLE_FRAMEWORK})
ENDIF()
SET(platform_specific_sources ${platform_specific_sources} src/application.cpp)
## Enforce ARC for this file, since ARC is only supported after the objc
## runtime changes in os x 10.10
SET_SOURCE_FILES_PROPERTIES(src/utils/utils-mac.mm
PROPERTIES COMPILE_FLAGS -fobjc-arc)
FIND_LIBRARY(COCOA_LIBRARY Cocoa)
MARK_AS_ADVANCED (COCOA_LIBRARY)
FIND_LIBRARY(Sec_LIBRARY Security)
MARK_AS_ADVANCED (Sec_LIBRARY)
SET(EXTRA_LIBS ${EXTRA_LIBS} ${COCOA_LIBRARY} ${Sec_LIBRARY})
ENDIF()
IF(APPLE)
ADD_DEFINITIONS(-DHAVE_FINDER_SYNC_SUPPORT)
SET(platform_specific_moc_headers ${platform_specific_moc_headers} src/finder-sync/finder-sync-host.h)
SET(platform_specific_sources ${platform_specific_sources}
src/finder-sync/finder-sync.cpp src/finder-sync/finder-sync-listener.mm
src/finder-sync/finder-sync-host.cpp)
SET_SOURCE_FILES_PROPERTIES(src/finder-sync/finder-sync-listener.mm
PROPERTIES COMPILE_FLAGS -fobjc-arc)
ENDIF()
####################
###### BEGIN: QT configuration
####################
SET(QT_VERSION_MAJOR 5)
# Qt 5.6.0 removes QtWebKit, we need to use QtWebEnigne. First we detect the
# current qt version, then use proper name based on the version. However we
# have to keep using QtWebKit on windows because QtWebEngine can't be
# compiled in msys2/mingw (QtWebEnigne is based on chrome, which has to be
# compiled with MSVC.)
FIND_PROGRAM(qmake_executable NAMES qmake qmake.exe)
EXECUTE_PROCESS(COMMAND
bash -c "${qmake_executable} --version | grep -iE '^using qt version [0-9.]+' | awk '{print $4}'"
OUTPUT_VARIABLE DETECTED_QT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
MESSAGE("qt5 version: ${DETECTED_QT_VERSION}")
IF(WIN32 OR DETECTED_QT_VERSION VERSION_LESS 5.6.0)
ADD_DEFINITIONS(-DSEAFILE_USE_WEBKIT)
SET(WEBKIT_NAME "WebKit")
SET(WEBKIT_WIDGETS_NAME "WebKitWidgets")
ELSE()
SET(WEBKIT_NAME "WebEngine")
SET(WEBENGINE_CORE "WebEngineCore")
SET(WEBKIT_WIDGETS_NAME "WebEngineWidgets")
SET(SHIB_EXTRA_HEADER "src/shib/shib-helper.h")
ENDIF()
SET(USE_QT_LIBRARIES
Core Gui Widgets LinguistTools Network
)
IF (BUILD_SHIBBOLETH_SUPPORT)
SET(USE_QT_LIBRARIES ${USE_QT_LIBRARIES} ${WEBENGINE_CORE} ${WEBKIT_NAME} ${WEBKIT_WIDGETS_NAME})
ADD_DEFINITIONS(-DHAVE_SHIBBOLETH_SUPPORT)
ENDIF()
IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
SET(USE_QT_LIBRARIES ${USE_QT_LIBRARIES} "DBus")
ENDIF()
FIND_PACKAGE(Qt5 REQUIRED ${USE_QT_LIBRARIES})
SET(QT_LUPDATE_EXECUTABLE ${Qt5_LUPDATE_EXECUTABLE})
# from QT 5.4.0 Changelog
# The Qt binary packages are now configured with C++11 enabled.
# this requires your gcc compiler newer than 4.8.1 or clang newer than 3.3
if (CYGWIN OR MINGW)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
else()
set(CM