[arch-commits] Commit in wt/repos/community-x86_64 (4 files)

Sven-Hendrik Haase svenstaro at archlinux.org
Sun May 20 21:42:20 UTC 2018


    Date: Sunday, May 20, 2018 @ 21:42:19
  Author: svenstaro
Revision: 325660

archrelease: copy trunk to community-x86_64

Added:
  wt/repos/community-x86_64/960e8d017b264710e344c63f9feb6ea1fa593eeb.patch
    (from rev 325659, wt/trunk/960e8d017b264710e344c63f9feb6ea1fa593eeb.patch)
  wt/repos/community-x86_64/PKGBUILD
    (from rev 325659, wt/trunk/PKGBUILD)
Deleted:
  wt/repos/community-x86_64/960e8d017b264710e344c63f9feb6ea1fa593eeb.patch
  wt/repos/community-x86_64/PKGBUILD

------------------------------------------------+
 960e8d017b264710e344c63f9feb6ea1fa593eeb.patch | 1276 +++++++++++------------
 PKGBUILD                                       |  108 -
 2 files changed, 688 insertions(+), 696 deletions(-)

Deleted: 960e8d017b264710e344c63f9feb6ea1fa593eeb.patch
===================================================================
--- 960e8d017b264710e344c63f9feb6ea1fa593eeb.patch	2018-05-20 21:42:11 UTC (rev 325659)
+++ 960e8d017b264710e344c63f9feb6ea1fa593eeb.patch	2018-05-20 21:42:19 UTC (rev 325660)
@@ -1,638 +0,0 @@
-From 960e8d017b264710e344c63f9feb6ea1fa593eeb Mon Sep 17 00:00:00 2001
-From: Roel Standaert <roel at emweb.be>
-Date: Tue, 19 Dec 2017 17:33:41 +0100
-Subject: [PATCH] Several changes:
-
- - Compatibility with Boost 1.66 (asio changes)
- - WDialog: Document that autofocus is enabled by default, and don't change focus if it was set explicitly
- - Fix findById
- - WWebWidget: Avoid copy of children vector
- - Json: Document headers to include for Wt::Json::parse() and Wt::Json::serialize()
- - <num-threads> does not exist anymore as a child of <connector-fcgi> or <connector-isapi>
----
- examples/filetreetable/CMakeLists.txt |  1 +
- examples/gitmodel/CMakeLists.txt      |  2 +-
- examples/wt-homepage/CMakeLists.txt   |  2 +-
- src/Wt/AsioWrapper/strand.hpp         | 19 +++++++++++++++++
- src/Wt/Http/Client.C                  |  8 ++++++-
- src/Wt/Http/Client.h                  |  5 +++++
- src/Wt/Json/Value.h                   |  5 ++++-
- src/Wt/WDialog.C                      |  6 ++++--
- src/Wt/WDialog.h                      |  3 +++
- src/Wt/WWebWidget.C                   | 12 ++++++++---
- src/http/Connection.C                 | 39 +++++++++++++++++++++--------------
- src/http/Connection.h                 |  8 +++++--
- src/http/Reply.C                      |  3 ++-
- src/http/Server.C                     |  4 ++++
- src/http/Server.h                     |  2 +-
- src/http/SessionProcess.C             |  5 +++++
- src/http/SslConnection.C              | 16 +++++++-------
- src/http/TcpConnection.C              | 18 ++++++++--------
- src/web/Configuration.C               |  4 ----
- 19 files changed, 113 insertions(+), 49 deletions(-)
-
-diff --git a/examples/filetreetable/CMakeLists.txt b/examples/filetreetable/CMakeLists.txt
-index 4265b9b7..c0c94100 100644
---- a/examples/filetreetable/CMakeLists.txt
-+++ b/examples/filetreetable/CMakeLists.txt
-@@ -10,6 +10,7 @@ ELSE(NOT BOOST_FS_LIB)
- 
-   TARGET_LINK_LIBRARIES(filetreetable.wt
-     ${BOOST_FS_LIB}
-+    ${BOOST_SYSTEM_LIB}
-   )
- 
-   INCLUDE_DIRECTORIES(${WT_SOURCE_DIR}/src)
-diff --git a/examples/gitmodel/CMakeLists.txt b/examples/gitmodel/CMakeLists.txt
-index 9b124c98..ed557d1f 100644
---- a/examples/gitmodel/CMakeLists.txt
-+++ b/examples/gitmodel/CMakeLists.txt
-@@ -7,7 +7,7 @@ IF(BOOST_FS_LIB)
-     ../wt-homepage/SourceView.C
-     GitView.C
-   )
--  TARGET_LINK_LIBRARIES(gitview.wt ${BOOST_FS_LIB})
-+  TARGET_LINK_LIBRARIES(gitview.wt ${BOOST_FS_LIB} ${BOOST_SYSTEM_LIB})
- 
-   INCLUDE_DIRECTORIES(
-     ${WT_SOURCE_DIR}/src
-diff --git a/examples/wt-homepage/CMakeLists.txt b/examples/wt-homepage/CMakeLists.txt
-index b60e7c5f..513bc570 100644
---- a/examples/wt-homepage/CMakeLists.txt
-+++ b/examples/wt-homepage/CMakeLists.txt
-@@ -34,7 +34,7 @@ ENDIF(WT_EMWEB_BUILD)
- 
- WT_ADD_EXAMPLE(Home.wt ${SRC})
- 
--TARGET_LINK_LIBRARIES(Home.wt ${EXAMPLES_DBO_LIBS} ${BOOST_FS_LIB})
-+TARGET_LINK_LIBRARIES(Home.wt ${EXAMPLES_DBO_LIBS} ${BOOST_FS_LIB} ${BOOST_SYSTEM_LIB})
- 
- # Test whether crypt(3) is provided by libc. If it's not, check if
- # libcrypt exists and if it provides crypt(3).
-diff --git a/src/Wt/AsioWrapper/strand.hpp b/src/Wt/AsioWrapper/strand.hpp
-index 0c3a201f..9ddd8d1b 100644
---- a/src/Wt/AsioWrapper/strand.hpp
-+++ b/src/Wt/AsioWrapper/strand.hpp
-@@ -12,10 +12,29 @@
- #ifdef WT_ASIO_IS_BOOST_ASIO
- 
- #include <boost/asio/strand.hpp>
-+namespace Wt {
-+  namespace AsioWrapper {
-+#if BOOST_VERSION >= 106600
-+    using strand = boost::asio::io_context::strand;
-+#else
-+    using strand = boost::asio::strand;
-+#endif
-+  }
-+}
- 
- #else // WT_ASIO_IS_STANDALONE_ASIO
- 
-+#include <asio/version.hpp>
- #include <asio/strand.hpp>
-+namespace Wt {
-+  namespace AsioWrapper {
-+#if ASIO_VERSION >= 101100
-+    using strand = asio::io_service::strand;
-+#else
-+    using strand = asio::strand;
-+#endif
-+  }
-+}
- 
- #endif // WT_ASIO_IS_BOOST_ASIO
- 
-diff --git a/src/Wt/Http/Client.C b/src/Wt/Http/Client.C
-index 85230d10..6bb21a95 100644
---- a/src/Wt/Http/Client.C
-+++ b/src/Wt/Http/Client.C
-@@ -642,7 +642,7 @@ private:
- 
- protected:
-   asio::io_service& ioService_;
--  asio::strand strand_;
-+  AsioWrapper::strand strand_;
-   tcp::resolver resolver_;
-   asio::streambuf requestBuf_;
-   asio::streambuf responseBuf_;
-@@ -929,8 +929,14 @@ bool Client::request(Http::Method method, const std::string& url,
- 
- #ifdef WT_WITH_SSL
-   } else if (parsedUrl.protocol == "https") {
-+#if defined(WT_ASIO_IS_BOOST_ASIO) && BOOST_VERSION >= 106600
-+    asio::ssl::context context(asio::ssl::context::tls);
-+#elif defined(WT_ASIO_IS_STANDALONE_ASIO) && ASIO_VERSION >= 101100
-+    asio::ssl::context context(asio::ssl::context::sslv23);
-+#else
-     asio::ssl::context context
-       (*ioService, asio::ssl::context::sslv23);
-+#endif
-     long sslOptions = asio::ssl::context::no_sslv2 | asio::ssl::context::no_sslv3;
-     context.set_options(sslOptions);
- 
-diff --git a/src/Wt/Http/Client.h b/src/Wt/Http/Client.h
-index f3c7169a..77946867 100644
---- a/src/Wt/Http/Client.h
-+++ b/src/Wt/Http/Client.h
-@@ -23,7 +23,12 @@
- #ifdef WT_ASIO_IS_BOOST_ASIO
- namespace boost {
-   namespace asio {
-+#if BOOST_VERSION >= 106600
-+    class io_context;
-+    typedef io_context io_service;
-+#else
-     class io_service;
-+#endif
-   }
- }
- #else // WT_ASIO_IS_STANDALONE_ASIO
-diff --git a/src/Wt/Json/Value.h b/src/Wt/Json/Value.h
-index 948277fa..0b0bc0d7 100644
---- a/src/Wt/Json/Value.h
-+++ b/src/Wt/Json/Value.h
-@@ -23,7 +23,7 @@ class Array;
-  *  \brief A JSON representation and parsing library.
-  *
-  * The JSON library contains data types to represent a JSON data
-- * structure (Value, Object and Array), and a JSON parser.
-+ * structure (Value, Object and Array), a JSON parser, and a JSON serializer.
-  *
-  * Usage example:
-  * \code
-@@ -39,6 +39,9 @@ class Array;
-  * bool b = result.get("b");
-  * std::cerr << "a: " << s << ", b: " << b << std::endl; // a: That's great, b: true
-  * \endcode
-+ *
-+ * Include the <Wt/Json/Parser.h> header for Wt::Json::parse(), and
-+ * the <Wt/Json/Serializer.h> header for Wt::Json::serialize().
-  */
- 
- /*! \brief Enumeration for the type of a JSON value.
-diff --git a/src/Wt/WDialog.C b/src/Wt/WDialog.C
-index 65ba51d7..31bd88b0 100644
---- a/src/Wt/WDialog.C
-+++ b/src/Wt/WDialog.C
-@@ -436,8 +436,10 @@ void WDialog::render(WFlags<RenderFlag> flags)
-   if (!isModal())
-     impl_->mouseWentDown().connect(this, &WDialog::bringToFront);
- 
--  if ( flags.test(RenderFlag::Full) && autoFocus_)
--    impl_->setFirstFocus();
-+  if ( flags.test(RenderFlag::Full) && autoFocus_) {
-+    if (!impl_->findById(Wt::WApplication::instance()->focus()))
-+      impl_->setFirstFocus();
-+  }
- 
-   WPopupWidget::render(flags);
- }
-diff --git a/src/Wt/WDialog.h b/src/Wt/WDialog.h
-index 810d6945..967087c8 100644
---- a/src/Wt/WDialog.h
-+++ b/src/Wt/WDialog.h
-@@ -337,6 +337,9 @@ class WT_API WDialog : public WPopupWidget
-   bool closable() const { return closeIcon_ != nullptr; }
- 
-   /*! \brief Set focus on the first widget in the dialog.
-+   *
-+   * Autofocus is enabled by default. If a widget inside of
-+   * this dialog already has focus, the focus will not be changed.
-    */
-   void setAutoFocus(bool enable){ autoFocus_ = enable;}
- 
-diff --git a/src/Wt/WWebWidget.C b/src/Wt/WWebWidget.C
-index 42fc00fd..5835244f 100644
---- a/src/Wt/WWebWidget.C
-+++ b/src/Wt/WWebWidget.C
-@@ -1983,9 +1983,13 @@ bool WWebWidget::setFirstFocus()
-       return true;
-     }
- 
--    for (unsigned i = 0; i < children().size(); i++)
--      if (children()[i]->setFirstFocus())
--	return true;
-+    bool result = false;
-+    iterateChildren([&result](Wt::WWidget *w){
-+      if (!result)
-+        result = w->setFirstFocus();
-+    });
-+    if (result)
-+      return true;
- 
-     return false;
-   } else
-@@ -2207,6 +2211,8 @@ WWidget *WWebWidget::findById(const std::string& id)
- 	if (!result)
- 	  result = c->findById(id);
-       });
-+    if (result)
-+      return result;
-   }
- 
-   return nullptr;
-diff --git a/src/http/Connection.C b/src/http/Connection.C
-index cab77089..27380a8a 100644
---- a/src/http/Connection.C
-+++ b/src/http/Connection.C
-@@ -61,6 +61,15 @@ Connection::~Connection()
-   LOG_DEBUG("~Connection");
- }
- 
-+asio::ip::tcp::socket::native_handle_type Connection::native()
-+{
-+#if (defined(WT_ASIO_IS_BOOST_ASIO) && BOOST_VERSION >= 106600) || (defined(WT_ASIO_IS_STANDALONE_ASIO) && ASIO_VERSION >= 101100)
-+  return socket().native_handle();
-+#else
-+  return socket().native();
-+#endif
-+}
-+
- void Connection::finishReply()
- { 
-   if (!request_.uri.empty()) {
-@@ -78,7 +87,7 @@ void Connection::scheduleStop()
- 
- void Connection::start()
- {
--  LOG_DEBUG(socket().native() << ": start()");
-+  LOG_DEBUG(native() << ": start()");
- 
-   request_parser_.reset();
-   request_.reset();
-@@ -106,7 +115,7 @@ void Connection::stop()
- void Connection::setReadTimeout(int seconds)
- {
-   if (seconds != 0) {
--    LOG_DEBUG(socket().native() << " setting read timeout (ws: "
-+    LOG_DEBUG(native() << " setting read timeout (ws: "
- 	      << request_.webSocketVersion << ")");
-     state_ |= Reading;
- 
-@@ -118,7 +127,7 @@ void Connection::setReadTimeout(int seconds)
- 
- void Connection::setWriteTimeout(int seconds)
- {
--  LOG_DEBUG(socket().native() << " setting write timeout (ws: "
-+  LOG_DEBUG(native() << " setting write timeout (ws: "
- 	    << request_.webSocketVersion << ")");
-   state_ |= Writing;
- 
-@@ -129,7 +138,7 @@ void Connection::setWriteTimeout(int seconds)
- 
- void Connection::cancelReadTimer()
- {
--  LOG_DEBUG(socket().native() << " cancel read timeout");
-+  LOG_DEBUG(native() << " cancel read timeout");
-   state_.clear(Reading);
- 
-   readTimer_.cancel();
-@@ -137,7 +146,7 @@ void Connection::cancelReadTimer()
- 
- void Connection::cancelWriteTimer()
- {
--  LOG_DEBUG(socket().native() << " cancel write timeout");
-+  LOG_DEBUG(native() << " cancel write timeout");
-   state_.clear(Writing);
- 
-   writeTimer_.cancel();
-@@ -163,7 +172,7 @@ void Connection::handleReadRequest0()
- 
- #ifdef DEBUG
-   try {
--    LOG_DEBUG(socket().native() << "incoming request: "
-+    LOG_DEBUG(socket().native_handle() << "incoming request: "
- 	      << socket().remote_endpoint().port() << " (avail= "
- 	      << (rcv_buffer_size_ - (rcv_remaining_ - buffer.data())) << "): "
- 	      << std::string(rcv_remaining_,
-@@ -189,7 +198,7 @@ void Connection::handleReadRequest0()
-     if (doWebSockets)
-       request_.enableWebSocket();
- 
--    LOG_DEBUG(socket().native() << "request: " << status);
-+    LOG_DEBUG(native() << "request: " << status);
- 
-     if (status >= 300)
-       sendStockReply(status);
-@@ -242,7 +251,7 @@ void Connection::sendStockReply(StockReply::status_type status)
- void Connection::handleReadRequest(const Wt::AsioWrapper::error_code& e,
- 				   std::size_t bytes_transferred)
- {
--  LOG_DEBUG(socket().native() << ": handleReadRequest(): " << e.message());
-+  LOG_DEBUG(native() << ": handleReadRequest(): " << e.message());
- 
-   cancelReadTimer();
- 
-@@ -261,7 +270,7 @@ void Connection::close()
-   cancelReadTimer();
-   cancelWriteTimer();
- 
--  LOG_DEBUG(socket().native() << ": close()");
-+  LOG_DEBUG(native() << ": close()");
- 
-   ConnectionManager_.stop(shared_from_this());
- }
-@@ -274,7 +283,7 @@ bool Connection::closed() const
- 
- void Connection::handleError(const Wt::AsioWrapper::error_code& e)
- {
--  LOG_DEBUG(socket().native() << ": error: " << e.message());
-+  LOG_DEBUG(native() << ": error: " << e.message());
- 
-   close();
- }
-@@ -349,7 +358,7 @@ void Connection::handleReadBody0(ReplyPtr reply,
-                                  const Wt::AsioWrapper::error_code& e,
- 				 std::size_t bytes_transferred)
- {
--  LOG_DEBUG(socket().native() << ": handleReadBody0(): " << e.message());
-+  LOG_DEBUG(native() << ": handleReadBody0(): " << e.message());
- 
-   if (disconnectCallback_) {
-     if (e && e != asio::error::operation_aborted) {
-@@ -357,7 +366,7 @@ void Connection::handleReadBody0(ReplyPtr reply,
-       disconnectCallback_ = boost::function<void()>();
-       f();
-     } else if (!e) {
--      LOG_ERROR(socket().native()
-+      LOG_ERROR(native()
- 		<< ": handleReadBody(): while waiting for disconnect, "
- 		"received unexpected data, closing");
-       close();
-@@ -410,7 +419,7 @@ void Connection::startWriteResponse(ReplyPtr reply)
-   }
- #endif
- 
--  LOG_DEBUG(socket().native() << " sending: " << s << "(buffers: "
-+  LOG_DEBUG(native() << " sending: " << s << "(buffers: "
- 	    << buffers.size() << ")");
- 
-   if (!buffers.empty()) {
-@@ -423,7 +432,7 @@ void Connection::startWriteResponse(ReplyPtr reply)
- 
- void Connection::handleWriteResponse(ReplyPtr reply)
- {
--  LOG_DEBUG(socket().native() << ": handleWriteResponse() " <<
-+  LOG_DEBUG(native() << ": handleWriteResponse() " <<
- 	    haveResponse_ << " " << responseDone_);
-   if (haveResponse_)
-     startWriteResponse(reply);
-@@ -458,7 +467,7 @@ void Connection::handleWriteResponse0(ReplyPtr reply,
-                                       const Wt::AsioWrapper::error_code& e,
- 				      std::size_t bytes_transferred)
- {
--  LOG_DEBUG(socket().native() << ": handleWriteResponse0(): "
-+  LOG_DEBUG(native() << ": handleWriteResponse0(): "
- 	    << bytes_transferred << " ; " << e.message());
- 
-   cancelWriteTimer();
-diff --git a/src/http/Connection.h b/src/http/Connection.h
-index b0b71a36..f925177c 100644
---- a/src/http/Connection.h
-+++ b/src/http/Connection.h
-@@ -18,6 +18,7 @@
- #define HTTP_CONNECTION_HPP
- 
- #include <Wt/AsioWrapper/asio.hpp>
-+#include <Wt/AsioWrapper/strand.hpp>
- #include <Wt/AsioWrapper/steady_timer.hpp>
- 
- #include "Buffer.h"
-@@ -61,7 +62,7 @@ class Connection : public std::enable_shared_from_this<Connection>
-   virtual ~Connection();
- 
-   Server *server() const { return server_; }
--  asio::strand& strand() { return strand_; }
-+  Wt::AsioWrapper::strand& strand() { return strand_; }
- 
-   /// Stop all asynchronous operations associated with the connection.
-   void scheduleStop();
-@@ -86,6 +87,9 @@ class Connection : public std::enable_shared_from_this<Connection>
- 			     const std::function<void()>& callback);
- 
- protected:
-+  /// Get the native handle of the socket
-+  asio::ip::tcp::socket::native_handle_type native();
-+
-   void handleWriteResponse0(ReplyPtr reply,
-                             const Wt::AsioWrapper::error_code& e,
- 			    std::size_t bytes_transferred);
-@@ -104,7 +108,7 @@ class Connection : public std::enable_shared_from_this<Connection>
-   /// The manager for this connection.
-   ConnectionManager& ConnectionManager_;
- 
--  asio::strand strand_;
-+  Wt::AsioWrapper::strand strand_;
- 
-   void finishReply();
- 
-diff --git a/src/http/Reply.C b/src/http/Reply.C
-index 0d79e39f..b55ece21 100644
---- a/src/http/Reply.C
-+++ b/src/http/Reply.C
-@@ -596,7 +596,8 @@ bool Reply::encodeNextContentBuffer(
-       originalSize += bs;
- 
-       gzipStrm_.avail_in = bs;
--      gzipStrm_.next_in = (unsigned char *)asio::detail::buffer_cast_helper(b);
-+      gzipStrm_.next_in = const_cast<unsigned char*>(
-+            asio::buffer_cast<const unsigned char*>(b));
- 
-       unsigned char out[16*1024];
-       do {
-diff --git a/src/http/Server.C b/src/http/Server.C
-index fc69be21..ad16591f 100644
---- a/src/http/Server.C
-+++ b/src/http/Server.C
-@@ -116,7 +116,11 @@ Server::Server(const Configuration& config, Wt::WServer& wtServer)
-     accept_strand_(wt_.ioService()),
-     // post_strand_(ioService_),
- #ifdef HTTP_WITH_SSL
-+#if (defined(WT_ASIO_IS_BOOST_ASIO) && BOOST_VERSION >= 106600) || (defined(WT_ASIO_IS_STANDALONE_ASIO) && ASIO_VERSION >= 101100)
-+    ssl_context_(asio::ssl::context::sslv23),
-+#else
-     ssl_context_(wt_.ioService(), asio::ssl::context::sslv23),
-+#endif
- #endif // HTTP_WITH_SSL
-     connection_manager_(),
-     sessionManager_(0),
-diff --git a/src/http/Server.h b/src/http/Server.h
-index 3d3229ac..97387b11 100644
---- a/src/http/Server.h
-+++ b/src/http/Server.h
-@@ -129,7 +129,7 @@ class Server
-   Wt::WLogger accessLogger_;
- 
-   /// The strand for handleTcpAccept(), handleSslAccept() and handleStop()
--  asio::strand accept_strand_;
-+  Wt::AsioWrapper::strand accept_strand_;
- 
-   /// Acceptors used to listen for incoming http connections.
-   std::vector<TcpListener> tcp_listeners_;
-diff --git a/src/http/SessionProcess.C b/src/http/SessionProcess.C
-index 72d9a881..fb057f2f 100644
---- a/src/http/SessionProcess.C
-+++ b/src/http/SessionProcess.C
-@@ -16,6 +16,7 @@
- #include <signal.h>
- #endif // WT_WIN32
- 
-+#include "Wt/WConfig.h"
- #include "Wt/WLogger.h"
- 
- namespace Wt {
-@@ -80,7 +81,11 @@ void SessionProcess::asyncExec(const Configuration &config,
-   if (!ec)
-     acceptor_->listen(0, ec);
- #ifndef WT_WIN32
-+#if (defined(WT_ASIO_IS_BOOST_ASIO) && BOOST_VERSION >= 106600) || (defined(WT_ASIO_IS_STANDALONE_ASIO) && ASIO_VERSION >= 101100)
-+  fcntl(acceptor_->native_handle(), F_SETFD, FD_CLOEXEC);
-+#else
-   fcntl(acceptor_->native(), F_SETFD, FD_CLOEXEC);
-+#endif
- #endif // !WT_WIN32
-   if (ec) {
-     LOG_ERROR("Couldn't create listening socket: " << ec.message());
-diff --git a/src/http/SslConnection.C b/src/http/SslConnection.C
-index 74c8642a..12eb7465 100644
---- a/src/http/SslConnection.C
-+++ b/src/http/SslConnection.C
-@@ -81,9 +81,9 @@ void SslConnection::handleHandshake(const Wt::AsioWrapper::error_code& error)
- 
- void SslConnection::stop()
- {
--  LOG_DEBUG(socket().native() << ": stop()");
-+  LOG_DEBUG(native() << ": stop()");
-   finishReply();
--  LOG_DEBUG(socket().native() << ": SSL shutdown");
-+  LOG_DEBUG(native() << ": SSL shutdown");
- 
-   Connection::stop();
-   
-@@ -108,20 +108,20 @@ void SslConnection::stopNextLayer(const Wt::AsioWrapper::error_code& ec)
-   // In case of timeout, we will get here twice.
-   sslShutdownTimer_.cancel();
-   if (ec) {
--    LOG_DEBUG(socket().native() << ": ssl_shutdown failed:"
-+    LOG_DEBUG(native() << ": ssl_shutdown failed:"
-       << ec.message());
-   }
-   try {
-     if (socket().is_open()) {
-       Wt::AsioWrapper::error_code ignored_ec;
--      LOG_DEBUG(socket().native() << ": socket shutdown");
-+      LOG_DEBUG(native() << ": socket shutdown");
-       socket().shutdown(asio::ip::tcp::socket::shutdown_both, 
- 			ignored_ec);
--      LOG_DEBUG(socket().native() << "closing socket");
-+      LOG_DEBUG(native() << "closing socket");
-       socket().close();
-     }
-   } catch (Wt::AsioWrapper::system_error& e) {
--    LOG_DEBUG(socket().native() << ": error " << e.what());
-+    LOG_DEBUG(native() << ": error " << e.what());
-   }
- }
- 
-@@ -161,7 +161,7 @@ void SslConnection::startAsyncReadBody(ReplyPtr reply,
- 				       Buffer& buffer, int timeout)
- {
-   if (state_ & Reading) {
--    LOG_DEBUG(socket().native() << ": state_ = "
-+    LOG_DEBUG(native() << ": state_ = "
- 	      << (state_ & Reading ? "reading " : "")
- 	      << (state_ & Writing ? "writing " : ""));
-     stop();
-@@ -198,7 +198,7 @@ void SslConnection
- 			  int timeout)
- {
-   if (state_ & Writing) {
--    LOG_DEBUG(socket().native() << ": state_ = "
-+    LOG_DEBUG(native() << ": state_ = "
- 	      << (state_ & Reading ? "reading " : "")
- 	      << (state_ & Writing ? "writing " : ""));
-     stop();
-diff --git a/src/http/TcpConnection.C b/src/http/TcpConnection.C
-index ad731647..ab2476ed 100644
---- a/src/http/TcpConnection.C
-+++ b/src/http/TcpConnection.C
-@@ -38,17 +38,17 @@ asio::ip::tcp::socket& TcpConnection::socket()
- 
- void TcpConnection::stop()
- {
--  LOG_DEBUG(socket().native() << ": stop()");
-+  LOG_DEBUG(native() << ": stop()");
- 
-   finishReply();
- 
-   try {
-     Wt::AsioWrapper::error_code ignored_ec;
-     socket_.shutdown(asio::ip::tcp::socket::shutdown_both, ignored_ec);
--    LOG_DEBUG(socket().native() << ": closing socket");
-+    LOG_DEBUG(native() << ": closing socket");
-     socket_.close();
-   } catch (Wt::AsioWrapper::system_error& e) {
--    LOG_DEBUG(socket().native() << ": error " << e.what());
-+    LOG_DEBUG(native() << ": error " << e.what());
-   }
- 
-   Connection::stop();
-@@ -56,10 +56,10 @@ void TcpConnection::stop()
- 
- void TcpConnection::startAsyncReadRequest(Buffer& buffer, int timeout)
- {
--  LOG_DEBUG(socket().native() << ": startAsyncReadRequest");
-+  LOG_DEBUG(native() << ": startAsyncReadRequest");
- 
-   if (state_ & Reading) {
--    LOG_DEBUG(socket().native() << ": state_ = "
-+    LOG_DEBUG(native() << ": state_ = "
- 	      << (state_ & Reading ? "reading " : "")
- 	      << (state_ & Writing ? "writing " : ""));
-     stop();
-@@ -81,10 +81,10 @@ void TcpConnection::startAsyncReadRequest(Buffer& buffer, int timeout)
- void TcpConnection::startAsyncReadBody(ReplyPtr reply,
- 				       Buffer& buffer, int timeout)
- {
--  LOG_DEBUG(socket().native() << ": startAsyncReadBody");
-+  LOG_DEBUG(native() << ": startAsyncReadBody");
- 
-   if (state_ & Reading) {
--    LOG_DEBUG(socket().native() << ": state_ = "
-+    LOG_DEBUG(native() << ": state_ = "
- 	      << (state_ & Reading ? "reading " : "")
- 	      << (state_ & Writing ? "writing " : ""));
-     stop();
-@@ -109,10 +109,10 @@ void TcpConnection::startAsyncWriteResponse
-       const std::vector<asio::const_buffer>& buffers,
-       int timeout)
- {
--  LOG_DEBUG(socket().native() << ": startAsyncWriteResponse");
-+  LOG_DEBUG(native() << ": startAsyncWriteResponse");
- 
-   if (state_ & Writing) {
--    LOG_DEBUG(socket().native() << ": state_ = "
-+    LOG_DEBUG(native() << ": state_ = "
- 	      << (state_ & Reading ? "reading " : "")
- 	      << (state_ & Writing ? "writing " : ""));
-     stop();
-diff --git a/src/web/Configuration.C b/src/web/Configuration.C
-index 6b6507b7..e5f06505 100644
---- a/src/web/Configuration.C
-+++ b/src/web/Configuration.C
-@@ -825,14 +825,10 @@ void Configuration::readApplicationSettings(xml_node<> *app)
-   runDirectory_ = singleChildElementValue(fcgi, "run-directory",
- 					  runDirectory_);
- 
--  setInt(fcgi, "num-threads", numThreads_); // backward compatibility < 3.2.0
--
-   xml_node<> *isapi = singleChildElement(app, "connector-isapi");
-   if (!isapi)
-     isapi = app; // backward compatibility
- 
--  setInt(isapi, "num-threads", numThreads_); // backward compatibility < 3.2.0
--
-   std::string maxMemoryRequestSizeStr =
-     singleChildElementValue(isapi, "max-memory-request-size", "");
-   if (!maxMemoryRequestSizeStr.empty()) {

Copied: wt/repos/community-x86_64/960e8d017b264710e344c63f9feb6ea1fa593eeb.patch (from rev 325659, wt/trunk/960e8d017b264710e344c63f9feb6ea1fa593eeb.patch)
===================================================================
--- 960e8d017b264710e344c63f9feb6ea1fa593eeb.patch	                        (rev 0)
+++ 960e8d017b264710e344c63f9feb6ea1fa593eeb.patch	2018-05-20 21:42:19 UTC (rev 325660)
@@ -0,0 +1,638 @@
+From 960e8d017b264710e344c63f9feb6ea1fa593eeb Mon Sep 17 00:00:00 2001
+From: Roel Standaert <roel at emweb.be>
+Date: Tue, 19 Dec 2017 17:33:41 +0100
+Subject: [PATCH] Several changes:
+
+ - Compatibility with Boost 1.66 (asio changes)
+ - WDialog: Document that autofocus is enabled by default, and don't change focus if it was set explicitly
+ - Fix findById
+ - WWebWidget: Avoid copy of children vector
+ - Json: Document headers to include for Wt::Json::parse() and Wt::Json::serialize()
+ - <num-threads> does not exist anymore as a child of <connector-fcgi> or <connector-isapi>
+---
+ examples/filetreetable/CMakeLists.txt |  1 +
+ examples/gitmodel/CMakeLists.txt      |  2 +-
+ examples/wt-homepage/CMakeLists.txt   |  2 +-
+ src/Wt/AsioWrapper/strand.hpp         | 19 +++++++++++++++++
+ src/Wt/Http/Client.C                  |  8 ++++++-
+ src/Wt/Http/Client.h                  |  5 +++++
+ src/Wt/Json/Value.h                   |  5 ++++-
+ src/Wt/WDialog.C                      |  6 ++++--
+ src/Wt/WDialog.h                      |  3 +++
+ src/Wt/WWebWidget.C                   | 12 ++++++++---
+ src/http/Connection.C                 | 39 +++++++++++++++++++++--------------
+ src/http/Connection.h                 |  8 +++++--
+ src/http/Reply.C                      |  3 ++-
+ src/http/Server.C                     |  4 ++++
+ src/http/Server.h                     |  2 +-
+ src/http/SessionProcess.C             |  5 +++++
+ src/http/SslConnection.C              | 16 +++++++-------
+ src/http/TcpConnection.C              | 18 ++++++++--------
+ src/web/Configuration.C               |  4 ----
+ 19 files changed, 113 insertions(+), 49 deletions(-)
+
+diff --git a/examples/filetreetable/CMakeLists.txt b/examples/filetreetable/CMakeLists.txt
+index 4265b9b7..c0c94100 100644
+--- a/examples/filetreetable/CMakeLists.txt
++++ b/examples/filetreetable/CMakeLists.txt
+@@ -10,6 +10,7 @@ ELSE(NOT BOOST_FS_LIB)
+ 
+   TARGET_LINK_LIBRARIES(filetreetable.wt
+     ${BOOST_FS_LIB}
++    ${BOOST_SYSTEM_LIB}
+   )
+ 
+   INCLUDE_DIRECTORIES(${WT_SOURCE_DIR}/src)
+diff --git a/examples/gitmodel/CMakeLists.txt b/examples/gitmodel/CMakeLists.txt
+index 9b124c98..ed557d1f 100644
+--- a/examples/gitmodel/CMakeLists.txt
++++ b/examples/gitmodel/CMakeLists.txt
+@@ -7,7 +7,7 @@ IF(BOOST_FS_LIB)
+     ../wt-homepage/SourceView.C
+     GitView.C
+   )
+-  TARGET_LINK_LIBRARIES(gitview.wt ${BOOST_FS_LIB})
++  TARGET_LINK_LIBRARIES(gitview.wt ${BOOST_FS_LIB} ${BOOST_SYSTEM_LIB})
+ 
+   INCLUDE_DIRECTORIES(
+     ${WT_SOURCE_DIR}/src
+diff --git a/examples/wt-homepage/CMakeLists.txt b/examples/wt-homepage/CMakeLists.txt
+index b60e7c5f..513bc570 100644
+--- a/examples/wt-homepage/CMakeLists.txt
++++ b/examples/wt-homepage/CMakeLists.txt
+@@ -34,7 +34,7 @@ ENDIF(WT_EMWEB_BUILD)
+ 
+ WT_ADD_EXAMPLE(Home.wt ${SRC})
+ 
+-TARGET_LINK_LIBRARIES(Home.wt ${EXAMPLES_DBO_LIBS} ${BOOST_FS_LIB})
++TARGET_LINK_LIBRARIES(Home.wt ${EXAMPLES_DBO_LIBS} ${BOOST_FS_LIB} ${BOOST_SYSTEM_LIB})
+ 
+ # Test whether crypt(3) is provided by libc. If it's not, check if
+ # libcrypt exists and if it provides crypt(3).
+diff --git a/src/Wt/AsioWrapper/strand.hpp b/src/Wt/AsioWrapper/strand.hpp
+index 0c3a201f..9ddd8d1b 100644
+--- a/src/Wt/AsioWrapper/strand.hpp
++++ b/src/Wt/AsioWrapper/strand.hpp
+@@ -12,10 +12,29 @@
+ #ifdef WT_ASIO_IS_BOOST_ASIO
+ 
+ #include <boost/asio/strand.hpp>
++namespace Wt {
++  namespace AsioWrapper {
++#if BOOST_VERSION >= 106600
++    using strand = boost::asio::io_context::strand;
++#else
++    using strand = boost::asio::strand;
++#endif
++  }
++}
+ 
+ #else // WT_ASIO_IS_STANDALONE_ASIO
+ 
++#include <asio/version.hpp>
+ #include <asio/strand.hpp>
++namespace Wt {
++  namespace AsioWrapper {
++#if ASIO_VERSION >= 101100
++    using strand = asio::io_service::strand;
++#else
++    using strand = asio::strand;
++#endif
++  }
++}
+ 
+ #endif // WT_ASIO_IS_BOOST_ASIO
+ 
+diff --git a/src/Wt/Http/Client.C b/src/Wt/Http/Client.C
+index 85230d10..6bb21a95 100644
+--- a/src/Wt/Http/Client.C
++++ b/src/Wt/Http/Client.C
+@@ -642,7 +642,7 @@ private:
+ 
+ protected:
+   asio::io_service& ioService_;
+-  asio::strand strand_;
++  AsioWrapper::strand strand_;
+   tcp::resolver resolver_;
+   asio::streambuf requestBuf_;
+   asio::streambuf responseBuf_;
+@@ -929,8 +929,14 @@ bool Client::request(Http::Method method, const std::string& url,
+ 
+ #ifdef WT_WITH_SSL
+   } else if (parsedUrl.protocol == "https") {
++#if defined(WT_ASIO_IS_BOOST_ASIO) && BOOST_VERSION >= 106600
++    asio::ssl::context context(asio::ssl::context::tls);
++#elif defined(WT_ASIO_IS_STANDALONE_ASIO) && ASIO_VERSION >= 101100
++    asio::ssl::context context(asio::ssl::context::sslv23);
++#else
+     asio::ssl::context context
+       (*ioService, asio::ssl::context::sslv23);
++#endif
+     long sslOptions = asio::ssl::context::no_sslv2 | asio::ssl::context::no_sslv3;
+     context.set_options(sslOptions);
+ 
+diff --git a/src/Wt/Http/Client.h b/src/Wt/Http/Client.h
+index f3c7169a..77946867 100644
+--- a/src/Wt/Http/Client.h
++++ b/src/Wt/Http/Client.h
+@@ -23,7 +23,12 @@
+ #ifdef WT_ASIO_IS_BOOST_ASIO
+ namespace boost {
+   namespace asio {
++#if BOOST_VERSION >= 106600
++    class io_context;
++    typedef io_context io_service;
++#else
+     class io_service;
++#endif
+   }
+ }
+ #else // WT_ASIO_IS_STANDALONE_ASIO
+diff --git a/src/Wt/Json/Value.h b/src/Wt/Json/Value.h
+index 948277fa..0b0bc0d7 100644
+--- a/src/Wt/Json/Value.h
++++ b/src/Wt/Json/Value.h
+@@ -23,7 +23,7 @@ class Array;
+  *  \brief A JSON representation and parsing library.
+  *
+  * The JSON library contains data types to represent a JSON data
+- * structure (Value, Object and Array), and a JSON parser.
++ * structure (Value, Object and Array), a JSON parser, and a JSON serializer.
+  *
+  * Usage example:
+  * \code
+@@ -39,6 +39,9 @@ class Array;
+  * bool b = result.get("b");
+  * std::cerr << "a: " << s << ", b: " << b << std::endl; // a: That's great, b: true
+  * \endcode
++ *
++ * Include the <Wt/Json/Parser.h> header for Wt::Json::parse(), and
++ * the <Wt/Json/Serializer.h> header for Wt::Json::serialize().
+  */
+ 
+ /*! \brief Enumeration for the type of a JSON value.
+diff --git a/src/Wt/WDialog.C b/src/Wt/WDialog.C
+index 65ba51d7..31bd88b0 100644
+--- a/src/Wt/WDialog.C
++++ b/src/Wt/WDialog.C
+@@ -436,8 +436,10 @@ void WDialog::render(WFlags<RenderFlag> flags)
+   if (!isModal())
+     impl_->mouseWentDown().connect(this, &WDialog::bringToFront);
+ 
+-  if ( flags.test(RenderFlag::Full) && autoFocus_)
+-    impl_->setFirstFocus();
++  if ( flags.test(RenderFlag::Full) && autoFocus_) {
++    if (!impl_->findById(Wt::WApplication::instance()->focus()))
++      impl_->setFirstFocus();
++  }
+ 
+   WPopupWidget::render(flags);
+ }
+diff --git a/src/Wt/WDialog.h b/src/Wt/WDialog.h
+index 810d6945..967087c8 100644
+--- a/src/Wt/WDialog.h
++++ b/src/Wt/WDialog.h
+@@ -337,6 +337,9 @@ class WT_API WDialog : public WPopupWidget
+   bool closable() const { return closeIcon_ != nullptr; }
+ 
+   /*! \brief Set focus on the first widget in the dialog.
++   *
++   * Autofocus is enabled by default. If a widget inside of
++   * this dialog already has focus, the focus will not be changed.
+    */
+   void setAutoFocus(bool enable){ autoFocus_ = enable;}
+ 
+diff --git a/src/Wt/WWebWidget.C b/src/Wt/WWebWidget.C
+index 42fc00fd..5835244f 100644
+--- a/src/Wt/WWebWidget.C
++++ b/src/Wt/WWebWidget.C
+@@ -1983,9 +1983,13 @@ bool WWebWidget::setFirstFocus()
+       return true;
+     }
+ 
+-    for (unsigned i = 0; i < children().size(); i++)
+-      if (children()[i]->setFirstFocus())
+-	return true;
++    bool result = false;
++    iterateChildren([&result](Wt::WWidget *w){
++      if (!result)
++        result = w->setFirstFocus();
++    });
++    if (result)
++      return true;
+ 
+     return false;
+   } else
+@@ -2207,6 +2211,8 @@ WWidget *WWebWidget::findById(const std::string& id)
+ 	if (!result)
+ 	  result = c->findById(id);
+       });
++    if (result)
++      return result;
+   }
+ 
+   return nullptr;
+diff --git a/src/http/Connection.C b/src/http/Connection.C
+index cab77089..27380a8a 100644
+--- a/src/http/Connection.C
++++ b/src/http/Connection.C
+@@ -61,6 +61,15 @@ Connection::~Connection()
+   LOG_DEBUG("~Connection");
+ }
+ 
++asio::ip::tcp::socket::native_handle_type Connection::native()
++{
++#if (defined(WT_ASIO_IS_BOOST_ASIO) && BOOST_VERSION >= 106600) || (defined(WT_ASIO_IS_STANDALONE_ASIO) && ASIO_VERSION >= 101100)
++  return socket().native_handle();
++#else
++  return socket().native();
++#endif
++}
++
+ void Connection::finishReply()
+ { 
+   if (!request_.uri.empty()) {
+@@ -78,7 +87,7 @@ void Connection::scheduleStop()
+ 
+ void Connection::start()
+ {
+-  LOG_DEBUG(socket().native() << ": start()");
++  LOG_DEBUG(native() << ": start()");
+ 
+   request_parser_.reset();
+   request_.reset();
+@@ -106,7 +115,7 @@ void Connection::stop()
+ void Connection::setReadTimeout(int seconds)
+ {
+   if (seconds != 0) {
+-    LOG_DEBUG(socket().native() << " setting read timeout (ws: "
++    LOG_DEBUG(native() << " setting read timeout (ws: "
+ 	      << request_.webSocketVersion << ")");
+     state_ |= Reading;
+ 
+@@ -118,7 +127,7 @@ void Connection::setReadTimeout(int seconds)
+ 
+ void Connection::setWriteTimeout(int seconds)
+ {
+-  LOG_DEBUG(socket().native() << " setting write timeout (ws: "
++  LOG_DEBUG(native() << " setting write timeout (ws: "
+ 	    << request_.webSocketVersion << ")");
+   state_ |= Writing;
+ 
+@@ -129,7 +138,7 @@ void Connection::setWriteTimeout(int seconds)
+ 
+ void Connection::cancelReadTimer()
+ {
+-  LOG_DEBUG(socket().native() << " cancel read timeout");
++  LOG_DEBUG(native() << " cancel read timeout");
+   state_.clear(Reading);
+ 
+   readTimer_.cancel();
+@@ -137,7 +146,7 @@ void Connection::cancelReadTimer()
+ 
+ void Connection::cancelWriteTimer()
+ {
+-  LOG_DEBUG(socket().native() << " cancel write timeout");
++  LOG_DEBUG(native() << " cancel write timeout");
+   state_.clear(Writing);
+ 
+   writeTimer_.cancel();
+@@ -163,7 +172,7 @@ void Connection::handleReadRequest0()
+ 
+ #ifdef DEBUG
+   try {
+-    LOG_DEBUG(socket().native() << "incoming request: "
++    LOG_DEBUG(socket().native_handle() << "incoming request: "
+ 	      << socket().remote_endpoint().port() << " (avail= "
+ 	      << (rcv_buffer_size_ - (rcv_remaining_ - buffer.data())) << "): "
+ 	      << std::string(rcv_remaining_,
+@@ -189,7 +198,7 @@ void Connection::handleReadRequest0()
+     if (doWebSockets)
+       request_.enableWebSocket();
+ 
+-    LOG_DEBUG(socket().native() << "request: " << status);
++    LOG_DEBUG(native() << "request: " << status);
+ 
+     if (status >= 300)
+       sendStockReply(status);
+@@ -242,7 +251,7 @@ void Connection::sendStockReply(StockReply::status_type status)
+ void Connection::handleReadRequest(const Wt::AsioWrapper::error_code& e,
+ 				   std::size_t bytes_transferred)
+ {
+-  LOG_DEBUG(socket().native() << ": handleReadRequest(): " << e.message());
++  LOG_DEBUG(native() << ": handleReadRequest(): " << e.message());
+ 
+   cancelReadTimer();
+ 
+@@ -261,7 +270,7 @@ void Connection::close()
+   cancelReadTimer();
+   cancelWriteTimer();
+ 
+-  LOG_DEBUG(socket().native() << ": close()");
++  LOG_DEBUG(native() << ": close()");
+ 
+   ConnectionManager_.stop(shared_from_this());
+ }
+@@ -274,7 +283,7 @@ bool Connection::closed() const
+ 
+ void Connection::handleError(const Wt::AsioWrapper::error_code& e)
+ {
+-  LOG_DEBUG(socket().native() << ": error: " << e.message());
++  LOG_DEBUG(native() << ": error: " << e.message());
+ 
+   close();
+ }
+@@ -349,7 +358,7 @@ void Connection::handleReadBody0(ReplyPtr reply,
+                                  const Wt::AsioWrapper::error_code& e,
+ 				 std::size_t bytes_transferred)
+ {
+-  LOG_DEBUG(socket().native() << ": handleReadBody0(): " << e.message());
++  LOG_DEBUG(native() << ": handleReadBody0(): " << e.message());
+ 
+   if (disconnectCallback_) {
+     if (e && e != asio::error::operation_aborted) {
+@@ -357,7 +366,7 @@ void Connection::handleReadBody0(ReplyPtr reply,
+       disconnectCallback_ = boost::function<void()>();
+       f();
+     } else if (!e) {
+-      LOG_ERROR(socket().native()
++      LOG_ERROR(native()
+ 		<< ": handleReadBody(): while waiting for disconnect, "
+ 		"received unexpected data, closing");
+       close();
+@@ -410,7 +419,7 @@ void Connection::startWriteResponse(ReplyPtr reply)
+   }
+ #endif
+ 
+-  LOG_DEBUG(socket().native() << " sending: " << s << "(buffers: "
++  LOG_DEBUG(native() << " sending: " << s << "(buffers: "
+ 	    << buffers.size() << ")");
+ 
+   if (!buffers.empty()) {
+@@ -423,7 +432,7 @@ void Connection::startWriteResponse(ReplyPtr reply)
+ 
+ void Connection::handleWriteResponse(ReplyPtr reply)
+ {
+-  LOG_DEBUG(socket().native() << ": handleWriteResponse() " <<
++  LOG_DEBUG(native() << ": handleWriteResponse() " <<
+ 	    haveResponse_ << " " << responseDone_);
+   if (haveResponse_)
+     startWriteResponse(reply);
+@@ -458,7 +467,7 @@ void Connection::handleWriteResponse0(ReplyPtr reply,
+                                       const Wt::AsioWrapper::error_code& e,
+ 				      std::size_t bytes_transferred)
+ {
+-  LOG_DEBUG(socket().native() << ": handleWriteResponse0(): "
++  LOG_DEBUG(native() << ": handleWriteResponse0(): "
+ 	    << bytes_transferred << " ; " << e.message());
+ 
+   cancelWriteTimer();
+diff --git a/src/http/Connection.h b/src/http/Connection.h
+index b0b71a36..f925177c 100644
+--- a/src/http/Connection.h
++++ b/src/http/Connection.h
+@@ -18,6 +18,7 @@
+ #define HTTP_CONNECTION_HPP
+ 
+ #include <Wt/AsioWrapper/asio.hpp>
++#include <Wt/AsioWrapper/strand.hpp>
+ #include <Wt/AsioWrapper/steady_timer.hpp>
+ 
+ #include "Buffer.h"
+@@ -61,7 +62,7 @@ class Connection : public std::enable_shared_from_this<Connection>
+   virtual ~Connection();
+ 
+   Server *server() const { return server_; }
+-  asio::strand& strand() { return strand_; }
++  Wt::AsioWrapper::strand& strand() { return strand_; }
+ 
+   /// Stop all asynchronous operations associated with the connection.
+   void scheduleStop();
+@@ -86,6 +87,9 @@ class Connection : public std::enable_shared_from_this<Connection>
+ 			     const std::function<void()>& callback);
+ 
+ protected:
++  /// Get the native handle of the socket
++  asio::ip::tcp::socket::native_handle_type native();
++
+   void handleWriteResponse0(ReplyPtr reply,
+                             const Wt::AsioWrapper::error_code& e,
+ 			    std::size_t bytes_transferred);
+@@ -104,7 +108,7 @@ class Connection : public std::enable_shared_from_this<Connection>
+   /// The manager for this connection.
+   ConnectionManager& ConnectionManager_;
+ 
+-  asio::strand strand_;
++  Wt::AsioWrapper::strand strand_;
+ 
+   void finishReply();
+ 
+diff --git a/src/http/Reply.C b/src/http/Reply.C
+index 0d79e39f..b55ece21 100644
+--- a/src/http/Reply.C
++++ b/src/http/Reply.C
+@@ -596,7 +596,8 @@ bool Reply::encodeNextContentBuffer(
+       originalSize += bs;
+ 
+       gzipStrm_.avail_in = bs;
+-      gzipStrm_.next_in = (unsigned char *)asio::detail::buffer_cast_helper(b);
++      gzipStrm_.next_in = const_cast<unsigned char*>(
++            asio::buffer_cast<const unsigned char*>(b));
+ 
+       unsigned char out[16*1024];
+       do {
+diff --git a/src/http/Server.C b/src/http/Server.C
+index fc69be21..ad16591f 100644
+--- a/src/http/Server.C
++++ b/src/http/Server.C
+@@ -116,7 +116,11 @@ Server::Server(const Configuration& config, Wt::WServer& wtServer)
+     accept_strand_(wt_.ioService()),
+     // post_strand_(ioService_),
+ #ifdef HTTP_WITH_SSL
++#if (defined(WT_ASIO_IS_BOOST_ASIO) && BOOST_VERSION >= 106600) || (defined(WT_ASIO_IS_STANDALONE_ASIO) && ASIO_VERSION >= 101100)
++    ssl_context_(asio::ssl::context::sslv23),
++#else
+     ssl_context_(wt_.ioService(), asio::ssl::context::sslv23),
++#endif
+ #endif // HTTP_WITH_SSL
+     connection_manager_(),
+     sessionManager_(0),
+diff --git a/src/http/Server.h b/src/http/Server.h
+index 3d3229ac..97387b11 100644
+--- a/src/http/Server.h
++++ b/src/http/Server.h
+@@ -129,7 +129,7 @@ class Server
+   Wt::WLogger accessLogger_;
+ 
+   /// The strand for handleTcpAccept(), handleSslAccept() and handleStop()
+-  asio::strand accept_strand_;
++  Wt::AsioWrapper::strand accept_strand_;
+ 
+   /// Acceptors used to listen for incoming http connections.
+   std::vector<TcpListener> tcp_listeners_;
+diff --git a/src/http/SessionProcess.C b/src/http/SessionProcess.C
+index 72d9a881..fb057f2f 100644
+--- a/src/http/SessionProcess.C
++++ b/src/http/SessionProcess.C
+@@ -16,6 +16,7 @@
+ #include <signal.h>
+ #endif // WT_WIN32
+ 
++#include "Wt/WConfig.h"
+ #include "Wt/WLogger.h"
+ 
+ namespace Wt {
+@@ -80,7 +81,11 @@ void SessionProcess::asyncExec(const Configuration &config,
+   if (!ec)
+     acceptor_->listen(0, ec);
+ #ifndef WT_WIN32
++#if (defined(WT_ASIO_IS_BOOST_ASIO) && BOOST_VERSION >= 106600) || (defined(WT_ASIO_IS_STANDALONE_ASIO) && ASIO_VERSION >= 101100)
++  fcntl(acceptor_->native_handle(), F_SETFD, FD_CLOEXEC);
++#else
+   fcntl(acceptor_->native(), F_SETFD, FD_CLOEXEC);
++#endif
+ #endif // !WT_WIN32
+   if (ec) {
+     LOG_ERROR("Couldn't create listening socket: " << ec.message());
+diff --git a/src/http/SslConnection.C b/src/http/SslConnection.C
+index 74c8642a..12eb7465 100644
+--- a/src/http/SslConnection.C
++++ b/src/http/SslConnection.C
+@@ -81,9 +81,9 @@ void SslConnection::handleHandshake(const Wt::AsioWrapper::error_code& error)
+ 
+ void SslConnection::stop()
+ {
+-  LOG_DEBUG(socket().native() << ": stop()");
++  LOG_DEBUG(native() << ": stop()");
+   finishReply();
+-  LOG_DEBUG(socket().native() << ": SSL shutdown");
++  LOG_DEBUG(native() << ": SSL shutdown");
+ 
+   Connection::stop();
+   
+@@ -108,20 +108,20 @@ void SslConnection::stopNextLayer(const Wt::AsioWrapper::error_code& ec)
+   // In case of timeout, we will get here twice.
+   sslShutdownTimer_.cancel();
+   if (ec) {
+-    LOG_DEBUG(socket().native() << ": ssl_shutdown failed:"
++    LOG_DEBUG(native() << ": ssl_shutdown failed:"
+       << ec.message());
+   }
+   try {
+     if (socket().is_open()) {
+       Wt::AsioWrapper::error_code ignored_ec;
+-      LOG_DEBUG(socket().native() << ": socket shutdown");
++      LOG_DEBUG(native() << ": socket shutdown");
+       socket().shutdown(asio::ip::tcp::socket::shutdown_both, 
+ 			ignored_ec);
+-      LOG_DEBUG(socket().native() << "closing socket");
++      LOG_DEBUG(native() << "closing socket");
+       socket().close();
+     }
+   } catch (Wt::AsioWrapper::system_error& e) {
+-    LOG_DEBUG(socket().native() << ": error " << e.what());
++    LOG_DEBUG(native() << ": error " << e.what());
+   }
+ }
+ 
+@@ -161,7 +161,7 @@ void SslConnection::startAsyncReadBody(ReplyPtr reply,
+ 				       Buffer& buffer, int timeout)
+ {
+   if (state_ & Reading) {
+-    LOG_DEBUG(socket().native() << ": state_ = "
++    LOG_DEBUG(native() << ": state_ = "
+ 	      << (state_ & Reading ? "reading " : "")
+ 	      << (state_ & Writing ? "writing " : ""));
+     stop();
+@@ -198,7 +198,7 @@ void SslConnection
+ 			  int timeout)
+ {
+   if (state_ & Writing) {
+-    LOG_DEBUG(socket().native() << ": state_ = "
++    LOG_DEBUG(native() << ": state_ = "
+ 	      << (state_ & Reading ? "reading " : "")
+ 	      << (state_ & Writing ? "writing " : ""));
+     stop();
+diff --git a/src/http/TcpConnection.C b/src/http/TcpConnection.C
+index ad731647..ab2476ed 100644
+--- a/src/http/TcpConnection.C
++++ b/src/http/TcpConnection.C
+@@ -38,17 +38,17 @@ asio::ip::tcp::socket& TcpConnection::socket()
+ 
+ void TcpConnection::stop()
+ {
+-  LOG_DEBUG(socket().native() << ": stop()");
++  LOG_DEBUG(native() << ": stop()");
+ 
+   finishReply();
+ 
+   try {
+     Wt::AsioWrapper::error_code ignored_ec;
+     socket_.shutdown(asio::ip::tcp::socket::shutdown_both, ignored_ec);
+-    LOG_DEBUG(socket().native() << ": closing socket");
++    LOG_DEBUG(native() << ": closing socket");
+     socket_.close();
+   } catch (Wt::AsioWrapper::system_error& e) {
+-    LOG_DEBUG(socket().native() << ": error " << e.what());
++    LOG_DEBUG(native() << ": error " << e.what());
+   }
+ 
+   Connection::stop();
+@@ -56,10 +56,10 @@ void TcpConnection::stop()
+ 
+ void TcpConnection::startAsyncReadRequest(Buffer& buffer, int timeout)
+ {
+-  LOG_DEBUG(socket().native() << ": startAsyncReadRequest");
++  LOG_DEBUG(native() << ": startAsyncReadRequest");
+ 
+   if (state_ & Reading) {
+-    LOG_DEBUG(socket().native() << ": state_ = "
++    LOG_DEBUG(native() << ": state_ = "
+ 	      << (state_ & Reading ? "reading " : "")
+ 	      << (state_ & Writing ? "writing " : ""));
+     stop();
+@@ -81,10 +81,10 @@ void TcpConnection::startAsyncReadRequest(Buffer& buffer, int timeout)
+ void TcpConnection::startAsyncReadBody(ReplyPtr reply,
+ 				       Buffer& buffer, int timeout)
+ {
+-  LOG_DEBUG(socket().native() << ": startAsyncReadBody");
++  LOG_DEBUG(native() << ": startAsyncReadBody");
+ 
+   if (state_ & Reading) {
+-    LOG_DEBUG(socket().native() << ": state_ = "
++    LOG_DEBUG(native() << ": state_ = "
+ 	      << (state_ & Reading ? "reading " : "")
+ 	      << (state_ & Writing ? "writing " : ""));
+     stop();
+@@ -109,10 +109,10 @@ void TcpConnection::startAsyncWriteResponse
+       const std::vector<asio::const_buffer>& buffers,
+       int timeout)
+ {
+-  LOG_DEBUG(socket().native() << ": startAsyncWriteResponse");
++  LOG_DEBUG(native() << ": startAsyncWriteResponse");
+ 
+   if (state_ & Writing) {
+-    LOG_DEBUG(socket().native() << ": state_ = "
++    LOG_DEBUG(native() << ": state_ = "
+ 	      << (state_ & Reading ? "reading " : "")
+ 	      << (state_ & Writing ? "writing " : ""));
+     stop();
+diff --git a/src/web/Configuration.C b/src/web/Configuration.C
+index 6b6507b7..e5f06505 100644
+--- a/src/web/Configuration.C
++++ b/src/web/Configuration.C
+@@ -825,14 +825,10 @@ void Configuration::readApplicationSettings(xml_node<> *app)
+   runDirectory_ = singleChildElementValue(fcgi, "run-directory",
+ 					  runDirectory_);
+ 
+-  setInt(fcgi, "num-threads", numThreads_); // backward compatibility < 3.2.0
+-
+   xml_node<> *isapi = singleChildElement(app, "connector-isapi");
+   if (!isapi)
+     isapi = app; // backward compatibility
+ 
+-  setInt(isapi, "num-threads", numThreads_); // backward compatibility < 3.2.0
+-
+   std::string maxMemoryRequestSizeStr =
+     singleChildElementValue(isapi, "max-memory-request-size", "");
+   if (!maxMemoryRequestSizeStr.empty()) {

Deleted: PKGBUILD
===================================================================
--- PKGBUILD	2018-05-20 21:42:11 UTC (rev 325659)
+++ PKGBUILD	2018-05-20 21:42:19 UTC (rev 325660)
@@ -1,58 +0,0 @@
-# $Id$
-# Maintainer: Sergej Pupykin <pupykin.s+arch at gmail.com>
-# Maintainer: Sven-Hendrik Haase <sh at lutzhaase.com>
-# Contributor: Denis Martinez <deuns.martinez at gmail.com>
-
-pkgname=wt
-pkgver=4.0.2
-pkgrel=3
-pkgdesc="a C++ library and application server for developing and deploying web applications"
-arch=('x86_64')
-url="http://www.webtoolkit.eu/"
-license=('GPL')
-depends=('boost-libs' 'libharu' 'graphicsmagick' 'pango' 'zlib' 'libgl')
-makedepends=('boost' 'cmake' 'postgresql-libs' 'fcgi' 'sqlite' 'mysql++' 'qt4' 'doxygen' 'mesa' 'glu')
-optdepends=('openssl: for SSL support in built-in webserver'
-	    'fcgi: for FastCGI support'
-	    'postgresql-libs: for PostgreSQL Dbo support'
-        'libmariadbclient: for MySQL Dbo support'
-	    'sqlite: for Sqlite Dbo support'
-	    'mysql++: for the hangman example'
-	    'qt4: for the Wt/Qt interopability example (wtwithqt)')
-backup=('etc/wt/wt_config.xml')
-source=("$pkgname-$pkgver.tar.gz::https://github.com/kdeforche/wt/archive/${pkgver}.tar.gz"
-        "960e8d017b264710e344c63f9feb6ea1fa593eeb.patch")
-sha512sums=('85e35374bec662c314b20d0699656895364386ee2e51ca99d131702f02ea5a4defeb357fdda3cf068049f077daaa7a3af1dc3d239fb73b3cf13b574778e5609c'
-            'b827b7bb0c29874bcd75925b61e9ffa8ee466e340bbed68914979058eab526371a671f183e16778a6efef6bde31af8773d59528af9eaba3895a57da1eba21aaf')
-
-prepare() {
-  cd "$srcdir"/${pkgname}-${pkgver}
-
-  patch -Np1 < "$srcdir"/960e8d017b264710e344c63f9feb6ea1fa593eeb.patch
-}
-
-build() {
-  cd "$srcdir"/${pkgname}-${pkgver}
-
-  [[ -d build ]] && rm -r build
-  mkdir -p build && cd build
-  cmake \
-      -DCONNECTOR_HTTP=ON \
-      -DWT_CPP_11_MODE=-std=c++11 \
-      -DWT_WRASTERIMAGE_IMPLEMENTATION=GraphicsMagick \
-      -DCMAKE_INSTALL_PREFIX=/usr \
-      -DWEBUSER=http \
-      -DWEBGROUP=http \
-      -DUSE_SYSTEM_SQLITE3=ON \
-      -DINSTALL_EXAMPLES=ON \
-      -DBUILD_EXAMPLES=ON \
-      -DINSTALL_FINDWT_CMAKE_FILE=ON \
-      ..
-  make
-}
-
-package() {
-  cd "$srcdir"/${pkgname}-${pkgver}/build
-
-  make DESTDIR="$pkgdir" install
-}

Copied: wt/repos/community-x86_64/PKGBUILD (from rev 325659, wt/trunk/PKGBUILD)
===================================================================
--- PKGBUILD	                        (rev 0)
+++ PKGBUILD	2018-05-20 21:42:19 UTC (rev 325660)
@@ -0,0 +1,50 @@
+# $Id$
+# Maintainer: Sergej Pupykin <pupykin.s+arch at gmail.com>
+# Maintainer: Sven-Hendrik Haase <sh at lutzhaase.com>
+# Contributor: Denis Martinez <deuns.martinez at gmail.com>
+
+pkgname=wt
+pkgver=4.0.3
+pkgrel=1
+pkgdesc="a C++ library and application server for developing and deploying web applications"
+arch=('x86_64')
+url="http://www.webtoolkit.eu/"
+license=('GPL')
+depends=('boost-libs' 'libharu' 'graphicsmagick' 'pango' 'zlib' 'libgl')
+makedepends=('boost' 'cmake' 'postgresql-libs' 'fcgi' 'sqlite' 'mysql++' 'qt4' 'doxygen' 'mesa' 'glu')
+optdepends=('openssl: for SSL support in built-in webserver'
+	    'fcgi: for FastCGI support'
+	    'postgresql-libs: for PostgreSQL Dbo support'
+        'libmariadbclient: for MySQL Dbo support'
+	    'sqlite: for Sqlite Dbo support'
+	    'mysql++: for the hangman example'
+	    'qt4: for the Wt/Qt interopability example (wtwithqt)')
+backup=('etc/wt/wt_config.xml')
+source=("$pkgname-$pkgver.tar.gz::https://github.com/kdeforche/wt/archive/${pkgver}.tar.gz")
+sha512sums=('5985f72cbd3065ac696aad4d11711f2d69e066ee17141b56fd7c2616c7f7353586ab8d13db2baa90fa8f3cb116aa7c9044ee3cc42e99e8f5c8704f886ac3b2b6')
+
+build() {
+  cd "$srcdir"/${pkgname}-${pkgver}
+
+  [[ -d build ]] && rm -r build
+  mkdir -p build && cd build
+  cmake \
+      -DCONNECTOR_HTTP=ON \
+      -DWT_CPP_11_MODE=-std=c++11 \
+      -DWT_WRASTERIMAGE_IMPLEMENTATION=GraphicsMagick \
+      -DCMAKE_INSTALL_PREFIX=/usr \
+      -DWEBUSER=http \
+      -DWEBGROUP=http \
+      -DUSE_SYSTEM_SQLITE3=ON \
+      -DINSTALL_EXAMPLES=ON \
+      -DBUILD_EXAMPLES=ON \
+      -DINSTALL_FINDWT_CMAKE_FILE=ON \
+      ..
+  make
+}
+
+package() {
+  cd "$srcdir"/${pkgname}-${pkgver}/build
+
+  make DESTDIR="$pkgdir" install
+}



More information about the arch-commits mailing list