dogecoind-1.14.2-r2.ebuild for boost >= 1.74
authorJustin Wind <justin.wind+git@gmail.com>
Wed, 24 Feb 2021 02:47:21 +0000 (18:47 -0800)
committerJustin Wind <justin.wind+git@gmail.com>
Wed, 24 Feb 2021 02:47:21 +0000 (18:47 -0800)
net-p2p/dogecoind/Manifest
net-p2p/dogecoind/dogecoind-1.14.2-r2.ebuild [new file with mode: 0644]
net-p2p/dogecoind/files/0001-Fix-for-Boost-1.74.patch [new file with mode: 0644]
net-p2p/dogecoind/files/0002-httpserver-include-deque.patch [new file with mode: 0644]

index 02f19feb64a95d7ad3b0d9cc2f66f5d061f26ac0..c69880afc58003dd8714af1d14f00100b3686658 100644 (file)
@@ -1,3 +1,5 @@
+AUX 0001-Fix-for-Boost-1.74.patch 35988 BLAKE2B 89dbd3111c915057f6b1d1828eacb8c16c7f1e9d244d21251baa3a20d6cb5b1b3f1d13c2df80bde6dc082a71f72d1ccde84f87439ce15c2e0aafd518627c128a SHA512 7206804cc04d2db38209d8dbe88dc512aecb73546a3c5b57cb8b71520d3db50f83f777315f714b6ac4e6b219de4fa10ba8574b4c113070f971617e1cad2c7cea
+AUX 0002-httpserver-include-deque.patch 2921 BLAKE2B ca0df5913ff1b4f9b5000a2f0107626ed53eb2e68035050edb91a1d3a75499b7be0f966c01905ca1ee33dbcdb19a0d9d1f2fed8334619e57cd3ad5f6a08802f1 SHA512 a89f03d2df936d08ae5bb7e218e18e087f471d034eb04581ac86ea065f7978d9b6c2c2258d58a788d992aac8e4e2e4e2cfbcddca68cdc53bbc7521491355b8b8
 AUX dogecoin.conf 80 BLAKE2B be9f776453fce1081dfa95fd844089d51e8212731d7bb460256a3b258b5369fe14b0bd19af15d9c360fbc07232e8718056acd829e03138a326faba32ac42e4da SHA512 43bef890505a1fac88887bb39e9fdd4ec673ae8838a40279b33711e970551f5a75ac25171c41f8c83de2c953b157f7a3f57171e868fd9f626007d9909331a19f
 AUX dogecoin.confd 415 BLAKE2B e799f10642a3df2b97ebecd7d527dea813736c1688bf01adfb59a838df0c1abdc9de679929385066143971965fe88710abadfda086da97220267c962a43dc6dd SHA512 7bc8c86f6bdf8687ca7b4d292865c75575e2dca2fe98ff4f002e690ef7552c32be949d85d69797c99282f68357601bd3d8f84d8d8f27158865ee0bb52b1e6124
 AUX dogecoin.initd 2980 BLAKE2B b3d3b304ee1b3da41f000cd6f1fad5c24a6cc1a8e3de5b40da5ca927c7b14924d737fbca70b4a791dbcb5463283b0b9741af775372b63d8a0e30929cb3f0530f SHA512 d92d2b5f492f7b5fdea31d36f12a26ce1acbce94793d9f11f6613ad872ecc1b74a64463ac881a717ad7a092e4e296bc6022318c844201788bc90b7d5e6d52c22
@@ -8,6 +10,7 @@ DIST dogecoin-v1.14.0.tgz 7208252 BLAKE2B 0060dcffaf0c81e7931a49ee85146d37e8c663
 DIST dogecoin-v1.14.2.tgz 7207891 BLAKE2B 00de81aba4daec91ff55d0c8642fc6e633b2601f37659605621685c3f3a8fcf8df1a7947b2d3218dd0eea240a6d9b8816e3be5a1b8895aa6ad3a85713ab49290 SHA512 8d931269302675b4df8f2bcab31622897c14514ca5c70c65a410fc39af5bcdb992aaa9ee91b158b70fa0ca0853b14746b94c677d12390c5787f55291a6d0ce5c
 EBUILD dogecoind-1.10.0.ebuild 2313 BLAKE2B 9a6cebe7d69982958f7cd92fa9619410f71ae2c632b9c2bc2db58d07f9609c029ba4b923faae70c254464135de6519b0b28459651f6f730891e5367533a4e320 SHA512 163ed0def9d53d8dc5c542ce90d0cdf34b856b6af5f424962b1f21a61668a4639135fe91849b5654deb452af1986c5e3ffe78dc59beba27804cfd78abecc1e28
 EBUILD dogecoind-1.14.0.ebuild 2313 BLAKE2B 9a6cebe7d69982958f7cd92fa9619410f71ae2c632b9c2bc2db58d07f9609c029ba4b923faae70c254464135de6519b0b28459651f6f730891e5367533a4e320 SHA512 163ed0def9d53d8dc5c542ce90d0cdf34b856b6af5f424962b1f21a61668a4639135fe91849b5654deb452af1986c5e3ffe78dc59beba27804cfd78abecc1e28
+EBUILD dogecoind-1.14.2-r2.ebuild 2436 BLAKE2B af5a1db1e6b8d35229e7e8c1c4ba26abbab14345fa5d06458742e6faec3f6439b46765f0bd62725cf3ec488a3df33558687e4aed767cb8e80945a94950271e59 SHA512 c97e59b1fbf7fa494df8189bb255ffd05102db2447350b0f34a3745281393cbec33a025ced82e956dde539ac90230df5a305fee7b8b9b2872caab5e195558179
 EBUILD dogecoind-1.14.2.ebuild 2313 BLAKE2B 9a6cebe7d69982958f7cd92fa9619410f71ae2c632b9c2bc2db58d07f9609c029ba4b923faae70c254464135de6519b0b28459651f6f730891e5367533a4e320 SHA512 163ed0def9d53d8dc5c542ce90d0cdf34b856b6af5f424962b1f21a61668a4639135fe91849b5654deb452af1986c5e3ffe78dc59beba27804cfd78abecc1e28
 MISC ChangeLog 35 BLAKE2B c179e242ef417bc09182174c7b53268bac6bb2f34854ea57d98a6dccd65bf5837f39bf932a1014663d5a5a57ab1ae00cab2b95d08fcf359bf34c5b6c253bfb3b SHA512 6849adb7ba7996356171b259f1e7d428a27e5168c035787a86a2dc8e37c595bcd4a9887f5cadebeee4aefdce61e1dd6ffc8f924ff1fdda7729b75dcd2a404f43
 MISC Manifest.old 6402 BLAKE2B 5f6804d1c0068db8f9d0b9485a6e744f25ef05a49d2e895635f2b55cf1271786be72da7ff288352361a43d37bd1cd705dc8e980ce100427337411a2e5b6e84c5 SHA512 9b26de814ce6f6bf9c430c44b31551a6ca5ce82311a254eff8444209c762f3f1850d3ea10ac2a3682948a35569c0db08ffc41e5c82acca2b2771298aed6a5dde
diff --git a/net-p2p/dogecoind/dogecoind-1.14.2-r2.ebuild b/net-p2p/dogecoind/dogecoind-1.14.2-r2.ebuild
new file mode 100644 (file)
index 0000000..8bb8352
--- /dev/null
@@ -0,0 +1,108 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI="5"
+
+DB_VER="5.1"
+
+inherit autotools db-use eutils flag-o-matic versionator systemd user
+
+MyPV="${PV/_/}"
+MyPN="dogecoin"
+MyP="${MyPN}-${MyPV}"
+
+DESCRIPTION="P2P Internet currency based on Bitcoin but wow such doge"
+HOMEPAGE="https://dogecoin.com/"
+SRC_URI="https://github.com/${MyPN}/${MyPN}/archive/v${MyPV}.tar.gz -> ${MyPN}-v${PV}.tgz"
+
+LICENSE="MIT ISC GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug examples logrotate upnp +wallet test"
+
+RDEPEND="
+       >=dev-libs/boost-1.48.0[threads(+)]
+       dev-libs/openssl:0[-bindist]
+       logrotate? (
+               app-admin/logrotate
+       )
+       upnp? (
+               net-libs/miniupnpc
+       )
+       wallet? (
+               sys-libs/db:$(db_ver_to_slot "${DB_VER}")[cxx]
+       )
+"
+DEPEND="${RDEPEND}
+       >=app-shells/bash-4.1
+       sys-apps/sed
+"
+
+S="${WORKDIR}/${MyP}"
+
+pkg_setup() {
+       local UG='dogecoin'
+       enewgroup "${UG}"
+       enewuser "${UG}" -1 -1 /var/lib/dogecoin "${UG}"
+}
+
+src_prepare() {
+       epatch "${FILESDIR}/0001-Fix-for-Boost-1.74.patch"
+       epatch "${FILESDIR}/0002-httpserver-include-deque.patch"
+       epatch_user
+       eautoreconf
+}
+
+src_configure() {
+       append-cppflags "-I/usr/include/db${DB_VER}"
+       econf \
+               $(use_enable wallet) \
+               $(use_enable test tests) \
+               --disable-hardening \
+               $(use_enable debug) \
+               $(use_with upnp miniupnpc) \
+               --with-gui=no
+}
+
+src_test() {
+       emake check
+}
+
+src_install() {
+       dobin "src/${PN}"
+       dobin "src/dogecoin-cli"
+
+       insinto /etc/dogecoin
+       newins "${FILESDIR}/dogecoin.conf" dogecoin.conf
+       fowners dogecoin:dogecoin /etc/dogecoin/dogecoin.conf
+       fperms 600 /etc/dogecoin/dogecoin.conf
+
+       newconfd "${FILESDIR}/dogecoin.confd" "${PN}"
+       newinitd "${FILESDIR}/dogecoin.initd" "${PN}"
+#      systemd_dounit "${FILESDIR}/dogecoind.service"
+
+       keepdir /var/lib/dogecoin/.dogecoin
+       fperms 700 /var/lib/dogecoin
+       fowners dogecoin:dogecoin /var/lib/dogecoin/
+       fowners dogecoin:dogecoin /var/lib/dogecoin/.dogecoin
+       dosym /etc/dogecoin/dogecoin.conf /var/lib/dogecoin/.dogecoin/dogecoin.conf
+
+       dodoc doc/README.md
+       # dodoc RELEASE_NOTES_1_8.2.md
+#      doman contrib/debian/manpages/{dogecoind.1,dogecoin.conf.5}
+
+#      if use bash-completion; then
+#              newbashcomp "contrib/${PN}.bash-completion" "${PN}"
+#      fi
+
+       if use examples; then
+               docinto examples
+               dodoc -r contrib/{README.md,bitrpc,pyminer,spendfrom,linearize,qos}
+       fi
+
+       if use logrotate; then
+               insinto /etc/logrotate.d
+               newins "${FILESDIR}/dogecoind.logrotate" dogecoind
+       fi
+}
diff --git a/net-p2p/dogecoind/files/0001-Fix-for-Boost-1.74.patch b/net-p2p/dogecoind/files/0001-Fix-for-Boost-1.74.patch
new file mode 100644 (file)
index 0000000..1244011
--- /dev/null
@@ -0,0 +1,614 @@
+From 283bc86d0ef816a018a77396baacdc89152be5ae Mon Sep 17 00:00:00 2001
+From: John-Gee <john.ettedgui@gmail.com>
+Date: Tue, 22 Dec 2020 06:25:23 -0800
+Subject: [PATCH 1/2] Fix for Boost 1.74
+
+---
+ src/init.cpp                     |  2 +-
+ src/qt/bitcoingui.cpp            | 22 ++++++++--
+ src/qt/clientmodel.cpp           | 46 +++++++++++++++-----
+ src/qt/splashscreen.cpp          | 26 ++++++++---
+ src/qt/transactiontablemodel.cpp | 19 ++++++--
+ src/qt/walletmodel.cpp           | 46 +++++++++++++++-----
+ src/rpc/server.cpp               |  9 ++--
+ src/scheduler.cpp                |  2 +-
+ src/test/scheduler_tests.cpp     |  2 +-
+ src/torcontrol.cpp               | 36 ++++++++++-----
+ src/validation.cpp               |  9 +++-
+ src/validationinterface.cpp      | 75 +++++++++++++++++++++++---------
+ 12 files changed, 217 insertions(+), 77 deletions(-)
+
+diff --git a/src/init.cpp b/src/init.cpp
+index 0b7777fa0..f06c1811f 100644
+--- a/src/init.cpp
++++ b/src/init.cpp
+@@ -54,7 +54,7 @@
+ #include <boost/algorithm/string/predicate.hpp>
+ #include <boost/algorithm/string/replace.hpp>
+ #include <boost/algorithm/string/split.hpp>
+-#include <boost/bind.hpp>
++#include <boost/bind/bind.hpp>
+ #include <boost/filesystem.hpp>
+ #include <boost/function.hpp>
+ #include <boost/interprocess/sync/file_lock.hpp>
+diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
+index 670e4f2c6..80b18059b 100644
+--- a/src/qt/bitcoingui.cpp
++++ b/src/qt/bitcoingui.cpp
+@@ -75,6 +75,8 @@ const std::string BitcoinGUI::DEFAULT_UIPLATFORM =
+ #endif
+         ;
++#include <boost/bind/bind.hpp>
++
+ /** Display name for default wallet name. Uses tilde to avoid name
+  * collisions in the future with additional wallets */
+ const QString BitcoinGUI::DEFAULT_WALLET = "~Default";
+@@ -1196,15 +1198,27 @@ static bool ThreadSafeMessageBox(BitcoinGUI *gui, const std::string& message, co
+ void BitcoinGUI::subscribeToCoreSignals()
+ {
+     // Connect signals to client
+-    uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3));
+-    uiInterface.ThreadSafeQuestion.connect(boost::bind(ThreadSafeMessageBox, this, _1, _3, _4));
++    uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, this,
++                                                         boost::placeholders::_1,
++                                                         boost::placeholders::_2,
++                                                         boost::placeholders::_3));
++    uiInterface.ThreadSafeQuestion.connect(boost::bind(ThreadSafeMessageBox, this,
++                                                       boost::placeholders::_1,
++                                                       boost::placeholders::_3,
++                                                       boost::placeholders::_4));
+ }
+ void BitcoinGUI::unsubscribeFromCoreSignals()
+ {
+     // Disconnect signals from client
+-    uiInterface.ThreadSafeMessageBox.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3));
+-    uiInterface.ThreadSafeQuestion.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _3, _4));
++    uiInterface.ThreadSafeMessageBox.disconnect(boost::bind(ThreadSafeMessageBox, this,
++                                                            boost::placeholders::_1,
++                                                            boost::placeholders::_2,
++                                                            boost::placeholders::_3));
++    uiInterface.ThreadSafeQuestion.disconnect(boost::bind(ThreadSafeMessageBox, this,
++                                                          boost::placeholders::_1,
++                                                          boost::placeholders::_3,
++                                                          boost::placeholders::_4));
+ }
+ void BitcoinGUI::toggleNetworkActive()
+diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp
+index 538bd9518..f134b04bb 100644
+--- a/src/qt/clientmodel.cpp
++++ b/src/qt/clientmodel.cpp
+@@ -24,6 +24,8 @@
+ #include <QDebug>
+ #include <QTimer>
++#include <boost/bind/bind.hpp>
++
+ class CBlockIndex;
+ static const int64_t nClientStartupTime = GetTime();
+@@ -330,23 +332,43 @@ static void BlockTipChanged(ClientModel *clientmodel, bool initialSync, const CB
+ void ClientModel::subscribeToCoreSignals()
+ {
+     // Connect signals to client
+-    uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
+-    uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChanged, this, _1));
+-    uiInterface.NotifyNetworkActiveChanged.connect(boost::bind(NotifyNetworkActiveChanged, this, _1));
+-    uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this, _1, _2));
++    uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this,
++                                                 boost::placeholders::_1,
++                                                 boost::placeholders::_2));
++    uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChanged, this,
++                                                                boost::placeholders::_1));
++    uiInterface.NotifyNetworkActiveChanged.connect(boost::bind(NotifyNetworkActiveChanged, this,
++                                                               boost::placeholders::_1));
++    uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this,
++                                           boost::placeholders::_1,
++                                           boost::placeholders::_2));
+     uiInterface.BannedListChanged.connect(boost::bind(BannedListChanged, this));
+-    uiInterface.NotifyBlockTip.connect(boost::bind(BlockTipChanged, this, _1, _2, false));
+-    uiInterface.NotifyHeaderTip.connect(boost::bind(BlockTipChanged, this, _1, _2, true));
++    uiInterface.NotifyBlockTip.connect(boost::bind(BlockTipChanged, this,
++                                                   boost::placeholders::_1,
++                                                   boost::placeholders::_2, false));
++    uiInterface.NotifyHeaderTip.connect(boost::bind(BlockTipChanged, this,
++                                                    boost::placeholders::_1,
++                                                    boost::placeholders::_2, true));
+ }
+ void ClientModel::unsubscribeFromCoreSignals()
+ {
+     // Disconnect signals from client
+-    uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
+-    uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsChanged, this, _1));
+-    uiInterface.NotifyNetworkActiveChanged.disconnect(boost::bind(NotifyNetworkActiveChanged, this, _1));
+-    uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this, _1, _2));
++    uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this,
++                                                    boost::placeholders::_1,
++                                                    boost::placeholders::_2));
++    uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsChanged, this,
++                                                                   boost::placeholders::_1));
++    uiInterface.NotifyNetworkActiveChanged.disconnect(boost::bind(NotifyNetworkActiveChanged, this,
++                                                                  boost::placeholders::_1));
++    uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this,
++                                                          boost::placeholders::_1,
++                                                          boost::placeholders::_2));
+     uiInterface.BannedListChanged.disconnect(boost::bind(BannedListChanged, this));
+-    uiInterface.NotifyBlockTip.disconnect(boost::bind(BlockTipChanged, this, _1, _2, false));
+-    uiInterface.NotifyHeaderTip.disconnect(boost::bind(BlockTipChanged, this, _1, _2, true));
++    uiInterface.NotifyBlockTip.disconnect(boost::bind(BlockTipChanged, this,
++                                                      boost::placeholders::_1,
++                                                      boost::placeholders::_2, false));
++    uiInterface.NotifyHeaderTip.disconnect(boost::bind(BlockTipChanged, this,
++                                                       boost::placeholders::_1,
++                                                       boost::placeholders::_2, true));
+ }
+diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp
+index 656a2875c..c271c7fb9 100644
+--- a/src/qt/splashscreen.cpp
++++ b/src/qt/splashscreen.cpp
+@@ -26,6 +26,8 @@
+ #include <QPainter>
+ #include <QRadialGradient>
++#include <boost/bind/bind.hpp>
++
+ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle) :
+     QWidget(0, f), curAlignment(0)
+ {
+@@ -167,7 +169,9 @@ static void ShowProgress(SplashScreen *splash, const std::string &title, int nPr
+ #ifdef ENABLE_WALLET
+ void SplashScreen::ConnectWallet(CWallet* wallet)
+ {
+-    wallet->ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
++    wallet->ShowProgress.connect(boost::bind(ShowProgress, this,
++                                             boost::placeholders::_1,
++                                             boost::placeholders::_2));
+     connectedWallets.push_back(wallet);
+ }
+ #endif
+@@ -175,21 +179,29 @@ void SplashScreen::ConnectWallet(CWallet* wallet)
+ void SplashScreen::subscribeToCoreSignals()
+ {
+     // Connect signals to client
+-    uiInterface.InitMessage.connect(boost::bind(InitMessage, this, _1));
+-    uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
++    uiInterface.InitMessage.connect(boost::bind(InitMessage, this,
++                                                boost::placeholders::_1));
++    uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this,
++                                                 boost::placeholders::_1,boost::placeholders::_2));
+ #ifdef ENABLE_WALLET
+-    uiInterface.LoadWallet.connect(boost::bind(&SplashScreen::ConnectWallet, this, _1));
++    uiInterface.LoadWallet.connect(boost::bind(&SplashScreen::ConnectWallet, this,
++                                               boost::placeholders::_1));
+ #endif
+ }
+ void SplashScreen::unsubscribeFromCoreSignals()
+ {
+     // Disconnect signals from client
+-    uiInterface.InitMessage.disconnect(boost::bind(InitMessage, this, _1));
+-    uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
++    uiInterface.InitMessage.disconnect(boost::bind(InitMessage, this,
++                                                   boost::placeholders::_1));
++    uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this,
++                                                    boost::placeholders::_1,
++                                                    boost::placeholders::_2));
+ #ifdef ENABLE_WALLET
+     Q_FOREACH(CWallet* const & pwallet, connectedWallets) {
+-        pwallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
++        pwallet->ShowProgress.disconnect(boost::bind(ShowProgress, this,
++                                                     boost::placeholders::_1,
++                                                     boost::placeholders::_2));
+     }
+ #endif
+ }
+diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp
+index 61466c8ed..57d6787c2 100644
+--- a/src/qt/transactiontablemodel.cpp
++++ b/src/qt/transactiontablemodel.cpp
+@@ -26,6 +26,7 @@
+ #include <QIcon>
+ #include <QList>
++#include <boost/bind/bind.hpp>
+ #include <boost/foreach.hpp>
+ // Amount column is right-aligned it contains numbers
+@@ -777,13 +778,23 @@ static void ShowProgress(TransactionTableModel *ttm, const std::string &title, i
+ void TransactionTableModel::subscribeToCoreSignals()
+ {
+     // Connect signals to wallet
+-    wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3));
+-    wallet->ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
++    wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this,
++                                                         boost::placeholders::_1,
++                                                         boost::placeholders::_2,
++                                                         boost::placeholders::_3));
++    wallet->ShowProgress.connect(boost::bind(ShowProgress, this,
++                                             boost::placeholders::_1,
++                                             boost::placeholders::_2));
+ }
+ void TransactionTableModel::unsubscribeFromCoreSignals()
+ {
+     // Disconnect signals from wallet
+-    wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3));
+-    wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
++    wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this,
++                                                            boost::placeholders::_1,
++                                                            boost::placeholders::_2,
++                                                            boost::placeholders::_3));
++    wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this,
++                                                boost::placeholders::_1,
++                                                boost::placeholders::_2));
+ }
+diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
+index 0a5a7c3e9..fb893ae25 100644
+--- a/src/qt/walletmodel.cpp
++++ b/src/qt/walletmodel.cpp
+@@ -28,6 +28,7 @@
+ #include <QSet>
+ #include <QTimer>
++#include <boost/bind/bind.hpp>
+ #include <boost/foreach.hpp>
+ WalletModel::WalletModel(const PlatformStyle *platformStyle, CWallet *_wallet, OptionsModel *_optionsModel, QObject *parent) :
+@@ -502,21 +503,46 @@ static void NotifyWatchonlyChanged(WalletModel *walletmodel, bool fHaveWatchonly
+ void WalletModel::subscribeToCoreSignals()
+ {
+     // Connect signals to wallet
+-    wallet->NotifyStatusChanged.connect(boost::bind(&NotifyKeyStoreStatusChanged, this, _1));
+-    wallet->NotifyAddressBookChanged.connect(boost::bind(NotifyAddressBookChanged, this, _1, _2, _3, _4, _5, _6));
+-    wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3));
+-    wallet->ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
+-    wallet->NotifyWatchonlyChanged.connect(boost::bind(NotifyWatchonlyChanged, this, _1));
++    wallet->NotifyStatusChanged.connect(boost::bind(&NotifyKeyStoreStatusChanged, this,
++                                                    boost::placeholders::_1));
++    wallet->NotifyAddressBookChanged.connect(boost::bind(NotifyAddressBookChanged, this,
++                                                         boost::placeholders::_1,
++                                                         boost::placeholders::_2,
++                                                         boost::placeholders::_3,
++                                                         boost::placeholders::_4,
++                                                         boost::placeholders::_5,
++                                                         boost::placeholders::_6));
++    wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this,
++                                                         boost::placeholders::_1,
++                                                         boost::placeholders::_2,
++                                                         boost::placeholders::_3));
++    wallet->ShowProgress.connect(boost::bind(ShowProgress, this, boost::placeholders::_1,
++                                             boost::placeholders::_2));
++    wallet->NotifyWatchonlyChanged.connect(boost::bind(NotifyWatchonlyChanged, this,
++                                                       boost::placeholders::_1));
+ }
+ void WalletModel::unsubscribeFromCoreSignals()
+ {
+     // Disconnect signals from wallet
+-    wallet->NotifyStatusChanged.disconnect(boost::bind(&NotifyKeyStoreStatusChanged, this, _1));
+-    wallet->NotifyAddressBookChanged.disconnect(boost::bind(NotifyAddressBookChanged, this, _1, _2, _3, _4, _5, _6));
+-    wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3));
+-    wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
+-    wallet->NotifyWatchonlyChanged.disconnect(boost::bind(NotifyWatchonlyChanged, this, _1));
++    wallet->NotifyStatusChanged.disconnect(boost::bind(&NotifyKeyStoreStatusChanged, this,
++                                                       boost::placeholders::_1));
++    wallet->NotifyAddressBookChanged.disconnect(boost::bind(NotifyAddressBookChanged, this, 
++                                                            boost::placeholders::_1,
++                                                            boost::placeholders::_2,
++                                                            boost::placeholders::_3,
++                                                            boost::placeholders::_4,
++                                                            boost::placeholders::_5,
++                                                            boost::placeholders::_6));
++    wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this,
++                                                            boost::placeholders::_1,
++                                                            boost::placeholders::_2,
++                                                            boost::placeholders::_3));
++    wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this,
++                                                boost::placeholders::_1,
++                                                boost::placeholders::_2));
++    wallet->NotifyWatchonlyChanged.disconnect(boost::bind(NotifyWatchonlyChanged, this,
++                                                          boost::placeholders::_1));
+ }
+ // WalletModel::UnlockContext implementation
+diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp
+index 6ab5f834f..303806b99 100644
+--- a/src/rpc/server.cpp
++++ b/src/rpc/server.cpp
+@@ -15,7 +15,7 @@
+ #include <univalue.h>
+-#include <boost/bind.hpp>
++#include <boost/bind/bind.hpp>
+ #include <boost/filesystem.hpp>
+ #include <boost/foreach.hpp>
+ #include <boost/shared_ptr.hpp>
+@@ -58,12 +58,12 @@ void RPCServer::OnStopped(boost::function<void ()> slot)
+ void RPCServer::OnPreCommand(boost::function<void (const CRPCCommand&)> slot)
+ {
+-    g_rpcSignals.PreCommand.connect(boost::bind(slot, _1));
++    g_rpcSignals.PreCommand.connect(boost::bind(slot, boost::placeholders::_1));
+ }
+ void RPCServer::OnPostCommand(boost::function<void (const CRPCCommand&)> slot)
+ {
+-    g_rpcSignals.PostCommand.connect(boost::bind(slot, _1));
++    g_rpcSignals.PostCommand.connect(boost::bind(slot, boost::placeholders::_1));
+ }
+ void RPCTypeCheck(const UniValue& params,
+@@ -516,7 +516,8 @@ std::vector<std::string> CRPCTable::listCommands() const
+     std::transform( mapCommands.begin(), mapCommands.end(),
+                    std::back_inserter(commandList),
+-                   boost::bind(&commandMap::value_type::first,_1) );
++                   boost::bind(&commandMap::value_type::first,
++                               boost::placeholders::_1) );
+     return commandList;
+ }
+diff --git a/src/scheduler.cpp b/src/scheduler.cpp
+index b01170074..f2b41024f 100644
+--- a/src/scheduler.cpp
++++ b/src/scheduler.cpp
+@@ -7,7 +7,7 @@
+ #include "reverselock.h"
+ #include <assert.h>
+-#include <boost/bind.hpp>
++#include <boost/bind/bind.hpp>
+ #include <utility>
+ CScheduler::CScheduler() : nThreadsServicingQueue(0), stopRequested(false), stopWhenEmpty(false)
+diff --git a/src/test/scheduler_tests.cpp b/src/test/scheduler_tests.cpp
+index e4ddf9d61..c76adfe8a 100644
+--- a/src/test/scheduler_tests.cpp
++++ b/src/test/scheduler_tests.cpp
+@@ -7,7 +7,7 @@
+ #include "test/test_bitcoin.h"
+-#include <boost/bind.hpp>
++#include <boost/bind/bind.hpp>
+ #include <boost/random/mersenne_twister.hpp>
+ #include <boost/random/uniform_int_distribution.hpp>
+ #include <boost/thread.hpp>
+diff --git a/src/torcontrol.cpp b/src/torcontrol.cpp
+index c49c5d9eb..d1299edf3 100644
+--- a/src/torcontrol.cpp
++++ b/src/torcontrol.cpp
+@@ -15,7 +15,7 @@
+ #include <stdlib.h>
+ #include <boost/function.hpp>
+-#include <boost/bind.hpp>
++#include <boost/bind/bind.hpp>
+ #include <boost/signals2/signal.hpp>
+ #include <boost/foreach.hpp>
+ #include <boost/algorithm/string/predicate.hpp>
+@@ -403,8 +403,9 @@ TorController::TorController(struct event_base* _base, const std::string& _targe
+     if (!reconnect_ev)
+         LogPrintf("tor: Failed to create event for reconnection: out of memory?\n");
+     // Start connection attempts immediately
+-    if (!conn.Connect(_target, boost::bind(&TorController::connected_cb, this, _1),
+-         boost::bind(&TorController::disconnected_cb, this, _1) )) {
++    if (!conn.Connect(_target, boost::bind(&TorController::connected_cb, this,
++                                           boost::placeholders::_1),
++         boost::bind(&TorController::disconnected_cb, this,boost::placeholders::_1) )) {
+         LogPrintf("tor: Initiating connection to Tor control port %s failed\n", _target);
+     }
+     // Read service private key if cached
+@@ -475,7 +476,9 @@ void TorController::auth_cb(TorControlConnection& _conn, const TorControlReply&
+         // Note that the 'virtual' port doesn't have to be the same as our internal port, but this is just a convenient
+         // choice.  TODO; refactor the shutdown sequence some day.
+         _conn.Command(strprintf("ADD_ONION %s Port=%i,127.0.0.1:%i", private_key, GetListenPort(), GetListenPort()),
+-            boost::bind(&TorController::add_onion_cb, this, _1, _2));
++            boost::bind(&TorController::add_onion_cb, this,
++                        boost::placeholders::_1,
++                        boost::placeholders::_2));
+     } else {
+         LogPrintf("tor: Authentication failed\n");
+     }
+@@ -530,7 +533,9 @@ void TorController::authchallenge_cb(TorControlConnection& _conn, const TorContr
+             }
+             std::vector<uint8_t> computedClientHash = ComputeResponse(TOR_SAFE_CLIENTKEY, cookie, clientNonce, serverNonce);
+-            _conn.Command("AUTHENTICATE " + HexStr(computedClientHash), boost::bind(&TorController::auth_cb, this, _1, _2));
++            _conn.Command("AUTHENTICATE " + HexStr(computedClientHash), boost::bind(&TorController::auth_cb, this,
++                                                                                    boost::placeholders::_1,
++                                                                                    boost::placeholders::_2));
+         } else {
+             LogPrintf("tor: Invalid reply to AUTHCHALLENGE\n");
+         }
+@@ -579,13 +584,17 @@ void TorController::protocolinfo_cb(TorControlConnection& _conn, const TorContro
+             if (methods.count("HASHEDPASSWORD")) {
+                 LogPrint("tor", "tor: Using HASHEDPASSWORD authentication\n");
+                 boost::replace_all(torpassword, "\"", "\\\"");
+-                _conn.Command("AUTHENTICATE \"" + torpassword + "\"", boost::bind(&TorController::auth_cb, this, _1, _2));
++                _conn.Command("AUTHENTICATE \"" + torpassword + "\"", boost::bind(&TorController::auth_cb, this,
++                                                                                  boost::placeholders::_1,
++                                                                                  boost::placeholders::_2));
+             } else {
+                 LogPrintf("tor: Password provided with -torpassword, but HASHEDPASSWORD authentication is not available\n");
+             }
+         } else if (methods.count("NULL")) {
+             LogPrint("tor", "tor: Using NULL authentication\n");
+-            _conn.Command("AUTHENTICATE", boost::bind(&TorController::auth_cb, this, _1, _2));
++            _conn.Command("AUTHENTICATE", boost::bind(&TorController::auth_cb, this,
++                                                      boost::placeholders::_1,
++                                                      boost::placeholders::_2));
+         } else if (methods.count("SAFECOOKIE")) {
+             // Cookie: hexdump -e '32/1 "%02x""\n"'  ~/.tor/control_auth_cookie
+             LogPrint("tor", "tor: Using SAFECOOKIE authentication, reading cookie authentication from %s\n", cookiefile);
+@@ -595,7 +604,9 @@ void TorController::protocolinfo_cb(TorControlConnection& _conn, const TorContro
+                 cookie = std::vector<uint8_t>(status_cookie.second.begin(), status_cookie.second.end());
+                 clientNonce = std::vector<uint8_t>(TOR_NONCE_SIZE, 0);
+                 GetRandBytes(&clientNonce[0], TOR_NONCE_SIZE);
+-                _conn.Command("AUTHCHALLENGE SAFECOOKIE " + HexStr(clientNonce), boost::bind(&TorController::authchallenge_cb, this, _1, _2));
++                _conn.Command("AUTHCHALLENGE SAFECOOKIE " + HexStr(clientNonce), boost::bind(&TorController::authchallenge_cb, this,
++                                                                                             boost::placeholders::_1,
++                                                                                             boost::placeholders::_2));
+             } else {
+                 if (status_cookie.first) {
+                     LogPrintf("tor: Authentication cookie %s is not exactly %i bytes, as is required by the spec\n", cookiefile, TOR_COOKIE_SIZE);
+@@ -617,7 +628,9 @@ void TorController::connected_cb(TorControlConnection& _conn)
+ {
+     reconnect_timeout = RECONNECT_TIMEOUT_START;
+     // First send a PROTOCOLINFO command to figure out what authentication is expected
+-    if (!_conn.Command("PROTOCOLINFO 1", boost::bind(&TorController::protocolinfo_cb, this, _1, _2)))
++    if (!_conn.Command("PROTOCOLINFO 1", boost::bind(&TorController::protocolinfo_cb, this,
++                                                     boost::placeholders::_1,
++                                                     boost::placeholders::_2)))
+         LogPrintf("tor: Error sending initial protocolinfo command\n");
+ }
+@@ -644,8 +657,9 @@ void TorController::Reconnect()
+     /* Try to reconnect and reestablish if we get booted - for example, Tor
+      * may be restarting.
+      */
+-    if (!conn.Connect(target, boost::bind(&TorController::connected_cb, this, _1),
+-         boost::bind(&TorController::disconnected_cb, this, _1) )) {
++    if (!conn.Connect(target, boost::bind(&TorController::connected_cb, this,
++                                          boost::placeholders::_1),
++         boost::bind(&TorController::disconnected_cb, this, boost::placeholders::_1) )) {
+         LogPrintf("tor: Re-initiating connection to Tor control port %s failed\n", target);
+     }
+ }
+diff --git a/src/validation.cpp b/src/validation.cpp
+index 5b27b9ec5..2202d732d 100644
+--- a/src/validation.cpp
++++ b/src/validation.cpp
+@@ -44,6 +44,7 @@
+ #include <boost/algorithm/string/replace.hpp>
+ #include <boost/algorithm/string/join.hpp>
++#include <boost/bind/bind.hpp>
+ #include <boost/filesystem.hpp>
+ #include <boost/filesystem/fstream.hpp>
+ #include <boost/math/distributions/poisson.hpp>
+@@ -179,7 +180,9 @@ private:
+ public:
+     MemPoolConflictRemovalTracker(CTxMemPool &_pool) : pool(_pool) {
+-        pool.NotifyEntryRemoved.connect(boost::bind(&MemPoolConflictRemovalTracker::NotifyEntryRemoved, this, _1, _2));
++        pool.NotifyEntryRemoved.connect(boost::bind(&MemPoolConflictRemovalTracker::NotifyEntryRemoved,
++                                                    this, boost::placeholders::_1,
++                                                    boost::placeholders::_2));
+     }
+     void NotifyEntryRemoved(CTransactionRef txRemoved, MemPoolRemovalReason reason) {
+@@ -189,7 +192,9 @@ public:
+     }
+     ~MemPoolConflictRemovalTracker() {
+-        pool.NotifyEntryRemoved.disconnect(boost::bind(&MemPoolConflictRemovalTracker::NotifyEntryRemoved, this, _1, _2));
++        pool.NotifyEntryRemoved.disconnect(boost::bind(&MemPoolConflictRemovalTracker::NotifyEntryRemoved,
++                                                       this, boost::placeholders::_1,
++                                                       boost::placeholders::_2));
+         for (const auto& tx : conflictedTxs) {
+             GetMainSignals().SyncTransaction(*tx, NULL, CMainSignals::SYNC_TRANSACTION_NOT_IN_BLOCK);
+         }
+diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp
+index d4121a28b..c34d7d326 100644
+--- a/src/validationinterface.cpp
++++ b/src/validationinterface.cpp
+@@ -5,6 +5,8 @@
+ #include "validationinterface.h"
++#include <boost/bind/bind.hpp>
++
+ static CMainSignals g_signals;
+ CMainSignals& GetMainSignals()
+@@ -13,29 +15,62 @@ CMainSignals& GetMainSignals()
+ }
+ void RegisterValidationInterface(CValidationInterface* pwalletIn) {
+-    g_signals.UpdatedBlockTip.connect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, _1, _2, _3));
+-    g_signals.SyncTransaction.connect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, _1, _2, _3));
+-    g_signals.UpdatedTransaction.connect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, _1));
+-    g_signals.SetBestChain.connect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, _1));
+-    g_signals.Inventory.connect(boost::bind(&CValidationInterface::Inventory, pwalletIn, _1));
+-    g_signals.Broadcast.connect(boost::bind(&CValidationInterface::ResendWalletTransactions, pwalletIn, _1, _2));
+-    g_signals.BlockChecked.connect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, _1, _2));
+-    g_signals.ScriptForMining.connect(boost::bind(&CValidationInterface::GetScriptForMining, pwalletIn, _1));
+-    g_signals.BlockFound.connect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, _1));
+-    g_signals.NewPoWValidBlock.connect(boost::bind(&CValidationInterface::NewPoWValidBlock, pwalletIn, _1, _2));
++    g_signals.UpdatedBlockTip.connect(boost::bind(&CValidationInterface::UpdatedBlockTip,
++                                                  pwalletIn, boost::placeholders::_1,
++                                                  boost::placeholders::_2,
++                                                  boost::placeholders::_3));
++    g_signals.SyncTransaction.connect(boost::bind(&CValidationInterface::SyncTransaction,
++                                                  pwalletIn, boost::placeholders::_1,
++                                                  boost::placeholders::_2,
++                                                  boost::placeholders::_3));
++    g_signals.UpdatedTransaction.connect(boost::bind(&CValidationInterface::UpdatedTransaction,
++                                                     pwalletIn, boost::placeholders::_1));
++    g_signals.SetBestChain.connect(boost::bind(&CValidationInterface::SetBestChain,
++                                               pwalletIn, boost::placeholders::_1));
++    g_signals.Inventory.connect(boost::bind(&CValidationInterface::Inventory,
++                                            pwalletIn, boost::placeholders::_1));
++    g_signals.Broadcast.connect(boost::bind(&CValidationInterface::ResendWalletTransactions,
++                                            pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
++    g_signals.BlockChecked.connect(boost::bind(&CValidationInterface::BlockChecked,
++                                               pwalletIn, boost::placeholders::_1,
++                                               boost::placeholders::_2));
++    g_signals.ScriptForMining.connect(boost::bind(&CValidationInterface::GetScriptForMining,
++                                                  pwalletIn, boost::placeholders::_1));
++    g_signals.BlockFound.connect(boost::bind(&CValidationInterface::ResetRequestCount,
++                                             pwalletIn, boost::placeholders::_1));
++    g_signals.NewPoWValidBlock.connect(boost::bind(&CValidationInterface::NewPoWValidBlock,
++                                                   pwalletIn, boost::placeholders::_1,
++                                                   boost::placeholders::_2));
+ }
+ void UnregisterValidationInterface(CValidationInterface* pwalletIn) {
+-    g_signals.BlockFound.disconnect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, _1));
+-    g_signals.ScriptForMining.disconnect(boost::bind(&CValidationInterface::GetScriptForMining, pwalletIn, _1));
+-    g_signals.BlockChecked.disconnect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, _1, _2));
+-    g_signals.Broadcast.disconnect(boost::bind(&CValidationInterface::ResendWalletTransactions, pwalletIn, _1, _2));
+-    g_signals.Inventory.disconnect(boost::bind(&CValidationInterface::Inventory, pwalletIn, _1));
+-    g_signals.SetBestChain.disconnect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, _1));
+-    g_signals.UpdatedTransaction.disconnect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, _1));
+-    g_signals.SyncTransaction.disconnect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, _1, _2, _3));
+-    g_signals.UpdatedBlockTip.disconnect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, _1, _2, _3));
+-    g_signals.NewPoWValidBlock.disconnect(boost::bind(&CValidationInterface::NewPoWValidBlock, pwalletIn, _1, _2));
++    g_signals.BlockFound.disconnect(boost::bind(&CValidationInterface::ResetRequestCount,
++                                                pwalletIn, boost::placeholders::_1));
++    g_signals.ScriptForMining.disconnect(boost::bind(&CValidationInterface::GetScriptForMining,
++                                                     pwalletIn, boost::placeholders::_1));
++    g_signals.BlockChecked.disconnect(boost::bind(&CValidationInterface::BlockChecked,
++                                                  pwalletIn, boost::placeholders::_1,
++                                                  boost::placeholders::_2));
++    g_signals.Broadcast.disconnect(boost::bind(&CValidationInterface::ResendWalletTransactions,
++                                               pwalletIn, boost::placeholders::_1,
++                                               boost::placeholders::_2));
++    g_signals.Inventory.disconnect(boost::bind(&CValidationInterface::Inventory,
++                                               pwalletIn, boost::placeholders::_1));
++    g_signals.SetBestChain.disconnect(boost::bind(&CValidationInterface::SetBestChain,
++                                                  pwalletIn, boost::placeholders::_1));
++    g_signals.UpdatedTransaction.disconnect(boost::bind(&CValidationInterface::UpdatedTransaction,
++                                                        pwalletIn, boost::placeholders::_1));
++    g_signals.SyncTransaction.disconnect(boost::bind(&CValidationInterface::SyncTransaction,
++                                                     pwalletIn, boost::placeholders::_1,
++                                                     boost::placeholders::_2,
++                                                     boost::placeholders::_3));
++    g_signals.UpdatedBlockTip.disconnect(boost::bind(&CValidationInterface::UpdatedBlockTip,
++                                         pwalletIn, boost::placeholders::_1,
++                                         boost::placeholders::_2,
++                                         boost::placeholders::_3));
++    g_signals.NewPoWValidBlock.disconnect(boost::bind(&CValidationInterface::NewPoWValidBlock,
++                                          pwalletIn, boost::placeholders::_1,
++                                          boost::placeholders::_2));
+ }
+ void UnregisterAllValidationInterfaces() {
+-- 
+2.26.2
+
diff --git a/net-p2p/dogecoind/files/0002-httpserver-include-deque.patch b/net-p2p/dogecoind/files/0002-httpserver-include-deque.patch
new file mode 100644 (file)
index 0000000..f6e726b
--- /dev/null
@@ -0,0 +1,60 @@
+From 075cc97d089d38df6f2b4767db5290e9d7e995a9 Mon Sep 17 00:00:00 2001
+From: Bertrand Jacquin <bertrand@jacquin.bzh>
+Date: Fri, 24 Jan 2020 20:16:27 +0000
+Subject: [PATCH 2/2] httpserver: include deque
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+It seems gcc 9.2.0 requires deque to be included:
+
+  x86_64-pc-linux-gnu-g++ -std=c++11 -DHAVE_CONFIG_H -I. -I../src/config   -I. -I./obj -I/usr/include/db5.1/ -pthread -I/usr/include -I./leveldb/include -I./leveldb/helpers/memenv   -I./secp256k1/include    -pthread -I/usr/include/db5.1 -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS    -march=native -O2 -pipe -fomit-frame-pointer -c -o libdogecoin_server_a-httpserver.o `test -f 'httpserver.cpp' || echo './'`httpserver.cpp
+  httpserver.cpp:71:10: error: ‘deque’ in namespace ‘std’ does not name a template type
+     71 |     std::deque<std::unique_ptr<WorkItem>> queue;
+        |          ^~~~~
+  httpserver.cpp:30:1: note: ‘std::deque’ is defined in header ‘<deque>’; did you forget to ‘#include <deque>’?
+     29 | #include <event2/keyvalq_struct.h>
+    +++ |+#include <deque>
+     30 |
+  httpserver.cpp: In member function ‘bool WorkQueue<WorkItem>::Enqueue(WorkItem*)’:
+  httpserver.cpp:110:13: error: ‘queue’ was not declared in this scope; did you mean ‘Enqueue’?
+    110 |         if (queue.size() >= maxDepth) {
+        |             ^~~~~
+        |             Enqueue
+  httpserver.cpp:113:9: error: ‘queue’ was not declared in this scope; did you mean ‘Enqueue’?
+    113 |         queue.emplace_back(std::unique_ptr<WorkItem>(item));
+        |         ^~~~~
+        |         Enqueue
+  httpserver.cpp: In member function ‘void WorkQueue<WorkItem>::Run()’:
+  httpserver.cpp:125:35: error: ‘queue’ was not declared in this scope; did you mean ‘Enqueue’?
+    125 |                 while (running && queue.empty())
+        |                                   ^~~~~
+        |                                   Enqueue
+  httpserver.cpp:129:31: error: ‘queue’ was not declared in this scope; did you mean ‘Enqueue’?
+    129 |                 i = std::move(queue.front());
+        |                               ^~~~~
+        |                               Enqueue
+  httpserver.cpp: In member function ‘size_t WorkQueue<WorkItem>::Depth()’:
+  httpserver.cpp:154:16: error: ‘queue’ was not declared in this scope; did you mean ‘Enqueue’?
+    154 |         return queue.size();
+        |                ^~~~~
+        |                Enqueue
+---
+ src/httpserver.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/httpserver.cpp b/src/httpserver.cpp
+index dba952730..5c08e676d 100644
+--- a/src/httpserver.cpp
++++ b/src/httpserver.cpp
+@@ -19,6 +19,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <signal.h>
++#include <deque>
+ #include <future>
+ #include <event2/event.h>
+-- 
+2.26.2
+