# This Jamfile requires boost-build v2 to build. # The version shipped with boost 1.34.0 import modules ; import os ; import errors ; import feature : feature ; import package ; import virtual-target ; BOOST_ROOT = [ modules.peek : BOOST_ROOT ] ; CXXFLAGS = [ modules.peek : CXXFLAGS ] ; LDFLAGS = [ modules.peek : LDFLAGS ] ; ECHO "BOOST_ROOT =" $(BOOST_ROOT) ; ECHO "OS =" [ os.name ] ; if $(BOOST_ROOT) { use-project /boost : $(BOOST_ROOT) ; } VERSION = 0.16.0 ; # rule for linking the correct libraries depending # on features and target-os rule linking ( properties * ) { local result ; # openssl libraries, if enabled if openssl in $(properties) { # exclude gcc from a regular windows build to make mingw # link against the regular unix library name if windows in $(properties) { result += gdi32 ; } if windows in $(properties) && ! gcc in $(properties) { result += ssleay32 libeay32 advapi32 user32 shell32 ; } else { result += crypto ssl ; } } # gcrypt libraries, if enabled if gcrypt in $(properties) { # on mac os x, adding the /opt/local/include path # would include openssl headers incompatible with # the system library. Only add this include path # if we're not using openssl (which we're most # likely not if we're using libgcrypt) result += gcrypt /opt/local/include ; } if tommath in $(properties) { result += src/mpi.c ; } if shared in $(properties) { result += GeoIP ; } # socket functions on windows require winsock libraries if windows in $(properties) || cygwin in $(properties) { result += ws2_32 wsock32 WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0500 __USE_W32_SOCKETS WIN32 _WIN32 ; } if beos in $(properties) { result += netkit ; } if solaris in $(properties) { result += libsocket libnsl ; } if on in $(properties) && ( gcc in $(properties) || darwin in $(properties) ) { result += -fprofile-arcs -ftest-coverage -lgcov NDEBUG ; } # clock_gettime on linux requires librt if yes in $(properties) { result += librt ; } if yes in $(properties) { result += tcmalloc ; } if system in $(properties) { result += boost_system ; } if gcc in $(properties) && linux in $(properties) && debug in $(properties) { # for backtraces in assertion failures # which only works on ELF targets with gcc result += -export-dynamic -rdynamic ; } if source in $(properties) { if static in $(properties) { if gcc in $(properties) && shared in $(properties) { result += on ; } result += /boost/system//boost_system/static ; } else { result += /boost/system//boost_system/shared ; } result += $(BOOST_ROOT) BOOST_ALL_NO_LIB ; } if system in $(properties) { # on mac the boost headers are installed in # a directory that isn't automatically accessable result += /opt/local/include/boost-1_35 /opt/local/include ; } return $(result) ; } # rule for adding the right source files # depending on target-os and features rule building ( properties * ) { local result ; if ( linux in $(properties) || darwin in $(properties) ) && ( gcc in $(properties) || darwin in $(properties) ) { result += src/assert.cpp ; } if static in $(properties) { result += src/GeoIP.c ; } if off in $(properties) || tommath in $(properties) { result += src/sha1.cpp ; } if ! ( off in $(properties) ) { result += src/pe_crypto.cpp ; if linux in $(properties) { # linker library on linux, required when using openssl result += /usr/lib/libdl.so ; } } return $(result) ; } rule tag ( name : type ? : property-set ) { name = [ virtual-target.add-prefix-and-suffix $(name) : $(type) : $(property-set) ] ; if $(type) = SHARED_LIB && ( ! ( [ $(property-set).get ] in windows cygwin ) ) { name = $(name).$(VERSION) ; } return $(name) ; } feature tcmalloc : no yes : composite propagated link-incompatible ; feature timer : auto boost absolute performance clock system_time : composite propagated link-incompatible ; feature.compose boost : TORRENT_USE_BOOST_DATE_TIME=1 ; feature.compose absolute : TORRENT_USE_ABSOLUTE_TIME=1 ; feature.compose performance : TORRENT_USE_PERFORMANCE_TIMER=1 ; feature.compose clock : TORRENT_USE_CLOCK_GETTIME=1 ; feature.compose system_time : TORRENT_USE_SYSTEM_TIME=1 ; feature ipv6 : on off : composite propagated link-incompatible ; feature.compose off : TORRENT_USE_IPV6=0 ; feature need-librt : no yes : composite propagated link-incompatible ; feature full-stats : on off : composite propagated link-incompatible ; feature.compose off : TORRENT_DISABLE_FULL_STATS ; feature pool-allocators : on off : composite propagated link-incompatible ; feature.compose off : TORRENT_DISABLE_POOL_ALLOCATOR ; feature geoip : off static shared : composite propagated link-incompatible ; feature.compose off : TORRENT_DISABLE_GEO_IP ; feature bandwidth-limit-logging : off on : composite propagated link-incompatible ; feature.compose on : TORRENT_VERBOSE_BANDWIDTH_LIMIT ; feature invariant-checks : on off full : composite propagated link-incompatible ; feature.compose off : TORRENT_DISABLE_INVARIANT_CHECKS ; feature.compose full : TORRENT_EXPENSIVE_INVARIANT_CHECKS ; feature disk-stats : off on : composite propagated link-incompatible ; feature.compose on : TORRENT_DISK_STATS ; feature simulate-slow-read : off on : composite propagated ; feature.compose on : TORRENT_SIMULATE_SLOW_READ ; feature logging : none default errors verbose : composite propagated link-incompatible ; feature.compose default : TORRENT_LOGGING ; feature.compose errors : TORRENT_ERROR_LOGGING ; feature.compose verbose : TORRENT_VERBOSE_LOGGING ; feature dht-support : on off logging : composite propagated link-incompatible ; feature.compose off : TORRENT_DISABLE_DHT ; feature.compose logging : TORRENT_DHT_VERBOSE_LOGGING ; feature encryption : tommath off openssl gcrypt : composite propagated link-incompatible ; feature.compose openssl : TORRENT_USE_OPENSSL ; feature.compose gcrypt : TORRENT_USE_GCRYPT ; feature.compose tommath : TORRENT_USE_TOMMATH ; feature.compose off : TORRENT_DISABLE_ENCRYPTION ; feature resolve-countries : on off : composite propagated link-incompatible ; feature.compose off : TORRENT_DISABLE_RESOLVE_COUNTRIES ; feature character-set : unicode ansi : composite propagated link-incompatible ; feature.compose unicode : _UNICODE UNICODE ; feature zlib : shipped system : composite propagated link-incompatible ; feature deprecated-functions : on off : composite propagated link-incompatible ; feature.compose off : TORRENT_NO_DEPRECATE ; feature statistics : off on : composite propagated link-incompatible ; feature.compose on : TORRENT_STATS ; feature upnp-logging : off on : composite propagated link-incompatible ; feature.compose on : TORRENT_UPNP_LOGGING ; feature boost : system source : link-incompatible propagated ; feature boost-link : static shared : composite ; feature debug-iterators : off on : composite propagated link-incompatible ; feature.compose on : _SCL_SECURE=1 _GLIBCXX_DEBUG ; feature test-coverage : off on : composite propagated ; feature fpic : off on : composite propagated link-incompatible ; feature.compose on : -fPIC ; feature.compose off : darwin:-mdynamic-no-pic ; feature visibility : default hidden : composite propagated link-incompatible ; feature.compose hidden : -fvisibility=hidden ; # required for openssl on windows lib ssleay32 : : ssleay32 ; lib libeay32 : : libeay32 ; lib advapi32 : : Advapi32 ; lib user32 : : User32 ; lib shell32 : : shell32 ; lib gdi32 : : gdi32 ; # required for networking on beos lib netkit : : net /boot/system/lib shared ; local boost-library-search-path = /opt/local/lib /usr/lib /usr/local/lib /sw/lib ; lib boost_system : : darwin boost_system-mt $(boost-library-search-path) ; lib boost_system : : boost_system ; # openssl on linux/bsd/macos etc. lib gcrypt : : gcrypt shared /opt/local/lib ; lib crypto : : crypto shared ; lib ssl : : ssl shared crypto ; # time functions used on linux require librt lib librt : : rt shared ; lib libsocket : : libnsl socket shared /usr/sfw/lib shared ; lib libnsl : : nsl shared /usr/sfw/lib shared ; lib tcmalloc : : tcmalloc shared ; # libz lib zlib-target : : z shared ; # GeoIP shared library lib GeoIP : : GeoIP shared ; # socket libraries on windows lib wsock32 : : wsock32 shared ; lib ws2_32 : : ws2_32 shared ; SOURCES = alert allocator assert bandwidth_limit bandwidth_manager bandwidth_queue_entry connection_queue create_torrent disk_buffer_holder entry error_code file_storage lazy_bdecode escape_string file gzip http_connection http_stream http_parser identify_client ip_filter peer_connection bt_peer_connection web_peer_connection http_seed_connection i2p_stream instantiate_connection natpmp piece_picker policy session session_impl socket_io socket_type socks5_stream stat storage torrent torrent_handle torrent_info time tracker_manager http_tracker_connection udp_tracker_connection sha1 udp_socket upnp logger file_pool lsd disk_io_thread enum_net broadcast_socket magnet_uri parse_url ConvertUTF # -- extensions -- metadata_transfer ut_pex ut_metadata lt_trackers smart_ban ; KADEMLIA_SOURCES = dht_tracker node refresh rpc_manager find_data node_id routing_table traversal_algorithm ; ZLIB_SOURCES = adler32 compress crc32 deflate gzio infback inffast inflate inftrees trees uncompr zutil ; local usage-requirements = ./include ./include/libtorrent /usr/sfw/include shipped:./zlib release:NDEBUG debug:TORRENT_DEBUG _FILE_OFFSET_BITS=64 BOOST_EXCEPTION_DISABLE @linking system:zlib-target # these compiler settings just makes the compiler standard conforming msvc:/Zc:wchar_t msvc:/Zc:forScope # disable bogus deprecation warnings on msvc8 msvc:_SCL_SECURE_NO_DEPRECATE msvc:_CRT_SECURE_NO_DEPRECATE # msvc optimizations msvc,release:/OPT:ICF=5 msvc,release:/OPT:REF # disable warning C4503: decorated name length exceeded, name was truncated msvc:/wd4503 # disable warning C4275: non-dll interface class 'x' used as base for dll-interface struct 'y' msvc:/wd4275 # disable warning C4251: 'x' needs to have dll-interface to be used by clients of class 'y' msvc:/wd4251 # disable some warnings for gcc gcc:-fno-strict-aliasing gcc:-Wno-missing-braces system:$(CXXFLAGS) system:$(LDFLAGS) # this works around a bug in asio in boost-1.39 BOOST_ASIO_HASH_MAP_BUCKETS=1021 @tag ; project torrent ; lib torrent : # sources src/$(SOURCES).cpp : # requirements BOOST_THREAD_USE_LIB multi shared:TORRENT_BUILDING_SHARED on:src/kademlia/$(KADEMLIA_SOURCES).cpp logging:src/kademlia/$(KADEMLIA_SOURCES).cpp shipped:zlib/$(ZLIB_SOURCES).c @building system:$(CXXFLAGS) $(usage-requirements) : # default build static multi : # usage requirements $(usage-requirements) ; headers = [ path.glob-tree include/libtorrent : *.hpp ] ; package.install install : libtorrent libtorrent on : : torrent : $(headers) ;