include(CheckLibraryExists) include(CheckSymbolExists) if(ENABLE_NLS) check_library_exists(intl libintl_gettext "" HAVE_LIBINTL) if(HAVE_LIBINTL) set(LIBINTL_LIBRARY intl) endif() endif() check_symbol_exists(SO_REUSEPORT "sys/types.h;sys/socket.h" HAVE_SO_REUSEPORT) add_library(${TR_NAME} STATIC) 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) configure_file(version.h.in version.h) target_sources(${TR_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.h) 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) 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}" $<$:WITH_INOTIFY> $<$:WITH_KQUEUE> $<$:TR_LIGHTWEIGHT> $<$:WITH_UTP> $<$:MINIUPNPC_API_VERSION=${MINIUPNPC_API_VERSION}> # API version macro was only added in 1.7 $<$:USE_SYSTEM_B64> $<$:HAVE_SO_REUSEPORT=1> $<$:HAVE_ICONV> $<$:ICONV_SECOND_ARGUMENT_IS_CONST> ${NATPMP_DEFINITIONS} ${MINIUPNPC_DEFINITIONS} PUBLIC $<$>: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 $<$:${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} $<$:${ICONV_INCLUDE_DIRS}> PUBLIC ${EVENT2_INCLUDE_DIRS} ${LIBFMT_INCLUDE_DIRS}) target_link_libraries(${TR_NAME} 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 $<$:${ICONV_LIBRARIES}> $<$:crypt32> $<$:shlwapi> "$<$:-framework Foundation>") if(INSTALL_LIB) 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()