2021-11-03 05:13:44 +00:00
|
|
|
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
|
|
|
|
|
|
|
# The value of this variable should be set prior to the first project() command invocation.
|
|
|
|
# See: https://cmake.org/cmake/help/latest/variable/CMAKE_OSX_DEPLOYMENT_TARGET.html
|
|
|
|
if(CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "")
|
|
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.10")
|
|
|
|
endif()
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
project(transmission)
|
|
|
|
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
|
|
|
|
2016-09-10 17:08:58 +00:00
|
|
|
set(CMAKE_MACOSX_RPATH ON)
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
include(CheckIncludeFile)
|
|
|
|
include(CheckIncludeFiles)
|
|
|
|
include(CheckFunctionExists)
|
|
|
|
include(CheckLibraryExists)
|
|
|
|
include(ExternalProject)
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
include(TrMacros)
|
|
|
|
|
|
|
|
option(ENABLE_DAEMON "Build daemon" ON)
|
|
|
|
tr_auto_option(ENABLE_GTK "Build GTK+ client" AUTO)
|
|
|
|
tr_auto_option(ENABLE_QT "Build Qt client" AUTO)
|
2016-09-10 17:08:58 +00:00
|
|
|
tr_auto_option(ENABLE_MAC "Build Mac client" AUTO)
|
2020-10-24 01:04:25 +00:00
|
|
|
option(ENABLE_WEB "Build Web client" OFF)
|
2014-12-01 19:55:22 +00:00
|
|
|
option(ENABLE_UTILS "Build utils (create, edit, show)" ON)
|
|
|
|
option(ENABLE_CLI "Build command-line client" OFF)
|
|
|
|
option(ENABLE_TESTS "Build unit tests" ON)
|
|
|
|
option(ENABLE_LIGHTWEIGHT "Optimize libtransmission for low-resource systems: smaller cache size, prefer unencrypted peer connections, etc." OFF)
|
|
|
|
option(ENABLE_UTP "Build µTP support" ON)
|
|
|
|
option(ENABLE_NLS "Enable native language support" ON)
|
|
|
|
option(INSTALL_DOC "Build/install documentation" ON)
|
|
|
|
option(INSTALL_LIB "Install the library" OFF)
|
2021-09-12 19:36:51 +00:00
|
|
|
tr_auto_option(RUN_CLANG_TIDY "Run clang-tidy on the code" AUTO)
|
2014-12-01 19:55:22 +00:00
|
|
|
tr_auto_option(USE_SYSTEM_EVENT2 "Use system event2 library" AUTO)
|
|
|
|
tr_auto_option(USE_SYSTEM_DHT "Use system dht library" AUTO)
|
|
|
|
tr_auto_option(USE_SYSTEM_MINIUPNPC "Use system miniupnpc library" AUTO)
|
|
|
|
tr_auto_option(USE_SYSTEM_NATPMP "Use system natpmp library" AUTO)
|
|
|
|
tr_auto_option(USE_SYSTEM_UTP "Use system utp library" AUTO)
|
2015-01-01 21:16:36 +00:00
|
|
|
tr_auto_option(USE_SYSTEM_B64 "Use system b64 library" AUTO)
|
2021-10-24 18:19:57 +00:00
|
|
|
tr_list_option(WITH_CRYPTO "Use specified crypto library" AUTO openssl cyassl polarssl ccrypto)
|
2014-12-01 19:55:22 +00:00
|
|
|
tr_auto_option(WITH_INOTIFY "Enable inotify support (on systems that support it)" AUTO)
|
|
|
|
tr_auto_option(WITH_KQUEUE "Enable kqueue support (on systems that support it)" AUTO)
|
2016-11-27 19:17:07 +00:00
|
|
|
tr_auto_option(WITH_LIBAPPINDICATOR "Use libappindicator in GTK+ client" AUTO)
|
2014-12-01 19:55:22 +00:00
|
|
|
tr_auto_option(WITH_SYSTEMD "Add support for systemd startup notification (on systems that support it)" AUTO)
|
|
|
|
|
|
|
|
set(TR_NAME ${PROJECT_NAME})
|
|
|
|
|
|
|
|
# convention: -TR MAJOR MINOR MAINT STATUS - (each a single char)
|
|
|
|
# STATUS: "X" for prerelease beta builds,
|
|
|
|
# "Z" for unsupported trunk builds,
|
|
|
|
# "0" for stable, supported releases
|
|
|
|
# these should be the only two lines you need to change
|
2020-05-16 00:38:43 +00:00
|
|
|
set(TR_USER_AGENT_PREFIX "3.00+")
|
|
|
|
set(TR_PEER_ID_PREFIX "-TR300Z-")
|
2014-12-01 19:55:22 +00:00
|
|
|
|
|
|
|
string(REGEX MATCH "^([0-9]+)\\.([0-9]+).*" TR_VERSION "${TR_USER_AGENT_PREFIX}")
|
|
|
|
set(TR_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
|
|
|
set(TR_VERSION_MINOR "${CMAKE_MATCH_2}")
|
|
|
|
|
|
|
|
if(TR_PEER_ID_PREFIX MATCHES "X-$")
|
|
|
|
set(TR_BETA_RELEASE 1)
|
|
|
|
elseif(TR_PEER_ID_PREFIX MATCHES "Z-$")
|
|
|
|
set(TR_NIGHTLY_RELEASE 1)
|
|
|
|
else()
|
|
|
|
set(TR_STABLE_RELEASE 1)
|
|
|
|
endif()
|
|
|
|
|
2016-09-02 19:02:51 +00:00
|
|
|
set(TR_VCS_REVISION_FILE "${CMAKE_SOURCE_DIR}/REVISION")
|
2015-04-24 19:14:56 +00:00
|
|
|
|
2020-10-13 00:15:19 +00:00
|
|
|
if(EXISTS ${CMAKE_SOURCE_DIR}/.git)
|
2020-09-14 02:41:32 +00:00
|
|
|
find_package(Git)
|
|
|
|
endif()
|
|
|
|
|
2017-01-14 21:54:56 +00:00
|
|
|
if(NOT "$ENV{JENKINS_URL}" STREQUAL "" AND NOT "$ENV{GIT_COMMIT}" STREQUAL "")
|
|
|
|
set(TR_VCS_REVISION "$ENV{GIT_COMMIT}")
|
|
|
|
elseif(NOT "$ENV{TEAMCITY_PROJECT_NAME}" STREQUAL "" AND NOT "$ENV{BUILD_VCS_NUMBER}" STREQUAL "")
|
|
|
|
set(TR_VCS_REVISION "$ENV{BUILD_VCS_NUMBER}")
|
2020-09-14 02:41:32 +00:00
|
|
|
elseif(GIT_FOUND)
|
|
|
|
execute_process(
|
|
|
|
COMMAND
|
|
|
|
${GIT_EXECUTABLE} rev-list --max-count=1 HEAD
|
|
|
|
WORKING_DIRECTORY
|
|
|
|
${CMAKE_SOURCE_DIR}
|
|
|
|
OUTPUT_VARIABLE
|
|
|
|
TR_VCS_REVISION
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
)
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
2016-09-02 19:02:51 +00:00
|
|
|
if("${TR_VCS_REVISION}" STREQUAL "" AND EXISTS "${TR_VCS_REVISION_FILE}")
|
|
|
|
file(READ "${TR_VCS_REVISION_FILE}" TR_VCS_REVISION)
|
2015-04-24 19:14:56 +00:00
|
|
|
endif()
|
|
|
|
|
2017-01-14 21:54:56 +00:00
|
|
|
string(STRIP "${TR_VCS_REVISION}" TR_VCS_REVISION)
|
|
|
|
|
2016-09-02 19:45:03 +00:00
|
|
|
if(NOT "${TR_VCS_REVISION}" STREQUAL "")
|
2017-01-14 21:54:56 +00:00
|
|
|
file(WRITE "${TR_VCS_REVISION_FILE}" "${TR_VCS_REVISION}\n")
|
2015-04-24 19:14:56 +00:00
|
|
|
else()
|
2016-09-02 19:45:03 +00:00
|
|
|
set(TR_VCS_REVISION 0)
|
|
|
|
file(REMOVE "${TR_VCS_REVISION_FILE}")
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
2017-01-14 21:54:56 +00:00
|
|
|
string(SUBSTRING "${TR_VCS_REVISION}" 0 10 TR_VCS_REVISION)
|
|
|
|
|
2015-04-14 22:46:40 +00:00
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
|
2020-07-29 02:38:27 +00:00
|
|
|
set(CURL_MINIMUM 7.28.0)
|
2014-12-01 19:55:22 +00:00
|
|
|
set(EVENT2_MINIMUM 2.0.10)
|
2015-10-13 21:24:31 +00:00
|
|
|
set(OPENSSL_MINIMUM 0.9.7)
|
2015-01-07 02:04:08 +00:00
|
|
|
set(CYASSL_MINIMUM 3.0)
|
2015-01-07 13:41:22 +00:00
|
|
|
set(POLARSSL_MINIMUM 1.2)
|
2014-12-01 19:55:22 +00:00
|
|
|
set(ZLIB_MINIMUM 1.2.3)
|
|
|
|
set(GTK_MINIMUM 3.4.0)
|
2021-10-18 20:22:31 +00:00
|
|
|
set(GLIB_MINIMUM 2.50.1)
|
2014-12-01 19:55:22 +00:00
|
|
|
set(GIO_MINIMUM 2.26.0)
|
|
|
|
set(LIBAPPINDICATOR_MINIMUM 0.4.90)
|
2017-02-11 10:24:42 +00:00
|
|
|
set(QT5_MINIMUM 5.2)
|
2014-12-01 19:55:22 +00:00
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
foreach(L C CXX)
|
2020-08-11 18:11:55 +00:00
|
|
|
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DWIN32")
|
2014-12-01 19:55:22 +00:00
|
|
|
# Target version (Vista and up)
|
|
|
|
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DWINVER=0x0600 -D_WIN32_WINNT=0x0600")
|
|
|
|
# Use Unicode API (although we always use W or A names explicitly)
|
|
|
|
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DUNICODE -D_UNICODE")
|
|
|
|
# Ignore various deprecation and security warnings (at least for now)
|
|
|
|
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS")
|
|
|
|
# Increase maximum FD_SET size
|
|
|
|
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DFD_SETSIZE=1024")
|
|
|
|
if(MSVC)
|
|
|
|
# Reduce noise (at least for now)
|
|
|
|
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} /wd4244 /wd4267")
|
|
|
|
endif()
|
2015-12-31 12:41:17 +00:00
|
|
|
|
|
|
|
if(MINGW)
|
|
|
|
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -D__USE_MINGW_ANSI_STDIO=1")
|
|
|
|
endif()
|
2014-12-01 19:55:22 +00:00
|
|
|
endforeach()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
find_package(Threads)
|
|
|
|
find_package(PkgConfig QUIET)
|
|
|
|
|
|
|
|
find_package(CURL ${CURL_MINIMUM} REQUIRED)
|
2020-08-18 06:56:50 +00:00
|
|
|
if(TARGET CURL::libcurl)
|
|
|
|
set(CURL_LIBRARIES CURL::libcurl)
|
|
|
|
set(CURL_INCLUDE_DIRS)
|
|
|
|
endif()
|
2014-12-01 19:55:22 +00:00
|
|
|
|
2016-02-07 11:54:01 +00:00
|
|
|
find_package(ICONV)
|
2014-12-01 19:55:22 +00:00
|
|
|
|
2017-02-23 20:18:45 +00:00
|
|
|
set(CRYPTO_PKG "")
|
2021-10-24 18:19:57 +00:00
|
|
|
if(WITH_CRYPTO STREQUAL "AUTO" OR WITH_CRYPTO STREQUAL "ccrypto")
|
|
|
|
tr_get_required_flag(WITH_CRYPTO CCRYPTO_IS_REQUIRED)
|
|
|
|
find_path(CCRYPTO_INCLUDE_DIR NAMES CommonCrypto/CommonCrypto.h ${CCRYPTO_IS_REQUIRED})
|
|
|
|
mark_as_advanced(CCRYPTO_INCLUDE_DIR)
|
|
|
|
tr_fixup_list_option(WITH_CRYPTO "ccrypto" CCRYPTO_INCLUDE_DIR "AUTO" CCRYPTO_IS_REQUIRED)
|
|
|
|
if(WITH_CRYPTO STREQUAL "ccrypto")
|
|
|
|
set(CRYPTO_PKG "ccrypto")
|
|
|
|
set(CRYPTO_INCLUDE_DIRS)
|
|
|
|
set(CRYPTO_LIBRARIES)
|
|
|
|
endif()
|
|
|
|
endif()
|
2015-01-07 02:04:08 +00:00
|
|
|
if(WITH_CRYPTO STREQUAL "AUTO" OR WITH_CRYPTO STREQUAL "openssl")
|
|
|
|
tr_get_required_flag(WITH_CRYPTO OPENSSL_IS_REQUIRED)
|
|
|
|
find_package(OpenSSL ${OPENSSL_MINIMUM} ${OPENSSL_IS_REQUIRED})
|
|
|
|
tr_fixup_list_option(WITH_CRYPTO "openssl" OPENSSL_FOUND "AUTO" OPENSSL_IS_REQUIRED)
|
|
|
|
if(WITH_CRYPTO STREQUAL "openssl")
|
|
|
|
set(CRYPTO_PKG "openssl")
|
|
|
|
set(CRYPTO_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
|
|
|
|
set(CRYPTO_LIBRARIES ${OPENSSL_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
if(WITH_CRYPTO STREQUAL "AUTO" OR WITH_CRYPTO STREQUAL "cyassl")
|
|
|
|
tr_get_required_flag(WITH_CRYPTO CYASSL_IS_REQUIRED)
|
|
|
|
find_package(CyaSSL ${CYASSL_MINIMUM} ${CYASSL_IS_REQUIRED})
|
|
|
|
tr_fixup_list_option(WITH_CRYPTO "cyassl" CYASSL_FOUND "AUTO" CYASSL_IS_REQUIRED)
|
|
|
|
if(WITH_CRYPTO STREQUAL "cyassl")
|
|
|
|
set(CRYPTO_PKG "cyassl")
|
|
|
|
set(CRYPTO_INCLUDE_DIRS ${CYASSL_INCLUDE_DIRS})
|
|
|
|
set(CRYPTO_LIBRARIES ${CYASSL_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
endif()
|
2015-01-07 13:19:00 +00:00
|
|
|
if(WITH_CRYPTO STREQUAL "AUTO" OR WITH_CRYPTO STREQUAL "polarssl")
|
|
|
|
tr_get_required_flag(WITH_CRYPTO POLARSSL_IS_REQUIRED)
|
|
|
|
find_package(PolarSSL ${POLARSSL_MINIMUM} ${POLARSSL_IS_REQUIRED})
|
|
|
|
tr_fixup_list_option(WITH_CRYPTO "polarssl" POLARSSL_FOUND "AUTO" POLARSSL_IS_REQUIRED)
|
|
|
|
if(WITH_CRYPTO STREQUAL "polarssl")
|
|
|
|
set(CRYPTO_PKG "polarssl")
|
|
|
|
set(CRYPTO_INCLUDE_DIRS ${POLARSSL_INCLUDE_DIRS})
|
|
|
|
set(CRYPTO_LIBRARIES ${POLARSSL_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
endif()
|
2015-01-07 02:04:08 +00:00
|
|
|
# We should have found the library by now
|
|
|
|
if(CRYPTO_PKG STREQUAL "")
|
|
|
|
if(WITH_CRYPTO STREQUAL "AUTO")
|
|
|
|
message(FATAL_ERROR "Unable to find any supported crypto library.")
|
|
|
|
else()
|
|
|
|
message(FATAL_ERROR "Requested crypto library '${WITH_CRYPTO}' is not supported.")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
if(ENABLE_GTK)
|
|
|
|
tr_get_required_flag(ENABLE_GTK GTK_IS_REQUIRED)
|
|
|
|
|
|
|
|
pkg_check_modules(GTK ${GTK_IS_REQUIRED}
|
2021-10-18 20:22:31 +00:00
|
|
|
gtkmm-3.0>=${GTK_MINIMUM}
|
|
|
|
glibmm-2.4>=${GLIB_MINIMUM}
|
|
|
|
giomm-2.4>=${GIO_MINIMUM})
|
2014-12-01 19:55:22 +00:00
|
|
|
|
|
|
|
tr_fixup_auto_option(ENABLE_GTK GTK_FOUND GTK_IS_REQUIRED)
|
|
|
|
|
2016-11-27 19:17:07 +00:00
|
|
|
if(ENABLE_GTK AND WITH_LIBAPPINDICATOR)
|
|
|
|
tr_get_required_flag(WITH_LIBAPPINDICATOR LIBAPPINDICATOR_IS_REQUIRED)
|
2014-12-01 19:55:22 +00:00
|
|
|
pkg_check_modules(LIBAPPINDICATOR appindicator3-0.1>=${LIBAPPINDICATOR_MINIMUM})
|
2016-11-27 19:17:07 +00:00
|
|
|
tr_fixup_auto_option(WITH_LIBAPPINDICATOR LIBAPPINDICATOR_FOUND LIBAPPINDICATOR_IS_REQUIRED)
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
2016-11-27 19:17:07 +00:00
|
|
|
else()
|
|
|
|
set(WITH_LIBAPPINDICATOR OFF)
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(ENABLE_QT)
|
|
|
|
tr_get_required_flag(ENABLE_QT QT_IS_REQUIRED)
|
|
|
|
|
|
|
|
if(POLICY CMP0020)
|
|
|
|
cmake_policy(SET CMP0020 NEW)
|
|
|
|
endif()
|
|
|
|
|
2015-12-16 18:46:06 +00:00
|
|
|
set(QT_TARGETS)
|
2015-12-17 18:10:43 +00:00
|
|
|
set(ENABLE_QT_COM_INTEROP OFF)
|
|
|
|
set(ENABLE_QT_DBUS_INTEROP OFF)
|
|
|
|
|
2017-02-11 10:24:42 +00:00
|
|
|
set(QT5_REQUIRED_MODULES Core Gui Widgets Network LinguistTools)
|
|
|
|
set(QT5_OPTIONAL_MODULES DBus AxContainer AxServer)
|
|
|
|
|
2017-02-11 17:48:13 +00:00
|
|
|
if(WIN32)
|
|
|
|
list(APPEND QT5_REQUIRED_MODULES WinExtras)
|
|
|
|
endif()
|
|
|
|
|
2017-02-11 10:24:42 +00:00
|
|
|
foreach(M ${QT5_REQUIRED_MODULES})
|
|
|
|
find_package(Qt5${M} ${QT5_MINIMUM} QUIET)
|
|
|
|
if(Qt5${M}_FOUND)
|
|
|
|
if(NOT M STREQUAL "LinguistTools")
|
|
|
|
list(APPEND QT_TARGETS Qt5::${M})
|
2015-12-17 18:10:43 +00:00
|
|
|
endif()
|
2017-02-11 10:24:42 +00:00
|
|
|
else()
|
|
|
|
set(QT_TARGETS)
|
|
|
|
break()
|
2015-12-16 20:01:03 +00:00
|
|
|
endif()
|
2017-02-11 10:24:42 +00:00
|
|
|
endforeach()
|
|
|
|
|
|
|
|
if(QT_TARGETS)
|
|
|
|
foreach(M ${QT5_OPTIONAL_MODULES})
|
|
|
|
find_package(Qt5${M} ${QT5_MINIMUM} QUIET)
|
|
|
|
if(Qt5${M}_FOUND)
|
|
|
|
list(APPEND QT_TARGETS Qt5::${M})
|
2015-12-16 18:46:06 +00:00
|
|
|
endif()
|
|
|
|
endforeach()
|
2017-02-11 10:24:42 +00:00
|
|
|
|
|
|
|
if(Qt5AxContainer_FOUND AND Qt5AxServer_FOUND)
|
|
|
|
set(ENABLE_QT_COM_INTEROP ON)
|
|
|
|
|
|
|
|
find_program(MIDL_EXECUTABLE midl)
|
|
|
|
if(NOT MIDL_EXECUTABLE)
|
|
|
|
set(ENABLE_QT_COM_INTEROP OFF)
|
2015-12-17 18:10:43 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2017-02-11 10:24:42 +00:00
|
|
|
if(Qt5DBus_FOUND)
|
|
|
|
set(ENABLE_QT_DBUS_INTEROP ON)
|
2015-12-16 20:01:03 +00:00
|
|
|
endif()
|
2015-12-16 18:46:06 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
set(QT_FOUND ON)
|
2015-12-17 18:10:43 +00:00
|
|
|
if(NOT QT_TARGETS OR NOT (ENABLE_QT_COM_INTEROP OR ENABLE_QT_DBUS_INTEROP))
|
2015-12-16 18:46:06 +00:00
|
|
|
if(QT_IS_REQUIRED)
|
2015-12-17 18:10:43 +00:00
|
|
|
message(FATAL_ERROR "Unable to find required Qt libraries.")
|
2015-12-16 18:46:06 +00:00
|
|
|
endif()
|
|
|
|
set(QT_FOUND OFF)
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
tr_fixup_auto_option(ENABLE_QT QT_FOUND QT_IS_REQUIRED)
|
|
|
|
endif()
|
|
|
|
|
2016-09-10 17:08:58 +00:00
|
|
|
if(ENABLE_MAC)
|
|
|
|
tr_get_required_flag(ENABLE_MAC MAC_IS_REQUIRED)
|
|
|
|
|
|
|
|
if(APPLE)
|
|
|
|
set(MAC_FOUND ON)
|
|
|
|
else()
|
|
|
|
set(MAC_FOUND OFF)
|
|
|
|
if(MAC_IS_REQUIRED)
|
|
|
|
message(SEND_ERROR "Mac build is impossible on non-Mac system.")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
tr_fixup_auto_option(ENABLE_MAC MAC_FOUND MAC_IS_REQUIRED)
|
|
|
|
endif()
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
find_package(ZLIB ${ZLIB_MINIMUM})
|
|
|
|
if(ZLIB_FOUND)
|
|
|
|
add_definitions(-DHAVE_ZLIB)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set(THIRD_PARTY_DIR ${CMAKE_SOURCE_DIR}/third-party)
|
|
|
|
|
2021-10-25 08:14:04 +00:00
|
|
|
tr_add_external_auto_library(EVENT2 libevent event
|
|
|
|
CMAKE_ARGS
|
|
|
|
-DEVENT__DISABLE_OPENSSL:BOOL=ON
|
|
|
|
-DEVENT__DISABLE_BENCHMARK:BOOL=ON
|
|
|
|
-DEVENT__DISABLE_TESTS:BOOL=ON
|
|
|
|
-DEVENT__DISABLE_REGRESS:BOOL=ON
|
|
|
|
-DEVENT__DISABLE_SAMPLES:BOOL=ON
|
|
|
|
-DEVENT__LIBRARY_TYPE:STRING=STATIC)
|
2014-12-01 19:55:22 +00:00
|
|
|
|
2017-01-01 18:40:11 +00:00
|
|
|
tr_add_external_auto_library(NATPMP libnatpmp natpmp)
|
2014-12-01 19:55:22 +00:00
|
|
|
if(NOT USE_SYSTEM_NATPMP)
|
|
|
|
set(NATPMP_DEFINITIONS -DNATPMP_STATICLIB)
|
|
|
|
endif()
|
|
|
|
|
2017-01-01 18:40:11 +00:00
|
|
|
tr_add_external_auto_library(MINIUPNPC miniupnpc miniupnpc
|
2014-12-01 19:55:22 +00:00
|
|
|
CMAKE_ARGS
|
|
|
|
-DUPNPC_BUILD_STATIC=ON
|
|
|
|
-DUPNPC_BUILD_SHARED=OFF
|
|
|
|
-DUPNPC_BUILD_TESTS=OFF)
|
|
|
|
set(MINIUPNPC_DEFINITIONS -DSYSTEM_MINIUPNP)
|
|
|
|
if(NOT USE_SYSTEM_MINIUPNPC)
|
|
|
|
list(APPEND MINIUPNPC_DEFINITIONS -DMINIUPNP_STATICLIB)
|
|
|
|
set(MINIUPNPC_VERSION 1.9)
|
2015-04-21 13:56:17 +00:00
|
|
|
set(MINIUPNPC_API_VERSION 12)
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
2017-01-01 18:40:11 +00:00
|
|
|
tr_add_external_auto_library(DHT dht dht)
|
2014-12-01 19:55:22 +00:00
|
|
|
|
|
|
|
if(ENABLE_UTP)
|
2017-01-01 18:40:11 +00:00
|
|
|
tr_add_external_auto_library(UTP libutp utp)
|
2017-05-20 10:04:49 +00:00
|
|
|
|
|
|
|
if(UTP_UPSTREAM_TARGET)
|
|
|
|
# Use C++ linker for anything that depends on static libutp
|
|
|
|
# TODO: switch to imported targets for all the dependencies
|
|
|
|
add_library(UTP::UTP STATIC IMPORTED)
|
|
|
|
set_property(TARGET UTP::UTP PROPERTY IMPORTED_LOCATION "${UTP_LIBRARIES}")
|
|
|
|
set_property(TARGET UTP::UTP PROPERTY IMPORTED_LINK_INTERFACE_LANGUAGES "CXX")
|
|
|
|
set(UTP_LIBRARIES UTP::UTP)
|
|
|
|
endif()
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
2017-01-01 18:40:11 +00:00
|
|
|
tr_add_external_auto_library(B64 libb64 b64)
|
2015-01-01 21:16:36 +00:00
|
|
|
|
2021-09-12 03:47:29 +00:00
|
|
|
add_subdirectory(third-party/arc4)
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
if(WITH_INOTIFY)
|
|
|
|
tr_get_required_flag(WITH_INOTIFY INOTIFY_IS_REQUIRED)
|
|
|
|
|
|
|
|
set(INOTIFY_FOUND OFF)
|
|
|
|
check_include_file(sys/inotify.h HAVE_SYS_INOTIFY_H)
|
|
|
|
check_function_exists(inotify_init HAVE_INOTIFY_INIT)
|
|
|
|
if(HAVE_SYS_INOTIFY_H AND HAVE_INOTIFY_INIT)
|
|
|
|
set(INOTIFY_FOUND ON)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
tr_fixup_auto_option(WITH_INOTIFY INOTIFY_FOUND INOTIFY_IS_REQUIRED)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(WITH_KQUEUE)
|
|
|
|
tr_get_required_flag(WITH_KQUEUE KQUEUE_IS_REQUIRED)
|
|
|
|
|
|
|
|
set(KQUEUE_FOUND OFF)
|
|
|
|
check_include_files("sys/types.h;sys/event.h" HAVE_SYS_EVENT_H)
|
|
|
|
check_function_exists(kqueue HAVE_KQUEUE)
|
|
|
|
if(HAVE_SYS_EVENT_H AND HAVE_KQUEUE)
|
|
|
|
set(KQUEUE_FOUND ON)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
tr_fixup_auto_option(WITH_KQUEUE KQUEUE_FOUND KQUEUE_IS_REQUIRED)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(WITH_SYSTEMD)
|
|
|
|
tr_get_required_flag(WITH_SYSTEMD SYSTEMD_IS_REQUIRED)
|
2016-12-19 02:53:19 +00:00
|
|
|
find_package(SYSTEMD)
|
2016-04-23 16:13:25 +00:00
|
|
|
tr_fixup_auto_option(WITH_SYSTEMD SYSTEMD_FOUND SYSTEMD_IS_REQUIRED)
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
include_directories(${CMAKE_BINARY_DIR})
|
|
|
|
|
2015-04-23 21:32:00 +00:00
|
|
|
if(WIN32)
|
|
|
|
foreach(L C CXX)
|
|
|
|
# Filter out needless definitions
|
|
|
|
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DWIN32_LEAN_AND_MEAN -DNOMINMAX")
|
|
|
|
endforeach()
|
|
|
|
endif()
|
|
|
|
|
2020-08-11 18:11:55 +00:00
|
|
|
## Compiler standard version
|
|
|
|
|
2021-11-03 05:13:44 +00:00
|
|
|
set(CMAKE_C_STANDARD 11)
|
|
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
2014-12-01 19:55:22 +00:00
|
|
|
|
2020-08-11 18:11:55 +00:00
|
|
|
### Compiler Warnings
|
|
|
|
|
|
|
|
set(C_WARNING_FLAGS)
|
|
|
|
set(CXX_WARNING_FLAGS)
|
|
|
|
|
|
|
|
include(CheckCCompilerFlag)
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
|
|
|
2020-08-18 07:54:25 +00:00
|
|
|
if(MSVC)
|
|
|
|
set(WARNING_CANDIDATES
|
|
|
|
/W4)
|
2020-08-11 18:11:55 +00:00
|
|
|
|
2020-08-18 07:54:25 +00:00
|
|
|
foreach(FLAG ${WARNING_CANDIDATES})
|
|
|
|
list(APPEND C_WARNING_FLAGS ${FLAG})
|
|
|
|
list(APPEND CXX_WARNING_FLAGS ${FLAG})
|
|
|
|
endforeach()
|
|
|
|
else()
|
|
|
|
set(WARNING_CANDIDATES
|
|
|
|
-W
|
|
|
|
-Wall
|
|
|
|
-Wextra
|
|
|
|
-Wcast-align
|
|
|
|
-Wduplicated-cond
|
|
|
|
-Wexit-time-destructors
|
|
|
|
-Wextra-semi
|
|
|
|
-Wextra-semi-stmt
|
|
|
|
-Wextra-tokens
|
|
|
|
-Wfloat-equal
|
|
|
|
-Wgnu
|
|
|
|
-Winit-self
|
|
|
|
-Wint-in-bool-context
|
|
|
|
-Wlogical-op
|
|
|
|
-Wmissing-format-attribute
|
|
|
|
-Wnull-dereference
|
|
|
|
-Wpointer-arith
|
|
|
|
-Wredundant-decls
|
|
|
|
-Wredundant-move
|
|
|
|
-Wreorder-ctor
|
|
|
|
-Wrestrict
|
|
|
|
-Wreturn-std-move
|
|
|
|
-Wself-assign
|
|
|
|
-Wself-move
|
|
|
|
-Wsemicolon-before-method-body
|
|
|
|
-Wsentinel
|
|
|
|
-Wshadow
|
|
|
|
-Wsign-compare
|
|
|
|
-Wsometimes-uninitialized
|
|
|
|
-Wstring-conversion
|
|
|
|
-Wsuggest-destructor-override
|
|
|
|
-Wsuggest-override
|
|
|
|
-Wuninitialized
|
|
|
|
-Wunreachable-code
|
|
|
|
-Wunused
|
|
|
|
-Wunused-const-variable
|
|
|
|
-Wunused-parameter
|
|
|
|
-Wunused-result
|
|
|
|
-Wwrite-strings)
|
|
|
|
|
|
|
|
if(MINGW)
|
|
|
|
# Disable excessive warnings since we're using __USE_MINGW_ANSI_STDIO
|
|
|
|
# Hopefully, any potential issues will be spotted on other platforms
|
|
|
|
list(APPEND WARNING_CANDIDATES -Wno-format)
|
|
|
|
else()
|
|
|
|
list(APPEND WARNING_CANDIDATES -Wformat-security)
|
2020-08-18 07:37:39 +00:00
|
|
|
endif()
|
|
|
|
|
2020-08-18 07:54:25 +00:00
|
|
|
set(CMAKE_REQUIRED_FLAGS)
|
2020-08-11 18:11:55 +00:00
|
|
|
|
2020-08-18 07:54:25 +00:00
|
|
|
foreach(FLAG -Werror /WX)
|
|
|
|
tr_make_id("${FLAG}" FLAG_ID)
|
|
|
|
set(CACHE_ID "${CMAKE_C_COMPILER_ID}_C_HAS${FLAG_ID}")
|
|
|
|
string(TOLOWER "${CACHE_ID}" CACHE_ID)
|
|
|
|
check_c_compiler_flag(${FLAG} ${CACHE_ID})
|
|
|
|
if (${CACHE_ID})
|
|
|
|
# Make sure the next loop only adds flags that are relevant for a particular language
|
|
|
|
set(CMAKE_REQUIRED_FLAGS ${FLAG})
|
|
|
|
break()
|
|
|
|
endif()
|
|
|
|
endforeach()
|
2014-12-11 05:11:02 +00:00
|
|
|
|
2020-08-18 07:54:25 +00:00
|
|
|
foreach(FLAG ${WARNING_CANDIDATES})
|
|
|
|
tr_make_id("${FLAG}" FLAG_ID)
|
2016-01-09 18:24:43 +00:00
|
|
|
|
2020-08-18 07:54:25 +00:00
|
|
|
# if available, add to C warnings
|
|
|
|
set(CACHE_ID "${CMAKE_C_COMPILER_ID}_C_HAS${FLAG_ID}")
|
|
|
|
string(TOLOWER "${CACHE_ID}" CACHE_ID)
|
|
|
|
check_c_compiler_flag(${FLAG} ${CACHE_ID})
|
|
|
|
if (${CACHE_ID})
|
|
|
|
list(APPEND C_WARNING_FLAGS ${FLAG})
|
|
|
|
endif()
|
2020-08-11 18:11:55 +00:00
|
|
|
|
2020-08-18 07:54:25 +00:00
|
|
|
# if available, add to CXX warnings
|
|
|
|
set(CACHE_ID "${CMAKE_CXX_COMPILER_ID}_CXX_HAS${FLAG_ID}")
|
|
|
|
string(TOLOWER "${CACHE_ID}" CACHE_ID)
|
|
|
|
check_cxx_compiler_flag(${FLAG} ${CACHE_ID})
|
|
|
|
if (${CACHE_ID})
|
|
|
|
list(APPEND CXX_WARNING_FLAGS ${FLAG})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
unset(CACHE_ID)
|
|
|
|
unset(FLAG_ID)
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
unset(CMAKE_REQUIRED_FLAGS)
|
|
|
|
endif()
|
2020-08-11 18:11:55 +00:00
|
|
|
|
|
|
|
###
|
2014-12-01 19:55:22 +00:00
|
|
|
|
2015-03-10 22:31:09 +00:00
|
|
|
include(LargeFileSupport)
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
set(NEEDED_HEADERS
|
|
|
|
sys/statvfs.h
|
2015-06-01 05:25:14 +00:00
|
|
|
xfs/xfs.h
|
|
|
|
xlocale.h)
|
2014-12-01 19:55:22 +00:00
|
|
|
|
2014-12-20 22:28:43 +00:00
|
|
|
if(ENABLE_NLS)
|
|
|
|
list(APPEND NEEDED_HEADERS libintl.h)
|
|
|
|
endif()
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
foreach(H ${NEEDED_HEADERS})
|
|
|
|
tr_make_id("${H}" H_ID)
|
|
|
|
check_include_file(${H} HAVE_${H_ID})
|
|
|
|
if(HAVE_${H_ID})
|
|
|
|
add_definitions(-DHAVE_${H_ID})
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
set(NEEDED_FUNCTIONS
|
2015-06-01 18:52:14 +00:00
|
|
|
_configthreadlocale
|
2014-12-06 16:28:53 +00:00
|
|
|
canonicalize_file_name
|
Add in-kernel file copying for several platforms. (#1092)
* Add in-kernel copying support for Linux (sendfile64(2), copy_file_range(2)), FreeBSD 13 (copy_file_range(2)), MacOS (copyfile(2)), and Windows (CopyFileExA).
* Fix macro name USE_COPY_FILE_RANGE.
* Minor bugfixes for userspace fallback.
* Fix linux sendfile64 bugs.
* Remove some overzealous asserts.
* Allow transmission-test-copy to take an optional argument for an external reference file.
* Fix return value error of tr_sys_path_copy.
* Use COPYFILE_ALL for Macs without COPYFILE_CLONE.
* Add in-kernel file copying for several platforms.
Numerous operating systems now have support for copying files directly in the
kernel, which is generally more efficient than copying in a userspace read(2)/
write(2) loop. (This becomes particularly relevant for 4th gen PCI-E storage,
which approaches the latency of DRAM.) For Linux I use sendfile64(2), and, for
later kernels, copy_file_range(2). FreeBSD 13 will also support
copy_file_range(2). MacOS has copyfile(2), and Windows has CopyFileExA.
Operating systems lacking such a syscall continue to use the existing
read(2)/write(2) loop.
* Appease uncrustify.
* Appease uncrustify.
* copy-test: generate random content at run time.
* copy-test: Stylistic changes and more check()s.
* copy-test: files_are_identical should follow test idioms
* tr_sys_path_copy: numerous tweaks as requested by review.
* s/old file/source file; s/new file/destination file.
* tr_sys_path_copy: handle win32 wide characters in paths.
* Uncrustify.
* test-copy: Use non-string create_file_with_contents.
* tr_sys_path_copy: numerous fixes.
Per review: generate test file content at runtime; tidy use of check();
fix style; re-measure file sizes in the copy; define a macro when the
system does not provide it; use Unicode APIs on Windows; and fix
documentation.
* Updated as per comments.
* Rebase kernel-copy changes onto 3.0 with gtest.
* Undo irrelevant comment change.
* Fix syntax error.
* Use tr_malloc() instead of tr_valloc().
* Use EXPECT instead of TR_ASSERT in gtest.
* Add error handling.
* Acceptable coding style has changed again.
Now it's camelCase. Also use nullptr instead of NULL, etc.
* Fix east/west const.
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
2021-08-07 09:04:03 +00:00
|
|
|
copy_file_range
|
|
|
|
copyfile
|
2014-12-01 19:55:22 +00:00
|
|
|
daemon
|
|
|
|
fallocate64
|
2019-07-13 19:53:04 +00:00
|
|
|
flock
|
2014-12-01 19:55:22 +00:00
|
|
|
getmntent
|
2020-09-11 21:07:45 +00:00
|
|
|
gmtime_r
|
|
|
|
gmtime_s
|
2014-12-01 19:55:22 +00:00
|
|
|
htonll
|
|
|
|
localtime_r
|
2020-09-11 21:07:45 +00:00
|
|
|
localtime_s
|
2014-12-01 19:55:22 +00:00
|
|
|
memmem
|
|
|
|
mkdtemp
|
|
|
|
ntohll
|
|
|
|
posix_fadvise
|
|
|
|
posix_fallocate
|
|
|
|
pread
|
|
|
|
pwrite
|
Add in-kernel file copying for several platforms. (#1092)
* Add in-kernel copying support for Linux (sendfile64(2), copy_file_range(2)), FreeBSD 13 (copy_file_range(2)), MacOS (copyfile(2)), and Windows (CopyFileExA).
* Fix macro name USE_COPY_FILE_RANGE.
* Minor bugfixes for userspace fallback.
* Fix linux sendfile64 bugs.
* Remove some overzealous asserts.
* Allow transmission-test-copy to take an optional argument for an external reference file.
* Fix return value error of tr_sys_path_copy.
* Use COPYFILE_ALL for Macs without COPYFILE_CLONE.
* Add in-kernel file copying for several platforms.
Numerous operating systems now have support for copying files directly in the
kernel, which is generally more efficient than copying in a userspace read(2)/
write(2) loop. (This becomes particularly relevant for 4th gen PCI-E storage,
which approaches the latency of DRAM.) For Linux I use sendfile64(2), and, for
later kernels, copy_file_range(2). FreeBSD 13 will also support
copy_file_range(2). MacOS has copyfile(2), and Windows has CopyFileExA.
Operating systems lacking such a syscall continue to use the existing
read(2)/write(2) loop.
* Appease uncrustify.
* Appease uncrustify.
* copy-test: generate random content at run time.
* copy-test: Stylistic changes and more check()s.
* copy-test: files_are_identical should follow test idioms
* tr_sys_path_copy: numerous tweaks as requested by review.
* s/old file/source file; s/new file/destination file.
* tr_sys_path_copy: handle win32 wide characters in paths.
* Uncrustify.
* test-copy: Use non-string create_file_with_contents.
* tr_sys_path_copy: numerous fixes.
Per review: generate test file content at runtime; tidy use of check();
fix style; re-measure file sizes in the copy; define a macro when the
system does not provide it; use Unicode APIs on Windows; and fix
documentation.
* Updated as per comments.
* Rebase kernel-copy changes onto 3.0 with gtest.
* Undo irrelevant comment change.
* Fix syntax error.
* Use tr_malloc() instead of tr_valloc().
* Use EXPECT instead of TR_ASSERT in gtest.
* Add error handling.
* Acceptable coding style has changed again.
Now it's camelCase. Also use nullptr instead of NULL, etc.
* Fix east/west const.
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
2021-08-07 09:04:03 +00:00
|
|
|
sendfile64
|
2014-12-01 19:55:22 +00:00
|
|
|
statvfs
|
2019-03-17 14:37:52 +00:00
|
|
|
strcasestr
|
2014-12-01 19:55:22 +00:00
|
|
|
strlcpy
|
|
|
|
strsep
|
|
|
|
syslog
|
2020-11-15 21:53:42 +00:00
|
|
|
uselocale)
|
2014-12-01 19:55:22 +00:00
|
|
|
|
|
|
|
foreach(F ${NEEDED_FUNCTIONS})
|
|
|
|
tr_make_id("${F}" F_ID)
|
|
|
|
check_function_exists(${F} HAVE_${F_ID})
|
|
|
|
if(HAVE_${F_ID})
|
|
|
|
add_definitions(-DHAVE_${F_ID})
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
|
2016-02-07 11:54:01 +00:00
|
|
|
if(ICONV_FOUND)
|
2016-02-23 03:00:12 +00:00
|
|
|
add_definitions(-DHAVE_ICONV)
|
2016-02-23 05:07:43 +00:00
|
|
|
if(ICONV_SECOND_ARGUMENT_IS_CONST)
|
|
|
|
add_definitions(-DICONV_SECOND_ARGUMENT_IS_CONST)
|
|
|
|
endif()
|
2016-02-07 11:54:01 +00:00
|
|
|
endif()
|
|
|
|
|
2014-12-13 16:00:14 +00:00
|
|
|
# if(MINGW)
|
|
|
|
# check_function_exists(__mingw_printf HAVE_MINGW_PRINTF)
|
|
|
|
# if(HAVE_MINGW_PRINTF)
|
|
|
|
# add_definitions(-D__USE_MINGW_ANSI_STDIO=1 -D__STDC_FORMAT_MACROS=1)
|
|
|
|
# endif()
|
|
|
|
# endif()
|
2014-12-01 19:55:22 +00:00
|
|
|
|
2014-12-20 22:28:43 +00:00
|
|
|
if(ENABLE_NLS)
|
|
|
|
check_library_exists(intl libintl_gettext "" HAVE_LIBINTL)
|
|
|
|
if(HAVE_LIBINTL)
|
|
|
|
set(LIBINTL_LIBRARY intl)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
check_library_exists(m sqrt "" HAVE_LIBM)
|
|
|
|
if(HAVE_LIBM)
|
|
|
|
set(LIBM_LIBRARY m)
|
|
|
|
endif()
|
|
|
|
|
2016-12-24 17:11:27 +00:00
|
|
|
set(TR_NETWORK_LIBRARIES)
|
|
|
|
if(WIN32)
|
|
|
|
list(APPEND TR_NETWORK_LIBRARIES iphlpapi ws2_32)
|
|
|
|
else()
|
|
|
|
tr_select_library("c;socket;net" socket "" LIB)
|
|
|
|
if(NOT LIB MATCHES "^(|c)$")
|
|
|
|
list(APPEND TR_NETWORK_LIBRARIES ${LIB})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
tr_select_library("c;nsl;bind" gethostbyname "" LIB)
|
|
|
|
if(NOT LIB MATCHES "^(|c)$")
|
|
|
|
list(APPEND TR_NETWORK_LIBRARIES ${LIB})
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2021-09-12 19:36:51 +00:00
|
|
|
if(RUN_CLANG_TIDY STREQUAL "AUTO")
|
|
|
|
if (DEFINED ENV{LGTM_SRC} OR DEFINED ENV{APPVEYOR}) # skip clang-tidy on LGTM/appveyor
|
|
|
|
set(RUN_CLANG_TIDY OFF)
|
|
|
|
else()
|
|
|
|
set(RUN_CLANG_TIDY ON)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(RUN_CLANG_TIDY)
|
2020-08-11 18:11:55 +00:00
|
|
|
message(STATUS "Looking for clang-tidy")
|
|
|
|
find_program(CLANG_TIDY clang-tidy)
|
|
|
|
if (CLANG_TIDY STREQUAL "CLANG_TIDY-NOTFOUND")
|
|
|
|
message(STATUS "Looking for clang-tidy - not found")
|
|
|
|
else()
|
|
|
|
message(STATUS "Looking for clang-tidy - found")
|
|
|
|
set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY}")
|
|
|
|
endif()
|
2020-05-20 01:32:51 +00:00
|
|
|
endif()
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
if(ENABLE_TESTS)
|
2020-08-11 18:11:55 +00:00
|
|
|
include(CTest)
|
2014-12-01 19:55:22 +00:00
|
|
|
enable_testing()
|
2020-08-11 18:11:55 +00:00
|
|
|
add_subdirectory(tests)
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
2016-09-10 17:08:58 +00:00
|
|
|
function(tr_install_web DST_DIR)
|
2020-10-24 01:04:25 +00:00
|
|
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/web/public_html DESTINATION ${DST_DIR})
|
2016-09-10 17:08:58 +00:00
|
|
|
endfunction()
|
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
add_subdirectory(libtransmission)
|
|
|
|
|
2016-09-10 17:08:58 +00:00
|
|
|
set(MAC_PROJECT_DIR macosx)
|
|
|
|
|
2018-04-18 09:25:13 +00:00
|
|
|
if(ENABLE_GTK AND ENABLE_NLS)
|
|
|
|
find_package(Gettext 0.19.7 REQUIRED)
|
|
|
|
add_subdirectory(po)
|
|
|
|
endif()
|
|
|
|
|
2020-10-24 01:04:25 +00:00
|
|
|
foreach(P cli daemon gtk mac qt utils web)
|
2014-12-01 19:55:22 +00:00
|
|
|
string(TOUPPER "${P}" P_ID)
|
|
|
|
if(ENABLE_${P_ID})
|
2016-09-10 17:08:58 +00:00
|
|
|
if(DEFINED ${P_ID}_PROJECT_DIR)
|
|
|
|
set(P ${${P_ID}_PROJECT_DIR})
|
|
|
|
endif()
|
2014-12-01 19:55:22 +00:00
|
|
|
add_subdirectory(${P})
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
if(ENABLE_DAEMON OR ENABLE_GTK OR ENABLE_QT)
|
2016-09-10 17:08:58 +00:00
|
|
|
tr_install_web(${CMAKE_INSTALL_DATAROOTDIR}/${TR_NAME})
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(INSTALL_DOC)
|
2020-05-03 23:33:57 +00:00
|
|
|
install(FILES AUTHORS COPYING NEWS.md README.md extras/rpc-spec.txt extras/send-email-when-torrent-done.sh DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
2014-12-01 19:55:22 +00:00
|
|
|
endif()
|
|
|
|
|
2017-02-11 10:24:42 +00:00
|
|
|
if(MSVC AND ENABLE_DAEMON AND ENABLE_QT AND ENABLE_UTILS AND WITH_CRYPTO STREQUAL "openssl")
|
2016-04-02 18:01:01 +00:00
|
|
|
add_subdirectory(dist/msi)
|
|
|
|
endif()
|
|
|
|
|
2020-10-13 00:15:19 +00:00
|
|
|
set(CPACK_SOURCE_GENERATOR TXZ)
|
2014-12-01 19:55:22 +00:00
|
|
|
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${TR_NAME}-${TR_USER_AGENT_PREFIX}")
|
2020-10-13 00:15:19 +00:00
|
|
|
if(NOT TR_STABLE_RELEASE)
|
|
|
|
string(APPEND CPACK_SOURCE_PACKAGE_FILE_NAME "-r${TR_VCS_REVISION}")
|
|
|
|
endif()
|
2020-10-24 01:04:25 +00:00
|
|
|
list(APPEND CPACK_SOURCE_IGNORE_FILES
|
|
|
|
"${CMAKE_BINARY_DIR}"
|
|
|
|
"[.]git"
|
|
|
|
"node_modules"
|
|
|
|
)
|
2020-10-13 00:15:19 +00:00
|
|
|
set(CPACK_INSTALL_SCRIPTS "${CMAKE_CURRENT_LIST_DIR}/cmake/CPackSourceFixDirLinks.cmake")
|
2014-12-01 19:55:22 +00:00
|
|
|
|
2020-09-14 02:41:32 +00:00
|
|
|
## Code Formatting
|
|
|
|
|
|
|
|
if(GIT_FOUND)
|
|
|
|
execute_process(COMMAND
|
|
|
|
"${GIT_EXECUTABLE}" rev-parse --show-toplevel
|
|
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
|
|
OUTPUT_VARIABLE TR_GIT_ROOT
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
)
|
2020-10-13 00:15:19 +00:00
|
|
|
if(TR_GIT_ROOT AND IS_DIRECTORY "${TR_GIT_ROOT}/.git")
|
2020-09-14 02:41:32 +00:00
|
|
|
configure_file(
|
2020-09-20 20:41:45 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/extras/pre-commit"
|
2020-09-14 02:41:32 +00:00
|
|
|
"${TR_GIT_ROOT}/.git/hooks/pre-commit"
|
|
|
|
COPYONLY
|
|
|
|
)
|
|
|
|
add_custom_target(check-format
|
2021-08-15 22:08:56 +00:00
|
|
|
COMMAND "${CMAKE_SOURCE_DIR}/code_style.sh" --check
|
2020-09-14 02:41:32 +00:00
|
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
|
|
)
|
|
|
|
add_custom_target(format
|
2021-08-15 22:08:56 +00:00
|
|
|
COMMAND "${CMAKE_SOURCE_DIR}/code_style.sh"
|
2020-09-14 02:41:32 +00:00
|
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
|
|
)
|
2020-10-13 00:15:19 +00:00
|
|
|
endif()
|
2020-09-14 02:41:32 +00:00
|
|
|
unset(TR_GIT_ROOT)
|
2020-10-13 00:15:19 +00:00
|
|
|
endif()
|
2020-09-14 02:41:32 +00:00
|
|
|
|
2014-12-01 19:55:22 +00:00
|
|
|
include(CPack)
|