diff --git a/fix-build-against-boost-1.66.patch b/fix-build-against-boost-1.66.patch new file mode 100644 index 0000000..8dc740e --- /dev/null +++ b/fix-build-against-boost-1.66.patch @@ -0,0 +1,298 @@ +From d1a63cd781e79e1e3792a258c0bc7f9455f2272f Mon Sep 17 00:00:00 2001 +From: arvidn +Date: Thu, 14 Dec 2017 01:37:27 +0100 +Subject: [PATCH] fix build against boost-1.66, specifically the boost.asio + changes + +diff --git a/include/libtorrent/proxy_base.hpp b/include/libtorrent/proxy_base.hpp +index 00246af76e..7e8ab32930 100644 +--- a/include/libtorrent/proxy_base.hpp ++++ b/include/libtorrent/proxy_base.hpp +@@ -66,6 +66,11 @@ class proxy_base : boost::noncopyable + m_port = port; + } + ++#if BOOST_VERSION >= 106600 ++ typedef tcp::socket::executor_type executor_type; ++ executor_type get_executor() { return m_sock.get_executor(); } ++#endif ++ + template + void async_read_some(Mutable_Buffers const& buffers, Handler const& handler) + { +@@ -122,6 +127,18 @@ class proxy_base : boost::noncopyable + m_sock.async_write_some(buffers, handler); + } + ++#ifndef BOOST_NO_EXCEPTIONS ++ void non_blocking(bool b) ++ { ++ m_sock.non_blocking(b); ++ } ++#endif ++ ++ error_code non_blocking(bool b, error_code& ec) ++ { ++ return m_sock.non_blocking(b, ec); ++ } ++ + #ifndef BOOST_NO_EXCEPTIONS + template + void set_option(SettableSocketOption const& opt) +diff --git a/include/libtorrent/socket_type.hpp b/include/libtorrent/socket_type.hpp +index 0b58159715..884a86e684 100644 +--- a/include/libtorrent/socket_type.hpp ++++ b/include/libtorrent/socket_type.hpp +@@ -267,6 +267,14 @@ namespace libtorrent + error_code set_option(SettableSocketOption const& opt, error_code& ec) + { TORRENT_SOCKTYPE_FORWARD_RET(set_option(opt, ec), ec) } + ++ void non_blocking(bool b, error_code& ec) ++ { TORRENT_SOCKTYPE_FORWARD(non_blocking(b, ec)) } ++ ++#ifndef BOOST_NO_EXCEPTIONS ++ void non_blocking(bool b) ++ { TORRENT_SOCKTYPE_FORWARD(non_blocking(b)) } ++#endif ++ + #ifndef BOOST_NO_EXCEPTIONS + template + void get_option(GettableSocketOption& opt) +diff --git a/include/libtorrent/ssl_stream.hpp b/include/libtorrent/ssl_stream.hpp +index 48fe111289..a18416c723 100644 +--- a/include/libtorrent/ssl_stream.hpp ++++ b/include/libtorrent/ssl_stream.hpp +@@ -85,6 +85,10 @@ class ssl_stream + typedef typename Stream::lowest_layer_type lowest_layer_type; + typedef typename Stream::endpoint_type endpoint_type; + typedef typename Stream::protocol_type protocol_type; ++#if BOOST_VERSION >= 106600 ++ typedef typename sock_type::executor_type executor_type; ++ executor_type get_executor() { return m_sock.get_executor(); } ++#endif + + void set_host_name(std::string name) + { +@@ -204,6 +208,13 @@ class ssl_stream + m_sock.next_layer().io_control(ioc, ec); + } + ++#ifndef BOOST_NO_EXCEPTIONS ++ void non_blocking(bool b) { m_sock.next_layer().non_blocking(b); } ++#endif ++ ++ error_code non_blocking(bool b, error_code& ec) ++ { return m_sock.next_layer().non_blocking(b, ec); } ++ + template + void async_write_some(Const_Buffers const& buffers, Handler const& handler) + { +diff --git a/include/libtorrent/utp_stream.hpp b/include/libtorrent/utp_stream.hpp +index ede524e2e6..896c0365e0 100644 +--- a/include/libtorrent/utp_stream.hpp ++++ b/include/libtorrent/utp_stream.hpp +@@ -201,6 +201,11 @@ class TORRENT_EXTRA_EXPORT utp_stream + typedef tcp::socket::endpoint_type endpoint_type; + typedef tcp::socket::protocol_type protocol_type; + ++#if BOOST_VERSION >= 106600 ++ typedef tcp::socket::executor_type executor_type; ++ executor_type get_executor() { return m_io_service.get_executor(); } ++#endif ++ + explicit utp_stream(io_service& io_service); + ~utp_stream(); + +@@ -218,6 +223,12 @@ class TORRENT_EXTRA_EXPORT utp_stream + template + void io_control(IO_Control_Command&, error_code&) {} + ++#ifndef BOOST_NO_EXCEPTIONS ++ void non_blocking(bool) {} ++#endif ++ ++ error_code non_blocking(bool, error_code&) { return error_code(); } ++ + #ifndef BOOST_NO_EXCEPTIONS + void bind(endpoint_type const& /*endpoint*/) {} + #endif +@@ -330,8 +341,13 @@ class TORRENT_EXTRA_EXPORT utp_stream + return; + } + std::size_t bytes_added = 0; ++#if BOOST_VERSION >= 106600 ++ for (auto i = buffer_sequence_begin(buffers) ++ , end(buffer_sequence_end(buffers)); i != end; ++i) ++#else + for (typename Mutable_Buffers::const_iterator i = buffers.begin() + , end(buffers.end()); i != end; ++i) ++#endif + { + if (buffer_size(*i) == 0) continue; + using boost::asio::buffer_cast; +@@ -401,8 +417,13 @@ class TORRENT_EXTRA_EXPORT utp_stream + size_t buf_size = 0; + #endif + ++#if BOOST_VERSION >= 106600 ++ for (auto i = buffer_sequence_begin(buffers) ++ , end(buffer_sequence_end(buffers)); i != end; ++i) ++#else + for (typename Mutable_Buffers::const_iterator i = buffers.begin() + , end(buffers.end()); i != end; ++i) ++#endif + { + using boost::asio::buffer_cast; + using boost::asio::buffer_size; +@@ -466,8 +487,13 @@ class TORRENT_EXTRA_EXPORT utp_stream + } + + std::size_t bytes_added = 0; ++#if BOOST_VERSION >= 106600 ++ for (auto i = buffer_sequence_begin(buffers) ++ , end(buffer_sequence_end(buffers)); i != end; ++i) ++#else + for (typename Const_Buffers::const_iterator i = buffers.begin() + , end(buffers.end()); i != end; ++i) ++#endif + { + if (buffer_size(*i) == 0) continue; + using boost::asio::buffer_cast; +diff --git a/src/http_connection.cpp b/src/http_connection.cpp +index a099973f99..7efb4131b7 100644 +--- a/src/http_connection.cpp ++++ b/src/http_connection.cpp +@@ -330,8 +330,7 @@ void http_connection::start(std::string const& hostname, int port + { + if (m_ssl_ctx == 0) + { +- m_ssl_ctx = new (std::nothrow) ssl::context( +- m_timer.get_io_service(), ssl::context::sslv23_client); ++ m_ssl_ctx = new (std::nothrow) ssl::context(ssl::context::sslv23_client); + if (m_ssl_ctx) + { + m_own_ssl_context = true; +diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp +index 1c94fb278f..10b8e1a57c 100644 +--- a/src/peer_connection.cpp ++++ b/src/peer_connection.cpp +@@ -309,9 +309,8 @@ namespace libtorrent + + if (!m_outgoing) + { +- tcp::socket::non_blocking_io ioc(true); + error_code ec; +- m_socket->io_control(ioc, ec); ++ m_socket->non_blocking(true, ec); + if (ec) + { + disconnect(ec, op_iocontrol); +@@ -6406,11 +6405,10 @@ namespace libtorrent + + // set the socket to non-blocking, so that we can + // read the entire buffer on each read event we get +- tcp::socket::non_blocking_io ioc(true); + #ifndef TORRENT_DISABLE_LOGGING + peer_log(peer_log_alert::info, "SET_NON_BLOCKING"); + #endif +- m_socket->io_control(ioc, ec); ++ m_socket->non_blocking(true, ec); + if (ec) + { + disconnect(ec, op_iocontrol); +diff --git a/src/session_impl.cpp b/src/session_impl.cpp +index 043d791fef..88718441bd 100644 +--- a/src/session_impl.cpp ++++ b/src/session_impl.cpp +@@ -346,7 +346,7 @@ namespace aux { + #endif + m_io_service(ios) + #ifdef TORRENT_USE_OPENSSL +- , m_ssl_ctx(m_io_service, boost::asio::ssl::context::sslv23) ++ , m_ssl_ctx(boost::asio::ssl::context::sslv23) + #endif + , m_alerts(m_settings.get_int(settings_pack::alert_queue_size), alert::all_categories) + #ifndef TORRENT_NO_DEPRECATE +diff --git a/src/torrent.cpp b/src/torrent.cpp +index 2b6bae7446..0795b1d104 100644 +--- a/src/torrent.cpp ++++ b/src/torrent.cpp +@@ -1702,7 +1702,7 @@ namespace libtorrent + // create the SSL context for this torrent. We need to + // inject the root certificate, and no other, to + // verify other peers against +- boost::shared_ptr ctx = boost::make_shared(boost::ref(m_ses.get_io_service()), context::sslv23); ++ boost::shared_ptr ctx = boost::make_shared(context::sslv23); + + if (!ctx) + { +@@ -1739,7 +1739,7 @@ namespace libtorrent + return; + } + +- SSL_CTX* ssl_ctx = ctx->impl(); ++ SSL_CTX* ssl_ctx = ctx->native_handle(); + // create a new x.509 certificate store + X509_STORE* cert_store = X509_STORE_new(); + if (!cert_store) +diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp +index d2e6ae3b80..551412c659 100644 +--- a/src/udp_socket.cpp ++++ b/src/udp_socket.cpp +@@ -806,8 +806,7 @@ void udp_socket::bind(udp::endpoint const& ep, error_code& ec) + + m_ipv4_sock.bind(ep, ec); + if (ec) return; +- udp::socket::non_blocking_io ioc(true); +- m_ipv4_sock.io_control(ioc, ec); ++ m_ipv4_sock.non_blocking(true, ec); + if (ec) return; + setup_read(&m_ipv4_sock); + } +@@ -837,8 +836,7 @@ void udp_socket::bind(udp::endpoint const& ep, error_code& ec) + , boost::system::generic_category())) + { + if (ec) return; +- udp::socket::non_blocking_io ioc(true); +- m_ipv6_sock.io_control(ioc, ec); ++ m_ipv6_sock.non_blocking(true, ec); + if (ec) return; + setup_read(&m_ipv6_sock); + } +diff --git a/test/test_ssl.cpp b/test/test_ssl.cpp +index 2903332dd2..679780b1b1 100644 +--- a/test/test_ssl.cpp ++++ b/test/test_ssl.cpp +@@ -363,7 +363,7 @@ bool try_connect(libtorrent::session& ses1, int port + // create the SSL context for this torrent. We need to + // inject the root certificate, and no other, to + // verify other peers against +- context ctx(ios, context::sslv23); ++ context ctx(context::sslv23); + + ctx.set_options(context::default_workarounds + | boost::asio::ssl::context::no_sslv2 + +From f42b63c7ea82173837920d8712d2891cc3ecb6c2 Mon Sep 17 00:00:00 2001 +From: arvidn +Date: Tue, 28 Nov 2017 23:57:38 +0100 +Subject: [PATCH] update io_service forward declaration to be boost-1.66 + compatible + +diff --git a/include/libtorrent/io_service_fwd.hpp b/include/libtorrent/io_service_fwd.hpp +index c14997d82e..398c91216f 100644 +--- a/include/libtorrent/io_service_fwd.hpp ++++ b/include/libtorrent/io_service_fwd.hpp +@@ -54,7 +54,12 @@ namespace sim { namespace asio { + #endif + + namespace boost { namespace asio { ++#if BOOST_VERSION < 106600 + class io_service; ++#else ++ class io_context; ++ typedef io_context io_service; ++#endif + }} + + namespace libtorrent diff --git a/libtorrent-rasterbar.changes b/libtorrent-rasterbar.changes index bf5613d..7423136 100644 --- a/libtorrent-rasterbar.changes +++ b/libtorrent-rasterbar.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Sat Dec 30 13:59:54 UTC 2017 - wbauer@tmo.at + +- Add fix-build-against-boost-1.66.patch to fix build with the + latest boost in Factory + ------------------------------------------------------------------- Sat Oct 21 19:05:10 UTC 2017 - sor.alexei@meowr.ru diff --git a/libtorrent-rasterbar.spec b/libtorrent-rasterbar.spec index 4bdcf76..43821b0 100644 --- a/libtorrent-rasterbar.spec +++ b/libtorrent-rasterbar.spec @@ -29,6 +29,8 @@ License: BSD-3-Clause Group: Development/Libraries/C and C++ Url: http://libtorrent.org/ Source: https://github.com/arvidn/%{_name}/releases/download/%{_name}-%{_version}/%{name}-%{version}.tar.gz +# PATCH-FIX-UPSTREAM fix-build-against-boost-1.66.patch -- fix build with latest boost in Factory +Patch: fix-build-against-boost-1.66.patch BuildRequires: gcc-c++ BuildRequires: pkgconfig BuildRequires: python-devel @@ -137,6 +139,7 @@ Documentation for the libtorrent-rasterbar package. %prep %setup -q +%patch -p1 %build export CFLAGS="%{optflags} -fno-strict-aliasing"