Modernize CMake code (ongoing refactoring) (#4507)
* Reformat CMake code * Bump minimum CMake version to 3.12 * Add target sources separately via `target_source()` * Make `tr_win32_app_info()` add target sources on its own * Don't use `include_directories()` * Don't use `add_definitions()` * Limit use of `add_compile_options()` * Move VDKQueue target declaration to a subdirectory * Add `tr_disable_source_files_compile()` helper * Add `tr_target_glib_resources()` helper * Add `tr_gettext_msgfmt()` helper * Enable AUTOUIC for Qt client * Enable AUTORCC for Qt client * Remove AUTO{MOC,RCC,UIC} source group overrides * Add `tr_target_idl_files()` helper * Move source group setup to `tr_qt_add_translation()` * Add `tr_target_xib_files()` helper * Prefer `target_sources()` to intermediate variables * Use explicit visibility versions of `target_*()` commands * Prefer genexes to conditions in `target_*()` commands * Add `tr_allow_compile_if()` helper * Leave only top-level `project()`, remove the rest * Minor fixups * Fixup Mac QL plugin install * Fixup IDE target folders and source groups
This commit is contained in:
parent
453836f324
commit
bc380511db
292
CMakeLists.txt
292
CMakeLists.txt
|
@ -1,4 +1,4 @@
|
|||
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
|
||||
|
||||
if(POLICY CMP0092)
|
||||
cmake_policy(SET CMP0092 NEW)
|
||||
|
@ -10,7 +10,9 @@ set(MACOS_SUPPORT_MINIMUM 10.13)
|
|||
# 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(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET ${MACOS_SUPPORT_MINIMUM} CACHE STRING "Minimum macOS version to target for deployment" FORCE)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET ${MACOS_SUPPORT_MINIMUM}
|
||||
CACHE STRING "Minimum macOS version to target for deployment"
|
||||
FORCE)
|
||||
endif()
|
||||
|
||||
project(transmission)
|
||||
|
@ -23,60 +25,60 @@ include(CheckIncludeFile)
|
|||
include(CheckIncludeFiles)
|
||||
include(CheckFunctionExists)
|
||||
include(CheckLibraryExists)
|
||||
include(CheckSymbolExists)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
include(TrMacros)
|
||||
|
||||
set(CURL_MINIMUM 7.28.0)
|
||||
set(WOLFSSL_MINIMUM 3.4)
|
||||
set(DEFLATE_MINIMUM 1.10)
|
||||
set(EVENT2_MINIMUM 2.1.0)
|
||||
set(GIOMM_MINIMUM 2.26.0)
|
||||
set(GLIBMM_MINIMUM 2.60.0)
|
||||
set(GTKMM_MINIMUM 3.24.0)
|
||||
set(OPENSSL_MINIMUM 0.9.7)
|
||||
set(MBEDTLS_MINIMUM 1.3)
|
||||
set(PSL_MINIMUM 0.21.1)
|
||||
set(QT_MINIMUM 5.6)
|
||||
set(CURL_MINIMUM 7.28.0)
|
||||
set(WOLFSSL_MINIMUM 3.4)
|
||||
set(DEFLATE_MINIMUM 1.10)
|
||||
set(EVENT2_MINIMUM 2.1.0)
|
||||
set(GIOMM_MINIMUM 2.26.0)
|
||||
set(GLIBMM_MINIMUM 2.60.0)
|
||||
set(GTKMM_MINIMUM 3.24.0)
|
||||
set(OPENSSL_MINIMUM 0.9.7)
|
||||
set(MBEDTLS_MINIMUM 1.3)
|
||||
set(PSL_MINIMUM 0.21.1)
|
||||
set(QT_MINIMUM 5.6)
|
||||
|
||||
option(ENABLE_DAEMON "Build daemon" ON)
|
||||
tr_auto_option(ENABLE_GTK "Build GTK client" AUTO)
|
||||
tr_auto_option(ENABLE_QT "Build Qt client" AUTO)
|
||||
tr_auto_option(ENABLE_MAC "Build Mac client" AUTO)
|
||||
option(ENABLE_WEB "Build Web client" OFF)
|
||||
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_WERROR "Treat warnings as errors" OFF)
|
||||
option(ENABLE_NLS "Enable native language support" ON)
|
||||
option(INSTALL_DOC "Build/install documentation" ON)
|
||||
option(INSTALL_LIB "Install the library" OFF)
|
||||
tr_auto_option(RUN_CLANG_TIDY "Run clang-tidy on the code" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_EVENT2 "Use system event2 library" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_DEFLATE "Use system deflate library" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_DHT "Use system dht library" AUTO)
|
||||
option(ENABLE_DAEMON "Build daemon" ON)
|
||||
tr_auto_option(ENABLE_GTK "Build GTK client" AUTO)
|
||||
tr_auto_option(ENABLE_QT "Build Qt client" AUTO)
|
||||
tr_auto_option(ENABLE_MAC "Build Mac client" AUTO)
|
||||
option(ENABLE_WEB "Build Web client" OFF)
|
||||
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_WERROR "Treat warnings as errors" OFF)
|
||||
option(ENABLE_NLS "Enable native language support" ON)
|
||||
option(INSTALL_DOC "Build/install documentation" ON)
|
||||
option(INSTALL_LIB "Install the library" OFF)
|
||||
tr_auto_option(RUN_CLANG_TIDY "Run clang-tidy on the code" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_EVENT2 "Use system event2 library" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_DEFLATE "Use system deflate 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)
|
||||
tr_auto_option(USE_SYSTEM_B64 "Use system b64 library" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_PSL "Use system psl library" AUTO)
|
||||
tr_list_option(USE_GTK_VERSION "Use specific GTK version" AUTO 3 4)
|
||||
tr_list_option(USE_QT_VERSION "Use specific Qt version" AUTO 5 6)
|
||||
tr_list_option(WITH_CRYPTO "Use specified crypto library" AUTO ccrypto mbedtls openssl wolfssl)
|
||||
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)
|
||||
tr_auto_option(WITH_APPINDICATOR "Use appindicator for system tray icon in GTK client (GTK+ 3 only)" AUTO)
|
||||
tr_auto_option(WITH_SYSTEMD "Add support for systemd startup notification (on systems that support it)" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_NATPMP "Use system natpmp library" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_UTP "Use system utp library" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_B64 "Use system b64 library" AUTO)
|
||||
tr_auto_option(USE_SYSTEM_PSL "Use system psl library" AUTO)
|
||||
tr_list_option(USE_GTK_VERSION "Use specific GTK version" AUTO 3 4)
|
||||
tr_list_option(USE_QT_VERSION "Use specific Qt version" AUTO 5 6)
|
||||
tr_list_option(WITH_CRYPTO "Use specified crypto library" AUTO ccrypto mbedtls openssl wolfssl)
|
||||
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)
|
||||
tr_auto_option(WITH_APPINDICATOR "Use appindicator for system tray icon in GTK client (GTK+ 3 only)" AUTO)
|
||||
tr_auto_option(WITH_SYSTEMD "Add support for systemd startup notification (on systems that support it)" AUTO)
|
||||
|
||||
set(TR_NAME ${PROJECT_NAME})
|
||||
|
||||
# major.minor.patch[-[beta.N.]dev]+commit_hash
|
||||
# dev builds come between releases, e.g. autobuilds from CI
|
||||
|
||||
|
||||
# these should be the only five lines you need to change
|
||||
set(TR_VERSION_MAJOR "4")
|
||||
set(TR_VERSION_MINOR "0")
|
||||
|
@ -85,9 +87,9 @@ set(TR_VERSION_BETA_NUMBER "2") # empty string for not beta
|
|||
set(TR_VERSION_DEV TRUE)
|
||||
|
||||
# derived from above: release type
|
||||
if (TR_VERSION_DEV)
|
||||
if(TR_VERSION_DEV)
|
||||
set(TR_NIGHTLY_RELEASE 1)
|
||||
elseif (NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
elseif(NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
set(TR_BETA_RELEASE 1)
|
||||
else()
|
||||
set(TR_STABLE_RELEASE 1)
|
||||
|
@ -99,15 +101,15 @@ endif()
|
|||
# '4.0.0-beta.2'
|
||||
# '4.0.0'
|
||||
set(TR_SEMVER "${TR_VERSION_MAJOR}.${TR_VERSION_MINOR}.${TR_VERSION_PATCH}")
|
||||
if (TR_VERSION_DEV OR NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
if(TR_VERSION_DEV OR NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
string(APPEND TR_SEMVER "-")
|
||||
if (NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
if(NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
string(APPEND TR_SEMVER "beta.${TR_VERSION_BETA_NUMBER}")
|
||||
endif()
|
||||
if (TR_VERSION_DEV AND NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
if(TR_VERSION_DEV AND NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
string(APPEND TR_SEMVER ".")
|
||||
endif()
|
||||
if (TR_VERSION_DEV)
|
||||
if(TR_VERSION_DEV)
|
||||
string(APPEND TR_SEMVER "dev")
|
||||
endif()
|
||||
endif()
|
||||
|
@ -127,16 +129,15 @@ string(SUBSTRING "${BASE62}" "${TR_VERSION_MINOR}" 1 TMPSTR)
|
|||
string(APPEND TR_PEER_ID_PREFIX "${TMPSTR}")
|
||||
string(SUBSTRING "${BASE62}" "${TR_VERSION_PATCH}" 1 TMPSTR)
|
||||
string(APPEND TR_PEER_ID_PREFIX "${TMPSTR}")
|
||||
if (TR_VERSION_DEV)
|
||||
if(TR_VERSION_DEV)
|
||||
string(APPEND TR_PEER_ID_PREFIX "Z")
|
||||
elseif (NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
elseif(NOT "${TR_VERSION_BETA_NUMBER}" STREQUAL "")
|
||||
string(APPEND TR_PEER_ID_PREFIX "B")
|
||||
else()
|
||||
string(APPEND TR_PEER_ID_PREFIX "0")
|
||||
endif()
|
||||
string(APPEND TR_PEER_ID_PREFIX "-")
|
||||
|
||||
|
||||
set(TR_VCS_REVISION_FILE "${CMAKE_SOURCE_DIR}/REVISION")
|
||||
|
||||
if(EXISTS ${CMAKE_SOURCE_DIR}/.git)
|
||||
|
@ -149,14 +150,10 @@ elseif(NOT "$ENV{TEAMCITY_PROJECT_NAME}" STREQUAL "" AND NOT "$ENV{BUILD_VCS_NUM
|
|||
set(TR_VCS_REVISION "$ENV{BUILD_VCS_NUMBER}")
|
||||
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
|
||||
)
|
||||
COMMAND ${GIT_EXECUTABLE} rev-list --max-count=1 HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE TR_VCS_REVISION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif()
|
||||
|
||||
if("${TR_VCS_REVISION}" STREQUAL "" AND EXISTS "${TR_VCS_REVISION_FILE}")
|
||||
|
@ -196,9 +193,12 @@ if(WIN32)
|
|||
endforeach()
|
||||
endif()
|
||||
|
||||
set(CMAKE_FOLDER "third-party")
|
||||
|
||||
find_package(Fmt)
|
||||
add_definitions(-DFMT_HEADER_ONLY -DFMT_EXCEPTIONS=0)
|
||||
include_directories(SYSTEM ${LIBFMT_INCLUDE_DIRS})
|
||||
add_definitions(
|
||||
-DFMT_HEADER_ONLY
|
||||
-DFMT_EXCEPTIONS=0)
|
||||
|
||||
find_package(WideInteger)
|
||||
find_package(FastFloat)
|
||||
|
@ -221,7 +221,9 @@ endif()
|
|||
set(CRYPTO_PKG "")
|
||||
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})
|
||||
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")
|
||||
|
@ -318,8 +320,17 @@ if(ENABLE_QT)
|
|||
set(ENABLE_QT_COM_INTEROP OFF)
|
||||
set(ENABLE_QT_DBUS_INTEROP OFF)
|
||||
|
||||
set(QT_REQUIRED_MODULES Core Gui Widgets Network Svg LinguistTools)
|
||||
set(QT_OPTIONAL_MODULES DBus AxContainer AxServer)
|
||||
set(QT_REQUIRED_MODULES
|
||||
Core
|
||||
Gui
|
||||
Widgets
|
||||
Network
|
||||
Svg
|
||||
LinguistTools)
|
||||
set(QT_OPTIONAL_MODULES
|
||||
DBus
|
||||
AxContainer
|
||||
AxServer)
|
||||
set(MISSING_QT_MODULE)
|
||||
|
||||
set(Qt_NAMES Qt6 Qt5)
|
||||
|
@ -413,7 +424,7 @@ tr_add_external_auto_library(EVENT2 libevent event
|
|||
|
||||
tr_add_external_auto_library(NATPMP libnatpmp natpmp)
|
||||
if(NOT USE_SYSTEM_NATPMP)
|
||||
set(NATPMP_DEFINITIONS -DNATPMP_STATICLIB)
|
||||
set(NATPMP_DEFINITIONS NATPMP_STATICLIB)
|
||||
endif()
|
||||
|
||||
tr_add_external_auto_library(MINIUPNPC miniupnpc miniupnpc
|
||||
|
@ -421,9 +432,9 @@ tr_add_external_auto_library(MINIUPNPC miniupnpc miniupnpc
|
|||
-DUPNPC_BUILD_STATIC=ON
|
||||
-DUPNPC_BUILD_SHARED=OFF
|
||||
-DUPNPC_BUILD_TESTS=OFF)
|
||||
set(MINIUPNPC_DEFINITIONS -DSYSTEM_MINIUPNP)
|
||||
set(MINIUPNPC_DEFINITIONS SYSTEM_MINIUPNP)
|
||||
if(NOT USE_SYSTEM_MINIUPNPC)
|
||||
list(APPEND MINIUPNPC_DEFINITIONS -DMINIUPNP_STATICLIB)
|
||||
list(APPEND MINIUPNPC_DEFINITIONS MINIUPNP_STATICLIB)
|
||||
set(MINIUPNPC_VERSION 1.9)
|
||||
set(MINIUPNPC_API_VERSION 12)
|
||||
endif()
|
||||
|
@ -437,15 +448,18 @@ tr_add_external_auto_library(PSL libpsl psl)
|
|||
|
||||
if(ENABLE_UTP)
|
||||
tr_add_external_auto_library(UTP libutp utp
|
||||
CMAKE_ARGS
|
||||
-DLIBUTP_BUILD_PROGRAMS=OFF)
|
||||
CMAKE_ARGS -DLIBUTP_BUILD_PROGRAMS=OFF)
|
||||
|
||||
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_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()
|
||||
endif()
|
||||
|
@ -484,8 +498,6 @@ if(WITH_SYSTEMD)
|
|||
tr_fixup_auto_option(WITH_SYSTEMD SYSTEMD_FOUND SYSTEMD_IS_REQUIRED)
|
||||
endif()
|
||||
|
||||
include_directories(${CMAKE_BINARY_DIR})
|
||||
|
||||
if(WIN32)
|
||||
foreach(L C CXX)
|
||||
# Filter out needless definitions
|
||||
|
@ -493,6 +505,8 @@ if(WIN32)
|
|||
endforeach()
|
||||
endif()
|
||||
|
||||
unset(CMAKE_FOLDER)
|
||||
|
||||
## Compiler standard version
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
|
@ -509,8 +523,7 @@ include(CheckCCompilerFlag)
|
|||
include(CheckCXXCompilerFlag)
|
||||
|
||||
if(MSVC)
|
||||
set(WARNING_CANDIDATES
|
||||
/W4)
|
||||
set(WARNING_CANDIDATES /W4)
|
||||
|
||||
foreach(FLAG ${WARNING_CANDIDATES})
|
||||
list(APPEND C_WARNING_FLAGS ${FLAG})
|
||||
|
@ -573,7 +586,7 @@ else()
|
|||
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})
|
||||
if(${CACHE_ID})
|
||||
# Make sure the next loop only adds flags that are relevant for a particular language
|
||||
set(CMAKE_REQUIRED_FLAGS ${FLAG})
|
||||
break()
|
||||
|
@ -587,7 +600,7 @@ else()
|
|||
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})
|
||||
if(${CACHE_ID})
|
||||
list(APPEND C_WARNING_FLAGS ${FLAG})
|
||||
endif()
|
||||
|
||||
|
@ -595,7 +608,7 @@ else()
|
|||
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})
|
||||
if(${CACHE_ID})
|
||||
list(APPEND CXX_WARNING_FLAGS ${FLAG})
|
||||
endif()
|
||||
|
||||
|
@ -616,83 +629,11 @@ add_compile_options(
|
|||
|
||||
include(LargeFileSupport)
|
||||
|
||||
set(NEEDED_HEADERS
|
||||
sys/signalfd.h
|
||||
sys/statvfs.h
|
||||
xfs/xfs.h
|
||||
xlocale.h)
|
||||
|
||||
if(ENABLE_NLS)
|
||||
check_library_exists(intl libintl_gettext "" HAVE_LIBINTL)
|
||||
if(HAVE_LIBINTL)
|
||||
set(LIBINTL_LIBRARY intl)
|
||||
# check_function_exists() below may need this
|
||||
# when looking for gettext() and ngettext()
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES intl)
|
||||
endif()
|
||||
|
||||
list(APPEND NEEDED_HEADERS libintl.h)
|
||||
endif()
|
||||
|
||||
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
|
||||
_configthreadlocale
|
||||
copy_file_range
|
||||
copyfile
|
||||
daemon
|
||||
fallocate64
|
||||
flock
|
||||
getmntent
|
||||
gettext
|
||||
htonll
|
||||
mkdtemp
|
||||
ngettext
|
||||
ntohll
|
||||
posix_fadvise
|
||||
posix_fallocate
|
||||
pread
|
||||
pwrite
|
||||
sendfile64
|
||||
statvfs
|
||||
strlcpy
|
||||
syslog)
|
||||
|
||||
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()
|
||||
|
||||
if(ICONV_FOUND)
|
||||
add_definitions(-DHAVE_ICONV)
|
||||
if(ICONV_SECOND_ARGUMENT_IS_CONST)
|
||||
add_definitions(-DICONV_SECOND_ARGUMENT_IS_CONST)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# 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()
|
||||
|
||||
check_library_exists(m sqrt "" HAVE_LIBM)
|
||||
if(HAVE_LIBM)
|
||||
set(LIBM_LIBRARY m)
|
||||
endif()
|
||||
|
||||
check_symbol_exists(SO_REUSEPORT "sys/types.h;sys/socket.h" HAVE_SO_REUSEPORT)
|
||||
|
||||
set(TR_NETWORK_LIBRARIES)
|
||||
if(WIN32)
|
||||
list(APPEND TR_NETWORK_LIBRARIES iphlpapi ws2_32)
|
||||
|
@ -709,7 +650,7 @@ else()
|
|||
endif()
|
||||
|
||||
if(RUN_CLANG_TIDY STREQUAL "AUTO")
|
||||
if (DEFINED ENV{LGTM_SRC} OR DEFINED ENV{APPVEYOR}) # skip clang-tidy on LGTM/appveyor
|
||||
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)
|
||||
|
@ -719,7 +660,7 @@ endif()
|
|||
if(RUN_CLANG_TIDY)
|
||||
message(STATUS "Looking for clang-tidy")
|
||||
find_program(CLANG_TIDY clang-tidy)
|
||||
if (CLANG_TIDY STREQUAL "CLANG_TIDY-NOTFOUND")
|
||||
if(CLANG_TIDY STREQUAL "CLANG_TIDY-NOTFOUND")
|
||||
message(STATUS "Looking for clang-tidy - not found")
|
||||
else()
|
||||
message(STATUS "Looking for clang-tidy - found")
|
||||
|
@ -733,7 +674,9 @@ if(ENABLE_TESTS)
|
|||
endif()
|
||||
|
||||
function(tr_install_web DST_DIR)
|
||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/web/public_html DESTINATION ${DST_DIR})
|
||||
install(
|
||||
DIRECTORY ${CMAKE_SOURCE_DIR}/web/public_html
|
||||
DESTINATION ${DST_DIR})
|
||||
endfunction()
|
||||
|
||||
add_subdirectory(libtransmission)
|
||||
|
@ -760,8 +703,17 @@ if(ENABLE_DAEMON OR ENABLE_GTK OR ENABLE_QT)
|
|||
endif()
|
||||
|
||||
if(INSTALL_DOC)
|
||||
install(FILES AUTHORS COPYING README.md docs/rpc-spec.md extras/send-email-when-torrent-done.sh DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
install(DIRECTORY news DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
install(
|
||||
FILES
|
||||
AUTHORS
|
||||
COPYING
|
||||
README.md
|
||||
docs/rpc-spec.md
|
||||
extras/send-email-when-torrent-done.sh
|
||||
DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
install(
|
||||
DIRECTORY news
|
||||
DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
endif()
|
||||
|
||||
if(MSVC AND ENABLE_DAEMON AND ENABLE_QT AND ENABLE_UTILS AND WITH_CRYPTO STREQUAL "openssl")
|
||||
|
@ -781,33 +733,27 @@ endif()
|
|||
list(APPEND CPACK_SOURCE_IGNORE_FILES
|
||||
"${CMAKE_BINARY_DIR}"
|
||||
"[.]git"
|
||||
"node_modules"
|
||||
)
|
||||
"node_modules")
|
||||
|
||||
## Code Formatting
|
||||
|
||||
if(GIT_FOUND)
|
||||
execute_process(COMMAND
|
||||
"${GIT_EXECUTABLE}" rev-parse --show-toplevel
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" rev-parse --show-toplevel
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE TR_GIT_ROOT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(TR_GIT_ROOT AND IS_DIRECTORY "${TR_GIT_ROOT}/.git")
|
||||
configure_file(
|
||||
"${CMAKE_SOURCE_DIR}/extras/pre-commit"
|
||||
"${TR_GIT_ROOT}/.git/hooks/pre-commit"
|
||||
COPYONLY
|
||||
)
|
||||
configure_file("${CMAKE_SOURCE_DIR}/extras/pre-commit" "${TR_GIT_ROOT}/.git/hooks/pre-commit" COPYONLY)
|
||||
add_custom_target(check-format
|
||||
COMMAND "${CMAKE_SOURCE_DIR}/code_style.sh" --check
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
)
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
|
||||
add_custom_target(format
|
||||
COMMAND "${CMAKE_SOURCE_DIR}/code_style.sh"
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
)
|
||||
set_property(TARGET check-format format PROPERTY FOLDER "utility")
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
|
||||
set_property(
|
||||
TARGET check-format format
|
||||
PROPERTY FOLDER "utility")
|
||||
endif()
|
||||
unset(TR_GIT_ROOT)
|
||||
endif()
|
||||
|
|
|
@ -1,18 +1,33 @@
|
|||
project(trcli)
|
||||
add_executable(${TR_NAME}-cli)
|
||||
|
||||
include_directories(${CMAKE_SOURCE_DIR})
|
||||
target_sources(${TR_NAME}-cli
|
||||
PRIVATE
|
||||
cli.cc)
|
||||
|
||||
tr_win32_app_info(${PROJECT_NAME}_WIN32_RC_FILE
|
||||
target_include_directories(${TR_NAME}-cli
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR})
|
||||
|
||||
target_include_directories(${TR_NAME}-cli SYSTEM
|
||||
PRIVATE
|
||||
${LIBFMT_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS})
|
||||
|
||||
target_link_libraries(${TR_NAME}-cli
|
||||
PRIVATE
|
||||
${TR_NAME})
|
||||
|
||||
tr_win32_app_info(${TR_NAME}-cli
|
||||
"Transmission Utility ('cli', obsolete)"
|
||||
"${TR_NAME}-cli"
|
||||
"${TR_NAME}-cli.exe")
|
||||
|
||||
add_executable(${TR_NAME}-cli cli.cc ${${PROJECT_NAME}_WIN32_RC_FILE})
|
||||
include_directories(${TR_NAME}-cli ${CURL_INCLUDE_DIRS})
|
||||
target_link_libraries(${TR_NAME}-cli ${TR_NAME})
|
||||
|
||||
install(TARGETS ${TR_NAME}-cli DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(
|
||||
TARGETS ${TR_NAME}-cli
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
if(INSTALL_DOC)
|
||||
install(FILES ${TR_NAME}-cli.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
install(
|
||||
FILES ${TR_NAME}-cli.1
|
||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
endif()
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
find_package(PkgConfig QUIET)
|
||||
|
||||
pkg_check_modules(PC_AYATANA_APPINDICATOR QUIET ayatana-appindicator3-0.1)
|
||||
find_path(AYATANA_APPINDICATOR_INCLUDE_DIR NAMES libayatana-appindicator/app-indicator.h HINTS ${PC_AYATANA_APPINDICATOR_INCLUDE_DIRS})
|
||||
find_library(AYATANA_APPINDICATOR_LIBRARY NAMES ayatana-appindicator3 ayatana-appindicator HINTS ${PC_AYATANA_APPINDICATOR_LIBRARY_DIRS})
|
||||
find_path(AYATANA_APPINDICATOR_INCLUDE_DIR
|
||||
NAMES libayatana-appindicator/app-indicator.h
|
||||
HINTS ${PC_AYATANA_APPINDICATOR_INCLUDE_DIRS})
|
||||
find_library(AYATANA_APPINDICATOR_LIBRARY
|
||||
NAMES
|
||||
ayatana-appindicator3
|
||||
ayatana-appindicator
|
||||
HINTS ${PC_AYATANA_APPINDICATOR_LIBRARY_DIRS})
|
||||
|
||||
if(AYATANA_APPINDICATOR_INCLUDE_DIR AND AYATANA_APPINDICATOR_LIBRARY)
|
||||
set(APPINDICATOR_INCLUDE_DIR ${AYATANA_APPINDICATOR_INCLUDE_DIR})
|
||||
|
@ -10,8 +16,14 @@ if(AYATANA_APPINDICATOR_INCLUDE_DIR AND AYATANA_APPINDICATOR_LIBRARY)
|
|||
set(APPINDICATOR_IS_AYATANA ON)
|
||||
else()
|
||||
pkg_check_modules(PC_APPINDICATOR QUIET appindicator3-0.1)
|
||||
find_path(APPINDICATOR_INCLUDE_DIR NAMES libappindicator/app-indicator.h HINTS ${PC_APPINDICATOR_INCLUDE_DIRS})
|
||||
find_library(APPINDICATOR_LIBRARY NAMES appindicator3 appindicator HINTS ${PC_APPINDICATOR_LIBRARY_DIRS})
|
||||
find_path(APPINDICATOR_INCLUDE_DIR
|
||||
NAMES libappindicator/app-indicator.h
|
||||
HINTS ${PC_APPINDICATOR_INCLUDE_DIRS})
|
||||
find_library(APPINDICATOR_LIBRARY
|
||||
NAMES
|
||||
appindicator3
|
||||
appindicator
|
||||
HINTS ${PC_APPINDICATOR_LIBRARY_DIRS})
|
||||
set(APPINDICATOR_IS_AYATANA OFF)
|
||||
endif()
|
||||
|
||||
|
@ -20,8 +32,7 @@ include(FindPackageHandleStandardArgs)
|
|||
find_package_handle_standard_args(APPINDICATOR
|
||||
REQUIRED_VARS
|
||||
APPINDICATOR_LIBRARY
|
||||
APPINDICATOR_INCLUDE_DIR
|
||||
)
|
||||
APPINDICATOR_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(AYATANA_APPINDICATOR_INCLUDE_DIR AYATANA_APPINDICATOR_LIBRARY)
|
||||
mark_as_advanced(APPINDICATOR_INCLUDE_DIR APPINDICATOR_LIBRARY)
|
||||
|
|
|
@ -12,8 +12,14 @@ if(UNIX)
|
|||
pkg_check_modules(_B64 QUIET libb64)
|
||||
endif()
|
||||
|
||||
find_path(B64_INCLUDE_DIR NAMES b64/cdecode.h b64/cencode.h HINTS ${_B64_INCLUDEDIR})
|
||||
find_library(B64_LIBRARY NAMES b64 HINTS ${_B64_LIBDIR})
|
||||
find_path(B64_INCLUDE_DIR
|
||||
NAMES
|
||||
b64/cdecode.h
|
||||
b64/cencode.h
|
||||
HINTS ${_B64_INCLUDEDIR})
|
||||
find_library(B64_LIBRARY
|
||||
NAMES b64
|
||||
HINTS ${_B64_LIBDIR})
|
||||
|
||||
set(B64_INCLUDE_DIRS ${B64_INCLUDE_DIR})
|
||||
set(B64_LIBRARIES ${B64_LIBRARY})
|
||||
|
@ -23,8 +29,7 @@ include(FindPackageHandleStandardArgs)
|
|||
find_package_handle_standard_args(B64
|
||||
REQUIRED_VARS
|
||||
B64_LIBRARY
|
||||
B64_INCLUDE_DIR
|
||||
)
|
||||
B64_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(B64_INCLUDE_DIR B64_LIBRARY)
|
||||
|
||||
|
|
|
@ -8,13 +8,17 @@ if(DEFLATE_PREFER_STATIC_LIB)
|
|||
endif()
|
||||
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
# pkg-config support added in libdeflate v1.9
|
||||
pkg_check_modules(_DEFLATE libdeflate>=${DEFLATE_MINIMUM})
|
||||
find_package(PkgConfig QUIET)
|
||||
# pkg-config support added in libdeflate v1.9
|
||||
pkg_check_modules(_DEFLATE libdeflate>=${DEFLATE_MINIMUM})
|
||||
endif()
|
||||
|
||||
find_path(DEFLATE_INCLUDE_DIR NAMES libdeflate.h HINTS ${_DEFLATE_INCLUDEDIR})
|
||||
find_library(DEFLATE_LIBRARY NAMES deflate HINTS ${_DEFLATE_LIBDIR})
|
||||
find_path(DEFLATE_INCLUDE_DIR
|
||||
NAMES libdeflate.h
|
||||
HINTS ${_DEFLATE_INCLUDEDIR})
|
||||
find_library(DEFLATE_LIBRARY
|
||||
NAMES deflate
|
||||
HINTS ${_DEFLATE_LIBDIR})
|
||||
|
||||
set(DEFLATE_INCLUDE_DIRS ${DEFLATE_INCLUDE_DIR})
|
||||
set(DEFLATE_LIBRARIES ${DEFLATE_LIBRARY})
|
||||
|
@ -26,8 +30,7 @@ find_package_handle_standard_args(DEFLATE
|
|||
REQUIRED_VARS
|
||||
DEFLATE_INCLUDE_DIR
|
||||
DEFLATE_LIBRARY
|
||||
DEFLATE_VERSION
|
||||
)
|
||||
DEFLATE_VERSION)
|
||||
|
||||
mark_as_advanced(DEFLATE_INCLUDE_DIR DEFLATE_LIBRARY)
|
||||
|
||||
|
|
|
@ -8,12 +8,16 @@ if(DHT_PREFER_STATIC_LIB)
|
|||
endif()
|
||||
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_DHT QUIET libdht)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_DHT QUIET libdht)
|
||||
endif()
|
||||
|
||||
find_path(DHT_INCLUDE_DIR NAMES dht/dht.h HINTS ${_DHT_INCLUDEDIR})
|
||||
find_library(DHT_LIBRARY NAMES dht HINTS ${_DHT_LIBDIR})
|
||||
find_path(DHT_INCLUDE_DIR
|
||||
NAMES dht/dht.h
|
||||
HINTS ${_DHT_INCLUDEDIR})
|
||||
find_library(DHT_LIBRARY
|
||||
NAMES dht
|
||||
HINTS ${_DHT_LIBDIR})
|
||||
|
||||
set(DHT_INCLUDE_DIRS ${DHT_INCLUDE_DIR})
|
||||
set(DHT_LIBRARIES ${DHT_LIBRARY})
|
||||
|
@ -23,8 +27,7 @@ include(FindPackageHandleStandardArgs)
|
|||
find_package_handle_standard_args(DHT
|
||||
REQUIRED_VARS
|
||||
DHT_LIBRARY
|
||||
DHT_INCLUDE_DIR
|
||||
)
|
||||
DHT_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(DHT_INCLUDE_DIR DHT_LIBRARY)
|
||||
|
||||
|
|
|
@ -8,18 +8,25 @@ if(EVENT2_PREFER_STATIC_LIB)
|
|||
endif()
|
||||
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_EVENT2 QUIET libevent)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_EVENT2 QUIET libevent)
|
||||
endif()
|
||||
|
||||
find_path(EVENT2_INCLUDE_DIR NAMES event2/event.h HINTS ${_EVENT2_INCLUDEDIR})
|
||||
find_library(EVENT2_LIBRARY NAMES event-2.1 event HINTS ${_EVENT2_LIBDIR})
|
||||
find_path(EVENT2_INCLUDE_DIR
|
||||
NAMES event2/event.h
|
||||
HINTS ${_EVENT2_INCLUDEDIR})
|
||||
find_library(EVENT2_LIBRARY
|
||||
NAMES
|
||||
event-2.1
|
||||
event
|
||||
HINTS ${_EVENT2_LIBDIR})
|
||||
|
||||
if(EVENT2_INCLUDE_DIR)
|
||||
if(_EVENT2_VERSION)
|
||||
set(EVENT2_VERSION ${_EVENT2_VERSION})
|
||||
else()
|
||||
file(STRINGS "${EVENT2_INCLUDE_DIR}/event2/event-config.h" EVENT2_VERSION_STR REGEX "^#define[\t ]+_EVENT_VERSION[\t ]+\"[^\"]+\"")
|
||||
file(STRINGS "${EVENT2_INCLUDE_DIR}/event2/event-config.h" EVENT2_VERSION_STR
|
||||
REGEX "^#define[\t ]+_EVENT_VERSION[\t ]+\"[^\"]+\"")
|
||||
if(EVENT2_VERSION_STR MATCHES "\"([^\"]+)\"")
|
||||
set(EVENT2_VERSION "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
|
@ -35,9 +42,7 @@ find_package_handle_standard_args(EVENT2
|
|||
REQUIRED_VARS
|
||||
EVENT2_LIBRARY
|
||||
EVENT2_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
EVENT2_VERSION
|
||||
)
|
||||
VERSION_VAR EVENT2_VERSION)
|
||||
|
||||
mark_as_advanced(EVENT2_INCLUDE_DIR EVENT2_LIBRARY)
|
||||
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
# Grabbed from http://public.kitware.com/Bug/view.php?id=13517 and slightly modified.
|
||||
|
||||
find_path(ICONV_INCLUDE_DIR iconv.h)
|
||||
find_library(ICONV_LIBRARY NAMES iconv libiconv libiconv-2 c)
|
||||
find_path(ICONV_INCLUDE_DIR
|
||||
NAMES iconv.h)
|
||||
find_library(ICONV_LIBRARY
|
||||
NAMES
|
||||
iconv
|
||||
libiconv
|
||||
libiconv-2
|
||||
c)
|
||||
|
||||
set(ICONV_INCLUDE_DIRS ${ICONV_INCLUDE_DIR})
|
||||
set(ICONV_LIBRARIES ${ICONV_LIBRARY})
|
||||
|
@ -12,9 +18,7 @@ find_package_handle_standard_args(ICONV
|
|||
REQUIRED_VARS
|
||||
ICONV_LIBRARY
|
||||
ICONV_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
ICONV_VERSION
|
||||
)
|
||||
VERSION_VAR ICONV_VERSION)
|
||||
|
||||
if(ICONV_FOUND AND NOT DEFINED ICONV_SECOND_ARGUMENT_IS_CONST)
|
||||
include(CheckCXXSourceCompiles)
|
||||
|
@ -38,8 +42,7 @@ if(ICONV_FOUND AND NOT DEFINED ICONV_SECOND_ARGUMENT_IS_CONST)
|
|||
FAIL_REGEX "discards qualifiers in nested pointer types"
|
||||
FAIL_REGEX "incompatible pointer type"
|
||||
FAIL_REGEX "invalid conversion"
|
||||
FAIL_REGEX "no matching function"
|
||||
)
|
||||
FAIL_REGEX "no matching function")
|
||||
|
||||
set(CMAKE_REQUIRED_INCLUDES)
|
||||
set(CMAKE_REQUIRED_LIBRARIES)
|
||||
|
|
|
@ -8,18 +8,25 @@ if(MINIUPNPC_PREFER_STATIC_LIB)
|
|||
endif()
|
||||
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_MINIUPNPC QUIET libminiupnpc)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_MINIUPNPC QUIET libminiupnpc)
|
||||
endif()
|
||||
|
||||
find_path(MINIUPNPC_INCLUDE_DIR NAMES miniupnpc/miniupnpc.h HINTS ${_MINIUPNPC_INCLUDEDIR})
|
||||
find_library(MINIUPNPC_LIBRARY NAMES miniupnpc libminiupnpc HINTS ${_MINIUPNPC_LIBDIR})
|
||||
find_path(MINIUPNPC_INCLUDE_DIR
|
||||
NAMES miniupnpc/miniupnpc.h
|
||||
HINTS ${_MINIUPNPC_INCLUDEDIR})
|
||||
find_library(MINIUPNPC_LIBRARY
|
||||
NAMES
|
||||
miniupnpc
|
||||
libminiupnpc
|
||||
HINTS ${_MINIUPNPC_LIBDIR})
|
||||
|
||||
if(MINIUPNPC_INCLUDE_DIR)
|
||||
if(_MINIUPNPC_VERSION)
|
||||
set(MINIUPNPC_VERSION ${_MINIUPNPC_VERSION})
|
||||
else()
|
||||
file(STRINGS "${MINIUPNPC_INCLUDE_DIR}/miniupnpc/miniupnpc.h" MINIUPNPC_VERSION_STR REGEX "^#define[\t ]+MINIUPNPC_VERSION[\t ]+\"[^\"]+\"")
|
||||
file(STRINGS "${MINIUPNPC_INCLUDE_DIR}/miniupnpc/miniupnpc.h" MINIUPNPC_VERSION_STR
|
||||
REGEX "^#define[\t ]+MINIUPNPC_VERSION[\t ]+\"[^\"]+\"")
|
||||
if(MINIUPNPC_VERSION_STR MATCHES "\"([^\"]+)\"")
|
||||
set(MINIUPNPC_VERSION "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
|
@ -27,7 +34,8 @@ if(MINIUPNPC_INCLUDE_DIR)
|
|||
# Let's hope it's 1.7 or higher, since it provides
|
||||
# MINIUPNPC_API_VERSION and we won't have to figure
|
||||
# it out on our own
|
||||
file(STRINGS "${MINIUPNPC_INCLUDE_DIR}/miniupnpc/miniupnpc.h" MINIUPNPC_API_VERSION_STR REGEX "^#define[\t ]+MINIUPNPC_API_VERSION[\t ]+[0-9]+")
|
||||
file(STRINGS "${MINIUPNPC_INCLUDE_DIR}/miniupnpc/miniupnpc.h" MINIUPNPC_API_VERSION_STR
|
||||
REGEX "^#define[\t ]+MINIUPNPC_API_VERSION[\t ]+[0-9]+")
|
||||
if(MINIUPNPC_API_VERSION_STR MATCHES "^#define[\t ]+MINIUPNPC_API_VERSION[\t ]+([0-9]+)")
|
||||
set(MINIUPNPC_API_VERSION "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
|
@ -37,8 +45,7 @@ if(MINIUPNPC_INCLUDE_DIR)
|
|||
# Or maybe it's miniupnp 1.6
|
||||
if(NOT DEFINED MINIUPNPC_API_VERSION)
|
||||
file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckMiniUPnPC_1.6.c
|
||||
"
|
||||
#include <stdlib.h>
|
||||
"#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <miniupnpc/miniupnpc.h>
|
||||
#include <miniupnpc/upnpcommands.h>
|
||||
|
@ -52,12 +59,11 @@ if(MINIUPNPC_INCLUDE_DIR)
|
|||
char intPort[8];
|
||||
char intClient[16];
|
||||
upnpDiscover( 2000, NULL, NULL, 0, 0, &errno );
|
||||
UPNP_GetValidIGD( devlist, &urls, &data, lanaddr, sizeof( lanaddr ) );
|
||||
UPNP_GetValidIGD( devlist, &urls, &data, lanaddr, sizeof( lanaddr ) );
|
||||
UPNP_GetSpecificPortMappingEntry( urls.controlURL, data.first.servicetype,
|
||||
portStr, \"TCP\", intClient, intPort, NULL, NULL, NULL );
|
||||
return 0;
|
||||
}
|
||||
")
|
||||
}")
|
||||
try_compile(_MINIUPNPC_HAVE_VERSION_1_6
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckMiniUPnPC_1.6.c
|
||||
|
@ -75,8 +81,7 @@ if(MINIUPNPC_INCLUDE_DIR)
|
|||
# Or maybe it's miniupnp 1.5
|
||||
if(NOT DEFINED MINIUPNPC_API_VERSION)
|
||||
file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckMiniUPnPC_1.5.c
|
||||
"
|
||||
#include <stdlib.h>
|
||||
"#include <stdlib.h>
|
||||
#include <miniupnpc/miniupnpc.h>
|
||||
#include <miniupnpc/upnpcommands.h>
|
||||
int main()
|
||||
|
@ -89,12 +94,11 @@ if(MINIUPNPC_INCLUDE_DIR)
|
|||
char intPort[8];
|
||||
char intClient[16];
|
||||
upnpDiscover( 2000, NULL, NULL, 0 );
|
||||
UPNP_GetValidIGD( devlist, &urls, &data, lanaddr, sizeof( lanaddr ) );
|
||||
UPNP_GetValidIGD( devlist, &urls, &data, lanaddr, sizeof( lanaddr ) );
|
||||
UPNP_GetSpecificPortMappingEntry( urls.controlURL, data.first.servicetype,
|
||||
portStr, \"TCP\", intClient, intPort );
|
||||
return 0;
|
||||
}
|
||||
")
|
||||
}")
|
||||
try_compile(_MINIUPNPC_HAVE_VERSION_1_5
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckMiniUPnPC_1.5.c
|
||||
|
@ -121,9 +125,7 @@ find_package_handle_standard_args(MINIUPNPC
|
|||
MINIUPNPC_LIBRARY
|
||||
MINIUPNPC_INCLUDE_DIR
|
||||
MINIUPNPC_API_VERSION
|
||||
VERSION_VAR
|
||||
MINIUPNPC_VERSION
|
||||
)
|
||||
VERSION_VAR MINIUPNPC_VERSION)
|
||||
|
||||
mark_as_advanced(MINIUPNPC_INCLUDE_DIR MINIUPNPC_LIBRARY)
|
||||
|
||||
|
|
|
@ -12,14 +12,21 @@ if(UNIX)
|
|||
pkg_check_modules(_MBEDTLS QUIET mbedtls)
|
||||
endif()
|
||||
|
||||
find_path(MBEDTLS_INCLUDE_DIR NAMES mbedtls/version.h HINTS ${_MBEDTLS_INCLUDEDIR})
|
||||
find_library(MBEDTLS_LIBRARY NAMES mbedtls HINTS ${_MBEDTLS_LIBDIR})
|
||||
find_library(MBEDCRYPTO_LIBRARY NAMES mbedcrypto HINTS ${_MBEDTLS_LIBDIR})
|
||||
find_path(MBEDTLS_INCLUDE_DIR
|
||||
NAMES mbedtls/version.h
|
||||
HINTS ${_MBEDTLS_INCLUDEDIR})
|
||||
find_library(MBEDTLS_LIBRARY
|
||||
NAMES mbedtls
|
||||
HINTS ${_MBEDTLS_LIBDIR})
|
||||
find_library(MBEDCRYPTO_LIBRARY
|
||||
NAMES mbedcrypto
|
||||
HINTS ${_MBEDTLS_LIBDIR})
|
||||
|
||||
if(_MBEDTLS_VERSION)
|
||||
set(MBEDTLS_VERSION ${_MBEDTLS_VERSION})
|
||||
elseif(MBEDTLS_INCLUDE_DIR)
|
||||
file(STRINGS "${MBEDTLS_INCLUDE_DIR}/mbedtls/version.h" MBEDTLS_VERSION_STR REGEX "^#define[\t ]+MBEDTLS_VERSION_STRING[\t ]+\"[^\"]+\"")
|
||||
file(STRINGS "${MBEDTLS_INCLUDE_DIR}/mbedtls/version.h" MBEDTLS_VERSION_STR
|
||||
REGEX "^#define[\t ]+MBEDTLS_VERSION_STRING[\t ]+\"[^\"]+\"")
|
||||
if(MBEDTLS_VERSION_STR MATCHES "\"([^\"]+)\"")
|
||||
set(MBEDTLS_VERSION "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
|
@ -34,9 +41,7 @@ find_package_handle_standard_args(MbedTLS
|
|||
REQUIRED_VARS
|
||||
MBEDTLS_LIBRARY
|
||||
MBEDTLS_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
MBEDTLS_VERSION
|
||||
)
|
||||
VERSION_VAR MBEDTLS_VERSION)
|
||||
|
||||
mark_as_advanced(MBEDTLS_INCLUDE_DIR MBEDTLS_LIBRARY MBEDCRYPTO_LIBRARY)
|
||||
|
||||
|
|
|
@ -8,12 +8,16 @@ if(NATPMP_PREFER_STATIC_LIB)
|
|||
endif()
|
||||
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_NATPMP QUIET libnatpmp)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_NATPMP QUIET libnatpmp)
|
||||
endif()
|
||||
|
||||
find_path(NATPMP_INCLUDE_DIR NAMES natpmp.h HINTS ${_NATPMP_INCLUDEDIR})
|
||||
find_library(NATPMP_LIBRARY NAMES natpmp HINTS ${_NATPMP_LIBDIR})
|
||||
find_path(NATPMP_INCLUDE_DIR
|
||||
NAMES natpmp.h
|
||||
HINTS ${_NATPMP_INCLUDEDIR})
|
||||
find_library(NATPMP_LIBRARY
|
||||
NAMES natpmp
|
||||
HINTS ${_NATPMP_LIBDIR})
|
||||
|
||||
set(NATPMP_INCLUDE_DIRS ${NATPMP_INCLUDE_DIR})
|
||||
set(NATPMP_LIBRARIES ${NATPMP_LIBRARY})
|
||||
|
@ -23,8 +27,7 @@ include(FindPackageHandleStandardArgs)
|
|||
find_package_handle_standard_args(NATPMP
|
||||
REQUIRED_VARS
|
||||
NATPMP_LIBRARY
|
||||
NATPMP_INCLUDE_DIR
|
||||
)
|
||||
NATPMP_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(NATPMP_INCLUDE_DIR NATPMP_LIBRARY)
|
||||
|
||||
|
|
|
@ -8,12 +8,16 @@ if(PSL_PREFER_STATIC_LIB)
|
|||
endif()
|
||||
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_PSL QUIET libpsl)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_PSL QUIET libpsl)
|
||||
endif()
|
||||
|
||||
find_path(PSL_INCLUDE_DIR NAMES libpsl.h HINTS ${_PSL_INCLUDEDIR})
|
||||
find_library(PSL_LIBRARY NAMES psl HINTS ${_PSL_LIBDIR})
|
||||
find_path(PSL_INCLUDE_DIR
|
||||
NAMES libpsl.h
|
||||
HINTS ${_PSL_INCLUDEDIR})
|
||||
find_library(PSL_LIBRARY
|
||||
NAMES psl
|
||||
HINTS ${_PSL_LIBDIR})
|
||||
|
||||
set(PSL_INCLUDE_DIRS ${PSL_INCLUDE_DIR})
|
||||
set(PSL_LIBRARIES ${PSL_LIBRARY})
|
||||
|
@ -23,8 +27,7 @@ include(FindPackageHandleStandardArgs)
|
|||
find_package_handle_standard_args(PSL
|
||||
REQUIRED_VARS
|
||||
PSL_LIBRARY
|
||||
PSL_INCLUDE_DIR
|
||||
)
|
||||
PSL_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(PSL_INCLUDE_DIR PSL_LIBRARY)
|
||||
|
||||
|
|
|
@ -3,16 +3,19 @@ if(UNIX)
|
|||
pkg_check_modules(PC_SYSTEMD QUIET libsystemd)
|
||||
endif()
|
||||
|
||||
find_path(SYSTEMD_INCLUDE_DIR NAMES systemd/sd-daemon.h HINTS ${PC_SYSTEMD_INCLUDE_DIRS})
|
||||
find_library(SYSTEMD_LIBRARY NAMES systemd HINTS ${PC_SYSTEMD_LIBRARY_DIRS})
|
||||
find_path(SYSTEMD_INCLUDE_DIR
|
||||
NAMES systemd/sd-daemon.h
|
||||
HINTS ${PC_SYSTEMD_INCLUDE_DIRS})
|
||||
find_library(SYSTEMD_LIBRARY
|
||||
NAMES systemd
|
||||
HINTS ${PC_SYSTEMD_LIBRARY_DIRS})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package_handle_standard_args(SYSTEMD
|
||||
REQUIRED_VARS
|
||||
SYSTEMD_LIBRARY
|
||||
SYSTEMD_INCLUDE_DIR
|
||||
)
|
||||
SYSTEMD_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(SYSTEMD_INCLUDE_DIR SYSTEMD_LIBRARY)
|
||||
|
||||
|
|
|
@ -8,12 +8,16 @@ if(UTP_PREFER_STATIC_LIB)
|
|||
endif()
|
||||
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_UTP QUIET libutp)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(_UTP QUIET libutp)
|
||||
endif()
|
||||
|
||||
find_path(UTP_INCLUDE_DIR NAMES libutp/utp.h HINTS ${_UTP_INCLUDEDIR})
|
||||
find_library(UTP_LIBRARY NAMES utp HINTS ${_UTP_LIBDIR})
|
||||
find_path(UTP_INCLUDE_DIR
|
||||
NAMES libutp/utp.h
|
||||
HINTS ${_UTP_INCLUDEDIR})
|
||||
find_library(UTP_LIBRARY
|
||||
NAMES utp
|
||||
HINTS ${_UTP_LIBDIR})
|
||||
|
||||
if(UTP_INCLUDE_DIR AND UTP_LIBRARY)
|
||||
include(CheckSymbolExists)
|
||||
|
@ -36,8 +40,7 @@ if(UTP_INCLUDE_DIR AND UTP_LIBRARY)
|
|||
utp_set_callback
|
||||
utp_set_userdata
|
||||
utp_write
|
||||
utp_writev
|
||||
)
|
||||
utp_writev)
|
||||
|
||||
set(_UTP_OLD_CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}")
|
||||
set(_UTP_OLD_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
|
||||
|
@ -71,8 +74,7 @@ include(FindPackageHandleStandardArgs)
|
|||
find_package_handle_standard_args(UTP
|
||||
REQUIRED_VARS
|
||||
UTP_LIBRARY
|
||||
UTP_INCLUDE_DIR
|
||||
)
|
||||
UTP_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(UTP_INCLUDE_DIR UTP_LIBRARY)
|
||||
|
||||
|
|
|
@ -12,13 +12,18 @@ if(UNIX)
|
|||
pkg_check_modules(_WOLFSSL QUIET wolfssl)
|
||||
endif()
|
||||
|
||||
find_path(WOLFSSL_INCLUDE_DIR NAMES wolfssl/version.h HINTS ${_WOLFSSL_INCLUDEDIR})
|
||||
find_library(WOLFSSL_LIBRARY NAMES wolfssl HINTS ${_WOLFSSL_LIBDIR})
|
||||
find_path(WOLFSSL_INCLUDE_DIR
|
||||
NAMES wolfssl/version.h
|
||||
HINTS ${_WOLFSSL_INCLUDEDIR})
|
||||
find_library(WOLFSSL_LIBRARY
|
||||
NAMES wolfssl
|
||||
HINTS ${_WOLFSSL_LIBDIR})
|
||||
|
||||
if(_WOLFSSL_VERSION)
|
||||
set(WOLFSSL_VERSION ${_WOLFSSL_VERSION})
|
||||
elseif(WOLFSSL_INCLUDE_DIR)
|
||||
file(STRINGS "${WOLFSSL_INCLUDE_DIR}/wolfssl/version.h" WOLFSSL_VERSION_STR REGEX "^#define[\t ]+LIBWOLFSSL_VERSION_STRING[\t ]+\"[^\"]+\"")
|
||||
file(STRINGS "${WOLFSSL_INCLUDE_DIR}/wolfssl/version.h" WOLFSSL_VERSION_STR
|
||||
REGEX "^#define[\t ]+LIBWOLFSSL_VERSION_STRING[\t ]+\"[^\"]+\"")
|
||||
if(WOLFSSL_VERSION_STR MATCHES "\"([^\"]+)\"")
|
||||
set(WOLFSSL_VERSION "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
|
@ -33,9 +38,7 @@ find_package_handle_standard_args(WolfSSL
|
|||
REQUIRED_VARS
|
||||
WOLFSSL_LIBRARY
|
||||
WOLFSSL_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
WOLFSSL_VERSION
|
||||
)
|
||||
VERSION_VAR WOLFSSL_VERSION)
|
||||
|
||||
mark_as_advanced(WOLFSSL_INCLUDE_DIR WOLFSSL_LIBRARY)
|
||||
|
||||
|
|
|
@ -7,12 +7,11 @@ if(NOT DEFINED NO_LFS_MACROS_REQUIRED)
|
|||
# We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||
# since some C++ compilers masquerading as C compilers
|
||||
# incorrectly reject 9223372036854775807.
|
||||
set(LFS_TEST_PROGRAM "
|
||||
#include <sys/types.h>
|
||||
set(LFS_TEST_PROGRAM
|
||||
"#include <sys/types.h>
|
||||
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1];
|
||||
int main() { return 0; }
|
||||
")
|
||||
int main() { return 0; }")
|
||||
|
||||
check_c_source_compiles("${LFS_TEST_PROGRAM}" NO_LFS_MACROS_REQUIRED)
|
||||
if(NOT NO_LFS_MACROS_REQUIRED)
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
include(CheckFunctionExists)
|
||||
include(CheckIncludeFile)
|
||||
|
||||
macro(tr_auto_option_changed NAME ACC VAL FIL STK)
|
||||
if(NOT ("${VAL}" STREQUAL "AUTO" OR "${VAL}" STREQUAL "ON" OR "${VAL}" STREQUAL "OFF"))
|
||||
if("${VAL}" STREQUAL "0" OR "${VAL}" STREQUAL "NO" OR "${VAL}" STREQUAL "FALSE" OR "${VAL}" STREQUAL "N")
|
||||
|
@ -11,7 +14,8 @@ macro(tr_auto_option_changed NAME ACC VAL FIL STK)
|
|||
endmacro()
|
||||
|
||||
macro(tr_auto_option NAME DESC VAL)
|
||||
set(${NAME} "${VAL}" CACHE STRING "${DESC}")
|
||||
set(${NAME} "${VAL}"
|
||||
CACHE STRING "${DESC}")
|
||||
set_property(CACHE ${NAME} PROPERTY STRINGS "AUTO;ON;OFF")
|
||||
variable_watch(${NAME} tr_auto_option_changed)
|
||||
endmacro()
|
||||
|
@ -57,7 +61,7 @@ endmacro()
|
|||
|
||||
macro(tr_get_required_flag IVAR OVAR)
|
||||
set(${OVAR})
|
||||
if (${IVAR} AND NOT ${IVAR} STREQUAL "AUTO")
|
||||
if(${IVAR} AND NOT ${IVAR} STREQUAL "AUTO")
|
||||
set(${OVAR} REQUIRED)
|
||||
endif()
|
||||
endmacro()
|
||||
|
@ -69,6 +73,61 @@ function(tr_make_id INPUT OVAR)
|
|||
set(${OVAR} "${ID}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(tr_string_unindent RESULT_VAR TEXT)
|
||||
if(TEXT MATCHES [==[^([ ]+)]==])
|
||||
string(REGEX REPLACE "(^|\n)${CMAKE_MATCH_1}($|.)" "\\1\\2" TEXT "${TEXT}")
|
||||
endif()
|
||||
set(${RESULT_VAR} "${TEXT}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
macro(tr_eval SCRIPT)
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
|
||||
cmake_language(EVAL CODE "${SCRIPT}")
|
||||
else()
|
||||
tr_string_unindent(_TR_EVAL_SCRIPT "${SCRIPT}")
|
||||
|
||||
string(SHA1 _TR_EVAL_TMP_FILE "${_TR_EVAL_SCRIPT}")
|
||||
string(SUBSTRING "${_TR_EVAL_TMP_FILE}" 0 10 _TR_EVAL_TMP_FILE)
|
||||
set(_TR_EVAL_TMP_FILE "${CMAKE_BINARY_DIR}/.tr-cache/tr_eval.${_TR_EVAL_TMP_FILE}.cmake")
|
||||
|
||||
if(NOT EXISTS "${_TR_EVAL_TMP_FILE}")
|
||||
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/.tr-cache")
|
||||
file(WRITE "${_TR_EVAL_TMP_FILE}" "${_TR_EVAL_SCRIPT}")
|
||||
endif()
|
||||
|
||||
include("${_TR_EVAL_TMP_FILE}")
|
||||
|
||||
unset(_TR_EVAL_TMP_FILE)
|
||||
unset(_TR_EVAL_SCRIPT)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
function(tr_process_list_conditions VAR_PREFIX)
|
||||
set(ALLOWED_ITEMS)
|
||||
set(DISALLOWED_ITEMS)
|
||||
|
||||
set(ALLOW TRUE)
|
||||
foreach(ARG IN LISTS ARGN)
|
||||
if(ARG MATCHES [==[^\[(.+)\]$]==])
|
||||
set(COND "${CMAKE_MATCH_1}")
|
||||
string(STRIP "${COND}" COND)
|
||||
tr_eval("\
|
||||
if(${COND})
|
||||
set(ALLOW TRUE)
|
||||
else()
|
||||
set(ALLOW FALSE)
|
||||
endif()")
|
||||
elseif(ALLOW)
|
||||
list(APPEND ALLOWED_ITEMS "${ARG}")
|
||||
else()
|
||||
list(APPEND DISALLOWED_ITEMS "${ARG}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(${VAR_PREFIX}_ALLOWED "${ALLOWED_ITEMS}" PARENT_SCOPE)
|
||||
set(${VAR_PREFIX}_DISALLOWED "${DISALLOWED_ITEMS}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
macro(tr_add_external_auto_library ID DIRNAME LIBNAME)
|
||||
if(USE_SYSTEM_${ID})
|
||||
tr_get_required_flag(USE_SYSTEM_${ID} SYSTEM_${ID}_IS_REQUIRED)
|
||||
|
@ -82,8 +141,10 @@ macro(tr_add_external_auto_library ID DIRNAME LIBNAME)
|
|||
set(${ID}_UPSTREAM_TARGET ${LIBNAME})
|
||||
set(${ID}_PREFIX "${CMAKE_BINARY_DIR}/third-party/${${ID}_UPSTREAM_TARGET}")
|
||||
|
||||
set(${ID}_INCLUDE_DIR "${${ID}_PREFIX}/include" CACHE INTERNAL "")
|
||||
set(${ID}_LIBRARY "${${ID}_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${LIBNAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE INTERNAL "")
|
||||
set(${ID}_INCLUDE_DIR "${${ID}_PREFIX}/include"
|
||||
CACHE INTERNAL "")
|
||||
set(${ID}_LIBRARY "${${ID}_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${LIBNAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
CACHE INTERNAL "")
|
||||
|
||||
set(${ID}_INCLUDE_DIRS ${${ID}_INCLUDE_DIR})
|
||||
set(${ID}_LIBRARIES ${${ID}_LIBRARY})
|
||||
|
@ -114,8 +175,7 @@ macro(tr_add_external_auto_library ID DIRNAME LIBNAME)
|
|||
"-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>"
|
||||
"-DCMAKE_INSTALL_LIBDIR:STRING=lib"
|
||||
${${ID}_EXT_PROJ_CMAKE_ARGS}
|
||||
BUILD_BYPRODUCTS "${${ID}_LIBRARY}"
|
||||
)
|
||||
BUILD_BYPRODUCTS "${${ID}_LIBRARY}")
|
||||
|
||||
set_property(TARGET ${${ID}_UPSTREAM_TARGET} PROPERTY FOLDER "third-party")
|
||||
endif()
|
||||
|
@ -129,7 +189,47 @@ function(tr_append_target_property TGT PROP VAL)
|
|||
set_target_properties(${TGT} PROPERTIES ${PROP} "${VAL}")
|
||||
endfunction()
|
||||
|
||||
function(tr_win32_app_info OVAR DESCR INTNAME ORIGFNAME)
|
||||
function(tr_target_compile_definitions_for_headers TGT)
|
||||
cmake_parse_arguments(ARG "" "" "PRIVATE;PUBLIC" ${ARGN})
|
||||
foreach(VISIBILITY IN ITEMS PRIVATE PUBLIC)
|
||||
foreach(H IN LISTS ARG_${VISIBILITY})
|
||||
tr_make_id("HAVE_${H}" H_ID)
|
||||
check_include_file(${H} ${H_ID})
|
||||
target_compile_definitions(${TGT}
|
||||
${VISIBILITY}
|
||||
$<$<BOOL:${${H_ID}}>:${H_ID}>)
|
||||
endforeach()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(tr_target_compile_definitions_for_functions TGT)
|
||||
cmake_parse_arguments(ARG "" "" "PRIVATE;PUBLIC;REQUIRED_LIBS" ${ARGN})
|
||||
set(CMAKE_REQUIRED_LIBRARIES "${ARG_REQUIRED_LIBS}")
|
||||
foreach(VISIBILITY IN ITEMS PRIVATE PUBLIC)
|
||||
foreach(F IN LISTS ARG_${VISIBILITY})
|
||||
tr_make_id("HAVE_${F}" F_ID)
|
||||
check_function_exists(${F} ${F_ID})
|
||||
target_compile_definitions(${TGT}
|
||||
${VISIBILITY}
|
||||
$<$<BOOL:${${F_ID}}>:${F_ID}>)
|
||||
endforeach()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(tr_disable_source_files_compile)
|
||||
if(ARGN)
|
||||
set_property(
|
||||
SOURCE ${ARGN}
|
||||
PROPERTY HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(tr_allow_compile_if)
|
||||
tr_process_list_conditions(FILES ${ARGN})
|
||||
tr_disable_source_files_compile(${FILES_DISALLOWED})
|
||||
endfunction()
|
||||
|
||||
function(tr_win32_app_info TGT DESCR INTNAME ORIGFNAME)
|
||||
if(NOT WIN32)
|
||||
return()
|
||||
endif()
|
||||
|
@ -143,7 +243,9 @@ function(tr_win32_app_info OVAR DESCR INTNAME ORIGFNAME)
|
|||
|
||||
configure_file("${CMAKE_SOURCE_DIR}/cmake/Transmission.rc.in" "${INTNAME}-app-info.rc")
|
||||
|
||||
set(${OVAR} "${CMAKE_CURRENT_BINARY_DIR}/${INTNAME}-app-info.rc" PARENT_SCOPE)
|
||||
target_sources(${TGT}
|
||||
PRIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${INTNAME}-app-info.rc")
|
||||
endfunction()
|
||||
|
||||
function(tr_select_library LIBNAMES FUNCNAME DIRS OVAR)
|
||||
|
@ -180,7 +282,10 @@ function(tr_fixup_bundle_item BUNDLE_DIR BUNDLE_ITEMS DEP_DIRS)
|
|||
set(DEP_BUNDLE_PATH "Contents/MacOS/${DEP_NAME}")
|
||||
elseif(DEP_FULL_PATH MATCHES "^(.+)/(([^/]+[.]framework)/.+)$")
|
||||
set(DEP_NAME "${CMAKE_MATCH_2}")
|
||||
file(COPY "${CMAKE_MATCH_1}/${CMAKE_MATCH_3}" DESTINATION "${BUNDLE_DIR}/Contents/Frameworks/" PATTERN "Headers" EXCLUDE)
|
||||
file(
|
||||
COPY "${CMAKE_MATCH_1}/${CMAKE_MATCH_3}"
|
||||
DESTINATION "${BUNDLE_DIR}/Contents/Frameworks/"
|
||||
PATTERN "Headers" EXCLUDE)
|
||||
set(DEP_BUNDLE_PATH "Contents/Frameworks/${DEP_NAME}")
|
||||
else()
|
||||
message(FATAL_ERROR "Don't know how to fixup '${DEP_FULL_PATH}'")
|
||||
|
@ -198,28 +303,221 @@ function(tr_fixup_bundle_item BUNDLE_DIR BUNDLE_ITEMS DEP_DIRS)
|
|||
endwhile()
|
||||
endfunction()
|
||||
|
||||
macro(tr_qt_wrap_ui)
|
||||
if(Qt_VERSION_MAJOR EQUAL 6)
|
||||
qt6_wrap_ui(${ARGN})
|
||||
else()
|
||||
qt5_wrap_ui(${ARGN})
|
||||
endif()
|
||||
endmacro()
|
||||
function(tr_glib_compile_resources TGT NAME INPUT_DIR INPUT_FILE OUTPUT_FILE_BASE)
|
||||
if(NOT GLIB_COMPILE_RESOURCES_EXECUTABLE)
|
||||
execute_process(
|
||||
COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_resources
|
||||
OUTPUT_VARIABLE GLIB_COMPILE_RESOURCES_EXECUTABLE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
macro(tr_qt_add_resources)
|
||||
if(Qt_VERSION_MAJOR EQUAL 6)
|
||||
qt6_add_resources(${ARGN})
|
||||
else()
|
||||
qt5_add_resources(${ARGN})
|
||||
endif()
|
||||
endmacro()
|
||||
if(NOT GLIB_COMPILE_RESOURCES_EXECUTABLE)
|
||||
message(SEND_ERROR "Unable to find glib-compile-resources executable")
|
||||
endif()
|
||||
|
||||
macro(tr_qt_add_translation)
|
||||
set(GLIB_COMPILE_RESOURCES_EXECUTABLE "${GLIB_COMPILE_RESOURCES_EXECUTABLE}"
|
||||
CACHE STRING "glib-compile-resources executable")
|
||||
endif()
|
||||
|
||||
set_property(
|
||||
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
|
||||
"${INPUT_DIR}/${INPUT_FILE}")
|
||||
|
||||
file(STRINGS "${INPUT_DIR}/${INPUT_FILE}" INPUT_LINES)
|
||||
set(OUTPUT_DEPENDS)
|
||||
foreach(INPUT_LINE IN LISTS INPUT_LINES)
|
||||
if(INPUT_LINE MATCHES ">([^<]+)</file>")
|
||||
list(APPEND OUTPUT_DEPENDS "${INPUT_DIR}/${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.c"
|
||||
COMMAND
|
||||
"${GLIB_COMPILE_RESOURCES_EXECUTABLE}"
|
||||
"--target=${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.c"
|
||||
"--sourcedir=${INPUT_DIR}"
|
||||
--generate-source
|
||||
--c-name "${NAME}"
|
||||
"${INPUT_DIR}/${INPUT_FILE}"
|
||||
DEPENDS
|
||||
"${INPUT_DIR}/${INPUT_FILE}"
|
||||
${OUTPUT_DEPENDS}
|
||||
WORKING_DIRECTORY "${INPUT_DIR}")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.h"
|
||||
COMMAND
|
||||
"${GLIB_COMPILE_RESOURCES_EXECUTABLE}"
|
||||
"--target=${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.h"
|
||||
"--sourcedir=${INPUT_DIR}"
|
||||
--generate-header
|
||||
--c-name "${NAME}"
|
||||
"${INPUT_DIR}/${INPUT_FILE}"
|
||||
DEPENDS
|
||||
"${INPUT_DIR}/${INPUT_FILE}"
|
||||
${OUTPUT_DEPENDS}
|
||||
WORKING_DIRECTORY "${INPUT_DIR}")
|
||||
|
||||
target_sources(${TGT}
|
||||
PRIVATE
|
||||
"${INPUT_DIR}/${INPUT_FILE}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.c"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.h")
|
||||
|
||||
source_group("Generated Files"
|
||||
FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.c"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.h")
|
||||
endfunction()
|
||||
|
||||
function(tr_target_glib_resources TGT)
|
||||
foreach(ARG IN LISTS ARGN)
|
||||
get_filename_component(ARG_PATH "${ARG}" ABSOLUTE)
|
||||
string(SHA1 ARG_HASH "${ARG_PATH}")
|
||||
string(SUBSTRING "${ARG_HASH}" 0 10 ARG_HASH)
|
||||
|
||||
get_filename_component(ARG_NAME_WE "${ARG}" NAME_WE)
|
||||
string(MAKE_C_IDENTIFIER "${ARG_NAME_WE}" ARG_ID)
|
||||
|
||||
get_filename_component(ARG_DIR "${ARG_PATH}" DIRECTORY)
|
||||
get_filename_component(ARG_NAME "${ARG}" NAME)
|
||||
|
||||
tr_glib_compile_resources(${TGT}
|
||||
"${ARG_ID}_${ARG_HASH}"
|
||||
"${ARG_DIR}"
|
||||
"${ARG_NAME}"
|
||||
"${ARG_ID}-${ARG_HASH}")
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(tr_gettext_msgfmt TGT OUTPUT_FILE INPUT_FILE)
|
||||
get_filename_component(OUTPUT_FILE_EXT "${OUTPUT_FILE}" LAST_EXT)
|
||||
if(OUTPUT_FILE_EXT STREQUAL ".desktop")
|
||||
set(MODE_ARG "--desktop")
|
||||
elseif(OUTPUT_FILE_EXT STREQUAL ".xml")
|
||||
set(MODE_ARG "--xml")
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported output file extension: '${OUTPUT_FILE_EXT}'")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${OUTPUT_FILE}
|
||||
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ${MODE_ARG} -d ${CMAKE_SOURCE_DIR}/po --template ${INPUT_FILE} -o ${OUTPUT_FILE}
|
||||
DEPENDS ${INPUT_FILE}
|
||||
VERBATIM)
|
||||
|
||||
target_sources(${TGT}
|
||||
PRIVATE
|
||||
"${INPUT_FILE}"
|
||||
"${OUTPUT_FILE}")
|
||||
|
||||
source_group("Generated Files"
|
||||
FILES
|
||||
"${OUTPUT_FILE}")
|
||||
endfunction()
|
||||
|
||||
macro(tr_qt_add_translation OUTPUT_FILES_VAR)
|
||||
if(Qt_VERSION_MAJOR EQUAL 6)
|
||||
qt6_add_translation(${ARGN} OPTIONS -silent)
|
||||
qt6_add_translation(${OUTPUT_FILES_VAR} ${ARGN} OPTIONS -silent)
|
||||
elseif(Qt_VERSION GREATER_EQUAL 5.11)
|
||||
qt5_add_translation(${ARGN} OPTIONS -silent)
|
||||
qt5_add_translation(${OUTPUT_FILES_VAR} ${ARGN} OPTIONS -silent)
|
||||
else()
|
||||
qt5_add_translation(${ARGN})
|
||||
qt5_add_translation(${OUTPUT_FILES_VAR} ${ARGN})
|
||||
endif()
|
||||
|
||||
source_group("Generated Files"
|
||||
FILES ${${OUTPUT_FILES_VAR}})
|
||||
endmacro()
|
||||
|
||||
function(tr_wrap_idl TGT INPUT_FILE OUTPUT_FILE_BASE)
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.tlb
|
||||
COMMAND ${MIDL_EXECUTABLE} /tlb ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.tlb ${INPUT_FILE}
|
||||
DEPENDS ${INPUT_FILE}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
configure_file("${CMAKE_SOURCE_DIR}/cmake/Transmission.tlb.rc.in" ${OUTPUT_FILE_BASE}.tlb.rc)
|
||||
|
||||
target_sources(${TGT}
|
||||
PRIVATE
|
||||
${INPUT_FILE}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.tlb
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.tlb.rc)
|
||||
|
||||
source_group("Generated Files"
|
||||
FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.tlb
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.tlb.rc)
|
||||
|
||||
tr_disable_source_files_compile(
|
||||
${INPUT_FILE}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.tlb)
|
||||
endfunction()
|
||||
|
||||
function(tr_target_idl_files TGT)
|
||||
foreach(ARG IN LISTS ARGN)
|
||||
get_filename_component(ARG_PATH "${ARG}" ABSOLUTE)
|
||||
string(SHA1 ARG_HASH "${ARG_PATH}")
|
||||
string(SUBSTRING "${ARG_HASH}" 0 10 ARG_HASH)
|
||||
|
||||
get_filename_component(ARG_NAME_WE "${ARG}" NAME_WE)
|
||||
string(MAKE_C_IDENTIFIER "${ARG_NAME_WE}" ARG_ID)
|
||||
|
||||
tr_wrap_idl(${TGT}
|
||||
"${ARG}"
|
||||
"${ARG_ID}-${ARG_HASH}")
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(tr_wrap_xib TGT INPUT_FILE OUTPUT_FILE OUTPUT_FOLDER)
|
||||
if(NOT IBTOOL_EXECUTABLE)
|
||||
find_program(IBTOOL_EXECUTABLE ibtool REQUIRED)
|
||||
endif()
|
||||
|
||||
if(OUTPUT_FOLDER)
|
||||
string(PREPEND OUTPUT_FOLDER "/")
|
||||
endif()
|
||||
|
||||
get_filename_component(OUTPUT_FILE_DIR "${OUTPUT_FILE}" DIRECTORY)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${OUTPUT_FILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_FILE_DIR}
|
||||
COMMAND ${IBTOOL_EXECUTABLE} --compile ${OUTPUT_FILE} ${INPUT_FILE}
|
||||
DEPENDS ${INPUT_FILE}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
VERBATIM)
|
||||
|
||||
target_sources(${TGT}
|
||||
PRIVATE
|
||||
${INPUT_FILE}
|
||||
${OUTPUT_FILE})
|
||||
|
||||
set(RESOURCES_DIR Resources)
|
||||
if(NOT CMAKE_GENERATOR STREQUAL Xcode)
|
||||
string(APPEND RESOURCES_DIR "${OUTPUT_FOLDER}")
|
||||
endif()
|
||||
set_source_files_properties(
|
||||
${OUTPUT_FILE}
|
||||
PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION "${RESOURCES_DIR}")
|
||||
|
||||
source_group("Resources${OUTPUT_FOLDER}"
|
||||
FILES ${INPUT_FILE})
|
||||
|
||||
source_group("Generated Files${OUTPUT_FOLDER}"
|
||||
FILES ${OUTPUT_FILE})
|
||||
endfunction()
|
||||
|
||||
function(tr_target_xib_files TGT)
|
||||
foreach(ARG IN LISTS ARGN)
|
||||
get_filename_component(ARG_DIR "${ARG}" DIRECTORY)
|
||||
get_filename_component(ARG_NAME_WLE "${ARG}" NAME_WLE)
|
||||
|
||||
tr_wrap_xib(${TGT}
|
||||
"${ARG}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${ARG_DIR}/${ARG_NAME_WLE}.nib"
|
||||
"${ARG_DIR}")
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
#include "winresrc.h"
|
||||
|
||||
#pragma code_page(1252)
|
||||
|
||||
LANGUAGE 0, 0
|
||||
1 TYPELIB "${OUTPUT_FILE_BASE}.tlb"
|
|
@ -1,58 +1,61 @@
|
|||
project(trdaemon)
|
||||
add_executable(${TR_NAME}-daemon)
|
||||
|
||||
if(WITH_SYSTEMD)
|
||||
add_definitions(-DUSE_SYSTEMD)
|
||||
endif()
|
||||
target_sources(${TR_NAME}-daemon
|
||||
PRIVATE
|
||||
daemon.cc
|
||||
daemon.h
|
||||
daemon-posix.cc
|
||||
daemon-win32.cc)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_SOURCE_DIR}
|
||||
)
|
||||
include_directories(
|
||||
SYSTEM
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
)
|
||||
tr_allow_compile_if(
|
||||
[=[[WIN32]]=]
|
||||
daemon-win32.cc
|
||||
[=[[NOT WIN32]]=]
|
||||
daemon-posix.cc)
|
||||
|
||||
set(${PROJECT_NAME}_SOURCES
|
||||
daemon.cc
|
||||
daemon-posix.cc
|
||||
daemon-win32.cc
|
||||
)
|
||||
target_compile_definitions(${TR_NAME}-daemon
|
||||
PRIVATE
|
||||
$<$<BOOL:${WITH_SYSTEMD}>:USE_SYSTEMD>)
|
||||
|
||||
if(WIN32)
|
||||
set_source_files_properties(daemon-posix.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
else()
|
||||
set_source_files_properties(daemon-win32.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
tr_target_compile_definitions_for_headers(${TR_NAME}-daemon
|
||||
PRIVATE
|
||||
sys/signalfd.h)
|
||||
|
||||
set(${PROJECT_NAME}_HEADERS
|
||||
daemon.h
|
||||
)
|
||||
tr_target_compile_definitions_for_functions(${TR_NAME}-daemon
|
||||
PRIVATE
|
||||
daemon
|
||||
syslog)
|
||||
|
||||
tr_win32_app_info(${PROJECT_NAME}_WIN32_RC_FILE
|
||||
target_include_directories(${TR_NAME}-daemon
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR})
|
||||
|
||||
target_include_directories(${TR_NAME}-daemon SYSTEM
|
||||
PRIVATE
|
||||
${LIBFMT_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
$<$<BOOL:${WITH_SYSTEMD}>:${SYSTEMD_INCLUDE_DIRS}>)
|
||||
|
||||
target_link_libraries(${TR_NAME}-daemon
|
||||
PRIVATE
|
||||
${TR_NAME}
|
||||
${EVENT2_LIBRARIES}
|
||||
$<$<BOOL:${WITH_SYSTEMD}>:${SYSTEMD_LIBRARIES}>)
|
||||
|
||||
tr_win32_app_info(${TR_NAME}-daemon
|
||||
"Transmission Daemon"
|
||||
"${TR_NAME}-daemon"
|
||||
"${TR_NAME}-daemon.exe")
|
||||
|
||||
add_executable(${TR_NAME}-daemon
|
||||
${${PROJECT_NAME}_SOURCES}
|
||||
${${PROJECT_NAME}_HEADERS}
|
||||
${${PROJECT_NAME}_WIN32_RC_FILE})
|
||||
|
||||
target_link_libraries(${TR_NAME}-daemon
|
||||
${TR_NAME}
|
||||
${EVENT2_LIBRARIES}
|
||||
)
|
||||
|
||||
if(WITH_SYSTEMD)
|
||||
target_include_directories(${TR_NAME}-daemon PRIVATE ${SYSTEMD_INCLUDE_DIRS})
|
||||
target_link_libraries(${TR_NAME}-daemon ${SYSTEMD_LIBRARIES})
|
||||
endif()
|
||||
|
||||
foreach(P daemon)
|
||||
install(TARGETS ${TR_NAME}-${P} DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(
|
||||
TARGETS ${TR_NAME}-${P}
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
if(INSTALL_DOC)
|
||||
install(FILES ${TR_NAME}-${P}.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
install(
|
||||
FILES ${TR_NAME}-${P}.1
|
||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
endif()
|
||||
endforeach()
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
project(tr-dist-msi)
|
||||
|
||||
include(UtilityFunctions.cmake)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
|
@ -56,7 +54,9 @@ else()
|
|||
set(TR_OPENSSL_SSL_NAME "ssleay32.dll")
|
||||
endif()
|
||||
|
||||
file(COPY "${CMAKE_SOURCE_DIR}/qt/icons/transmission.ico" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
||||
file(
|
||||
COPY "${CMAKE_SOURCE_DIR}/qt/icons/transmission.ico"
|
||||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
set(WEBSRCDIR "${CMAKE_INSTALL_PREFIX}/share/transmission/public_html")
|
||||
set(TRQMSRCDIR "${CMAKE_INSTALL_PREFIX}/share/transmission/translations")
|
||||
|
@ -66,11 +66,11 @@ configure_file(TransmissionConfig.wxi.in TransmissionConfig.wxi)
|
|||
|
||||
wix_heat(WebUi.wxs "${WEBSRCDIR}" WebUiComponents WEBINSTALLDIR var.WebSrcDir)
|
||||
wix_heat(QtClientTranslations.wxs "${TRQMSRCDIR}" QtClientTranslationsComponents QMINSTALLDIR var.TrQmSrcDir)
|
||||
wix_heat(QtTranslations.wxs "${QTQMSRCDIR}" QtTranslationsComponents QMINSTALLDIR var.QtQmSrcDir XSL_TRANSFORM QtTranslations.xsl)
|
||||
wix_heat(QtTranslations.wxs "${QTQMSRCDIR}" QtTranslationsComponents QMINSTALLDIR var.QtQmSrcDir
|
||||
XSL_TRANSFORM QtTranslations.xsl)
|
||||
|
||||
wix_candle(${PROJECT_NAME}_OBJS
|
||||
ARCHITECTURE
|
||||
${ARCH}
|
||||
wix_candle(WIX_OBJS
|
||||
ARCHITECTURE ${ARCH}
|
||||
SOURCES
|
||||
components/CliTools.wxs
|
||||
components/CommonLibs.wxs
|
||||
|
@ -95,14 +95,11 @@ wix_candle(${PROJECT_NAME}_OBJS
|
|||
"MsvcCrtMsmFile=${TR_MSVC_CRT_MSM_FILE}"
|
||||
"OpenSslCryptoName=${TR_OPENSSL_CRYPTO_NAME}"
|
||||
"OpenSslSslName=${TR_OPENSSL_SSL_NAME}"
|
||||
EXTRA_DEPENDS
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/TransmissionConfig.wxi")
|
||||
EXTRA_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/TransmissionConfig.wxi")
|
||||
|
||||
wix_light(${PROJECT_NAME}_OUTPUT
|
||||
NAME
|
||||
transmission-${MSI_FILENAME_VERSION}-${ARCH}
|
||||
OBJECTS
|
||||
${${PROJECT_NAME}_OBJS}
|
||||
wix_light(WIX_OUTPUT
|
||||
NAME transmission-${MSI_FILENAME_VERSION}-${ARCH}
|
||||
OBJECTS ${WIX_OBJS}
|
||||
EXTENSIONS
|
||||
WixUIExtension
|
||||
WixUtilExtension
|
||||
|
@ -119,5 +116,4 @@ add_custom_target(pack-msi
|
|||
QtTranslations.xsl
|
||||
Transmission.wxs
|
||||
TransmissionConfig.wxi.in
|
||||
DEPENDS
|
||||
"${${PROJECT_NAME}_OUTPUT}")
|
||||
DEPENDS "${WIX_OUTPUT}")
|
||||
|
|
|
@ -22,8 +22,12 @@ function(find_msvc_crt_msm OUTPUT_VAR)
|
|||
set(CMN_PF_DIR "CommonProgramFiles(x86)")
|
||||
find_file(${OUTPUT_VAR}
|
||||
NAMES "${MSM_FILE}"
|
||||
PATHS ${VC_VER_DIRS} $ENV{${CMN_PF_DIR}}
|
||||
PATH_SUFFIXES "MergeModules" "Merge Modules")
|
||||
PATHS
|
||||
${VC_VER_DIRS}
|
||||
$ENV{${CMN_PF_DIR}}
|
||||
PATH_SUFFIXES
|
||||
"MergeModules"
|
||||
"Merge Modules")
|
||||
message(STATUS " * Result: ${${OUTPUT_VAR}}")
|
||||
|
||||
set(${OUTPUT_VAR} "${${OUTPUT_VAR}}" PARENT_SCOPE)
|
||||
|
@ -76,7 +80,9 @@ function(wix_candle OUTPUT_VAR)
|
|||
add_custom_command(
|
||||
OUTPUT "${CANDLE_OUTPUT}"
|
||||
COMMAND candle ${OPTIONS} "${F}" -out "${CANDLE_OUTPUT}"
|
||||
DEPENDS "${F}" ${CANDLE_EXTRA_DEPENDS})
|
||||
DEPENDS
|
||||
"${F}"
|
||||
${CANDLE_EXTRA_DEPENDS})
|
||||
list(APPEND ${OUTPUT_VAR} "${CANDLE_OUTPUT}")
|
||||
endforeach()
|
||||
|
||||
|
@ -96,7 +102,9 @@ function(wix_light OUTPUT_VAR)
|
|||
OUTPUT ${LIGHT_OUTPUT}
|
||||
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${LIGHT_NAME}.wixpdb"
|
||||
COMMAND light ${OPTIONS} -out "${CMAKE_CURRENT_BINARY_DIR}/${LIGHT_NAME}.msi" ${LIGHT_OBJECTS}
|
||||
DEPENDS ${LIGHT_OBJECTS} ${LIGHT_EXTRA_DEPENDS})
|
||||
DEPENDS
|
||||
${LIGHT_OBJECTS}
|
||||
${LIGHT_EXTRA_DEPENDS})
|
||||
|
||||
list(APPEND ${OUTPUT_VAR} ${LIGHT_OUTPUT})
|
||||
set(${OUTPUT_VAR} "${${OUTPUT_VAR}}" PARENT_SCOPE)
|
||||
|
|
|
@ -1,279 +1,245 @@
|
|||
project(trgtk)
|
||||
|
||||
if(ENABLE_WERROR)
|
||||
add_compile_options($<IF:$<CXX_COMPILER_ID:MSVC>,/WX,-Werror>)
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND
|
||||
${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_resources
|
||||
OUTPUT_VARIABLE
|
||||
GLIB_COMPILE_RESOURCES_EXECUTABLE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
if(NOT GLIB_COMPILE_RESOURCES_EXECUTABLE)
|
||||
message(SEND_ERROR "Unable to find glib-compile-resources executable")
|
||||
endif()
|
||||
|
||||
find_program(APPSTREAM appstreamcli)
|
||||
|
||||
add_executable(${TR_NAME}-gtk WIN32)
|
||||
|
||||
target_sources(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
Actions.cc
|
||||
Actions.h
|
||||
Application.cc
|
||||
Application.h
|
||||
DetailsDialog.cc
|
||||
DetailsDialog.h
|
||||
Dialogs.cc
|
||||
Dialogs.h
|
||||
FaviconCache.cc
|
||||
FaviconCache.h
|
||||
FileList.cc
|
||||
FileList.h
|
||||
FilterBar.cc
|
||||
FilterBar.h
|
||||
Flags.h
|
||||
FreeSpaceLabel.cc
|
||||
FreeSpaceLabel.h
|
||||
GtkCompat.h
|
||||
HigWorkarea.h
|
||||
IconCache.cc
|
||||
IconCache.h
|
||||
ListModelAdapter.cc
|
||||
ListModelAdapter.h
|
||||
main.cc
|
||||
MainWindow.cc
|
||||
MainWindow.h
|
||||
MakeDialog.cc
|
||||
MakeDialog.h
|
||||
MessageLogWindow.cc
|
||||
MessageLogWindow.h
|
||||
Notify.cc
|
||||
Notify.h
|
||||
OptionsDialog.cc
|
||||
OptionsDialog.h
|
||||
PathButton.cc
|
||||
PathButton.h
|
||||
Prefs.cc
|
||||
Prefs.h
|
||||
PrefsDialog.cc
|
||||
PrefsDialog.h
|
||||
RelocateDialog.cc
|
||||
RelocateDialog.h
|
||||
Session.cc
|
||||
Session.h
|
||||
StatsDialog.cc
|
||||
StatsDialog.h
|
||||
SystemTrayIcon.cc
|
||||
SystemTrayIcon.h
|
||||
Torrent.cc
|
||||
Torrent.h
|
||||
TorrentCellRenderer.cc
|
||||
TorrentCellRenderer.h
|
||||
TorrentFilter.cc
|
||||
TorrentFilter.h
|
||||
TorrentSorter.cc
|
||||
TorrentSorter.h
|
||||
Utils.cc
|
||||
Utils.h)
|
||||
|
||||
target_sources(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
ui/gtk3/AddTrackerDialog.ui
|
||||
ui/gtk3/DetailsDialog.ui
|
||||
ui/gtk3/EditTrackersDialog.ui
|
||||
ui/gtk3/FilterBar.ui
|
||||
ui/gtk3/MainWindow.ui
|
||||
ui/gtk3/MakeDialog.ui
|
||||
ui/gtk3/MakeProgressDialog.ui
|
||||
ui/gtk3/MessageLogWindow.ui
|
||||
ui/gtk3/OptionsDialog.ui
|
||||
ui/gtk3/PrefsDialog.ui
|
||||
ui/gtk3/RelocateDialog.ui
|
||||
ui/gtk3/StatsDialog.ui
|
||||
ui/gtk3/TorrentUrlChooserDialog.ui)
|
||||
|
||||
source_group(Ui/GTK3
|
||||
REGULAR_EXPRESSION [[ui/gtk3/.*\.ui$]])
|
||||
|
||||
target_sources(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
ui/gtk4/AddTrackerDialog.ui
|
||||
ui/gtk4/DetailsDialog.ui
|
||||
ui/gtk4/EditTrackersDialog.ui
|
||||
ui/gtk4/FilterBar.ui
|
||||
ui/gtk4/MainWindow.ui
|
||||
ui/gtk4/MakeDialog.ui
|
||||
ui/gtk4/MakeProgressDialog.ui
|
||||
ui/gtk4/MessageLogWindow.ui
|
||||
ui/gtk4/OptionsDialog.ui
|
||||
ui/gtk4/PrefsDialog.ui
|
||||
ui/gtk4/RelocateDialog.ui
|
||||
ui/gtk4/StatsDialog.ui
|
||||
ui/gtk4/TorrentUrlChooserDialog.ui)
|
||||
|
||||
source_group(Ui/GTK4
|
||||
REGULAR_EXPRESSION [[ui/gtk4/.*\.ui$]])
|
||||
|
||||
target_link_directories(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
${GTK${GTK_VERSION}_LIBRARY_DIRS})
|
||||
|
||||
if(WITH_APPINDICATOR)
|
||||
set_property(
|
||||
SOURCE SystemTrayIcon.cc
|
||||
APPEND
|
||||
PROPERTY COMPILE_DEFINITIONS
|
||||
HAVE_APPINDICATOR)
|
||||
if(APPINDICATOR_IS_AYATANA)
|
||||
set_property(
|
||||
SOURCE SystemTrayIcon.cc
|
||||
APPEND
|
||||
PROPERTY COMPILE_DEFINITIONS
|
||||
APPINDICATOR_IS_AYATANA)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(GTK_VERSION EQUAL 4)
|
||||
set(UI_SUBDIR ui/gtk4)
|
||||
else()
|
||||
set(UI_SUBDIR ui/gtk3)
|
||||
endif()
|
||||
|
||||
set(${PROJECT_NAME}_UI_FILES
|
||||
${UI_SUBDIR}/AddTrackerDialog.ui
|
||||
${UI_SUBDIR}/DetailsDialog.ui
|
||||
${UI_SUBDIR}/EditTrackersDialog.ui
|
||||
${UI_SUBDIR}/FilterBar.ui
|
||||
${UI_SUBDIR}/MainWindow.ui
|
||||
${UI_SUBDIR}/MakeDialog.ui
|
||||
${UI_SUBDIR}/MakeProgressDialog.ui
|
||||
${UI_SUBDIR}/MessageLogWindow.ui
|
||||
${UI_SUBDIR}/OptionsDialog.ui
|
||||
${UI_SUBDIR}/PrefsDialog.ui
|
||||
${UI_SUBDIR}/RelocateDialog.ui
|
||||
${UI_SUBDIR}/StatsDialog.ui
|
||||
${UI_SUBDIR}/TorrentUrlChooserDialog.ui
|
||||
)
|
||||
|
||||
macro(gtr_compile_resources NAME INPUT_DIR INPUT_FILE OUTPUT_FILE_BASE)
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.c"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.h"
|
||||
COMMAND
|
||||
"${GLIB_COMPILE_RESOURCES_EXECUTABLE}"
|
||||
"--target=${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.c"
|
||||
"--sourcedir=${INPUT_DIR}"
|
||||
--generate-source
|
||||
--c-name "${NAME}"
|
||||
"${INPUT_DIR}/${INPUT_FILE}"
|
||||
COMMAND
|
||||
"${GLIB_COMPILE_RESOURCES_EXECUTABLE}"
|
||||
"--target=${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE_BASE}.h"
|
||||
"--sourcedir=${INPUT_DIR}"
|
||||
--generate-header
|
||||
--c-name "${NAME}"
|
||||
"${INPUT_DIR}/${INPUT_FILE}"
|
||||
DEPENDS
|
||||
"${INPUT_DIR}/${INPUT_FILE}"
|
||||
${ARGN}
|
||||
WORKING_DIRECTORY
|
||||
"${INPUT_DIR}"
|
||||
)
|
||||
endmacro()
|
||||
|
||||
gtr_compile_resources(transmission ${CMAKE_CURRENT_SOURCE_DIR} transmission.gresource.xml transmission-resources
|
||||
icons/hicolor_apps_scalable_transmission.svg
|
||||
icons/lock.svg
|
||||
icons/options-symbolic.svg
|
||||
icons/ratio-symbolic.svg
|
||||
icons/turtle-symbolic.svg
|
||||
transmission-ui.css
|
||||
transmission-ui.xml
|
||||
)
|
||||
gtr_compile_resources(transmission_ui ${CMAKE_CURRENT_SOURCE_DIR}/${UI_SUBDIR} transmission-ui.gresource.xml transmission-ui-resources
|
||||
${${PROJECT_NAME}_UI_FILES}
|
||||
)
|
||||
tr_target_glib_resources(${TR_NAME}-gtk
|
||||
transmission.gresource.xml
|
||||
${UI_SUBDIR}/transmission-ui.gresource.xml)
|
||||
|
||||
if(ENABLE_NLS)
|
||||
set(${PROJECT_NAME}_DESKTOP_FILE "${PROJECT_BINARY_DIR}/${TR_NAME}-gtk.desktop")
|
||||
add_custom_command(
|
||||
OUTPUT ${${PROJECT_NAME}_DESKTOP_FILE}
|
||||
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --desktop -d ${CMAKE_SOURCE_DIR}/po --template ${PROJECT_SOURCE_DIR}/transmission-gtk.desktop.in -o ${${PROJECT_NAME}_DESKTOP_FILE}
|
||||
DEPENDS ${PROJECT_SOURCE_DIR}/transmission-gtk.desktop.in
|
||||
VERBATIM
|
||||
)
|
||||
set(DESKTOP_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TR_NAME}-gtk.desktop")
|
||||
tr_gettext_msgfmt(${TR_NAME}-gtk
|
||||
${DESKTOP_FILE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/transmission-gtk.desktop.in)
|
||||
target_sources(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
${DESKTOP_FILE})
|
||||
|
||||
set(${PROJECT_NAME}_METAINFO_FILE "${PROJECT_BINARY_DIR}/${TR_NAME}-gtk.metainfo.xml")
|
||||
add_custom_command(
|
||||
OUTPUT ${${PROJECT_NAME}_METAINFO_FILE}
|
||||
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --xml -d ${CMAKE_SOURCE_DIR}/po --template ${PROJECT_SOURCE_DIR}/transmission-gtk.metainfo.xml.in -o ${${PROJECT_NAME}_METAINFO_FILE}
|
||||
DEPENDS ${PROJECT_SOURCE_DIR}/transmission-gtk.metainfo.xml.in
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
source_group("Generated Files" FILES ${${PROJECT_NAME}_DESKTOP_FILE} ${${PROJECT_NAME}_METAINFO_FILE})
|
||||
set(METAINFO_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TR_NAME}-gtk.metainfo.xml")
|
||||
tr_gettext_msgfmt(${TR_NAME}-gtk
|
||||
${METAINFO_FILE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/transmission-gtk.metainfo.xml.in)
|
||||
target_sources(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
${METAINFO_FILE})
|
||||
endif()
|
||||
|
||||
set(${PROJECT_NAME}_SOURCES
|
||||
Actions.cc
|
||||
Application.cc
|
||||
DetailsDialog.cc
|
||||
Dialogs.cc
|
||||
FaviconCache.cc
|
||||
FileList.cc
|
||||
FilterBar.cc
|
||||
FreeSpaceLabel.cc
|
||||
IconCache.cc
|
||||
ListModelAdapter.cc
|
||||
main.cc
|
||||
MainWindow.cc
|
||||
MakeDialog.cc
|
||||
MessageLogWindow.cc
|
||||
Notify.cc
|
||||
OptionsDialog.cc
|
||||
PathButton.cc
|
||||
Prefs.cc
|
||||
PrefsDialog.cc
|
||||
RelocateDialog.cc
|
||||
Session.cc
|
||||
StatsDialog.cc
|
||||
SystemTrayIcon.cc
|
||||
Torrent.cc
|
||||
TorrentCellRenderer.cc
|
||||
TorrentFilter.cc
|
||||
TorrentSorter.cc
|
||||
Utils.cc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/transmission-resources.c
|
||||
${CMAKE_CURRENT_BINARY_DIR}/transmission-ui-resources.c
|
||||
)
|
||||
target_compile_definitions(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
TRANSMISSIONLOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}"
|
||||
GETTEXT_PACKAGE="${TR_NAME}-gtk"
|
||||
G_DISABLE_DEPRECATED
|
||||
GDK_PIXBUF_DISABLE_DEPRECATED
|
||||
GDK_DISABLE_DEPRECATED
|
||||
GTK_DISABLE_DEPRECATED
|
||||
PANGO_DISABLE_DEPRECATED
|
||||
# FIXME: these break libnotify's headers
|
||||
# G_DISABLE_SINGLE_INCLUDES
|
||||
# GTK_DISABLE_SINGLE_INCLUDES
|
||||
GDKMM_DISABLE_DEPRECATED
|
||||
GIOMM_DISABLE_DEPRECATED
|
||||
GLIBMM_DISABLE_DEPRECATED
|
||||
GTKMM_DISABLE_DEPRECATED
|
||||
PANGOMM_DISABLE_DEPRECATED
|
||||
SIGCXX_DISABLE_DEPRECATED
|
||||
$<$<BOOL:${ENABLE_UTP}>:WITH_UTP>)
|
||||
|
||||
set(${PROJECT_NAME}_HEADERS
|
||||
Actions.h
|
||||
Application.h
|
||||
DetailsDialog.h
|
||||
Dialogs.h
|
||||
FaviconCache.h
|
||||
FileList.h
|
||||
FilterBar.h
|
||||
Flags.h
|
||||
FreeSpaceLabel.h
|
||||
GtkCompat.h
|
||||
HigWorkarea.h
|
||||
IconCache.h
|
||||
ListModelAdapter.h
|
||||
MainWindow.h
|
||||
MakeDialog.h
|
||||
MessageLogWindow.h
|
||||
Notify.h
|
||||
OptionsDialog.h
|
||||
PathButton.h
|
||||
Prefs.h
|
||||
PrefsDialog.h
|
||||
RelocateDialog.h
|
||||
Session.h
|
||||
StatsDialog.h
|
||||
SystemTrayIcon.h
|
||||
Torrent.h
|
||||
TorrentCellRenderer.h
|
||||
TorrentFilter.h
|
||||
TorrentSorter.h
|
||||
Utils.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/transmission-resources.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/transmission-ui-resources.h
|
||||
)
|
||||
target_compile_options(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
${GTK${GTK_VERSION}_CFLAGS_OTHER}
|
||||
$<$<BOOL:${ENABLE_WERROR}>:$<IF:$<CXX_COMPILER_ID:MSVC>,/WX,-Werror>>
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-exit-time-destructors>)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_SOURCE_DIR}
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
target_include_directories(${TR_NAME}-gtk
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
include_directories(
|
||||
SYSTEM
|
||||
${GTK${GTK_VERSION}_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
if(WITH_APPINDICATOR)
|
||||
include_directories(SYSTEM ${APPINDICATOR_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
link_directories(
|
||||
${GTK${GTK_VERSION}_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
add_definitions(
|
||||
"-DTRANSMISSIONLOCALEDIR=\"${CMAKE_INSTALL_FULL_LOCALEDIR}\""
|
||||
"-DGETTEXT_PACKAGE=\"${TR_NAME}-gtk\""
|
||||
-DG_DISABLE_DEPRECATED
|
||||
-DGDK_PIXBUF_DISABLE_DEPRECATED
|
||||
-DGDK_DISABLE_DEPRECATED
|
||||
-DGTK_DISABLE_DEPRECATED
|
||||
-DPANGO_DISABLE_DEPRECATED
|
||||
# FIXME: these break libnotify's headers
|
||||
# -DG_DISABLE_SINGLE_INCLUDES
|
||||
# -DGTK_DISABLE_SINGLE_INCLUDES
|
||||
-DGDKMM_DISABLE_DEPRECATED
|
||||
-DGIOMM_DISABLE_DEPRECATED
|
||||
-DGLIBMM_DISABLE_DEPRECATED
|
||||
-DGTKMM_DISABLE_DEPRECATED
|
||||
-DPANGOMM_DISABLE_DEPRECATED
|
||||
-DSIGCXX_DISABLE_DEPRECATED
|
||||
${GTK${GTK_VERSION}_CFLAGS_OTHER}
|
||||
)
|
||||
|
||||
if(ENABLE_UTP)
|
||||
add_definitions(-DWITH_UTP)
|
||||
endif()
|
||||
|
||||
if(WITH_APPINDICATOR)
|
||||
set_property(SOURCE SystemTrayIcon.cc APPEND PROPERTY COMPILE_DEFINITIONS HAVE_APPINDICATOR)
|
||||
if(APPINDICATOR_IS_AYATANA)
|
||||
set_property(SOURCE SystemTrayIcon.cc APPEND PROPERTY COMPILE_DEFINITIONS APPINDICATOR_IS_AYATANA)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
tr_win32_app_info(${PROJECT_NAME}_WIN32_RC_FILE
|
||||
"Transmission GTK+ Client"
|
||||
"${TR_NAME}-gtk"
|
||||
"${TR_NAME}-gtk.exe"
|
||||
"${TR_NAME}.ico")
|
||||
|
||||
add_executable(${TR_NAME}-gtk WIN32
|
||||
${${PROJECT_NAME}_SOURCES}
|
||||
${${PROJECT_NAME}_HEADERS}
|
||||
${${PROJECT_NAME}_DESKTOP_FILE}
|
||||
${${PROJECT_NAME}_METAINFO_FILE}
|
||||
${${PROJECT_NAME}_WIN32_RC_FILE}
|
||||
)
|
||||
target_include_directories(${TR_NAME}-gtk SYSTEM
|
||||
PRIVATE
|
||||
${LIBFMT_INCLUDE_DIRS}
|
||||
${GTK${GTK_VERSION}_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
$<$<BOOL:${WITH_APPINDICATOR}>:${APPINDICATOR_INCLUDE_DIRS}>)
|
||||
|
||||
target_link_libraries(${TR_NAME}-gtk
|
||||
${TR_NAME}
|
||||
${GTK${GTK_VERSION}_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${EVENT2_LIBRARIES}
|
||||
)
|
||||
|
||||
if(WITH_APPINDICATOR)
|
||||
target_link_libraries(${TR_NAME}-gtk ${APPINDICATOR_LIBRARIES})
|
||||
endif()
|
||||
|
||||
if(NOT MSVC)
|
||||
target_compile_options(${TR_NAME}-gtk PRIVATE -Wno-exit-time-destructors)
|
||||
endif()
|
||||
PRIVATE
|
||||
${TR_NAME}
|
||||
${GTK${GTK_VERSION}_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${EVENT2_LIBRARIES}
|
||||
$<$<BOOL:${WITH_APPINDICATOR}>:${APPINDICATOR_LIBRARIES}>)
|
||||
|
||||
if(MSVC)
|
||||
tr_append_target_property(${TR_NAME}-gtk LINK_FLAGS "/ENTRY:mainCRTStartup")
|
||||
endif()
|
||||
|
||||
install(TARGETS ${TR_NAME}-gtk DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
tr_win32_app_info(${TR_NAME}-gtk
|
||||
"Transmission GTK+ Client"
|
||||
"${TR_NAME}-gtk"
|
||||
"${TR_NAME}-gtk.exe"
|
||||
"${TR_NAME}.ico")
|
||||
|
||||
set(${PROJECT_NAME}_PUBLIC_ICONS
|
||||
install(
|
||||
TARGETS ${TR_NAME}-gtk
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
set(PUBLIC_ICONS
|
||||
hicolor_apps_scalable_transmission.svg
|
||||
hicolor_apps_scalable_transmission-devel.svg
|
||||
hicolor_apps_symbolic_transmission-symbolic.svg
|
||||
)
|
||||
hicolor_apps_symbolic_transmission-symbolic.svg)
|
||||
|
||||
set(ICON_NAME_REGEX "^([^_]+)_([^_]+)_([^_]+)_(.+)$")
|
||||
foreach(ICON ${${PROJECT_NAME}_PUBLIC_ICONS})
|
||||
foreach(ICON ${PUBLIC_ICONS})
|
||||
string(REGEX REPLACE ${ICON_NAME_REGEX} "\\1/\\3/\\2" ICON_DIR ${ICON})
|
||||
string(REGEX REPLACE ${ICON_NAME_REGEX} "\\4" ICON_NAME ${ICON})
|
||||
install(FILES icons/${ICON} DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/${ICON_DIR}/ RENAME ${ICON_NAME})
|
||||
install(
|
||||
FILES icons/${ICON}
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/${ICON_DIR}/
|
||||
RENAME ${ICON_NAME})
|
||||
endforeach()
|
||||
|
||||
if(INSTALL_DOC)
|
||||
install(FILES ${TR_NAME}-gtk.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
install(
|
||||
FILES ${TR_NAME}-gtk.1
|
||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
endif()
|
||||
|
||||
if(ENABLE_NLS)
|
||||
install(FILES ${${PROJECT_NAME}_DESKTOP_FILE} DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||
install(FILES ${${PROJECT_NAME}_METAINFO_FILE} DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
|
||||
install(
|
||||
FILES ${DESKTOP_FILE}
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||
install(
|
||||
FILES ${METAINFO_FILE}
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
|
||||
else()
|
||||
install(FILES transmission-gtk.desktop.in DESTINATION ${CMAKE_INSTALL_DATADIR}/applications RENAME ${TR_NAME}-gtk.desktop)
|
||||
install(
|
||||
FILES transmission-gtk.desktop.in
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
|
||||
RENAME ${TR_NAME}-gtk.desktop)
|
||||
endif()
|
||||
|
|
|
@ -1,321 +1,354 @@
|
|||
project(libtr)
|
||||
include(CheckLibraryExists)
|
||||
include(CheckSymbolExists)
|
||||
|
||||
configure_file(
|
||||
version.h.in
|
||||
version.h
|
||||
)
|
||||
|
||||
set(${PROJECT_NAME}_SOURCES
|
||||
announce-list.cc
|
||||
announcer-http.cc
|
||||
announcer-udp.cc
|
||||
announcer.cc
|
||||
bandwidth.cc
|
||||
bitfield.cc
|
||||
block-info.cc
|
||||
blocklist.cc
|
||||
cache.cc
|
||||
clients.cc
|
||||
completion.cc
|
||||
crypto-utils-ccrypto.cc
|
||||
crypto-utils-fallback.cc
|
||||
crypto-utils-mbedtls.cc
|
||||
crypto-utils-openssl.cc
|
||||
crypto-utils-wolfssl.cc
|
||||
crypto-utils.cc
|
||||
error.cc
|
||||
file-piece-map.cc
|
||||
file-posix.cc
|
||||
file-win32.cc
|
||||
file.cc
|
||||
handshake.cc
|
||||
inout.cc
|
||||
log.cc
|
||||
magnet-metainfo.cc
|
||||
makemeta.cc
|
||||
net.cc
|
||||
open-files.cc
|
||||
peer-io.cc
|
||||
peer-mgr-active-requests.cc
|
||||
peer-mgr-wishlist.cc
|
||||
peer-mgr.cc
|
||||
peer-mse.cc
|
||||
peer-msgs.cc
|
||||
peer-socket.cc
|
||||
platform-quota.cc
|
||||
platform.cc
|
||||
port-forwarding-natpmp.cc
|
||||
port-forwarding-upnp.cc
|
||||
port-forwarding.cc
|
||||
quark.cc
|
||||
resume.cc
|
||||
rpc-server.cc
|
||||
rpcimpl.cc
|
||||
session-id.cc
|
||||
session-alt-speeds.cc
|
||||
session-settings.cc
|
||||
session-thread.cc
|
||||
session.cc
|
||||
stats.cc
|
||||
subprocess-posix.cc
|
||||
subprocess-win32.cc
|
||||
timer-ev.cc
|
||||
torrent-ctor.cc
|
||||
torrent-files.cc
|
||||
torrent-magnet.cc
|
||||
torrent-metainfo.cc
|
||||
torrent.cc
|
||||
torrents.cc
|
||||
tr-assert.cc
|
||||
tr-assert.mm
|
||||
tr-dht.cc
|
||||
tr-getopt.cc
|
||||
tr-lpd.cc
|
||||
tr-udp.cc
|
||||
tr-utp.cc
|
||||
utils.cc
|
||||
variant-benc.cc
|
||||
variant-json.cc
|
||||
variant.cc
|
||||
variant-converters.cc
|
||||
verify.cc
|
||||
watchdir-generic.cc
|
||||
watchdir-inotify.cc
|
||||
watchdir-kqueue.cc
|
||||
watchdir-win32.cc
|
||||
watchdir.cc
|
||||
web-utils.cc
|
||||
web.cc
|
||||
webseed.cc
|
||||
)
|
||||
|
||||
set_source_files_properties(crypto-utils-fallback.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
foreach(CP ccrypto mbedtls openssl wolfssl)
|
||||
if(NOT CP STREQUAL CRYPTO_PKG)
|
||||
set_source_files_properties(crypto-utils-${CP}.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
if(ENABLE_NLS)
|
||||
check_library_exists(intl libintl_gettext "" HAVE_LIBINTL)
|
||||
if(HAVE_LIBINTL)
|
||||
set(LIBINTL_LIBRARY intl)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(WITH_INOTIFY)
|
||||
add_definitions(-DWITH_INOTIFY)
|
||||
else()
|
||||
set_source_files_properties(watchdir-inotify.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
|
||||
if(WITH_KQUEUE)
|
||||
add_definitions(-DWITH_KQUEUE)
|
||||
else()
|
||||
set_source_files_properties(watchdir-kqueue.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
check_symbol_exists(SO_REUSEPORT "sys/types.h;sys/socket.h" HAVE_SO_REUSEPORT)
|
||||
|
||||
if(WIN32)
|
||||
set_source_files_properties(file-posix.cc subprocess-posix.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
else()
|
||||
set_source_files_properties(file-win32.cc subprocess-win32.cc watchdir-win32.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
add_library(${TR_NAME} STATIC)
|
||||
|
||||
if(APPLE)
|
||||
set_source_files_properties(tr-assert.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
else()
|
||||
set_source_files_properties(tr-assert.mm PROPERTIES HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
target_sources(${TR_NAME}
|
||||
PRIVATE
|
||||
announce-list.cc
|
||||
announce-list.h
|
||||
announcer-common.h
|
||||
announcer-http.cc
|
||||
announcer-udp.cc
|
||||
announcer.cc
|
||||
announcer.h
|
||||
bandwidth.cc
|
||||
bandwidth.h
|
||||
benc.h
|
||||
bitfield.cc
|
||||
bitfield.h
|
||||
block-info.cc
|
||||
block-info.h
|
||||
blocklist.cc
|
||||
blocklist.h
|
||||
cache.cc
|
||||
cache.h
|
||||
clients.cc
|
||||
clients.h
|
||||
completion.cc
|
||||
completion.h
|
||||
crypto-utils-ccrypto.cc
|
||||
crypto-utils-fallback.cc
|
||||
crypto-utils-mbedtls.cc
|
||||
crypto-utils-openssl.cc
|
||||
crypto-utils-wolfssl.cc
|
||||
crypto-utils.cc
|
||||
crypto-utils.h
|
||||
error-types.h
|
||||
error.cc
|
||||
error.h
|
||||
file-piece-map.cc
|
||||
file-piece-map.h
|
||||
file-posix.cc
|
||||
file-win32.cc
|
||||
file.cc
|
||||
file.h
|
||||
handshake.cc
|
||||
handshake.h
|
||||
history.h
|
||||
inout.cc
|
||||
inout.h
|
||||
log.cc
|
||||
log.h
|
||||
lru-cache.h
|
||||
magnet-metainfo.cc
|
||||
magnet-metainfo.h
|
||||
makemeta.cc
|
||||
makemeta.h
|
||||
mime-types.h
|
||||
net.cc
|
||||
net.h
|
||||
open-files.cc
|
||||
open-files.h
|
||||
peer-common.h
|
||||
peer-io.cc
|
||||
peer-io.h
|
||||
peer-mgr-active-requests.cc
|
||||
peer-mgr-active-requests.h
|
||||
peer-mgr-wishlist.cc
|
||||
peer-mgr-wishlist.h
|
||||
peer-mgr.cc
|
||||
peer-mgr.h
|
||||
peer-mse.cc
|
||||
peer-mse.h
|
||||
peer-msgs.cc
|
||||
peer-msgs.h
|
||||
peer-socket.cc
|
||||
peer-socket.h
|
||||
platform-quota.cc
|
||||
platform-quota.h
|
||||
platform.cc
|
||||
platform.h
|
||||
port-forwarding-natpmp.cc
|
||||
port-forwarding-natpmp.h
|
||||
port-forwarding-upnp.cc
|
||||
port-forwarding-upnp.h
|
||||
port-forwarding.cc
|
||||
port-forwarding.h
|
||||
quark.cc
|
||||
quark.h
|
||||
resume.cc
|
||||
resume.h
|
||||
rpc-server.cc
|
||||
rpc-server.h
|
||||
rpcimpl.cc
|
||||
rpcimpl.h
|
||||
session-alt-speeds.cc
|
||||
session-alt-speeds.h
|
||||
session-id.cc
|
||||
session-id.h
|
||||
session-settings.cc
|
||||
session-thread.cc
|
||||
session-thread.h
|
||||
session.cc
|
||||
session.h
|
||||
stats.cc
|
||||
stats.h
|
||||
subprocess-posix.cc
|
||||
subprocess-win32.cc
|
||||
subprocess.h
|
||||
timer-ev.cc
|
||||
timer-ev.h
|
||||
timer.h
|
||||
torrent-ctor.cc
|
||||
torrent-files.cc
|
||||
torrent-files.h
|
||||
torrent-magnet.cc
|
||||
torrent-magnet.h
|
||||
torrent-metainfo.cc
|
||||
torrent-metainfo.h
|
||||
torrent.cc
|
||||
torrent.h
|
||||
torrents.cc
|
||||
torrents.h
|
||||
tr-assert.cc
|
||||
tr-assert.h
|
||||
tr-assert.mm
|
||||
tr-buffer.h
|
||||
tr-dht.cc
|
||||
tr-dht.h
|
||||
tr-getopt.cc
|
||||
tr-getopt.h
|
||||
tr-lpd.cc
|
||||
tr-lpd.h
|
||||
tr-macros.h
|
||||
tr-strbuf.h
|
||||
tr-udp.cc
|
||||
tr-utp.cc
|
||||
tr-utp.h
|
||||
transmission.h
|
||||
utils-ev.h
|
||||
utils.cc
|
||||
utils.h
|
||||
variant-benc.cc
|
||||
variant-common.h
|
||||
variant-converters.cc
|
||||
variant-json.cc
|
||||
variant.cc
|
||||
variant.h
|
||||
verify.cc
|
||||
verify.h
|
||||
version.h.in
|
||||
watchdir-base.h
|
||||
watchdir-generic.cc
|
||||
watchdir-inotify.cc
|
||||
watchdir-kqueue.cc
|
||||
watchdir-win32.cc
|
||||
watchdir.cc
|
||||
watchdir.h
|
||||
web-utils.cc
|
||||
web-utils.h
|
||||
web.cc
|
||||
web.h
|
||||
webseed.cc
|
||||
webseed.h)
|
||||
|
||||
set(${PROJECT_NAME}_PUBLIC_HEADERS
|
||||
${PROJECT_BINARY_DIR}/version.h
|
||||
error-types.h
|
||||
error.h
|
||||
file.h
|
||||
log.h
|
||||
makemeta.h
|
||||
quark.h
|
||||
rpcimpl.h
|
||||
session-id.h
|
||||
timer-ev.h
|
||||
timer.h
|
||||
tr-assert.h
|
||||
tr-getopt.h
|
||||
tr-macros.h
|
||||
tr-strbuf.h
|
||||
tr-buffer.h
|
||||
transmission.h
|
||||
utils.h
|
||||
variant.h
|
||||
watchdir.h
|
||||
web-utils.h
|
||||
web.h
|
||||
)
|
||||
configure_file(version.h.in version.h)
|
||||
|
||||
set(${PROJECT_NAME}_PRIVATE_HEADERS
|
||||
announce-list.h
|
||||
announcer-common.h
|
||||
announcer.h
|
||||
bandwidth.h
|
||||
benc.h
|
||||
bitfield.h
|
||||
block-info.h
|
||||
blocklist.h
|
||||
cache.h
|
||||
clients.h
|
||||
completion.h
|
||||
crypto-utils.h
|
||||
file-piece-map.h
|
||||
handshake.h
|
||||
history.h
|
||||
inout.h
|
||||
lru-cache.h
|
||||
magnet-metainfo.h
|
||||
mime-types.h
|
||||
net.h
|
||||
open-files.h
|
||||
peer-common.h
|
||||
peer-io.h
|
||||
peer-mgr-active-requests.h
|
||||
peer-mgr-wishlist.h
|
||||
peer-mgr.h
|
||||
peer-mse.h
|
||||
peer-msgs.h
|
||||
peer-socket.h
|
||||
platform-quota.h
|
||||
platform.h
|
||||
port-forwarding-natpmp.h
|
||||
port-forwarding-upnp.h
|
||||
port-forwarding.h
|
||||
resume.h
|
||||
rpc-server.h
|
||||
session-alt-speeds.h
|
||||
session-thread.h
|
||||
session.h
|
||||
stats.h
|
||||
subprocess.h
|
||||
torrent-files.h
|
||||
torrent-magnet.h
|
||||
torrent-metainfo.h
|
||||
torrent.h
|
||||
torrents.h
|
||||
tr-dht.h
|
||||
tr-lpd.h
|
||||
tr-utp.h
|
||||
utils-ev.h
|
||||
variant-common.h
|
||||
verify.h
|
||||
version.h
|
||||
watchdir-base.h
|
||||
webseed.h
|
||||
)
|
||||
target_sources(${TR_NAME}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/version.h)
|
||||
|
||||
if(NOT ENABLE_UTP)
|
||||
set_source_files_properties(tr-utp.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
tr_allow_compile_if(
|
||||
[=[[TRUE]]=]
|
||||
crypto-utils-fallback.cc
|
||||
[=[[CRYPTO_PKG STREQUAL "ccrypto"]]=]
|
||||
crypto-utils-ccrypto.cc
|
||||
[=[[CRYPTO_PKG STREQUAL "mbedtls"]]=]
|
||||
crypto-utils-mbedtls.cc
|
||||
[=[[CRYPTO_PKG STREQUAL "openssl"]]=]
|
||||
crypto-utils-openssl.cc
|
||||
[=[[CRYPTO_PKG STREQUAL "wolfssl"]]=]
|
||||
crypto-utils-wolfssl.cc
|
||||
[=[[ENABLE_UTP]]=]
|
||||
tr-utp.cc
|
||||
[=[[WITH_INOTIFY]]=]
|
||||
watchdir-inotify.cc
|
||||
[=[[WITH_KQUEUE]]=]
|
||||
watchdir-kqueue.cc
|
||||
[=[[APPLE]]=]
|
||||
tr-assert.mm
|
||||
[=[[NOT APPLE]]=]
|
||||
tr-assert.cc
|
||||
[=[[WIN32]]=]
|
||||
file-win32.cc
|
||||
subprocess-win32.cc
|
||||
watchdir-win32.cc
|
||||
[=[[NOT WIN32]]=]
|
||||
file-posix.cc
|
||||
subprocess-posix.cc)
|
||||
|
||||
add_definitions(
|
||||
-D__TRANSMISSION__
|
||||
-DWIDE_INTEGER_DISABLE_FLOAT_INTEROP
|
||||
-DWIDE_INTEGER_DISABLE_IOSTREAM
|
||||
"-DPACKAGE_DATA_DIR=\"${CMAKE_INSTALL_FULL_DATAROOTDIR}\""
|
||||
${NATPMP_DEFINITIONS}
|
||||
${MINIUPNPC_DEFINITIONS}
|
||||
)
|
||||
|
||||
if(ENABLE_LIGHTWEIGHT)
|
||||
add_definitions(-DTR_LIGHTWEIGHT)
|
||||
endif()
|
||||
|
||||
if(NOT ENABLE_NLS)
|
||||
add_definitions(-DDISABLE_GETTEXT)
|
||||
endif()
|
||||
|
||||
if(ENABLE_UTP)
|
||||
add_definitions(-DWITH_UTP)
|
||||
endif()
|
||||
|
||||
if(MINIUPNPC_VERSION VERSION_LESS 1.7)
|
||||
# API version macro was only added in 1.7
|
||||
add_definitions(-DMINIUPNPC_API_VERSION=${MINIUPNPC_API_VERSION})
|
||||
endif()
|
||||
|
||||
if(USE_SYSTEM_B64)
|
||||
add_definitions(-DUSE_SYSTEM_B64)
|
||||
endif()
|
||||
|
||||
if(HAVE_SO_REUSEPORT)
|
||||
add_definitions(-DHAVE_SO_REUSEPORT=1)
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
${PROJECT_SOURCE_DIR}
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
|
||||
include_directories(
|
||||
SYSTEM
|
||||
${WIDE_INTEGER_INCLUDE_DIRS}
|
||||
${UTFCPP_INCLUDE_DIRS}
|
||||
${DEFLATE_INCLUDE_DIRS}
|
||||
${FAST_FLOAT_INCLUDE_DIRS}
|
||||
${CRYPTO_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
${PSL_INCLUDE_DIRS}
|
||||
${NATPMP_INCLUDE_DIRS}
|
||||
${MINIUPNPC_INCLUDE_DIRS}
|
||||
${DHT_INCLUDE_DIRS}
|
||||
${UTP_INCLUDE_DIRS}
|
||||
${B64_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
if(ICONV_FOUND)
|
||||
include_directories(SYSTEM ${ICONV_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
add_library(${TR_NAME} STATIC
|
||||
${${PROJECT_NAME}_SOURCES}
|
||||
${${PROJECT_NAME}_PUBLIC_HEADERS}
|
||||
${${PROJECT_NAME}_PRIVATE_HEADERS}
|
||||
)
|
||||
|
||||
foreach(UT ${EVENT2_UPSTREAM_TARGET}
|
||||
${NATPMP_UPSTREAM_TARGET}
|
||||
${MINIUPNPC_UPSTREAM_TARGET}
|
||||
${DHT_UPSTREAM_TARGET}
|
||||
${DEFLATE_UPSTREAM_TARGET}
|
||||
${UTP_UPSTREAM_TARGET}
|
||||
${PSL_UPSTREAM_TARGET}
|
||||
${B64_UPSTREAM_TARGET})
|
||||
foreach(UT
|
||||
${EVENT2_UPSTREAM_TARGET}
|
||||
${NATPMP_UPSTREAM_TARGET}
|
||||
${MINIUPNPC_UPSTREAM_TARGET}
|
||||
${DHT_UPSTREAM_TARGET}
|
||||
${DEFLATE_UPSTREAM_TARGET}
|
||||
${UTP_UPSTREAM_TARGET}
|
||||
${PSL_UPSTREAM_TARGET}
|
||||
${B64_UPSTREAM_TARGET})
|
||||
add_dependencies(${TR_NAME} ${UT})
|
||||
endforeach()
|
||||
|
||||
target_compile_definitions(${TR_NAME}
|
||||
PRIVATE
|
||||
__TRANSMISSION__
|
||||
WIDE_INTEGER_DISABLE_FLOAT_INTEROP
|
||||
WIDE_INTEGER_DISABLE_IOSTREAM
|
||||
PACKAGE_DATA_DIR="${CMAKE_INSTALL_FULL_DATAROOTDIR}"
|
||||
$<$<BOOL:${WITH_INOTIFY}>:WITH_INOTIFY>
|
||||
$<$<BOOL:${WITH_KQUEUE}>:WITH_KQUEUE>
|
||||
$<$<BOOL:${ENABLE_LIGHTWEIGHT}>:TR_LIGHTWEIGHT>
|
||||
$<$<BOOL:${ENABLE_UTP}>:WITH_UTP>
|
||||
$<$<VERSION_LESS:${MINIUPNPC_VERSION},1.7>:MINIUPNPC_API_VERSION=${MINIUPNPC_API_VERSION}> # API version macro was only added in 1.7
|
||||
$<$<BOOL:${USE_SYSTEM_B64}>:USE_SYSTEM_B64>
|
||||
$<$<BOOL:${HAVE_SO_REUSEPORT}>:HAVE_SO_REUSEPORT=1>
|
||||
$<$<BOOL:${ICONV_FOUND}>:HAVE_ICONV>
|
||||
$<$<BOOL:${ICONV_SECOND_ARGUMENT_IS_CONST}>:ICONV_SECOND_ARGUMENT_IS_CONST>
|
||||
${NATPMP_DEFINITIONS}
|
||||
${MINIUPNPC_DEFINITIONS}
|
||||
PUBLIC
|
||||
$<$<NOT:$<BOOL:${ENABLE_NLS}>>:DISABLE_GETTEXT>)
|
||||
|
||||
tr_target_compile_definitions_for_headers(${TR_NAME}
|
||||
PRIVATE
|
||||
sys/statvfs.h
|
||||
xfs/xfs.h
|
||||
xlocale.h)
|
||||
|
||||
if(ENABLE_NLS)
|
||||
tr_target_compile_definitions_for_headers(${TR_NAME}
|
||||
PRIVATE
|
||||
libintl.h)
|
||||
endif()
|
||||
|
||||
tr_target_compile_definitions_for_functions(${TR_NAME}
|
||||
PRIVATE
|
||||
copyfile
|
||||
copy_file_range
|
||||
fallocate64
|
||||
flock
|
||||
getmntent
|
||||
htonll
|
||||
mkdtemp
|
||||
ntohll
|
||||
posix_fadvise
|
||||
posix_fallocate
|
||||
pread
|
||||
pwrite
|
||||
sendfile64
|
||||
statvfs
|
||||
PUBLIC
|
||||
gettext
|
||||
ngettext
|
||||
REQUIRED_LIBS
|
||||
$<$<BOOL:${HAVE_LIBINTL}>:${LIBINTL_LIBRARY}>) # gettext, ngettext
|
||||
|
||||
target_include_directories(${TR_NAME}
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
INTERFACE
|
||||
${CMAKE_BINARY_DIR})
|
||||
|
||||
target_include_directories(${TR_NAME} SYSTEM
|
||||
PRIVATE
|
||||
${WIDE_INTEGER_INCLUDE_DIRS}
|
||||
${UTFCPP_INCLUDE_DIRS}
|
||||
${DEFLATE_INCLUDE_DIRS}
|
||||
${FAST_FLOAT_INCLUDE_DIRS}
|
||||
${CRYPTO_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${PSL_INCLUDE_DIRS}
|
||||
${NATPMP_INCLUDE_DIRS}
|
||||
${MINIUPNPC_INCLUDE_DIRS}
|
||||
${DHT_INCLUDE_DIRS}
|
||||
${UTP_INCLUDE_DIRS}
|
||||
${B64_INCLUDE_DIRS}
|
||||
$<$<BOOL:${ICONV_FOUND}>:${ICONV_INCLUDE_DIRS}>
|
||||
PUBLIC
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
${LIBFMT_INCLUDE_DIRS})
|
||||
|
||||
target_link_libraries(${TR_NAME}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
${DEFLATE_LIBRARIES}
|
||||
${CRYPTO_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${EVENT2_LIBRARIES}
|
||||
${PSL_LIBRARIES}
|
||||
${NATPMP_LIBRARIES}
|
||||
${MINIUPNPC_LIBRARIES}
|
||||
${DHT_LIBRARIES}
|
||||
${UTP_LIBRARIES}
|
||||
${B64_LIBRARIES}
|
||||
${LIBINTL_LIBRARY}
|
||||
${LIBM_LIBRARY}
|
||||
${TR_NETWORK_LIBRARIES}
|
||||
jsonsl
|
||||
wildmat
|
||||
)
|
||||
|
||||
if(ICONV_FOUND)
|
||||
target_link_libraries(${TR_NAME} ${ICONV_LIBRARIES})
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(${TR_NAME} crypt32 shlwapi)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
target_link_libraries(${TR_NAME} "-framework Foundation")
|
||||
endif()
|
||||
PRIVATE
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
${DEFLATE_LIBRARIES}
|
||||
${CRYPTO_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${EVENT2_LIBRARIES}
|
||||
${PSL_LIBRARIES}
|
||||
${NATPMP_LIBRARIES}
|
||||
${MINIUPNPC_LIBRARIES}
|
||||
${DHT_LIBRARIES}
|
||||
${UTP_LIBRARIES}
|
||||
${B64_LIBRARIES}
|
||||
${LIBINTL_LIBRARY}
|
||||
${LIBM_LIBRARY}
|
||||
${TR_NETWORK_LIBRARIES}
|
||||
jsonsl
|
||||
wildmat
|
||||
$<$<BOOL:${ICONV_FOUND}>:${ICONV_LIBRARIES}>
|
||||
$<$<BOOL:${WIN32}>:crypt32>
|
||||
$<$<BOOL:${WIN32}>:shlwapi>
|
||||
"$<$<BOOL:${APPLE}>:-framework Foundation>")
|
||||
|
||||
if(INSTALL_LIB)
|
||||
install(TARGETS ${TR_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(FILES ${${PROJECT_NAME}_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TR_NAME})
|
||||
install(
|
||||
TARGETS ${TR_NAME}
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(
|
||||
FILES
|
||||
error-types.h
|
||||
error.h
|
||||
file.h
|
||||
log.h
|
||||
makemeta.h
|
||||
quark.h
|
||||
rpcimpl.h
|
||||
session-id.h
|
||||
timer-ev.h
|
||||
timer.h
|
||||
tr-assert.h
|
||||
tr-buffer.h
|
||||
tr-getopt.h
|
||||
tr-macros.h
|
||||
tr-strbuf.h
|
||||
transmission.h
|
||||
utils.h
|
||||
variant.h
|
||||
watchdir.h
|
||||
web-utils.h
|
||||
web.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/version.h
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TR_NAME})
|
||||
endif()
|
||||
|
|
|
@ -1,186 +1,176 @@
|
|||
project(trmac)
|
||||
|
||||
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()
|
||||
|
||||
include_directories(${CMAKE_SOURCE_DIR})
|
||||
set(MAC_BUNDLE_NAME Transmission)
|
||||
|
||||
add_compile_options(
|
||||
-fcxx-modules
|
||||
-fmodules
|
||||
-fobjc-arc)
|
||||
-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)
|
||||
find_program(IBTOOL_EXECUTABLE ibtool REQUIRED)
|
||||
|
||||
macro(tr_wrap_xib IFILE OFILE)
|
||||
get_filename_component(twx_nib_dir "${OFILE}" DIRECTORY)
|
||||
add_custom_command(
|
||||
OUTPUT ${OFILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${twx_nib_dir}
|
||||
COMMAND ${IBTOOL_EXECUTABLE} --compile ${OFILE} ${IFILE}
|
||||
DEPENDS ${IFILE}
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
VERBATIM
|
||||
)
|
||||
source_group("Generated Files" FILES ${OFILE})
|
||||
endmacro()
|
||||
add_subdirectory(QuickLookPlugin)
|
||||
add_subdirectory(VDKQueue)
|
||||
|
||||
set(${PROJECT_NAME}_SOURCES
|
||||
AboutWindowController.mm
|
||||
AddMagnetWindowController.mm
|
||||
AddWindowController.mm
|
||||
BadgeView.mm
|
||||
Badger.mm
|
||||
BlocklistDownloader.mm
|
||||
BlocklistDownloaderViewController.mm
|
||||
BlocklistScheduler.mm
|
||||
BonjourController.mm
|
||||
ButtonToolbarItem.mm
|
||||
ColorTextField.mm
|
||||
Controller.mm
|
||||
CreatorWindowController.mm
|
||||
DragOverlayView.mm
|
||||
DragOverlayWindow.mm
|
||||
ExpandedPathToIconTransformer.mm
|
||||
ExpandedPathToPathTransformer.mm
|
||||
FileListNode.mm
|
||||
FileNameCell.mm
|
||||
FileOutlineController.mm
|
||||
FileOutlineView.mm
|
||||
FilePriorityCell.mm
|
||||
FileRenameSheetController.mm
|
||||
FilterBarController.mm
|
||||
FilterBarView.mm
|
||||
FilterButton.mm
|
||||
GlobalOptionsPopoverViewController.mm
|
||||
GroupPopUpButtonCell.mm
|
||||
GroupTextCell.mm
|
||||
GroupToolbarItem.mm
|
||||
GroupsController.mm
|
||||
GroupsPrefsController.mm
|
||||
InfoActivityViewController.mm
|
||||
InfoFileViewController.mm
|
||||
InfoGeneralViewController.mm
|
||||
InfoOptionsViewController.mm
|
||||
InfoPeersViewController.mm
|
||||
InfoTextField.mm
|
||||
InfoTrackersViewController.mm
|
||||
InfoWindowController.mm
|
||||
main.mm
|
||||
MessageWindowController.mm
|
||||
NSApplicationAdditions.mm
|
||||
NSDataAdditions.mm
|
||||
NSImageAdditions.mm
|
||||
NSKeyedUnarchiverAdditions.mm
|
||||
NSMutableArrayAdditions.mm
|
||||
NSStringAdditions.mm
|
||||
PeerProgressIndicatorCell.mm
|
||||
PeerTableView.mm
|
||||
PiecesView.mm
|
||||
PortChecker.mm
|
||||
PredicateEditorRowTemplateAny.mm
|
||||
PrefsController.mm
|
||||
PrefsWindow.mm
|
||||
PriorityPopUpButtonCell.mm
|
||||
ProgressGradients.mm
|
||||
ShareToolbarItem.mm
|
||||
ShareTorrentFileHelper.mm
|
||||
SparkleProxy.mm
|
||||
StatsWindowController.mm
|
||||
StatusBarController.mm
|
||||
StatusBarView.mm
|
||||
Toolbar.mm
|
||||
Torrent.mm
|
||||
TorrentCell.mm
|
||||
TorrentGroup.mm
|
||||
TorrentTableView.mm
|
||||
TrackerCell.mm
|
||||
TrackerNode.mm
|
||||
TrackerTableView.mm
|
||||
URLSheetWindowController.mm
|
||||
WebSeedTableView.mm
|
||||
)
|
||||
add_executable(${TR_NAME}-mac MACOSX_BUNDLE)
|
||||
|
||||
set(${PROJECT_NAME}_HEADERS
|
||||
AboutWindowController.h
|
||||
AddMagnetWindowController.h
|
||||
AddWindowController.h
|
||||
BadgeView.h
|
||||
Badger.h
|
||||
BlocklistDownloader.h
|
||||
BlocklistDownloaderViewController.h
|
||||
BlocklistScheduler.h
|
||||
BonjourController.h
|
||||
ButtonToolbarItem.h
|
||||
CocoaCompatibility.h
|
||||
ColorTextField.h
|
||||
Controller.h
|
||||
CreatorWindowController.h
|
||||
DragOverlayView.h
|
||||
DragOverlayWindow.h
|
||||
ExpandedPathToIconTransformer.h
|
||||
ExpandedPathToPathTransformer.h
|
||||
FileListNode.h
|
||||
FileNameCell.h
|
||||
FileOutlineController.h
|
||||
FileOutlineView.h
|
||||
FilePriorityCell.h
|
||||
FileRenameSheetController.h
|
||||
FilterBarController.h
|
||||
FilterBarView.h
|
||||
FilterButton.h
|
||||
GlobalOptionsPopoverViewController.h
|
||||
GroupPopUpButtonCell.h
|
||||
GroupTextCell.h
|
||||
GroupToolbarItem.h
|
||||
GroupsController.h
|
||||
GroupsPrefsController.h
|
||||
InfoActivityViewController.h
|
||||
InfoFileViewController.h
|
||||
InfoGeneralViewController.h
|
||||
InfoOptionsViewController.h
|
||||
InfoPeersViewController.h
|
||||
InfoTextField.h
|
||||
InfoTrackersViewController.h
|
||||
InfoViewController.h
|
||||
InfoWindowController.h
|
||||
MessageWindowController.h
|
||||
NSApplicationAdditions.h
|
||||
NSDataAdditions.h
|
||||
NSImageAdditions.h
|
||||
NSKeyedUnarchiverAdditions.h
|
||||
NSMutableArrayAdditions.h
|
||||
NSStringAdditions.h
|
||||
PeerProgressIndicatorCell.h
|
||||
PeerTableView.h
|
||||
PiecesView.h
|
||||
PortChecker.h
|
||||
PredicateEditorRowTemplateAny.h
|
||||
PrefsController.h
|
||||
PrefsWindow.h
|
||||
PriorityPopUpButtonCell.h
|
||||
ProgressGradients.h
|
||||
ShareToolbarItem.h
|
||||
ShareTorrentFileHelper.h
|
||||
StatsWindowController.h
|
||||
StatusBarController.h
|
||||
StatusBarView.h
|
||||
Toolbar.h
|
||||
Torrent.h
|
||||
TorrentCell.h
|
||||
TorrentGroup.h
|
||||
TorrentTableView.h
|
||||
TrackerCell.h
|
||||
TrackerNode.h
|
||||
TrackerTableView.h
|
||||
URLSheetWindowController.h
|
||||
WebSeedTableView.h
|
||||
)
|
||||
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(${PROJECT_NAME}_XIB_FILES
|
||||
set(XIB_FILES
|
||||
AboutWindow.xib
|
||||
BlocklistStatusWindow.xib
|
||||
FileRenameSheetController.xib
|
||||
|
@ -192,24 +182,23 @@ set(${PROJECT_NAME}_XIB_FILES
|
|||
MessageWindow.xib
|
||||
StatsWindow.xib
|
||||
StatusBar.xib
|
||||
URLSheetWindow.xib
|
||||
)
|
||||
source_group(Resources FILES ${${PROJECT_NAME}_XIB_FILES})
|
||||
URLSheetWindow.xib)
|
||||
|
||||
set(${PROJECT_NAME}_RESOURCES
|
||||
set(RESOURCES
|
||||
Defaults.plist
|
||||
Credits.rtf
|
||||
sparkle_dsa_pub.pem
|
||||
../COPYING
|
||||
Images/TransmissionDocument.icns
|
||||
)
|
||||
source_group(Resources FILES ${${PROJECT_NAME}_RESOURCES})
|
||||
Images/TransmissionDocument.icns)
|
||||
source_group(Resources
|
||||
FILES ${RESOURCES})
|
||||
|
||||
set_source_files_properties(${${PROJECT_NAME}_RESOURCES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources
|
||||
)
|
||||
set_source_files_properties(
|
||||
${RESOURCES}
|
||||
PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources)
|
||||
|
||||
set(${PROJECT_NAME}_IMAGESETS
|
||||
set(IMAGESETS
|
||||
ActionHover
|
||||
Bandwidth
|
||||
CleanupTemplate
|
||||
|
@ -267,8 +256,7 @@ set(${PROJECT_NAME}_IMAGESETS
|
|||
UpArrowTemplate
|
||||
UploadBadge
|
||||
YingYangGroupTemplate
|
||||
YingYangTemplate
|
||||
)
|
||||
YingYangTemplate)
|
||||
|
||||
set(APPICON_NAME AppIcon)
|
||||
|
||||
|
@ -279,7 +267,7 @@ set(IMAGE_ASSETS
|
|||
${IMAGE_ASSETS_DIR}/Contents.json
|
||||
${APPICONSET_DIR}/Contents.json)
|
||||
|
||||
foreach(IMG IN LISTS ${PROJECT_NAME}_IMAGESETS)
|
||||
foreach(IMG IN LISTS IMAGESETS)
|
||||
set(IMG_DIR "${IMAGE_ASSETS_DIR}/${IMG}.imageset")
|
||||
list(APPEND IMAGE_ASSETS
|
||||
${IMG_DIR}/${IMG}.png
|
||||
|
@ -301,7 +289,8 @@ add_custom_command(
|
|||
OUTPUT
|
||||
${COMPILED_IMAGE_ASSETS}
|
||||
${APPICON_NAME}.Info.plist
|
||||
COMMAND ${ACTOOL_EXECUTABLE}
|
||||
COMMAND
|
||||
${ACTOOL_EXECUTABLE}
|
||||
--compile "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
--platform macosx
|
||||
--minimum-deployment-target ${CMAKE_OSX_DEPLOYMENT_TARGET}
|
||||
|
@ -309,16 +298,21 @@ add_custom_command(
|
|||
--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)
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
source_group("Generated Files"
|
||||
FILES
|
||||
${COMPILED_IMAGE_ASSETS}
|
||||
${APPICON_NAME}.Info.plist)
|
||||
|
||||
list(APPEND ${PROJECT_NAME}_RESOURCES ${COMPILED_IMAGE_ASSETS})
|
||||
list(APPEND RESOURCES
|
||||
${COMPILED_IMAGE_ASSETS})
|
||||
|
||||
set_source_files_properties(${COMPILED_IMAGE_ASSETS} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources)
|
||||
set_source_files_properties(
|
||||
${COMPILED_IMAGE_ASSETS}
|
||||
PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources)
|
||||
|
||||
set(${PROJECT_NAME}_LINGUAS
|
||||
set(LINGUAS
|
||||
da
|
||||
de
|
||||
en
|
||||
|
@ -328,16 +322,15 @@ set(${PROJECT_NAME}_LINGUAS
|
|||
nl
|
||||
pt_PT
|
||||
ru
|
||||
tr
|
||||
)
|
||||
tr)
|
||||
|
||||
if(ENABLE_NLS)
|
||||
set(${PROJECT_NAME}_ENABLED_LINGUAS ${${PROJECT_NAME}_LINGUAS})
|
||||
set(ENABLED_LINGUAS ${LINGUAS})
|
||||
else()
|
||||
set(${PROJECT_NAME}_ENABLED_LINGUAS en)
|
||||
set(ENABLED_LINGUAS en)
|
||||
endif()
|
||||
|
||||
set(${PROJECT_NAME}_LANG_XIB_FILES
|
||||
set(BASE_XIB_FILES
|
||||
AddMagnetWindow.xib
|
||||
AddWindow.xib
|
||||
Creator.xib
|
||||
|
@ -347,137 +340,102 @@ set(${PROJECT_NAME}_LANG_XIB_FILES
|
|||
InfoGeneralView.xib
|
||||
InfoOptionsView.xib
|
||||
MainMenu.xib
|
||||
PrefsWindow.xib
|
||||
)
|
||||
PrefsWindow.xib)
|
||||
list(TRANSFORM BASE_XIB_FILES
|
||||
PREPEND Base.lproj/)
|
||||
|
||||
set(${PROJECT_NAME}_LANG_STRINGS_FILES
|
||||
set(LANG_STRINGS_FILES
|
||||
InfoPlist.strings
|
||||
Localizable.strings
|
||||
)
|
||||
Localizable.strings)
|
||||
|
||||
set(${PROJECT_NAME}_NIB_FILES)
|
||||
foreach(F ${${PROJECT_NAME}_XIB_FILES})
|
||||
get_filename_component(F_BASE "${F}" NAME_WE)
|
||||
set(F_NIB "${PROJECT_BINARY_DIR}/${F_BASE}.nib")
|
||||
tr_wrap_xib("${F}" "${F_NIB}")
|
||||
list(APPEND ${PROJECT_NAME}_NIB_FILES "${F_NIB}")
|
||||
endforeach()
|
||||
|
||||
set_source_files_properties(${${PROJECT_NAME}_NIB_FILES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources)
|
||||
|
||||
set(${PROJECT_NAME}_BASE_XIB_FILES)
|
||||
set(${PROJECT_NAME}_BASE_NIB_FILES)
|
||||
foreach(F ${${PROJECT_NAME}_LANG_XIB_FILES})
|
||||
set(F_XIB "Base.lproj/${F}")
|
||||
get_filename_component(F_BASE "${F}" NAME_WE)
|
||||
set(F_NIB "${PROJECT_BINARY_DIR}/Base.lproj/${F_BASE}.nib")
|
||||
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})
|
||||
set(${PROJECT_NAME}_${LANG}_STRINGS_FILES)
|
||||
foreach(LANG ${ENABLED_LINGUAS})
|
||||
set(${LANG}_STRINGS_FILES)
|
||||
if(NOT LANG STREQUAL "en")
|
||||
foreach(F ${${PROJECT_NAME}_LANG_XIB_FILES})
|
||||
foreach(F ${BASE_XIB_FILES})
|
||||
get_filename_component(F_BASE "${F}" NAME_WE)
|
||||
list(APPEND ${PROJECT_NAME}_${LANG}_STRINGS_FILES ${LANG}.lproj/${F_BASE}.strings)
|
||||
list(APPEND ${LANG}_STRINGS_FILES ${LANG}.lproj/${F_BASE}.strings)
|
||||
endforeach()
|
||||
endif()
|
||||
foreach(F ${${PROJECT_NAME}_LANG_STRINGS_FILES})
|
||||
list(APPEND ${PROJECT_NAME}_${LANG}_STRINGS_FILES ${LANG}.lproj/${F})
|
||||
foreach(F ${LANG_STRINGS_FILES})
|
||||
list(APPEND ${LANG}_STRINGS_FILES ${LANG}.lproj/${F})
|
||||
endforeach()
|
||||
source_group(Resources/${LANG}.lproj FILES ${${PROJECT_NAME}_${LANG}_STRINGS_FILES})
|
||||
source_group(Resources/${LANG}.lproj
|
||||
FILES ${${LANG}_STRINGS_FILES})
|
||||
endforeach()
|
||||
|
||||
include_directories(
|
||||
${CMAKE_SOURCE_DIR}/libtransmission
|
||||
${CMAKE_BINARY_DIR}/libtransmission
|
||||
${PROJECT_SOURCE_DIR}/VDKQueue
|
||||
)
|
||||
|
||||
add_compile_options(
|
||||
# #warnings are good practice in development
|
||||
"-Wno-#warnings"
|
||||
# GNU extensions are good practice in Objective-C
|
||||
-Wno-gnu
|
||||
)
|
||||
|
||||
add_library(vdkqueue STATIC
|
||||
VDKQueue/VDKQueue.mm
|
||||
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 ${BASE_NIB_FILES_RESOURCES_DIR})
|
||||
|
||||
foreach(LANG ${${PROJECT_NAME}_ENABLED_LINGUAS})
|
||||
list(APPEND ${PROJECT_NAME}_RESOURCES ${${PROJECT_NAME}_${LANG}_STRINGS_FILES})
|
||||
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(${${PROJECT_NAME}_${LANG}_STRINGS_FILES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION ${STRINGS_FILES_RESOURCES_DIR})
|
||||
set_source_files_properties(
|
||||
${${LANG}_STRINGS_FILES}
|
||||
PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION ${STRINGS_FILES_RESOURCES_DIR})
|
||||
endforeach()
|
||||
|
||||
add_executable(${TR_NAME}-mac MACOSX_BUNDLE
|
||||
${${PROJECT_NAME}_SOURCES}
|
||||
${${PROJECT_NAME}_HEADERS}
|
||||
${${PROJECT_NAME}_XIB_FILES}
|
||||
${${PROJECT_NAME}_NIB_FILES}
|
||||
${${PROJECT_NAME}_BASE_XIB_FILES}
|
||||
${${PROJECT_NAME}_BASE_NIB_FILES}
|
||||
${${PROJECT_NAME}_RESOURCES}
|
||||
)
|
||||
target_sources(${TR_NAME}-mac
|
||||
PRIVATE
|
||||
${RESOURCES})
|
||||
|
||||
find_library(SPARKLE_FRAMEWORK Sparkle PATHS ${PROJECT_SOURCE_DIR} NO_DEFAULT_PATHS)
|
||||
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
|
||||
${TR_NAME}
|
||||
vdkqueue
|
||||
${SPARKLE_FRAMEWORK}
|
||||
"-framework AppKit"
|
||||
"-framework Carbon"
|
||||
"-framework Foundation"
|
||||
"-framework IOKit"
|
||||
"-framework Quartz"
|
||||
"-framework Security"
|
||||
"-weak_framework UserNotifications"
|
||||
)
|
||||
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
|
||||
add_custom_command(
|
||||
TARGET ${TR_NAME}-mac
|
||||
POST_BUILD
|
||||
COMMAND ${CODESIGN_EXECUTABLE} -s - $<TARGET_BUNDLE_DIR:${TR_NAME}-mac>)
|
||||
endif()
|
||||
|
||||
set(MAC_BUNDLE_NAME Transmission)
|
||||
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")
|
||||
|
||||
set_target_properties(${TR_NAME}-mac PROPERTIES
|
||||
OUTPUT_NAME ${MAC_BUNDLE_NAME}
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "org.m0k.transmission"
|
||||
MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/Info.plist.in
|
||||
INSTALL_RPATH "@executable_path;@executable_path/../Frameworks"
|
||||
)
|
||||
install(
|
||||
TARGETS ${TR_NAME}-mac
|
||||
DESTINATION Applications)
|
||||
|
||||
add_subdirectory(QuickLookPlugin)
|
||||
|
||||
install(TARGETS ${TR_NAME}-mac DESTINATION Applications)
|
||||
|
||||
install(DIRECTORY TransmissionHelp DESTINATION Applications/${MAC_BUNDLE_NAME}.app/Contents/Resources)
|
||||
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\")
|
||||
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}\" \"${PROJECT_SOURCE_DIR}\")
|
||||
")
|
||||
tr_fixup_bundle_item(
|
||||
\"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/Applications/${MAC_BUNDLE_NAME}.app\"
|
||||
\"Contents/MacOS/${MAC_BUNDLE_NAME}\" \"${CMAKE_CURRENT_SOURCE_DIR}\")")
|
||||
|
|
|
@ -1,17 +1,14 @@
|
|||
project(trmacql)
|
||||
add_library(${TR_NAME}-mac-ql MODULE)
|
||||
|
||||
set(${PROJECT_NAME}_SOURCES
|
||||
../NSDataAdditions.mm
|
||||
../NSStringAdditions.mm
|
||||
GeneratePreviewForURL.mm
|
||||
GenerateThumbnailForURL.mm
|
||||
main.cc
|
||||
)
|
||||
target_sources(${TR_NAME}-mac-ql
|
||||
PRIVATE
|
||||
../NSDataAdditions.mm
|
||||
../NSStringAdditions.mm
|
||||
GeneratePreviewForURL.mm
|
||||
GenerateThumbnailForURL.mm
|
||||
main.cc)
|
||||
|
||||
set(${PROJECT_NAME}_HEADERS
|
||||
)
|
||||
|
||||
set(${PROJECT_NAME}_LINGUAS
|
||||
set(LINGUAS
|
||||
da
|
||||
de
|
||||
en
|
||||
|
@ -21,77 +18,83 @@ set(${PROJECT_NAME}_LINGUAS
|
|||
nl
|
||||
pt_PT
|
||||
ru
|
||||
tr
|
||||
)
|
||||
tr)
|
||||
|
||||
if(ENABLE_NLS)
|
||||
set(${PROJECT_NAME}_ENABLED_LINGUAS ${${PROJECT_NAME}_LINGUAS})
|
||||
set(ENABLED_LINGUAS ${LINGUAS})
|
||||
else()
|
||||
set(${PROJECT_NAME}_ENABLED_LINGUAS en)
|
||||
set(ENABLED_LINGUAS en)
|
||||
endif()
|
||||
|
||||
set(${PROJECT_NAME}_LANG_STRINGS_FILES
|
||||
Localizable.strings
|
||||
)
|
||||
set(LANG_STRINGS_FILES
|
||||
Localizable.strings)
|
||||
|
||||
set(${PROJECT_NAME}_RESOURCES
|
||||
style.css
|
||||
)
|
||||
source_group(Resources FILES ${${PROJECT_NAME}_RESOURCES})
|
||||
set(RESOURCES
|
||||
style.css)
|
||||
source_group(Resources
|
||||
FILES ${RESOURCES})
|
||||
|
||||
set_source_files_properties(${${PROJECT_NAME}_RESOURCES} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources)
|
||||
set_source_files_properties(
|
||||
${RESOURCES}
|
||||
PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources)
|
||||
|
||||
foreach(LANG ${${PROJECT_NAME}_ENABLED_LINGUAS})
|
||||
set(${PROJECT_NAME}_${LANG}_STRINGS_FILES)
|
||||
foreach(LANG ${ENABLED_LINGUAS})
|
||||
set(${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 ${STRINGS_FILES_RESOURCES_DIR})
|
||||
foreach(F ${LANG_STRINGS_FILES})
|
||||
list(APPEND ${LANG}_STRINGS_FILES ${LANG}.lproj/${F})
|
||||
list(APPEND RESOURCES ${${LANG}_STRINGS_FILES})
|
||||
set_source_files_properties(
|
||||
${${LANG}_STRINGS_FILES}
|
||||
PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION ${STRINGS_FILES_RESOURCES_DIR})
|
||||
endforeach()
|
||||
source_group(Resources/${LANG}.lproj FILES ${${PROJECT_NAME}_${LANG}_STRINGS_FILES})
|
||||
source_group(Resources/${LANG}.lproj
|
||||
FILES ${${LANG}_STRINGS_FILES})
|
||||
endforeach()
|
||||
|
||||
add_library(${TR_NAME}-mac-ql MODULE
|
||||
${${PROJECT_NAME}_SOURCES}
|
||||
${${PROJECT_NAME}_HEADERS}
|
||||
${${PROJECT_NAME}_RESOURCES}
|
||||
)
|
||||
target_sources(${TR_NAME}-mac-ql
|
||||
PRIVATE
|
||||
${RESOURCES})
|
||||
|
||||
set(MAC_QL_BUNDLE_NAME QuickLookPlugin)
|
||||
|
||||
set_target_properties(${TR_NAME}-mac-ql PROPERTIES
|
||||
OUTPUT_NAME ${MAC_QL_BUNDLE_NAME}
|
||||
MACOSX_BUNDLE ON
|
||||
BUNDLE ON
|
||||
BUNDLE_EXTENSION qlgenerator
|
||||
MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/Info.plist.in"
|
||||
INSTALL_RPATH "@loader_path/../../../../../MacOS;@loader_path/../../../../../Frameworks"
|
||||
)
|
||||
set_target_properties(
|
||||
${TR_NAME}-mac-ql
|
||||
PROPERTIES
|
||||
OUTPUT_NAME ${MAC_QL_BUNDLE_NAME}
|
||||
MACOSX_BUNDLE ON
|
||||
BUNDLE ON
|
||||
BUNDLE_EXTENSION qlgenerator
|
||||
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
|
||||
INSTALL_RPATH "@loader_path/../../../../../MacOS;@loader_path/../../../../../Frameworks")
|
||||
|
||||
target_include_directories(${TR_NAME}-mac-ql PRIVATE
|
||||
..
|
||||
)
|
||||
target_include_directories(${TR_NAME}-mac-ql
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}
|
||||
..)
|
||||
|
||||
target_link_libraries(${TR_NAME}-mac-ql
|
||||
${TR_NAME}
|
||||
"-framework Foundation"
|
||||
"-framework CoreFoundation"
|
||||
"-framework CoreServices"
|
||||
"-framework AppKit"
|
||||
"-framework QuickLook"
|
||||
)
|
||||
PRIVATE
|
||||
${TR_NAME}
|
||||
"-framework Foundation"
|
||||
"-framework CoreFoundation"
|
||||
"-framework CoreServices"
|
||||
"-framework AppKit"
|
||||
"-framework QuickLook")
|
||||
|
||||
install(TARGETS ${TR_NAME}-mac-ql DESTINATION Applications/${MAC_BUNDLE_NAME}.app/Contents/Library/QuickLook)
|
||||
install(
|
||||
TARGETS ${TR_NAME}-mac-ql
|
||||
DESTINATION Applications/${MAC_BUNDLE_NAME}.app/Contents/Library/QuickLook)
|
||||
|
||||
install(CODE "
|
||||
list(APPEND CMAKE_MODULE_PATH \"${CMAKE_SOURCE_DIR}/cmake\")
|
||||
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/Library/QuickLook/${MAC_QL_BUNDLE_NAME}.qlgenerator/Contents/MacOS/${MAC_QL_BUNDLE_NAME}\" \"\")
|
||||
")
|
||||
tr_fixup_bundle_item(
|
||||
\"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/Applications/${MAC_BUNDLE_NAME}.app\"
|
||||
\"Contents/Library/QuickLook/${MAC_QL_BUNDLE_NAME}.qlgenerator/Contents/MacOS/${MAC_QL_BUNDLE_NAME}\" \"\")")
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
add_library(vdkqueue STATIC)
|
||||
|
||||
target_sources(vdkqueue
|
||||
PRIVATE
|
||||
VDKQueue.h
|
||||
VDKQueue.mm)
|
||||
|
||||
set_property(
|
||||
TARGET vdkqueue
|
||||
PROPERTY FOLDER "third-party")
|
||||
|
||||
target_include_directories(vdkqueue
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR})
|
|
@ -1,6 +1,4 @@
|
|||
project(trpo)
|
||||
|
||||
set(${PROJECT_NAME}_LINGUAS
|
||||
set(LINGUAS
|
||||
an
|
||||
ar
|
||||
ast
|
||||
|
@ -86,40 +84,37 @@ set(${PROJECT_NAME}_LINGUAS
|
|||
vi
|
||||
zh_CN
|
||||
zh_HK
|
||||
zh_TW
|
||||
)
|
||||
zh_TW)
|
||||
|
||||
set(GETTEXT_PACKAGE ${TR_NAME}-gtk)
|
||||
|
||||
if(ENABLE_NLS)
|
||||
set(${PROJECT_NAME}_ENABLED_LINGUAS ${${PROJECT_NAME}_LINGUAS})
|
||||
set(ENABLED_LINGUAS ${LINGUAS})
|
||||
else()
|
||||
set(${PROJECT_NAME}_ENABLED_LINGUAS)
|
||||
set(ENABLED_LINGUAS)
|
||||
endif()
|
||||
|
||||
set(${PROJECT_NAME}_MO_FILES)
|
||||
foreach(LANG ${${PROJECT_NAME}_ENABLED_LINGUAS})
|
||||
set(MO_FILES)
|
||||
foreach(LANG ${ENABLED_LINGUAS})
|
||||
set(msgfmt_INPUT_FILE ${LANG}.po)
|
||||
set(msgfmt_OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${GETTEXT_PACKAGE}-${LANG}.mo)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${msgfmt_OUTPUT_FILE}
|
||||
COMMAND
|
||||
${GETTEXT_MSGFMT_EXECUTABLE}
|
||||
--output-file=${msgfmt_OUTPUT_FILE}
|
||||
${msgfmt_INPUT_FILE}
|
||||
WORKING_DIRECTORY
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS
|
||||
${msgfmt_INPUT_FILE}
|
||||
)
|
||||
OUTPUT ${msgfmt_OUTPUT_FILE}
|
||||
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --output-file=${msgfmt_OUTPUT_FILE} ${msgfmt_INPUT_FILE}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS ${msgfmt_INPUT_FILE})
|
||||
|
||||
list(APPEND ${PROJECT_NAME}_MO_FILES ${msgfmt_OUTPUT_FILE})
|
||||
list(APPEND MO_FILES ${msgfmt_OUTPUT_FILE})
|
||||
|
||||
install(FILES ${msgfmt_OUTPUT_FILE} DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${LANG}/LC_MESSAGES/ RENAME ${GETTEXT_PACKAGE}.mo)
|
||||
install(
|
||||
FILES ${msgfmt_OUTPUT_FILE}
|
||||
DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${LANG}/LC_MESSAGES/
|
||||
RENAME ${GETTEXT_PACKAGE}.mo)
|
||||
endforeach()
|
||||
|
||||
if(${PROJECT_NAME}_MO_FILES)
|
||||
add_custom_target(${GETTEXT_PACKAGE}-po ALL DEPENDS ${${PROJECT_NAME}_MO_FILES})
|
||||
if(MO_FILES)
|
||||
add_custom_target(${GETTEXT_PACKAGE}-po
|
||||
ALL
|
||||
DEPENDS ${MO_FILES})
|
||||
endif()
|
||||
|
|
|
@ -1,154 +1,150 @@
|
|||
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
|
||||
Application.cc
|
||||
ColumnResizer.cc
|
||||
ComInteropHelper.cc
|
||||
DBusInteropHelper.cc
|
||||
DetailsDialog.cc
|
||||
FaviconCache.cc
|
||||
FileTreeDelegate.cc
|
||||
FileTreeItem.cc
|
||||
FileTreeModel.cc
|
||||
FileTreeView.cc
|
||||
FilterBar.cc
|
||||
FilterBarComboBox.cc
|
||||
FilterBarComboBoxDelegate.cc
|
||||
Filters.cc
|
||||
Formatter.cc
|
||||
FreeSpaceLabel.cc
|
||||
IconCache.cc
|
||||
IconToolButton.cc
|
||||
InteropHelper.cc
|
||||
InteropObject.cc
|
||||
LicenseDialog.cc
|
||||
MainWindow.cc
|
||||
MakeDialog.cc
|
||||
OptionsDialog.cc
|
||||
PathButton.cc
|
||||
Prefs.cc
|
||||
PrefsDialog.cc
|
||||
RelocateDialog.cc
|
||||
RpcClient.cc
|
||||
RpcQueue.cc
|
||||
Session.cc
|
||||
SessionDialog.cc
|
||||
SqueezeLabel.cc
|
||||
StatsDialog.cc
|
||||
StyleHelper.cc
|
||||
Torrent.cc
|
||||
TorrentDelegate.cc
|
||||
TorrentDelegateMin.cc
|
||||
TorrentFilter.cc
|
||||
TorrentModel.cc
|
||||
TorrentView.cc
|
||||
TrackerDelegate.cc
|
||||
TrackerModel.cc
|
||||
TrackerModelFilter.cc
|
||||
Utils.cc
|
||||
VariantHelpers.cc
|
||||
WatchDir.cc
|
||||
)
|
||||
add_executable(${TR_NAME}-qt WIN32)
|
||||
|
||||
if (NOT ENABLE_QT_COM_INTEROP)
|
||||
set_source_files_properties(ComInteropHelper.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
if (NOT ENABLE_QT_DBUS_INTEROP)
|
||||
set_source_files_properties(DBusInteropHelper.cc PROPERTIES HEADER_FILE_ONLY ON)
|
||||
endif()
|
||||
target_sources(${TR_NAME}-qt
|
||||
PRIVATE
|
||||
AboutDialog.cc
|
||||
AboutDialog.h
|
||||
AddData.cc
|
||||
AddData.h
|
||||
Application.cc
|
||||
Application.h
|
||||
BaseDialog.h
|
||||
ColumnResizer.cc
|
||||
ColumnResizer.h
|
||||
ComInteropHelper.cc
|
||||
ComInteropHelper.h
|
||||
CustomVariantType.h
|
||||
DBusInteropHelper.cc
|
||||
DBusInteropHelper.h
|
||||
DetailsDialog.cc
|
||||
DetailsDialog.h
|
||||
FaviconCache.cc
|
||||
FaviconCache.h
|
||||
FileTreeDelegate.cc
|
||||
FileTreeDelegate.h
|
||||
FileTreeItem.cc
|
||||
FileTreeItem.h
|
||||
FileTreeModel.cc
|
||||
FileTreeModel.h
|
||||
FileTreeView.cc
|
||||
FileTreeView.h
|
||||
FilterBar.cc
|
||||
FilterBar.h
|
||||
FilterBarComboBox.cc
|
||||
FilterBarComboBox.h
|
||||
FilterBarComboBoxDelegate.cc
|
||||
FilterBarComboBoxDelegate.h
|
||||
Filters.cc
|
||||
Filters.h
|
||||
Formatter.cc
|
||||
Formatter.h
|
||||
FreeSpaceLabel.cc
|
||||
FreeSpaceLabel.h
|
||||
IconCache.cc
|
||||
IconCache.h
|
||||
IconToolButton.cc
|
||||
IconToolButton.h
|
||||
InteropHelper.cc
|
||||
InteropHelper.h
|
||||
InteropObject.cc
|
||||
InteropObject.h
|
||||
LicenseDialog.cc
|
||||
LicenseDialog.h
|
||||
MainWindow.cc
|
||||
MainWindow.h
|
||||
MakeDialog.cc
|
||||
MakeDialog.h
|
||||
OptionsDialog.cc
|
||||
OptionsDialog.h
|
||||
PathButton.cc
|
||||
PathButton.h
|
||||
Prefs.cc
|
||||
Prefs.h
|
||||
PrefsDialog.cc
|
||||
PrefsDialog.h
|
||||
RelocateDialog.cc
|
||||
RelocateDialog.h
|
||||
RpcClient.cc
|
||||
RpcClient.h
|
||||
RpcQueue.cc
|
||||
RpcQueue.h
|
||||
Session.cc
|
||||
Session.h
|
||||
SessionDialog.cc
|
||||
SessionDialog.h
|
||||
Speed.h
|
||||
SqueezeLabel.cc
|
||||
SqueezeLabel.h
|
||||
StatsDialog.cc
|
||||
StatsDialog.h
|
||||
StyleHelper.cc
|
||||
StyleHelper.h
|
||||
Torrent.cc
|
||||
Torrent.h
|
||||
TorrentDelegate.cc
|
||||
TorrentDelegate.h
|
||||
TorrentDelegateMin.cc
|
||||
TorrentDelegateMin.h
|
||||
TorrentFilter.cc
|
||||
TorrentFilter.h
|
||||
TorrentModel.cc
|
||||
TorrentModel.h
|
||||
TorrentView.cc
|
||||
TorrentView.h
|
||||
TrackerDelegate.cc
|
||||
TrackerDelegate.h
|
||||
TrackerModel.cc
|
||||
TrackerModel.h
|
||||
TrackerModelFilter.cc
|
||||
TrackerModelFilter.h
|
||||
Typedefs.h
|
||||
Utils.cc
|
||||
Utils.h
|
||||
VariantHelpers.cc
|
||||
VariantHelpers.h
|
||||
WatchDir.cc
|
||||
WatchDir.h)
|
||||
|
||||
set(${PROJECT_NAME}_HEADERS
|
||||
AboutDialog.h
|
||||
AddData.h
|
||||
Application.h
|
||||
BaseDialog.h
|
||||
ColumnResizer.h
|
||||
ComInteropHelper.h
|
||||
CustomVariantType.h
|
||||
DBusInteropHelper.h
|
||||
DetailsDialog.h
|
||||
FaviconCache.h
|
||||
FileTreeDelegate.h
|
||||
FileTreeItem.h
|
||||
FileTreeModel.h
|
||||
FileTreeView.h
|
||||
FilterBar.h
|
||||
FilterBarComboBox.h
|
||||
FilterBarComboBoxDelegate.h
|
||||
Filters.h
|
||||
Formatter.h
|
||||
FreeSpaceLabel.h
|
||||
IconCache.h
|
||||
IconToolButton.h
|
||||
InteropHelper.h
|
||||
InteropObject.h
|
||||
LicenseDialog.h
|
||||
MainWindow.h
|
||||
MakeDialog.h
|
||||
OptionsDialog.h
|
||||
PathButton.h
|
||||
Prefs.h
|
||||
PrefsDialog.h
|
||||
RelocateDialog.h
|
||||
RpcClient.h
|
||||
RpcQueue.h
|
||||
Session.h
|
||||
SessionDialog.h
|
||||
Speed.h
|
||||
SqueezeLabel.h
|
||||
StatsDialog.h
|
||||
StyleHelper.h
|
||||
Torrent.h
|
||||
TorrentDelegate.h
|
||||
TorrentDelegateMin.h
|
||||
TorrentFilter.h
|
||||
TorrentModel.h
|
||||
TorrentView.h
|
||||
TrackerDelegate.h
|
||||
TrackerModel.h
|
||||
TrackerModelFilter.h
|
||||
Typedefs.h
|
||||
Utils.h
|
||||
VariantHelpers.h
|
||||
WatchDir.h
|
||||
)
|
||||
tr_allow_compile_if(
|
||||
[=[[ENABLE_QT_COM_INTEROP]]=]
|
||||
ComInteropHelper.cc
|
||||
[=[[ENABLE_QT_DBUS_INTEROP]]=]
|
||||
DBusInteropHelper.cc)
|
||||
|
||||
set(${PROJECT_NAME}_UI_FILES
|
||||
AboutDialog.ui
|
||||
DetailsDialog.ui
|
||||
LicenseDialog.ui
|
||||
MainWindow.ui
|
||||
MakeDialog.ui
|
||||
MakeProgressDialog.ui
|
||||
OptionsDialog.ui
|
||||
PrefsDialog.ui
|
||||
RelocateDialog.ui
|
||||
SessionDialog.ui
|
||||
StatsDialog.ui
|
||||
TrackersDialog.ui
|
||||
)
|
||||
source_group(Ui FILES ${${PROJECT_NAME}_UI_FILES})
|
||||
target_sources(${TR_NAME}-qt
|
||||
PRIVATE
|
||||
AboutDialog.ui
|
||||
DetailsDialog.ui
|
||||
LicenseDialog.ui
|
||||
MainWindow.ui
|
||||
MakeDialog.ui
|
||||
MakeProgressDialog.ui
|
||||
OptionsDialog.ui
|
||||
PrefsDialog.ui
|
||||
RelocateDialog.ui
|
||||
SessionDialog.ui
|
||||
StatsDialog.ui
|
||||
TrackersDialog.ui)
|
||||
|
||||
tr_qt_wrap_ui(${PROJECT_NAME}_UI_SOURCES ${${PROJECT_NAME}_UI_FILES})
|
||||
source_group("Generated Files" FILES ${${PROJECT_NAME}_UI_SOURCES})
|
||||
source_group(Ui
|
||||
REGULAR_EXPRESSION [[.*\.ui$]])
|
||||
|
||||
target_sources(${TR_NAME}-qt
|
||||
PRIVATE
|
||||
application.qrc)
|
||||
|
||||
set(${PROJECT_NAME}_QRC_FILES application.qrc)
|
||||
if(WIN32 OR APPLE)
|
||||
list(APPEND ${PROJECT_NAME}_QRC_FILES icons/Faenza/Faenza.qrc)
|
||||
target_sources(${TR_NAME}-qt
|
||||
PRIVATE
|
||||
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})
|
||||
source_group(Resources
|
||||
REGULAR_EXPRESSION [[.*\.qrc$]])
|
||||
|
||||
set(${PROJECT_NAME}_LINGUAS
|
||||
set(LINGUAS
|
||||
af
|
||||
ca
|
||||
da
|
||||
|
@ -178,99 +174,99 @@ set(${PROJECT_NAME}_LINGUAS
|
|||
sv
|
||||
tr
|
||||
uk
|
||||
zh_CN
|
||||
)
|
||||
zh_CN)
|
||||
|
||||
if(ENABLE_NLS)
|
||||
set(${PROJECT_NAME}_ENABLED_LINGUAS ${${PROJECT_NAME}_LINGUAS})
|
||||
set(ENABLED_LINGUAS ${LINGUAS})
|
||||
else()
|
||||
set(${PROJECT_NAME}_ENABLED_LINGUAS)
|
||||
set(ENABLED_LINGUAS)
|
||||
endif()
|
||||
|
||||
set(${PROJECT_NAME}_TS_FILES)
|
||||
foreach(LANG ${${PROJECT_NAME}_ENABLED_LINGUAS})
|
||||
list(APPEND ${PROJECT_NAME}_TS_FILES translations/transmission_${LANG}.ts)
|
||||
set(TS_FILES)
|
||||
foreach(LANG ${ENABLED_LINGUAS})
|
||||
list(APPEND TS_FILES translations/transmission_${LANG}.ts)
|
||||
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})
|
||||
if(TS_FILES)
|
||||
tr_qt_add_translation(QM_FILES ${TS_FILES})
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
${CMAKE_SOURCE_DIR}
|
||||
${PROJECT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
include_directories(
|
||||
SYSTEM
|
||||
${PROJECT_BINARY_DIR}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
tr_win32_app_info(${PROJECT_NAME}_WIN32_RC_FILE
|
||||
"Transmission Qt Client"
|
||||
"transmission-qt"
|
||||
"transmission-qt.exe"
|
||||
"qtr.ico")
|
||||
target_sources(${TR_NAME}-qt
|
||||
PRIVATE
|
||||
${QM_FILES})
|
||||
|
||||
if(ENABLE_QT_COM_INTEROP)
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${CMAKE_CURRENT_BINARY_DIR}/transmission-qt.tlb
|
||||
COMMAND
|
||||
${MIDL_EXECUTABLE} /tlb ${CMAKE_CURRENT_BINARY_DIR}/transmission-qt.tlb transmission-qt.idl
|
||||
DEPENDS
|
||||
transmission-qt.idl
|
||||
WORKING_DIRECTORY
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
list(APPEND ${PROJECT_NAME}_WIN32_RC_FILE transmission-qt.tlb.rc transmission-qt.idl ${CMAKE_CURRENT_BINARY_DIR}/transmission-qt.tlb)
|
||||
set_source_files_properties(transmission-qt.idl ${CMAKE_CURRENT_BINARY_DIR}/transmission-qt.tlb PROPERTIES HEADER_FILE_ONLY ON)
|
||||
tr_target_idl_files(${TR_NAME}-qt
|
||||
transmission-qt.idl)
|
||||
endif()
|
||||
|
||||
add_executable(${TR_NAME}-qt WIN32
|
||||
${${PROJECT_NAME}_SOURCES}
|
||||
${${PROJECT_NAME}_UI_SOURCES}
|
||||
${${PROJECT_NAME}_QRC_SOURCES}
|
||||
${${PROJECT_NAME}_HEADERS}
|
||||
${${PROJECT_NAME}_QM_FILES}
|
||||
${${PROJECT_NAME}_WIN32_RC_FILE}
|
||||
)
|
||||
target_include_directories(${TR_NAME}-qt
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
target_include_directories(${TR_NAME}-qt SYSTEM
|
||||
PRIVATE
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${EVENT2_INCLUDE_DIRS})
|
||||
|
||||
target_link_libraries(${TR_NAME}-qt
|
||||
${TR_NAME}
|
||||
${QT_TARGETS}
|
||||
${CURL_LIBRARIES}
|
||||
${EVENT2_LIBRARIES}
|
||||
)
|
||||
PRIVATE
|
||||
${TR_NAME}
|
||||
${QT_TARGETS}
|
||||
${CURL_LIBRARIES}
|
||||
${EVENT2_LIBRARIES})
|
||||
|
||||
target_compile_definitions(${TR_NAME}-qt PRIVATE
|
||||
"TRANSLATIONS_DIR=\"${CMAKE_INSTALL_FULL_DATADIR}/${TR_NAME}/translations\""
|
||||
QT_NO_CAST_FROM_ASCII
|
||||
$<$<BOOL:${ENABLE_QT_COM_INTEROP}>:ENABLE_COM_INTEROP>
|
||||
$<$<BOOL:${ENABLE_QT_DBUS_INTEROP}>:ENABLE_DBUS_INTEROP>)
|
||||
target_compile_definitions(${TR_NAME}-qt
|
||||
PRIVATE
|
||||
"TRANSLATIONS_DIR=\"${CMAKE_INSTALL_FULL_DATADIR}/${TR_NAME}/translations\""
|
||||
QT_NO_CAST_FROM_ASCII
|
||||
$<$<BOOL:${ENABLE_QT_COM_INTEROP}>:ENABLE_COM_INTEROP>
|
||||
$<$<BOOL:${ENABLE_QT_DBUS_INTEROP}>:ENABLE_DBUS_INTEROP>)
|
||||
|
||||
if(MSVC)
|
||||
tr_append_target_property(${TR_NAME}-qt LINK_FLAGS "/ENTRY:mainCRTStartup")
|
||||
endif()
|
||||
|
||||
set_target_properties(${TR_NAME}-qt PROPERTIES AUTOMOC TRUE)
|
||||
set_target_properties(
|
||||
${TR_NAME}-qt
|
||||
PROPERTIES
|
||||
AUTOMOC ON
|
||||
AUTORCC ON
|
||||
AUTOUIC ON)
|
||||
|
||||
install(TARGETS ${TR_NAME}-qt DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
tr_win32_app_info(${TR_NAME}-qt
|
||||
"Transmission Qt Client"
|
||||
"transmission-qt"
|
||||
"transmission-qt.exe"
|
||||
"qtr.ico")
|
||||
|
||||
install(
|
||||
TARGETS ${TR_NAME}-qt
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
if(INSTALL_DOC)
|
||||
install(FILES ${TR_NAME}-qt.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
install(
|
||||
FILES ${TR_NAME}-qt.1
|
||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
endif()
|
||||
|
||||
install(FILES transmission-qt.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||
install(
|
||||
FILES transmission-qt.desktop
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||
|
||||
if(ENABLE_NLS)
|
||||
install(FILES ${${PROJECT_NAME}_QM_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/${TR_NAME}/translations)
|
||||
install(
|
||||
FILES ${QM_FILES}
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/${TR_NAME}/translations)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/dist-qt.conf" CONTENT "")
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dist-qt.conf" DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} RENAME qt.conf)
|
||||
file(GENERATE
|
||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/dist-qt.conf"
|
||||
CONTENT "")
|
||||
install(
|
||||
FILES "${CMAKE_CURRENT_BINARY_DIR}/dist-qt.conf"
|
||||
DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}
|
||||
RENAME qt.conf)
|
||||
endif()
|
||||
|
|
|
@ -1,8 +1,3 @@
|
|||
include_directories(SYSTEM
|
||||
${LIBFMT_INCLUDE_DIRS}
|
||||
${THIRD_PARTY_DIR}/googletest/googletest/include
|
||||
${THIRD_PARTY_DIR}/googletest/googletest)
|
||||
|
||||
add_subdirectory(gtest)
|
||||
add_subdirectory(libtransmission)
|
||||
add_subdirectory(utils)
|
||||
|
|
|
@ -1,5 +1,16 @@
|
|||
add_library(gtestall STATIC
|
||||
${THIRD_PARTY_DIR}/googletest/googletest/src/gtest-all.cc
|
||||
${THIRD_PARTY_DIR}/googletest/googletest/src/gtest_main.cc)
|
||||
add_library(gtestall STATIC)
|
||||
|
||||
set_property(TARGET gtestall PROPERTY FOLDER "third-party")
|
||||
target_sources(gtestall
|
||||
PRIVATE
|
||||
${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")
|
||||
|
||||
target_include_directories(gtestall SYSTEM
|
||||
PRIVATE
|
||||
${THIRD_PARTY_DIR}/googletest/googletest
|
||||
PUBLIC
|
||||
${THIRD_PARTY_DIR}/googletest/googletest/include)
|
||||
|
|
|
@ -1,57 +1,62 @@
|
|||
add_executable(libtransmission-test
|
||||
announce-list-test.cc
|
||||
announcer-test.cc
|
||||
announcer-udp-test.cc
|
||||
benc-test.cc
|
||||
bitfield-test.cc
|
||||
block-info-test.cc
|
||||
blocklist-test.cc
|
||||
buffer-test.cc
|
||||
clients-test.cc
|
||||
completion-test.cc
|
||||
copy-test.cc
|
||||
crypto-test-ref.h
|
||||
crypto-test.cc
|
||||
error-test.cc
|
||||
dht-test.cc
|
||||
file-piece-map-test.cc
|
||||
file-test.cc
|
||||
getopt-test.cc
|
||||
handshake-test.cc
|
||||
history-test.cc
|
||||
json-test.cc
|
||||
lpd-test.cc
|
||||
magnet-metainfo-test.cc
|
||||
makemeta-test.cc
|
||||
move-test.cc
|
||||
net-test.cc
|
||||
open-files-test.cc
|
||||
peer-mgr-active-requests-test.cc
|
||||
peer-mgr-wishlist-test.cc
|
||||
peer-msgs-test.cc
|
||||
platform-test.cc
|
||||
quark-test.cc
|
||||
remove-test.cc
|
||||
rename-test.cc
|
||||
rpc-test.cc
|
||||
session-test.cc
|
||||
session-alt-speeds-test.cc
|
||||
settings-test.cc
|
||||
strbuf-test.cc
|
||||
subprocess-test-script.cmd
|
||||
subprocess-test.cc
|
||||
test-fixtures.h
|
||||
timer-test.cc
|
||||
torrent-files-test.cc
|
||||
torrent-magnet-test.cc
|
||||
torrent-metainfo-test.cc
|
||||
torrents-test.cc
|
||||
utils-test.cc
|
||||
variant-test.cc
|
||||
watchdir-test.cc
|
||||
web-utils-test.cc)
|
||||
add_executable(libtransmission-test)
|
||||
|
||||
set_property(TARGET libtransmission-test PROPERTY FOLDER "tests")
|
||||
target_sources(libtransmission-test
|
||||
PRIVATE
|
||||
announce-list-test.cc
|
||||
announcer-test.cc
|
||||
announcer-udp-test.cc
|
||||
benc-test.cc
|
||||
bitfield-test.cc
|
||||
block-info-test.cc
|
||||
blocklist-test.cc
|
||||
buffer-test.cc
|
||||
clients-test.cc
|
||||
completion-test.cc
|
||||
copy-test.cc
|
||||
crypto-test-ref.h
|
||||
crypto-test.cc
|
||||
error-test.cc
|
||||
dht-test.cc
|
||||
file-piece-map-test.cc
|
||||
file-test.cc
|
||||
getopt-test.cc
|
||||
handshake-test.cc
|
||||
history-test.cc
|
||||
json-test.cc
|
||||
lpd-test.cc
|
||||
magnet-metainfo-test.cc
|
||||
makemeta-test.cc
|
||||
move-test.cc
|
||||
net-test.cc
|
||||
open-files-test.cc
|
||||
peer-mgr-active-requests-test.cc
|
||||
peer-mgr-wishlist-test.cc
|
||||
peer-msgs-test.cc
|
||||
platform-test.cc
|
||||
quark-test.cc
|
||||
remove-test.cc
|
||||
rename-test.cc
|
||||
rpc-test.cc
|
||||
session-test.cc
|
||||
session-alt-speeds-test.cc
|
||||
settings-test.cc
|
||||
strbuf-test.cc
|
||||
subprocess-test-script.cmd
|
||||
subprocess-test.cc
|
||||
test-fixtures.h
|
||||
timer-test.cc
|
||||
torrent-files-test.cc
|
||||
torrent-magnet-test.cc
|
||||
torrent-metainfo-test.cc
|
||||
torrents-test.cc
|
||||
utils-test.cc
|
||||
variant-test.cc
|
||||
watchdir-test.cc
|
||||
web-utils-test.cc)
|
||||
|
||||
set_property(
|
||||
TARGET libtransmission-test
|
||||
PROPERTY FOLDER "tests")
|
||||
|
||||
target_compile_definitions(libtransmission-test
|
||||
PRIVATE
|
||||
|
@ -65,6 +70,7 @@ target_include_directories(libtransmission-test
|
|||
|
||||
target_include_directories(libtransmission-test SYSTEM
|
||||
PRIVATE
|
||||
${LIBFMT_INCLUDE_DIRS}
|
||||
${WIDE_INTEGER_INCLUDE_DIRS}
|
||||
${B64_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
|
@ -72,8 +78,7 @@ target_include_directories(libtransmission-test SYSTEM
|
|||
${EVENT2_INCLUDE_DIRS})
|
||||
|
||||
target_compile_options(libtransmission-test
|
||||
PRIVATE
|
||||
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wno-sign-compare>) # patches welcomed
|
||||
PRIVATE $<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wno-sign-compare>) # patches welcomed
|
||||
|
||||
target_link_libraries(libtransmission-test
|
||||
PRIVATE
|
||||
|
@ -88,14 +93,20 @@ add_custom_command(
|
|||
TARGET libtransmission-test
|
||||
PRE_BUILD
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_if_different
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/subprocess-test-script.cmd
|
||||
$<TARGET_FILE_DIR:libtransmission-test>/subprocess-test.cmd)
|
||||
${CMAKE_COMMAND}
|
||||
-E copy_if_different
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/subprocess-test-script.cmd
|
||||
$<TARGET_FILE_DIR:libtransmission-test>/subprocess-test.cmd)
|
||||
|
||||
add_executable(subprocess-test
|
||||
subprocess-test-program.cc)
|
||||
add_executable(subprocess-test)
|
||||
|
||||
set_property(TARGET subprocess-test PROPERTY FOLDER "tests")
|
||||
target_sources(subprocess-test
|
||||
PRIVATE
|
||||
subprocess-test-program.cc)
|
||||
|
||||
set_property(
|
||||
TARGET subprocess-test
|
||||
PROPERTY FOLDER "tests")
|
||||
|
||||
target_include_directories(subprocess-test
|
||||
PRIVATE
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
function(AddShowTest name file_basename)
|
||||
add_test(
|
||||
NAME ${name}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-D transmission_show:string=$<TARGET_FILE:transmission-show>
|
||||
-D torrent_file:string=assets/${file_basename}.torrent
|
||||
-D reference_file:string=${CMAKE_CURRENT_SOURCE_DIR}/assets/${file_basename}.show
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/run_transmission_show.cmake"
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
add_test(
|
||||
NAME ${name}
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-D transmission_show:string=$<TARGET_FILE:transmission-show>
|
||||
-D torrent_file:string=assets/${file_basename}.torrent
|
||||
-D reference_file:string=${CMAKE_CURRENT_SOURCE_DIR}/assets/${file_basename}.show
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/run_transmission_show.cmake"
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
endfunction()
|
||||
|
||||
# disabled AddShowTest(transmission-show-bittorrent-v2 bittorrent-v2-test)
|
||||
AddShowTest(transmission-show-bittorrent-v2-hybrid-test bittorrent-v2-hybrid-test)
|
||||
AddShowTest(transmission-show-inner-sanctum Inner_Sanctum_movie_archive)
|
||||
AddShowTest(transmission-show-thor Thor_and_the_Amazon_Women.avi)
|
||||
AddShowTest(transmission-show-ubuntu ubuntu-20.04.3-desktop-amd64.iso)
|
||||
AddShowTest(transmission-show-ubuntu-hybrid hybrid-single-ubuntu-20.04.3-desktop-amd64.iso)
|
||||
addshowtest(transmission-show-bittorrent-v2-hybrid-test bittorrent-v2-hybrid-test)
|
||||
addshowtest(transmission-show-inner-sanctum Inner_Sanctum_movie_archive)
|
||||
addshowtest(transmission-show-thor Thor_and_the_Amazon_Women.avi)
|
||||
addshowtest(transmission-show-ubuntu ubuntu-20.04.3-desktop-amd64.iso)
|
||||
addshowtest(transmission-show-ubuntu-hybrid hybrid-single-ubuntu-20.04.3-desktop-amd64.iso)
|
||||
|
|
|
@ -1,52 +1,49 @@
|
|||
# compare the output of transmission-show to a reference file.
|
||||
# returns 0 if the files match, nonzero otherwise.
|
||||
# returns 0 if the files match, nonzero otherwise.
|
||||
##
|
||||
|
||||
if (CMAKE_VERSION VERSION_LESS 3.14)
|
||||
# --ignore-eol was introduced in CMake 3.14
|
||||
message(status "skipping transmission-show test; cmake version too old")
|
||||
if(CMAKE_VERSION VERSION_LESS 3.14)
|
||||
# --ignore-eol was introduced in CMake 3.14
|
||||
message(status "skipping transmission-show test; cmake version too old")
|
||||
else()
|
||||
get_filename_component(torrent_basename "${torrent_file}" NAME)
|
||||
set(output_file ${CMAKE_CURRENT_BINARY_DIR}/${torrent_basename}.out)
|
||||
get_filename_component(torrent_basename "${torrent_file}" NAME)
|
||||
set(output_file ${CMAKE_CURRENT_BINARY_DIR}/${torrent_basename}.out)
|
||||
|
||||
message(STATUS "transmission_show ${transmission_show}")
|
||||
message(STATUS " input_file ${torrent_file}")
|
||||
message(STATUS " output_file ${output_file}")
|
||||
message(STATUS " reference_file ${reference_file}")
|
||||
message(STATUS "transmission_show ${transmission_show}")
|
||||
message(STATUS " input_file ${torrent_file}")
|
||||
message(STATUS " output_file ${output_file}")
|
||||
message(STATUS " reference_file ${reference_file}")
|
||||
|
||||
# The app's output includes timestamps, so fake our TZ to ensure
|
||||
# the test doesn't depend on the physical TZ of the test machine
|
||||
set(ENV{TZ} "UTC")
|
||||
execute_process(
|
||||
COMMAND ${transmission_show} ${torrent_file}
|
||||
OUTPUT_FILE ${output_file}
|
||||
)
|
||||
# The app's output includes timestamps, so fake our TZ to ensure
|
||||
# the test doesn't depend on the physical TZ of the test machine
|
||||
set(ENV{TZ} "UTC")
|
||||
execute_process(
|
||||
COMMAND ${transmission_show} ${torrent_file}
|
||||
OUTPUT_FILE ${output_file})
|
||||
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${reference_file} ${output_file}
|
||||
RESULT_VARIABLE STATUS
|
||||
)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${reference_file} ${output_file}
|
||||
RESULT_VARIABLE STATUS)
|
||||
|
||||
if(STATUS AND NOT STATUS EQUAL 0)
|
||||
file(READ ${reference_file} CONTENTS)
|
||||
message("EXPECTED CONTENTS (${reference_file}):")
|
||||
message(${CONTENTS})
|
||||
if(STATUS AND NOT STATUS EQUAL 0)
|
||||
file(READ ${reference_file} CONTENTS)
|
||||
message("EXPECTED CONTENTS (${reference_file}):")
|
||||
message(${CONTENTS})
|
||||
|
||||
file(READ ${output_file} CONTENTS)
|
||||
message("RECEIVED CONTENTS (${output_file}):")
|
||||
message(${CONTENTS})
|
||||
file(READ ${output_file} CONTENTS)
|
||||
message("RECEIVED CONTENTS (${output_file}):")
|
||||
message(${CONTENTS})
|
||||
|
||||
find_program(DIFF_EXEC diff)
|
||||
if (DIFF_EXEC)
|
||||
message("DIFF:")
|
||||
execute_process(COMMAND ${DIFF_EXEC} -u ${output_file} ${reference_file})
|
||||
endif()
|
||||
|
||||
file(REMOVE ${output_file})
|
||||
message(FATAL_ERROR "failed: files '${reference_file}' and '${output_file}' do not match")
|
||||
else()
|
||||
file(REMOVE ${output_file})
|
||||
message("passed")
|
||||
endif()
|
||||
find_program(DIFF_EXEC diff)
|
||||
if(DIFF_EXEC)
|
||||
message("DIFF:")
|
||||
execute_process(COMMAND ${DIFF_EXEC} -u ${output_file} ${reference_file})
|
||||
endif()
|
||||
|
||||
file(REMOVE ${output_file})
|
||||
message(FATAL_ERROR "failed: files '${reference_file}' and '${output_file}' do not match")
|
||||
else()
|
||||
file(REMOVE ${output_file})
|
||||
message("passed")
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
@ -1,26 +1,37 @@
|
|||
project(trutils)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_SOURCE_DIR}
|
||||
)
|
||||
include_directories(
|
||||
SYSTEM
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
foreach(P create edit remote show)
|
||||
tr_win32_app_info(${PROJECT_NAME}_${P}_WIN32_RC_FILE
|
||||
add_executable(${TR_NAME}-${P})
|
||||
|
||||
target_sources(${TR_NAME}-${P}
|
||||
PRIVATE
|
||||
${P}.cc)
|
||||
|
||||
target_include_directories(${TR_NAME}-${P}
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR})
|
||||
|
||||
target_include_directories(${TR_NAME}-${P} SYSTEM
|
||||
PRIVATE
|
||||
${LIBFMT_INCLUDE_DIRS}
|
||||
${EVENT2_INCLUDE_DIRS}
|
||||
${CURL_INCLUDE_DIRS})
|
||||
|
||||
target_link_libraries(${TR_NAME}-${P}
|
||||
PRIVATE
|
||||
${TR_NAME}
|
||||
${CURL_LIBRARIES})
|
||||
|
||||
tr_win32_app_info(${TR_NAME}-${P}
|
||||
"Transmission Utility ('${P}')"
|
||||
"${TR_NAME}-${P}"
|
||||
"${TR_NAME}-${P}.exe")
|
||||
|
||||
add_executable(${TR_NAME}-${P} ${P}.cc ${${PROJECT_NAME}_${P}_WIN32_RC_FILE})
|
||||
target_link_libraries(${TR_NAME}-${P} ${TR_NAME})
|
||||
|
||||
install(TARGETS ${TR_NAME}-${P} DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(
|
||||
TARGETS ${TR_NAME}-${P}
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
if(INSTALL_DOC)
|
||||
install(FILES ${TR_NAME}-${P}.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
install(
|
||||
FILES ${TR_NAME}-${P}.1
|
||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||
endif()
|
||||
endforeach()
|
||||
|
|
|
@ -1,65 +1,59 @@
|
|||
project(trweb)
|
||||
|
||||
set(TRWEB_SRCS
|
||||
src/about-dialog.js
|
||||
src/action-manager.js
|
||||
src/alert-dialog.js
|
||||
src/context-menu.js
|
||||
src/file-row.js
|
||||
src/formatter.js
|
||||
src/inspector.js
|
||||
src/main.js
|
||||
src/move-dialog.js
|
||||
src/notifications.js
|
||||
src/open-dialog.js
|
||||
src/overflow-menu.js
|
||||
src/prefs-dialog.js
|
||||
src/prefs.js
|
||||
src/remote.js
|
||||
src/remove-dialog.js
|
||||
src/rename-dialog.js
|
||||
src/shortcuts-dialog.js
|
||||
src/statistics-dialog.js
|
||||
src/torrent.js
|
||||
src/torrent-row.js
|
||||
src/transmission.js
|
||||
src/utils.js
|
||||
assets/css/transmission-app.scss
|
||||
)
|
||||
src/about-dialog.js
|
||||
src/action-manager.js
|
||||
src/alert-dialog.js
|
||||
src/context-menu.js
|
||||
src/file-row.js
|
||||
src/formatter.js
|
||||
src/inspector.js
|
||||
src/main.js
|
||||
src/move-dialog.js
|
||||
src/notifications.js
|
||||
src/open-dialog.js
|
||||
src/overflow-menu.js
|
||||
src/prefs-dialog.js
|
||||
src/prefs.js
|
||||
src/remote.js
|
||||
src/remove-dialog.js
|
||||
src/rename-dialog.js
|
||||
src/shortcuts-dialog.js
|
||||
src/statistics-dialog.js
|
||||
src/torrent.js
|
||||
src/torrent-row.js
|
||||
src/transmission.js
|
||||
src/utils.js
|
||||
assets/css/transmission-app.scss)
|
||||
|
||||
set(TRWEB_IMGS
|
||||
assets/img/box.svg
|
||||
assets/img/film.svg
|
||||
assets/img/modern-tortoise-blue.png
|
||||
assets/img/modern-tortoise.png
|
||||
assets/img/chevron-down.svg
|
||||
assets/img/chevron-up.svg
|
||||
assets/img/horizontal-rule.svg
|
||||
assets/img/lock-fill.svg
|
||||
assets/img/logo.png
|
||||
assets/img/image.svg
|
||||
assets/img/magnet.svg
|
||||
assets/img/music.svg
|
||||
assets/img/file-text.svg
|
||||
assets/img/package.svg
|
||||
assets/img/folder.svg
|
||||
assets/img/pause-circle-active.svg
|
||||
assets/img/pause-circle-idle.svg
|
||||
assets/img/play-circle-active.svg
|
||||
assets/img/play-circle-idle.svg
|
||||
assets/img/router.svg
|
||||
assets/img/type.svg
|
||||
)
|
||||
assets/img/box.svg
|
||||
assets/img/film.svg
|
||||
assets/img/modern-tortoise-blue.png
|
||||
assets/img/modern-tortoise.png
|
||||
assets/img/chevron-down.svg
|
||||
assets/img/chevron-up.svg
|
||||
assets/img/horizontal-rule.svg
|
||||
assets/img/lock-fill.svg
|
||||
assets/img/logo.png
|
||||
assets/img/image.svg
|
||||
assets/img/magnet.svg
|
||||
assets/img/music.svg
|
||||
assets/img/file-text.svg
|
||||
assets/img/package.svg
|
||||
assets/img/folder.svg
|
||||
assets/img/pause-circle-active.svg
|
||||
assets/img/pause-circle-idle.svg
|
||||
assets/img/play-circle-active.svg
|
||||
assets/img/play-circle-idle.svg
|
||||
assets/img/router.svg
|
||||
assets/img/type.svg)
|
||||
|
||||
add_custom_target(
|
||||
trweb ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/package.json" "${CMAKE_CURRENT_BINARY_DIR}/package.json"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/yarn.lock" "${CMAKE_CURRENT_BINARY_DIR}/yarn.lock"
|
||||
COMMAND yarn install
|
||||
COMMAND yarn webpack --config "${CMAKE_CURRENT_SOURCE_DIR}/webpack.config.js" --context "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
BYPRODUCTS
|
||||
public_html/transmission-app.js
|
||||
public_html/transmission-app.js.LICENSE.txt
|
||||
DEPENDS ${TRWEB_IMGS}
|
||||
SOURCES ${TRWEB_SRCS}
|
||||
)
|
||||
add_custom_target(trweb ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/package.json" "${CMAKE_CURRENT_BINARY_DIR}/package.json"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/yarn.lock" "${CMAKE_CURRENT_BINARY_DIR}/yarn.lock"
|
||||
COMMAND yarn install
|
||||
COMMAND yarn webpack --config "${CMAKE_CURRENT_SOURCE_DIR}/webpack.config.js" --context "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
BYPRODUCTS
|
||||
public_html/transmission-app.js
|
||||
public_html/transmission-app.js.LICENSE.txt
|
||||
DEPENDS ${TRWEB_IMGS}
|
||||
SOURCES ${TRWEB_SRCS})
|
||||
|
|
Loading…
Reference in New Issue