2007-06-13 01:48:24 +00:00
# This Jamfile requires boost-build v2 to build.
# The version shipped with boost 1.34.0
2004-02-18 00:08:20 +00:00
2004-02-04 20:20:53 +00:00
import modules ;
2011-07-23 19:46:27 +00:00
import path ;
2004-02-21 11:52:21 +00:00
import os ;
2005-01-11 02:13:07 +00:00
import errors ;
2006-08-31 00:26:41 +00:00
import feature : feature ;
2009-04-02 23:21:44 +00:00
import package ;
import virtual-target ;
2019-05-11 18:28:48 -06:00
import cast ;
2004-02-04 20:20:53 +00:00
2021-03-04 08:00:19 +01:00
# we need version numbers in the form X.Y.Z in order to trigger the built-in
# support for generating symlinks to the installed library
2022-10-16 15:15:36 +02:00
VERSION = 2.0.8 ;
2020-08-01 15:06:35 +02:00
2004-02-04 20:20:53 +00:00
BOOST_ROOT = [ modules.peek : BOOST_ROOT ] ;
2008-05-14 00:21:57 +00:00
CXXFLAGS = [ modules.peek : CXXFLAGS ] ;
LDFLAGS = [ modules.peek : LDFLAGS ] ;
2004-02-04 20:20:53 +00:00
2011-04-09 23:57:56 +00:00
ECHO "CXXFLAGS =" $(CXXFLAGS) ;
ECHO "LDFLAGS =" $(LDFLAGS) ;
2004-07-25 21:44:53 +00:00
ECHO "OS =" [ os.name ] ;
2022-07-17 17:29:18 -07:00
jam-version = [ modules.peek : JAM_VERSION ] ;
2007-07-07 21:27:36 +00:00
if $(BOOST_ROOT)
2005-01-11 02:13:07 +00:00
{
2015-08-08 19:18:05 -04:00
ECHO "building boost from source directory: " $(BOOST_ROOT) ;
2007-07-07 21:27:36 +00:00
use-project /boost : $(BOOST_ROOT) ;
2015-08-08 19:18:05 -04:00
alias boost_system : /boost/system//boost_system : : : <include>$(BOOST_ROOT) ;
}
else
{
local boost-lib-search-path =
2019-10-13 15:38:16 +02:00
<search>/usr/local/opt/boost/lib
2021-03-14 16:16:24 +01:00
<search>/opt/homebrew/lib
2015-08-08 19:18:05 -04:00
;
local boost-include-path =
2019-10-13 15:38:16 +02:00
<include>/usr/local/opt/boost/include
2021-03-14 16:16:24 +01:00
<include>/opt/homebrew/include
2015-08-08 19:18:05 -04:00
;
2019-10-13 15:38:16 +02:00
# the names are decorated in MacPorts.
2015-08-08 19:18:05 -04:00
lib boost_system : : <target-os>darwin <name>boost_system-mt $(boost-lib-search-path)
: : $(boost-include-path) ;
2022-01-22 14:45:16 +01:00
lib boost_system : : <name>boost_system ;
2005-01-11 02:13:07 +00:00
}
2016-12-29 09:55:17 -08:00
use-project /try_signal : ./deps/try_signal ;
2017-10-07 15:26:46 +02:00
rule linking ( properties * )
{
local result ;
2015-08-07 21:28:51 -04:00
if <simulator>on in $(properties)
{
result += <library>/libsimulator//simulator ;
}
2012-01-26 10:33:39 +00:00
if <target-os>windows in $(properties)
2016-07-01 19:46:59 -04:00
&& ( <asserts>on in $(properties)
2013-06-17 16:11:52 +00:00
|| <asserts>production in $(properties)
2012-01-26 10:33:39 +00:00
|| <asio-debugging>on in $(properties) )
{
result += <library>dbghelp ;
}
2009-11-08 03:09:19 +00:00
# gcrypt libraries, if enabled
2017-07-13 23:42:56 -07:00
if <crypto>gcrypt in $(properties)
2009-11-08 03:09:19 +00:00
{
2016-05-02 12:36:21 -04:00
result += <library>gcrypt ;
2009-11-08 03:09:19 +00:00
}
2018-07-09 20:27:45 -07:00
else if <crypto>openssl in $(properties)
{
result += <library>ssl ;
result += <library>crypto ;
2019-01-23 00:11:59 +01:00
if <target-os>linux in $(properties)
{
result += <library>dl ;
}
2018-07-09 20:27:45 -07:00
}
2020-04-20 09:36:51 +02:00
else if <crypto>gnutls in $(properties)
{
result += <library>./deps/asio-gnutls//asio-gnutls ;
2020-06-30 00:00:30 +02:00
result += <library>gnutls/<link>shared ;
2020-04-20 09:36:51 +02:00
}
2018-07-09 20:27:45 -07:00
else if <crypto>libcrypto in $(properties)
{
result += <library>crypto ;
2020-03-21 17:03:54 +01:00
if <target-os>linux in $(properties)
{
result += <library>dl ;
}
2018-07-09 20:27:45 -07:00
}
2019-12-09 08:45:04 -05:00
else if <crypto>wolfssl in $(properties)
{
result += <library>wolfssl ;
}
2009-11-08 03:09:19 +00:00
2007-08-20 04:58:56 +00:00
if <target-os>windows in $(properties)
|| <target-os>cygwin in $(properties)
2007-06-13 17:36:26 +00:00
{
2016-07-30 18:03:06 -04:00
# socket functions on windows require winsock libraries
2007-06-13 17:36:26 +00:00
result += <library>ws2_32
<library>wsock32
2010-11-29 01:33:05 +00:00
<library>iphlpapi
2007-06-13 17:36:26 +00:00
<define>WIN32_LEAN_AND_MEAN
<define>__USE_W32_SOCKETS
<define>WIN32
<define>_WIN32
;
2013-08-24 21:35:49 +00:00
# when DHT is enabled, we need ed25519 which in turn
# needs entropy
if ! <dht>off in $(properties)
{
result += <library>advapi32 ;
}
2019-10-08 20:25:46 +03:00
# windows xp has no CNG
if ! <windows-version>xp in $(properties)
{
result += <library>bcrypt ;
}
2007-06-13 17:36:26 +00:00
}
2018-03-08 17:43:34 +01:00
if <target-os>android in $(properties)
{
result += <library>dl ;
}
2009-12-09 09:55:19 +00:00
if <target-os>beos in $(properties)
{
2011-07-20 05:14:25 +00:00
result += <library>netkit <library>gcc ;
2009-12-09 09:55:19 +00:00
}
2018-02-04 00:57:54 +00:00
if <target-os>haiku in $(properties)
{
result += <library>libnetwork <library>gcc ;
}
2009-01-27 08:24:48 +00:00
if <target-os>solaris in $(properties)
{
result += <library>libsocket <library>libnsl ;
}
2017-04-07 17:53:12 -04:00
if <target-os>darwin in $(properties)
2017-04-11 23:53:13 -04:00
|| <target-os>iphone in $(properties)
2017-04-07 17:53:12 -04:00
{
# for ip_notifier
result += <framework>CoreFoundation <framework>SystemConfiguration ;
}
2022-04-09 14:37:25 +02:00
if <toolset>gcc in $(properties)
2007-08-20 04:58:56 +00:00
&& <target-os>linux in $(properties)
2016-06-27 01:00:44 -04:00
&& ( <asserts>on in $(properties)
2013-06-17 16:11:52 +00:00
|| <asserts>production in $(properties)
|| <asio-debugging>on in $(properties) )
2007-08-20 04:58:56 +00:00
{
# for backtraces in assertion failures
# which only works on ELF targets with gcc
2022-02-20 21:55:34 +01:00
result += <linkflags>-Wl,--export-dynamic <linkflags>-rdynamic ;
}
2022-07-17 17:29:18 -07:00
else if [ version.version-less $(jam-version) : 1990 0 ]
2022-02-20 21:55:34 +01:00
{
2022-07-17 17:29:18 -07:00
# the visibility feature was introduced in boost-1.69. This was close to
# when the verisoning scheme changed from year to (low) version numbers.
# in boost-1.70
2022-02-20 21:55:34 +01:00
result += <visibility>hidden ;
2007-08-20 04:58:56 +00:00
}
2015-08-08 19:18:05 -04:00
if <boost-link>static in $(properties)
2007-07-07 21:27:36 +00:00
{
2015-08-08 19:18:05 -04:00
if <link>shared in $(properties)
2008-06-28 08:59:25 +00:00
{
2015-08-08 19:18:05 -04:00
# if libtorrent is being built as a shared library
# but we're linking against boost statically, we still
# need to make boost think it's being built as a shared
# library, so that it properly exports its symbols
result += <define>BOOST_ALL_DYN_LINK ;
result += <library>boost_system/<link>static/<define>BOOST_ALL_DYN_LINK ;
2008-06-28 08:59:25 +00:00
}
else
2015-06-07 08:31:09 +03:00
{
result += <library>boost_system/<link>static ;
}
2015-08-08 19:18:05 -04:00
if <toolset>gcc in $(properties)
&& ! <target-os>windows in $(properties)
&& <link>shared in $(properties)
2015-06-07 08:31:09 +03:00
{
2015-08-08 19:18:05 -04:00
result += <fpic>on ;
2015-06-07 08:31:09 +03:00
}
2012-07-23 16:10:34 +00:00
2008-06-07 17:36:33 +00:00
}
2015-08-08 19:30:01 -04:00
else if <boost-link>shared in $(properties)
2015-08-08 19:18:05 -04:00
{
result += <library>boost_system/<link>shared ;
}
2015-08-08 19:30:01 -04:00
else
{
result += <library>boost_system ;
}
2015-08-08 19:18:05 -04:00
result += <define>BOOST_ALL_NO_LIB
<define>BOOST_MULTI_INDEX_DISABLE_SERIALIZATION
2016-10-04 21:54:02 -04:00
<define>BOOST_SYSTEM_NO_DEPRECATED
2015-08-08 19:18:05 -04:00
;
2008-06-07 17:36:33 +00:00
2016-12-29 09:55:17 -08:00
if <link>shared in $(properties)
{
result += <library>/try_signal//try_signal/<link>static/<fpic>on ;
}
else
{
result += <library>/try_signal//try_signal/<link>static ;
}
2007-06-13 01:48:24 +00:00
return $(result) ;
}
2015-04-18 02:33:39 +00:00
rule warnings ( properties * )
{
local result ;
2015-04-26 00:51:44 +00:00
if <warnings>off in $(properties)
{
return $(result) ;
}
2015-04-18 02:33:39 +00:00
if <toolset>clang in $(properties)
|| <toolset>darwin in $(properties)
{
2021-11-22 15:32:19 +01:00
result += <cxxflags>-Weverything ;
result += <cxxflags>-Wno-documentation ;
2015-08-21 00:26:11 +02:00
result += <cxxflags>-Wno-c++98-compat-pedantic ;
2020-06-23 10:29:47 +01:00
result += <cxxflags>-Wno-c++11-compat-pedantic ;
2021-11-22 15:32:19 +01:00
result += <cxxflags>-Wno-padded ;
result += <cxxflags>-Wno-alloca ;
result += <cxxflags>-Wno-global-constructors ;
result += <cxxflags>-Wno-poison-system-directories ;
2016-11-19 14:19:35 -05:00
# this warns on any global static object, which are used for error_category
# objects
2021-11-22 15:32:19 +01:00
result += <cxxflags>-Wno-exit-time-destructors ;
2015-04-20 04:52:49 +00:00
2015-08-20 01:33:20 +02:00
# enable these warnings again, once the other ones are dealt with
2021-11-22 15:32:19 +01:00
result += <cxxflags>-Wno-weak-vtables ;
2019-10-13 15:38:16 +02:00
2021-11-22 15:32:19 +01:00
result += <cxxflags>-Wno-return-std-move-in-c++11 ;
result += <cxxflags>-Wno-unknown-warning-option ;
2020-02-26 12:10:32 +01:00
# libtorrent uses alloca() carefully
2021-11-22 15:32:19 +01:00
result += <cxxflags>-Wno-alloca ;
2015-04-18 02:33:39 +00:00
}
2015-04-18 14:33:55 +00:00
if <toolset>gcc in $(properties)
{
result += <cflags>-Wall ;
result += <cflags>-Wextra ;
2015-08-20 01:33:20 +02:00
result += <cflags>-Wpedantic ;
result += <cflags>-Wvla ;
2015-09-06 17:29:01 -04:00
result += <cflags>-Wno-format-zero-length ;
2021-11-22 15:32:19 +01:00
result += <cxxflags>-Wno-noexcept-type ;
2015-04-18 14:33:55 +00:00
}
2015-04-18 02:33:39 +00:00
if <toolset>msvc in $(properties)
{
2016-12-13 10:30:36 -05:00
# on msvc this resolves to /W4
result += <warnings>all ;
2015-04-27 02:21:12 +00:00
# enable these warnings again, once the other ones are dealt with
2016-04-26 00:22:09 +03:00
# disable warning C4251: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
2021-11-22 15:32:19 +01:00
result += <cxxflags>/wd4251 ;
2016-04-26 00:22:09 +03:00
# disable warning C4275: non DLL-interface classkey 'identifier' used as base for DLL-interface classkey 'identifier'
2021-11-22 15:32:19 +01:00
result += <cxxflags>/wd4275 ;
2016-07-23 15:57:04 -07:00
# disable warning C4373: virtual function overrides, previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers
2021-11-22 15:32:19 +01:00
result += <cxxflags>/wd4373 ;
2017-01-25 18:04:22 -05:00
# C4268: 'identifier' : 'const' static/global data initialized
# with compiler generated default constructor fills the object with zeros
2021-11-22 15:32:19 +01:00
result += <cxxflags>/wd4268 ;
2017-07-13 20:04:21 -07:00
# C4503: 'identifier': decorated name length exceeded, name was truncated
2021-11-22 15:32:19 +01:00
result += <cxxflags>/wd4503 ;
2015-04-18 02:33:39 +00:00
}
return $(result) ;
}
2007-06-13 17:36:26 +00:00
# rule for adding the right source files
# depending on target-os and features
rule building ( properties * )
2007-06-13 01:48:24 +00:00
{
local result ;
2017-01-14 19:14:10 +03:00
if ( <asserts>off in $(properties) &&
! <invariant-checks>off in $(properties) )
{
2018-04-30 10:59:12 -04:00
ECHO "'invariant-check' requires enabled 'asserts' mode. (e.g. specify build params: invariant-check=on asserts=on)" ;
2017-01-15 15:57:05 +03:00
result += <build>no ;
2017-01-14 19:14:10 +03:00
}
2022-10-16 14:07:06 +02:00
local CXXVER = [ feature.get-values <cxxstd> : $(properties) ] ;
if ! $(CXXVER) || $(CXXVER) < 14
2019-02-20 13:46:51 +01:00
{
2021-04-10 13:06:10 +02:00
ECHO "libtorrent requires at least C++14. Specify cxxstd=14 or higher" ;
2019-02-20 13:46:51 +01:00
result += <build>no ;
}
2021-01-28 00:44:21 +01:00
if <toolset>msvc in $(properties) || <toolset>intel-win in $(properties)
2015-08-20 20:56:52 +02:00
{
# allow larger .obj files (with more sections)
2021-10-18 16:10:16 +02:00
result += <cxxflags>/bigobj ;
2022-01-01 21:43:55 -05:00
# https://docs.microsoft.com/en-us/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=msvc-170
2022-02-26 18:11:25 +01:00
result += <cxxflags>/utf-8 ;
2015-08-20 20:56:52 +02:00
}
2021-01-27 12:38:58 +01:00
if <toolset>gcc in $(properties) && <target-os>windows in $(properties)
{
# allow larger .obj files (with more sections)
2021-11-22 15:32:19 +01:00
result += <cxxflags>-Wa,-mbig-obj ;
2021-01-27 12:38:58 +01:00
}
2016-06-27 22:28:51 -04:00
if ( <asserts>production in $(properties)
2012-01-26 10:33:39 +00:00
|| <asserts>on in $(properties) )
2007-09-01 04:08:39 +00:00
{
result += <source>src/assert.cpp ;
}
2014-12-29 16:50:22 +00:00
if <encryption>on in $(properties)
2012-03-15 06:08:08 +00:00
{
2014-12-29 16:50:22 +00:00
result += <source>src/pe_crypto.cpp ;
2012-03-15 06:08:08 +00:00
}
if ( <toolset>darwin in $(properties)
|| <toolset>gcc in $(properties)
2016-08-25 19:07:16 -04:00
|| <toolset>clang in $(properties)
|| <toolset>clang-darwin in $(properties) )
2012-03-21 16:34:41 +00:00
# on GCC, enabling debugging in libstdc++
# breaks the ABI and its ability to appear
# in shared object interfaces, so when it's
# enabled, just export everything (since we're)
# probably not a production build anyway
2012-12-15 05:09:11 +00:00
&& ! <debug-iterators>on in $(properties)
2012-03-15 06:08:08 +00:00
{
2013-09-04 01:16:13 +00:00
if ( <toolset>gcc in $(properties) )
{
result += <linkflags>-Wl,-Bsymbolic ;
}
2012-03-15 06:08:08 +00:00
}
2007-06-13 01:48:24 +00:00
return $(result) ;
}
2004-03-17 12:14:44 +00:00
2017-10-07 15:26:46 +02:00
rule tag ( name : type ? : property-set )
2009-04-02 23:21:44 +00:00
{
2021-02-23 13:20:29 +01:00
# we only care about the names of our output static- or shared library, not
# other targets like object files
if $(type) != SHARED_LIB && $(type) != STATIC_LIB
{
return [ virtual-target.add-prefix-and-suffix $(name) : $(type) : $(property-set) ] ;
}
# static libraries are not versioned
if $(type) = STATIC_LIB
{
return [ virtual-target.add-prefix-and-suffix $(name)-rasterbar : $(type) : $(property-set) ] ;
}
# shared libraries have the version number before the filename extension on
# windows
if [ $(property-set).get <target-os> ] in windows cygwin
{
# TODO: add version on windows too
# return [ virtual-target.add-prefix-and-suffix $(name)-rasterbar-$(VERSION) : $(type) : $(property-set) ] ;
return [ virtual-target.add-prefix-and-suffix $(name)-rasterbar : $(type) : $(property-set) ] ;
}
else
2009-04-02 23:21:44 +00:00
{
2020-08-10 17:41:46 +02:00
local name = [ virtual-target.add-prefix-and-suffix $(name)-rasterbar : $(type) : $(property-set) ] ;
return $(name).$(VERSION) ;
2009-04-02 23:21:44 +00:00
}
}
2017-10-07 15:26:46 +02:00
# the search path to pick up the openssl libraries from. This is the <search>
# property of those libraries
rule openssl-lib-path ( properties * )
{
local OPENSSL_LIB = [ feature.get-values <openssl-lib> : $(properties) ] ;
if <target-os>darwin in $(properties) && $(OPENSSL_LIB) = ""
{
# on macOS, default to pick up openssl from the homebrew installation
# brew install openssl
2021-03-14 16:16:24 +01:00
# homebrew on M1 Macs install to /opt/homebrew
OPENSSL_LIB = /opt/homebrew/opt/openssl/lib /usr/local/opt/openssl/lib ;
2017-10-07 15:26:46 +02:00
}
else if <target-os>windows in $(properties) && $(OPENSSL_LIB) = ""
{
2021-09-05 18:41:59 +00:00
# the de-facto windows installer is https://slproweb.com/products/Win32OpenSSL.html, which installs to c:\Program Files\OpenSSL-Win{32,64}.
# chocolatey appears to use this installer.
local address_model = [ feature.get-values <address-model> : $(properties) ] ;
OPENSSL_LIB += "C:/Program Files/OpenSSL-Win$(address_model)/lib" ;
OPENSSL_LIB += "C:/Program Files (x86)/OpenSSL-Win$(address_model)/lib" ;
2017-10-07 15:26:46 +02:00
}
local result ;
result += <search>$(OPENSSL_LIB) ;
return $(result) ;
}
# the include path to pick up openssl headers from. This is the
# usage-requirement for the openssl-related libraries
rule openssl-include-path ( properties * )
{
local OPENSSL_INCLUDE = [ feature.get-values <openssl-include> : $(properties) ] ;
if <target-os>darwin in $(properties) && $(OPENSSL_INCLUDE) = ""
{
# on macOS, default to pick up openssl from the homebrew installation
# brew install openssl
2021-03-14 16:16:24 +01:00
# homebrew on M1 Macs install to /opt/homebrew
OPENSSL_INCLUDE = /opt/homebrew/opt/openssl/include /usr/local/opt/openssl/include ;
2017-10-07 15:26:46 +02:00
}
else if <target-os>windows in $(properties) && $(OPENSSL_INCLUDE) = ""
{
2021-09-05 18:41:59 +00:00
# the de-facto windows installer is https://slproweb.com/products/Win32OpenSSL.html, which installs to c:\Program Files\OpenSSL-Win{32,64}.
# chocolatey appears to use this installer.
local address_model = [ feature.get-values <address-model> : $(properties) ] ;
OPENSSL_INCLUDE += "C:/Program Files/OpenSSL-Win$(address_model)/include" ;
OPENSSL_INCLUDE += "C:/Program Files (x86)/OpenSSL-Win$(address_model)/include" ;
2017-10-07 15:26:46 +02:00
}
local result ;
result += <include>$(OPENSSL_INCLUDE) ;
return $(result) ;
}
2020-04-20 09:36:51 +02:00
# the search path to pick up the gnutls libraries from. This is the <search>
# property of those libraries
rule gnutls-lib-path ( properties * )
{
local GNUTLS_LIB = [ feature.get-values <gnutls-lib> : $(properties) ] ;
if <target-os>darwin in $(properties) && $(GNUTLS_LIB) = ""
{
2021-11-28 11:38:48 +01:00
# on macOS, default to pick up openssl from the homebrew installation
# brew install openssl
# homebrew on M1 Macs install to /opt/homebrew
GNUTLS_LIB = /opt/homebrew/opt/gnutls/lib /usr/local/opt/gnutls/lib ;
2020-04-20 09:36:51 +02:00
}
local result ;
result += <search>$(GNUTLS_LIB) ;
return $(result) ;
}
# the include path to pick up gnutls headers from. This is the
# usage-requirement for the gnutls-related libraries
rule gnutls-include-path ( properties * )
{
local GNUTLS_INCLUDE = [ feature.get-values <gnutls-include> : $(properties) ] ;
if <target-os>darwin in $(properties) && $(GNUTLS_INCLUDE) = ""
{
2021-11-28 11:38:48 +01:00
# on macOS, default to pick up openssl from the homebrew installation
# brew install openssl
# homebrew on M1 Macs install to /opt/homebrew
GNUTLS_INCLUDE = /opt/homebrew/opt/gnutls/include /usr/local/opt/gnutls/include ;
2020-04-20 09:36:51 +02:00
}
local result ;
result += <include>$(GNUTLS_INCLUDE) ;
return $(result) ;
}
2019-12-09 08:45:04 -05:00
# the search path to pick up the wolfssl libraries from. This is the <search>
# property of those libraries
rule wolfssl-lib-path ( properties * )
{
local WOLFSSL_LIB = [ feature.get-values <wolfssl-lib> : $(properties) ] ;
if <target-os>linux in $(properties) && $(WOLFSSL_LIB) = ""
{
# on linux, default ./configure install path
WOLFSSL_LIB = /usr/local/lib ;
}
local result ;
result += <search>$(WOLFSSL_LIB) ;
return $(result) ;
}
# the include path to pick up wolfssl headers from. This is the
# usage-requirement for the wolfssl-related libraries
rule wolfssl-include-path ( properties * )
{
local WOLFSSL_INCLUDE = [ feature.get-values <wolfssl-include> : $(properties) ] ;
if <target-os>linux in $(properties) && $(WOLFSSL_INCLUDE) = ""
{
# on linux, default ./configure install path
WOLFSSL_INCLUDE = /usr/local/include ;
}
local result ;
result += <include>$(WOLFSSL_INCLUDE) ;
result += <include>$(WOLFSSL_INCLUDE)/wolfssl ;
return $(result) ;
}
2019-03-24 22:14:35 +01:00
path-constant blacklist-file : tools/sanitizer-blacklist.txt ;
2017-10-07 15:26:46 +02:00
feature openssl-lib : : free path ;
feature openssl-include : : free path ;
2020-04-20 09:36:51 +02:00
feature gnutls-lib : : free path ;
feature gnutls-include : : free path ;
2019-12-09 08:45:04 -05:00
feature wolfssl-lib : : free path ;
feature wolfssl-include : : free path ;
2019-09-14 19:31:31 +02:00
feature test-coverage : off on : composite propagated link-incompatible ;
2021-11-22 15:32:19 +01:00
feature.compose <test-coverage>on : <cxxflags>--coverage <linkflags>--coverage ;
2019-09-14 19:31:31 +02:00
2020-03-17 22:15:33 +01:00
feature predictive-pieces : on off : composite propagated ;
feature.compose <predictive-pieces>off : <define>TORRENT_DISABLE_PREDICTIVE_PIECES ;
2020-03-22 17:10:25 +01:00
feature share-mode : on off : composite propagated ;
feature.compose <share-mode>off : <define>TORRENT_DISABLE_SHARE_MODE ;
2020-03-14 20:32:14 +01:00
feature streaming : on off : composite propagated ;
feature.compose <streaming>off : <define>TORRENT_DISABLE_STREAMING ;
2020-03-19 23:37:09 +01:00
feature super-seeding : on off : composite propagated ;
feature.compose <super-seeding>off : <define>TORRENT_DISABLE_SUPERSEEDING ;
2020-03-14 20:32:14 +01:00
2012-07-31 16:53:37 +00:00
feature i2p : on off : composite propagated ;
feature.compose <i2p>on : <define>TORRENT_USE_I2P=1 ;
feature.compose <i2p>off : <define>TORRENT_USE_I2P=0 ;
2016-07-01 19:46:59 -04:00
feature asserts : off on production system : composite propagated ;
2016-06-27 22:28:51 -04:00
feature.compose <asserts>on : <define>TORRENT_USE_ASSERTS=1 ;
feature.compose <asserts>production : <define>TORRENT_USE_ASSERTS=1 <define>TORRENT_PRODUCTION_ASSERTS=1 ;
feature.compose <asserts>system : <define>TORRENT_USE_ASSERTS=1 <define>TORRENT_USE_SYSTEM_ASSERTS=1 ;
2010-05-06 02:18:08 +00:00
2020-05-15 22:37:22 -04:00
feature windows-version : vista win7 win10 xp : composite propagated ;
2010-12-01 05:47:18 +00:00
feature.compose <windows-version>vista : <define>_WIN32_WINNT=0x0600 ;
feature.compose <windows-version>win7 : <define>_WIN32_WINNT=0x0601 ;
2020-05-15 22:37:22 -04:00
feature.compose <windows-version>win10 : <define>_WIN32_WINNT=0x0A00 ;
2015-07-29 14:56:31 -04:00
feature.compose <windows-version>xp : <define>_WIN32_WINNT=0x0501 ;
2010-12-01 05:47:18 +00:00
2013-04-09 02:38:11 +00:00
feature extensions : on off : composite propagated link-incompatible ;
2013-12-20 06:38:51 +00:00
feature.compose <extensions>off : <define>TORRENT_DISABLE_EXTENSIONS ;
2013-04-09 02:38:11 +00:00
2010-11-28 01:47:30 +00:00
feature asio-debugging : off on : composite propagated link-incompatible ;
feature.compose <asio-debugging>on : <define>TORRENT_ASIO_DEBUGGING ;
2014-07-06 19:18:00 +00:00
feature picker-debugging : off on : composite propagated link-incompatible ;
feature.compose <picker-debugging>on : <define>TORRENT_DEBUG_REFCOUNTS ;
2019-02-19 20:05:26 +01:00
feature mmap-disk-io : on off : composite propagated ;
2020-01-31 21:41:54 +01:00
feature.compose <mmap-disk-io>off : <define>TORRENT_HAVE_MMAP=0 <define>TORRENT_HAVE_MAP_VIEW_OF_FILE=0 ;
2019-02-19 20:05:26 +01:00
2015-08-07 21:28:51 -04:00
feature simulator : off on : composite propagated link-incompatible ;
feature.compose <simulator>on : <define>TORRENT_BUILD_SIMULATOR ;
2016-07-01 19:46:59 -04:00
feature invariant-checks : off on full : composite propagated link-incompatible ;
feature.compose <invariant-checks>on : <define>TORRENT_USE_INVARIANT_CHECKS=1 ;
feature.compose <invariant-checks>full : <define>TORRENT_USE_INVARIANT_CHECKS=1 <define>TORRENT_EXPENSIVE_INVARIANT_CHECKS ;
2008-01-13 06:17:56 +00:00
2015-08-12 21:36:20 -04:00
feature utp-log : off on : composite propagated link-incompatible ;
2015-08-12 23:00:28 -04:00
feature.compose <utp-log>on : <define>TORRENT_UTP_LOG_ENABLE ;
2015-08-12 20:55:07 -04:00
2009-09-05 07:21:10 +00:00
feature simulate-slow-read : off on : composite propagated ;
feature.compose <simulate-slow-read>on : <define>TORRENT_SIMULATE_SLOW_READ ;
2022-10-09 07:59:26 +02:00
feature simulate-slow-write : off on : composite propagated ;
feature.compose <simulate-slow-write>on : <define>TORRENT_SIMULATE_SLOW_WRITE ;
2015-04-17 01:15:33 +00:00
feature logging : on off : composite propagated link-incompatible ;
feature.compose <logging>off : <define>TORRENT_DISABLE_LOGGING ;
2004-10-31 23:16:08 +00:00
2020-04-25 17:18:36 +02:00
feature alert-msg : on off : composite propagated link-incompatible ;
feature.compose <alert-msg>off : <define>TORRENT_DISABLE_ALERT_MSG ;
2015-05-16 19:29:49 +00:00
feature dht : on off : composite propagated link-incompatible ;
2013-04-09 01:04:43 +00:00
feature.compose <dht>off : <define>TORRENT_DISABLE_DHT ;
2004-02-04 11:00:29 +00:00
2014-12-29 16:50:22 +00:00
feature encryption : on off : composite propagated link-incompatible ;
2009-11-08 03:09:19 +00:00
feature.compose <encryption>off : <define>TORRENT_DISABLE_ENCRYPTION ;
2007-04-15 04:30:52 +00:00
2015-03-21 00:12:40 +00:00
feature mutable-torrents : on off : composite propagated link-incompatible ;
feature.compose <mutable-torrents>off : <define>TORRENT_DISABLE_MUTABLE_TORRENTS ;
2021-10-22 12:46:01 +02:00
feature crypto : openssl built-in wolfssl gnutls libcrypto gcrypt : composite propagated ;
2019-12-09 08:45:04 -05:00
feature.compose <crypto>openssl
: <define>TORRENT_USE_LIBCRYPTO
<define>TORRENT_USE_OPENSSL
<define>TORRENT_SSL_PEERS
<define>OPENSSL_NO_SSL2 ;
feature.compose <crypto>wolfssl
: <define>TORRENT_USE_WOLFSSL
<define>TORRENT_USE_LIBCRYPTO
<define>TORRENT_USE_OPENSSL
<define>OPENSSL_NO_SSL2
<define>BOOST_ASIO_USE_WOLFSSL
<define>OPENSSL_ALL
<define>WOLFSSL_SHA512
<define>WOLFSSL_NGINX
<define>WC_NO_HARDEN ;
2020-04-20 09:36:51 +02:00
feature.compose <crypto>gnutls
: <define>TORRENT_USE_GNUTLS
<define>TORRENT_SSL_PEERS ;
2016-06-23 13:20:35 -04:00
feature.compose <crypto>libcrypto : <define>TORRENT_USE_LIBCRYPTO ;
2017-07-13 23:42:56 -07:00
feature.compose <crypto>gcrypt : <define>TORRENT_USE_LIBGCRYPT ;
2016-06-23 13:20:35 -04:00
2017-07-12 00:34:48 -07:00
feature openssl-version : 1.1 pre1.1 : composite propagated ;
2008-08-03 15:14:08 +00:00
feature deprecated-functions : on off : composite propagated link-incompatible ;
feature.compose <deprecated-functions>off : <define>TORRENT_NO_DEPRECATE ;
2015-08-08 19:30:01 -04:00
feature boost-link : default static shared : propagated composite ;
2007-07-07 21:27:36 +00:00
2018-01-04 21:35:31 +01:00
# msvc enables debug iterators by default in debug builds whereas GCC and
# clang do not, that's why "default" is there. msvc has incorrect noexcept
# constructors on some containers when enabling debug iterators, so it's
# possible to turn them off
feature debug-iterators : default off on : composite propagated link-incompatible ;
2019-09-15 07:56:06 -06:00
feature.compose <debug-iterators>on : <define>_GLIBCXX_DEBUG <define>_GLIBCXX_DEBUG_PEDANTIC ;
2018-01-04 21:35:31 +01:00
feature.compose <debug-iterators>off : <define>_ITERATOR_DEBUG_LEVEL=0 ;
2007-08-03 06:13:26 +00:00
2008-12-20 23:30:53 +00:00
feature fpic : off on : composite propagated link-incompatible ;
2021-11-22 15:32:19 +01:00
feature.compose <fpic>on : <cxxflags>-fPIC ;
2008-12-20 23:30:53 +00:00
2014-07-06 19:18:00 +00:00
feature profile-calls : off on : composite propagated link-incompatible ;
feature.compose <profile-calls>on : <define>TORRENT_PROFILE_CALLS=1 ;
2012-03-18 23:31:04 +00:00
# controls whether or not to export some internal
# libtorrent functions. Used for unit testing
feature export-extra : off on : composite propagated ;
2016-07-03 11:42:57 -04:00
# export some internal libtorrent functions
# in order to me able to unit test them.
# this is off by default to keep the export
# symbol table reasonably small
feature.compose <export-extra>on : <define>TORRENT_EXPORT_EXTRA ;
2012-03-18 23:31:04 +00:00
2015-11-11 11:02:52 -08:00
lib advapi32 : : <name>advapi32 ;
lib user32 : : <name>user32 ;
2007-06-13 17:36:26 +00:00
lib shell32 : : <name>shell32 ;
lib gdi32 : : <name>gdi32 ;
2019-10-08 20:25:46 +03:00
lib bcrypt : : <name>bcrypt ;
2020-11-29 12:19:36 +01:00
lib crypt32 : : <name>crypt32 ;
2017-10-09 01:21:19 +02:00
lib z : : <link>shared <name>z ;
2017-10-08 18:45:48 +02:00
2018-11-23 17:14:18 +01:00
# openssl libraries on windows
2020-11-29 12:19:36 +01:00
# technically, crypt32 is not an OpenSSL dependency, but libtorrent needs it on
# windows to access the system certificate store, for authenticating trackers
alias ssl-deps : advapi32 user32 shell32 gdi32 crypt32 ;
2018-11-23 17:14:18 +01:00
# pre OpenSSL 1.1 windows
lib crypto : ssl-deps : <target-os>windows <openssl-version>pre1.1 <name>libeay32
<conditional>@openssl-lib-path : : <conditional>@openssl-include-path ;
lib ssl : ssl-deps : <target-os>windows <openssl-version>pre1.1 <name>ssleay32
<use>crypto <conditional>@openssl-lib-path : : <conditional>@openssl-include-path ;
# OpenSSL 1.1+ windows
2020-11-30 23:07:55 +01:00
lib crypto : ssl-deps : <target-os>windows <openssl-version>1.1 <name>libcrypto
2018-11-23 17:14:18 +01:00
<conditional>@openssl-lib-path : : <conditional>@openssl-include-path ;
2020-11-30 23:07:55 +01:00
lib ssl : ssl-deps : <target-os>windows <openssl-version>1.1 <name>libssl <use>crypto
2018-11-23 17:14:18 +01:00
<conditional>@openssl-lib-path : : <conditional>@openssl-include-path ;
# generic OpenSSL
lib crypto : : <name>crypto <use>z <conditional>@openssl-lib-path : :
<conditional>@openssl-include-path ;
lib ssl : : <name>ssl <use>crypto <conditional>@openssl-lib-path : :
<conditional>@openssl-include-path ;
2017-10-08 18:45:48 +02:00
2020-04-20 09:36:51 +02:00
lib gnutls : : <name>gnutls <conditional>@gnutls-lib-path : :
<conditional>@gnutls-include-path ;
2019-12-09 08:45:04 -05:00
lib wolfssl : : <name>wolfssl <conditional>@wolfssl-lib-path : :
<conditional>@wolfssl-include-path ;
2012-01-26 10:33:39 +00:00
lib dbghelp : : <name>dbghelp ;
2007-06-13 17:36:26 +00:00
2009-12-09 09:55:19 +00:00
# required for networking on beos
lib netkit : : <name>net <search>/boot/system/lib <link>shared ;
2011-07-20 05:14:25 +00:00
lib gcc : : <name>gcc <link>static ;
2009-12-09 09:55:19 +00:00
2019-12-08 13:43:27 -05:00
# gcrypt on linux/bsd etc.
2009-11-08 03:09:19 +00:00
lib gcrypt : : <name>gcrypt <link>shared <search>/opt/local/lib ;
2011-02-14 04:12:26 +00:00
lib dl : : <link>shared <name>dl ;
2007-06-13 17:36:26 +00:00
2009-11-02 01:10:05 +00:00
lib libsocket : : <use>libnsl <name>socket <link>shared <search>/usr/sfw/lib <link>shared ;
lib libnsl : : <name>nsl <link>shared <search>/usr/sfw/lib <link>shared ;
2018-02-04 00:57:54 +00:00
lib libnetwork : : <name>network <link>shared ;
2009-01-27 08:24:48 +00:00
2007-06-13 17:36:26 +00:00
# socket libraries on windows
2009-11-02 01:10:05 +00:00
lib wsock32 : : <name>wsock32 <link>shared ;
lib ws2_32 : : <name>ws2_32 <link>shared ;
2010-11-29 01:33:05 +00:00
lib iphlpapi : : <name>iphlpapi <link>shared ;
2007-06-13 17:36:26 +00:00
2003-10-22 23:00:57 +00:00
SOURCES =
2007-04-17 00:23:46 +00:00
alert
2013-04-09 02:38:11 +00:00
alert_manager
2015-09-18 00:23:45 -04:00
announce_entry
2007-12-30 23:30:14 +00:00
assert
2009-09-16 04:41:35 +00:00
bandwidth_limit
bandwidth_manager
bandwidth_queue_entry
2015-03-12 05:20:12 +00:00
bdecode
2016-04-20 07:50:57 -04:00
bitfield
2010-12-24 01:31:41 +00:00
bloom_filter
2011-08-13 23:01:38 +00:00
chained_buffer
2014-10-22 22:06:56 +00:00
choker
2015-02-28 19:51:15 +00:00
close_reason
2022-02-11 02:00:55 +01:00
copy_file
2015-04-26 18:46:45 +00:00
cpuid
2014-07-06 19:18:00 +00:00
crc32c
2008-05-14 05:29:42 +00:00
create_torrent
2020-09-16 10:38:58 +02:00
directory
2008-04-10 10:03:23 +00:00
disk_buffer_holder
2014-07-06 19:18:00 +00:00
disk_buffer_pool
2019-02-19 20:05:26 +01:00
disk_interface
2016-06-15 17:49:28 -07:00
disk_io_thread_pool
2016-12-29 09:55:17 -08:00
disabled_disk_io
2017-01-21 18:36:51 -05:00
disk_job_fence
2014-07-06 19:18:00 +00:00
disk_job_pool
2022-09-03 17:30:52 +02:00
drive_info
2007-04-17 00:23:46 +00:00
entry
2008-07-18 10:22:16 +00:00
error_code
2008-05-28 08:44:40 +00:00
file_storage
2007-04-17 00:23:46 +00:00
escape_string
2012-08-26 15:26:17 +00:00
string_util
2008-07-20 11:14:54 +00:00
file
2017-04-11 00:52:46 -04:00
path
2016-10-25 08:03:26 -04:00
fingerprint
2008-01-30 18:32:13 +00:00
gzip
2013-05-08 07:57:16 +00:00
hasher
2019-05-03 20:09:29 -07:00
hash_picker
2015-04-21 00:23:00 +00:00
hex
2007-04-17 00:23:46 +00:00
http_connection
2008-01-12 09:36:03 +00:00
http_parser
2007-04-17 00:23:46 +00:00
identify_client
ip_filter
2020-01-19 12:21:16 +01:00
ip_helpers
2016-11-07 04:40:09 -08:00
ip_notifier
2013-01-01 23:12:16 +00:00
ip_voter
2017-07-20 20:19:28 -07:00
listen_socket_handle
2015-04-24 06:06:41 +00:00
merkle
2020-05-04 13:10:13 +02:00
merkle_tree
2007-04-17 00:23:46 +00:00
peer_connection
2014-07-06 19:18:00 +00:00
platform_util
2007-04-17 00:23:46 +00:00
bt_peer_connection
2010-10-10 18:43:58 +00:00
web_connection_base
2007-04-17 00:23:46 +00:00
web_peer_connection
2008-12-30 03:54:07 +00:00
http_seed_connection
2015-07-01 21:13:26 -07:00
peer_connection_handle
2009-08-20 03:19:12 +00:00
i2p_stream
2007-04-25 18:26:35 +00:00
instantiate_connection
2007-04-17 00:23:46 +00:00
natpmp
2010-11-29 01:33:05 +00:00
packet_buffer
2007-04-17 00:23:46 +00:00
piece_picker
2014-10-26 07:34:31 +00:00
peer_list
2014-07-06 19:18:00 +00:00
proxy_base
2010-03-16 06:14:22 +00:00
puff
2011-02-26 07:55:51 +00:00
random
2015-12-15 00:03:43 -05:00
read_resume_data
2017-03-05 09:31:28 -05:00
write_resume_data
2014-11-23 06:14:47 +00:00
receive_buffer
2015-03-21 00:12:40 +00:00
resolve_links
2007-04-17 00:23:46 +00:00
session
2019-11-30 16:02:50 +01:00
session_params
2015-06-28 14:12:27 -07:00
session_handle
2007-04-17 00:23:46 +00:00
session_impl
2014-08-26 04:51:09 +00:00
session_call
2014-07-06 19:18:00 +00:00
settings_pack
2019-02-12 11:26:05 +01:00
sha1
2016-05-03 08:29:27 -04:00
sha1_hash
2017-08-01 09:34:33 -07:00
sha256
2009-09-16 03:46:36 +00:00
socket_io
2009-11-23 08:38:50 +00:00
socket_type
2007-04-25 18:26:35 +00:00
socks5_stream
2007-04-17 00:23:46 +00:00
stat
2017-01-11 00:42:10 -05:00
storage_utils
2007-04-17 00:23:46 +00:00
torrent
torrent_handle
torrent_info
2014-07-06 19:18:00 +00:00
torrent_peer
torrent_peer_allocator
2016-04-07 21:44:24 -04:00
torrent_status
2009-11-25 06:55:34 +00:00
time
2007-04-17 00:23:46 +00:00
tracker_manager
http_tracker_connection
udp_tracker_connection
2010-11-29 01:33:05 +00:00
timestamp_history
2007-12-09 04:15:24 +00:00
udp_socket
2007-04-17 00:23:46 +00:00
upnp
2012-03-20 03:53:07 +00:00
utf8
2010-11-29 01:33:05 +00:00
utp_socket_manager
utp_stream
2016-12-29 09:55:17 -08:00
file_view_pool
2007-04-17 00:23:46 +00:00
lsd
2007-09-09 23:52:34 +00:00
enum_net
2007-12-03 06:03:16 +00:00
magnet_uri
2008-05-17 14:19:34 +00:00
parse_url
2014-05-03 21:10:44 +00:00
xml_parse
2015-11-11 00:57:51 -05:00
version
2014-07-06 19:18:00 +00:00
peer_class
peer_class_set
part_file
stat_cache
request_blocks
session_stats
performance_counters
resolver
2015-01-06 08:08:49 +00:00
session_settings
2015-08-25 04:18:10 +02:00
proxy_settings
2015-06-28 22:47:11 -04:00
file_progress
2016-08-05 15:51:37 -04:00
ffs
2017-06-07 10:41:28 -04:00
add_torrent_params
2017-07-16 11:26:00 -07:00
peer_info
2017-07-23 08:13:07 -07:00
stack_allocator
2018-07-23 09:56:09 +02:00
generate_peer_id
2016-12-29 09:55:17 -08:00
mmap
2019-12-09 00:56:50 +01:00
mmap_disk_io
2022-02-07 03:29:03 +01:00
mmap_disk_job
2019-12-09 00:56:50 +01:00
mmap_storage
2016-12-29 09:55:17 -08:00
posix_disk_io
2020-11-15 15:16:42 +01:00
posix_part_file
2016-12-29 09:55:17 -08:00
posix_storage
2020-04-20 09:36:51 +02:00
ssl
2022-02-07 11:51:54 +01:00
truncate
2022-06-05 23:11:29 +02:00
load_torrent
2007-12-18 06:04:54 +00:00
# -- extensions --
ut_pex
ut_metadata
smart_ban
2006-09-01 03:06:00 +00:00
;
2006-08-01 15:27:08 +00:00
2006-09-01 03:06:00 +00:00
KADEMLIA_SOURCES =
2016-09-17 09:42:04 -04:00
dht_state
2015-09-08 16:12:54 -04:00
dht_storage
2009-04-02 23:21:44 +00:00
dht_tracker
2015-12-05 17:27:01 -08:00
msg
2009-04-02 23:21:44 +00:00
node
2015-03-16 04:38:28 +00:00
node_entry
2009-04-02 23:21:44 +00:00
refresh
rpc_manager
find_data
node_id
routing_table
traversal_algorithm
2014-07-06 19:18:00 +00:00
dos_blocker
2013-12-27 04:28:25 +00:00
get_peers
item
get_item
2015-09-22 14:10:57 -04:00
put_data
2016-08-29 20:28:42 -04:00
ed25519
2017-06-12 05:54:11 -04:00
sample_infohashes
2017-09-02 23:58:10 +02:00
dht_settings
2004-02-21 11:52:21 +00:00
;
2004-02-08 16:04:50 +00:00
2013-08-18 16:01:20 +00:00
ED25519_SOURCES =
add_scalar
fe
ge
key_exchange
keypair
sc
sign
verify
2019-02-16 11:48:54 +01:00
hasher512
sha512
2013-08-18 16:01:20 +00:00
;
2015-05-17 23:32:13 +00:00
local usage-requirements =
2006-09-01 03:06:00 +00:00
<include>./include
2008-05-20 09:45:55 +00:00
<include>./include/libtorrent
2006-09-01 03:06:00 +00:00
<variant>release:<define>NDEBUG
<define>_FILE_OFFSET_BITS=64
2010-11-29 01:33:05 +00:00
# enable cancel support in asio
<define>BOOST_ASIO_ENABLE_CANCELIO
2016-04-30 20:09:02 -04:00
# make sure asio uses std::chrono
<define>BOOST_ASIO_HAS_STD_CHRONO
2019-02-13 14:42:12 +01:00
<define>BOOST_ASIO_NO_DEPRECATED
2007-06-13 17:36:26 +00:00
<conditional>@linking
2007-09-01 04:08:39 +00:00
# msvc optimizations
2018-04-30 10:59:12 -04:00
<toolset>msvc,<variant>release:<linkflags>"/OPT:ICF=5"
<toolset>msvc,<variant>release:<linkflags>"/OPT:REF"
2015-04-18 02:33:39 +00:00
2016-05-17 09:24:06 -04:00
# disable bogus deprecation warnings on msvc8
2020-03-06 14:24:33 +01:00
<target-os>windows:<define>_SCL_SECURE_NO_DEPRECATE
<target-os>windows:<define>_CRT_SECURE_NO_DEPRECATE
2016-05-17 09:24:06 -04:00
2021-01-11 21:14:29 +01:00
<cxxflags>"$(CXXFLAGS:J= )"
2006-09-01 03:06:00 +00:00
;
2008-06-23 13:17:15 +00:00
project torrent ;
2007-06-13 17:36:26 +00:00
2008-06-23 13:17:15 +00:00
lib torrent
2007-06-13 01:48:24 +00:00
: # sources
2007-04-17 00:23:46 +00:00
src/$(SOURCES).cpp
2007-06-13 01:48:24 +00:00
: # requirements
<threading>multi
2015-04-26 00:51:44 +00:00
<define>TORRENT_BUILDING_LIBRARY
2007-06-13 01:48:24 +00:00
<link>shared:<define>TORRENT_BUILDING_SHARED
2014-07-06 19:18:00 +00:00
<define>BOOST_NO_DEPRECATED
2012-06-12 16:38:15 +00:00
<link>shared:<define>BOOST_SYSTEM_SOURCE
2012-04-15 04:00:58 +00:00
2013-04-09 01:04:43 +00:00
<dht>on:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp
2019-02-09 22:20:40 +01:00
<dht>on:<source>src/ed25519/$(ED25519_SOURCES).cpp
2013-08-18 16:01:20 +00:00
2007-06-13 17:36:26 +00:00
<conditional>@building
2015-04-18 02:33:39 +00:00
<conditional>@warnings
2012-02-16 06:14:19 +00:00
2015-10-07 18:41:40 -07:00
<tag>@tag
2007-06-13 01:48:24 +00:00
$(usage-requirements)
2021-01-11 21:14:29 +01:00
<linkflags>"$(LDFLAGS:J= )"
2007-06-13 01:48:24 +00:00
: # default build
2008-12-28 19:15:24 +00:00
<threading>multi
2021-04-10 13:06:10 +02:00
<cxxstd>14
2017-04-22 17:19:34 -07:00
<c++-template-depth>512
2007-06-13 01:48:24 +00:00
: # usage requirements
$(usage-requirements)
2012-06-03 05:13:08 +00:00
<link>shared:<define>TORRENT_LINKING_SHARED
2016-07-03 11:42:57 -04:00
2003-10-22 23:00:57 +00:00
;
2021-01-16 21:05:37 +01:00
# install rules
2021-05-29 22:34:23 +02:00
# return libdir and includedir
rule install-paths ( properties * )
2021-01-16 21:05:37 +01:00
{
import version ;
# package.paths was introduced in boost-1.70 (2018.02)
# however, boost build's versioning scheme changed in boost-1.71 to version
# 4.0
2022-07-17 17:29:18 -07:00
# so, if versions are 4.0+ we want to use package.paths, but if it's a year,
# say 2018, that means it's old and we use the fallback below. Any version <
# 1990 is considered the 4.0 and later numbering scheme.
if [ version.version-less 1990 0 : $(jam-version) ]
2021-01-16 21:05:37 +01:00
{
import option ;
import property ;
local prefix = [ option.get prefix : [ property.select <install-default-prefix> : $(properties) ] ] ;
prefix = $(prefix:G=) ;
# Or some likely defaults if neither is given.
if ! $(prefix)
{
if [ modules.peek : NT ] { prefix = C:\\$(package-name) ; }
else if [ modules.peek : UNIX ] { prefix = /usr/local ; }
}
2021-05-29 22:34:23 +02:00
return $(prefix)/lib $(prefix)/include ;
2021-01-16 21:05:37 +01:00
}
else
{
local p = [ package.paths libtorrent : $(properties) ] ;
2021-05-29 22:34:23 +02:00
return [ $(p).libdir ] [ $(p).includedir ] ;
2021-01-16 21:05:37 +01:00
}
2021-05-29 22:34:23 +02:00
}
rule generate-pkg-config ( properties * )
{
import property-set ;
import project ;
local l = [ project.target [ project.module-name "." ] ] ;
# this is the libtorrent library target
local t = [ $(l).find torrent : . ] ;
# these are the properties we're using to build it with
local props = [ $(t).generate [ property-set.create $(properties) ] ] ;
local libname = [ $(props[2]).name ] ;
props = $(props[1]) ;
p = [ install-paths $(properties) ] ;
2022-06-25 23:28:09 +02:00
local libdir = $(p[1]) ;
local includes = $(p[2]) ;
2021-01-16 21:05:37 +01:00
local defines ;
2021-02-23 13:21:39 +01:00
local shared_deps ;
local private_deps ;
for d in [ feature.expand $(properties) ] [ $(props).raw ] {
2021-01-16 21:05:37 +01:00
switch $(d)
{
case \<define\>TORRENT_* : {
d = [ SPLIT_BY_CHARACTERS $(d) : ">" ] ;
2021-02-23 13:21:39 +01:00
defines += $(d[2]) ;
2021-01-16 21:05:37 +01:00
}
case \<define\>BOOST_* : {
d = [ SPLIT_BY_CHARACTERS $(d) : ">" ] ;
2021-02-23 13:21:39 +01:00
defines += $(d[2]) ;
}
case \<include\>* : {
d = [ SPLIT_BY_CHARACTERS $(d) : ">" ] ;
d = $(d[2]) ;
if ( [ path.is-rooted $(d) ] )
{
includes += $(d) ;
}
}
case \<library\>* : {
d = [ SPLIT_BY_CHARACTERS $(d) : ">" ] ;
# this is the target
local t = $(d[2]) ;
if [ $(t).type ] = SHARED_LIB
{
local path = [ $(t).path ] ;
if $(path) != ""
{
libdir += $(path) ;
}
shared_deps += [ $(t).name ] ;
}
else if [ $(t).type ] = SEARCHED_LIB
{
local path = [ $(t).search ] ;
if $(path) != ""
{
libdir += $(path) ;
}
shared_deps += [ $(t).name ] ;
}
else if ( [ $(t).type ] = STATIC_LIB )
{
private_deps += [ $(t).name ] ;
}
2021-01-16 21:05:37 +01:00
}
}
}
2021-02-23 13:21:39 +01:00
# TODO: use $(libname) in future versions
2021-01-16 21:05:37 +01:00
local config = "Name: libtorrent-rasterbar"
"\nDescription: libtorrent is an open source C++ library implementing the BitTorrent protocol"
"\nURL: https://libtorrent.org"
2021-03-29 11:38:47 +02:00
"\nVersion: $(VERSION)"
2021-02-23 13:21:39 +01:00
"\nLibs:"
" -L\"$(libdir)\""
" -ltorrent-rasterbar"
" -l$(shared_deps)"
"\nLibs.private:"
" -L\"$(libdir)\""
" -l$(private_deps)"
"\nCflags:"
" -D$(defines)"
" -I\"$(includes)\""
2021-01-16 21:05:37 +01:00
"\n"
;
local dummy = @("libtorrent-rasterbar.pc":E=$(config)) ;
}
2021-05-29 20:30:41 +02:00
rule install-pkg-config ( target-name : data * : requirements * )
{
import stage ;
2021-07-25 16:14:11 -07:00
local p = [ install-paths $(requirements) ] ;
local libdir = $(p[0]) ;
2021-05-29 20:30:41 +02:00
2021-07-25 16:14:11 -07:00
stage.install $(target-name)
: $(data)
: $(requirements) <location>$(libdir)/pkgconfig
;
2021-05-29 20:30:41 +02:00
import project ;
2021-07-25 16:14:11 -07:00
local c = [ project.current ] ;
local project-module = [ $(c).project-module ] ;
module $(project-module)
{
explicit $(1) ;
}
2021-05-29 20:30:41 +02:00
}
2009-04-02 23:21:44 +00:00
headers = [ path.glob-tree include/libtorrent : *.hpp ] ;
2020-05-14 17:53:26 +02:00
package.install install-torrent-lib
2015-10-10 19:04:13 -04:00
: <install-source-root>libtorrent
2015-05-17 23:32:13 +00:00
:
: torrent
: $(headers)
;
2019-05-11 18:28:48 -06:00
2020-05-14 17:53:26 +02:00
package.install-data install-cmake-module
: cmake/Modules
: examples/cmake/FindLibtorrentRasterbar.cmake
;
2021-05-29 20:30:41 +02:00
install-pkg-config pkg-config-target : libtorrent-rasterbar.pc : <conditional>@generate-pkg-config ;
2021-01-16 21:05:37 +01:00
2021-05-29 20:30:41 +02:00
alias install : install-torrent-lib install-cmake-module pkg-config-target ;
2020-05-14 17:53:26 +02:00
explicit install ;
2021-01-16 21:05:37 +01:00
# testing headers targets
2019-05-11 18:28:48 -06:00
local header_targets ;
for local target in $(headers)
{
2020-08-31 12:43:20 +02:00
if ! [ path.basename $(target) ] in storage.hpp windows.hpp win_util.hpp win_crypto_provider.hpp torrent_impl.hpp io_service.hpp
2019-05-11 18:28:48 -06:00
{
# this cast tells boost build that the header files really *are* cpp files
# otherwise the object rule doesn't know which language to interpret them as
obj header-build/$(target).o : [ cast.cast _ cpp : $(target) ]
2020-06-14 16:39:21 +02:00
: <library>torrent <cxxflags>-fsyntax-only
2019-08-10 12:34:53 -07:00
: <cxxstd>14 ;
2019-05-11 18:28:48 -06:00
explicit header-build/$(target).o ;
header_targets += $(target) ;
}
}
alias check-headers : header-build/$(header_targets).o ;
explicit check-headers ;