From 98dc2b2ec647a427756e7c7115348415cb932fa1 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 7 May 2020 15:37:01 -0700 Subject: [PATCH] domoticz: fix compilation with boost 1.73 Signed-off-by: Rosen Penev --- utils/domoticz/Makefile | 6 +- utils/domoticz/patches/010-boost-173.patch | 413 +++++++++++++++++++++ 2 files changed, 416 insertions(+), 3 deletions(-) create mode 100644 utils/domoticz/patches/010-boost-173.patch diff --git a/utils/domoticz/Makefile b/utils/domoticz/Makefile index 9f9ec34f80..95d3c9eaff 100644 --- a/utils/domoticz/Makefile +++ b/utils/domoticz/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=domoticz PKG_VERSION:=2020.1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/domoticz/domoticz/archive/$(PKG_VERSION)/$(PKG_SOURCE) @@ -66,8 +66,8 @@ CMAKE_OPTIONS += \ -DUSE_PYTHON=yes \ -DWITH_LIBUSB=no -TARGET_CFLAGS+=-flto -TARGET_CXXFLAGS+=-DWITH_GPIO -flto +TARGET_CFLAGS += -flto -DBOOST_BIND_GLOBAL_PLACEHOLDERS +TARGET_CXXFLAGS += -DWITH_GPIO -flto define Build/Prepare $(call Build/Prepare/Default) diff --git a/utils/domoticz/patches/010-boost-173.patch b/utils/domoticz/patches/010-boost-173.patch new file mode 100644 index 0000000000..85697c323f --- /dev/null +++ b/utils/domoticz/patches/010-boost-173.patch @@ -0,0 +1,413 @@ +--- a/hardware/Comm5Serial.cpp ++++ b/hardware/Comm5Serial.cpp +@@ -5,6 +5,8 @@ + #include "../main/Logger.h" + #include "../main/RFXtrx.h" + ++using namespace std::placeholders; ++ + /* + This driver allows Domoticz to control any I/O module from the MA-4xxx Family + +@@ -92,7 +94,7 @@ bool Comm5Serial::StartHardware() + return false; + } + m_bIsStarted=true; +- setReadCallback(boost::bind(&Comm5Serial::readCallBack, this, _1, _2)); ++ setReadCallback(std::bind(&Comm5Serial::readCallBack, this, _1, _2)); + + sOnConnected(this); + return true; +--- a/hardware/DenkoviUSBDevices.cpp ++++ b/hardware/DenkoviUSBDevices.cpp +@@ -16,6 +16,8 @@ enum _edaeUsbState + + #define DAE_IO_TYPE_RELAY 2 + ++using namespace std::placeholders; ++ + CDenkoviUSBDevices::CDenkoviUSBDevices(const int ID, const std::string& comPort, const int model) : + m_szSerialPort(comPort) + { +@@ -78,7 +80,7 @@ bool CDenkoviUSBDevices::StartHardware() + m_thread = std::make_shared(&CDenkoviUSBDevices::Do_Work, this); + + m_bIsStarted = true; +- setReadCallback(boost::bind(&CDenkoviUSBDevices::readCallBack, this, _1, _2)); ++ setReadCallback(std::bind(&CDenkoviUSBDevices::readCallBack, this, _1, _2)); + + sOnConnected(this); + return true; +--- a/hardware/EvohomeRadio.cpp ++++ b/hardware/EvohomeRadio.cpp +@@ -26,6 +26,8 @@ + + extern std::string szUserDataFolder; + ++using namespace std::placeholders; ++ + enum evoCommands + { + cmdSysInfo = 0x10e0, +@@ -86,27 +88,27 @@ CEvohomeRadio::CEvohomeRadio(const int ID, const std::string& UserContID) + s_strid >> std::hex >> m_UControllerID; + } + +- RegisterDecoder(cmdZoneTemp, boost::bind(&CEvohomeRadio::DecodeZoneTemp, this, _1)); +- RegisterDecoder(cmdSetPoint, boost::bind(&CEvohomeRadio::DecodeSetpoint, this, _1)); +- RegisterDecoder(cmdSetpointOverride, boost::bind(&CEvohomeRadio::DecodeSetpointOverride, this, _1)); +- RegisterDecoder(cmdDHWState, boost::bind(&CEvohomeRadio::DecodeDHWState, this, _1)); +- RegisterDecoder(cmdDHWTemp, boost::bind(&CEvohomeRadio::DecodeDHWTemp, this, _1)); +- RegisterDecoder(cmdControllerMode, boost::bind(&CEvohomeRadio::DecodeControllerMode, this, _1)); +- RegisterDecoder(cmdSysInfo, boost::bind(&CEvohomeRadio::DecodeSysInfo, this, _1)); +- RegisterDecoder(cmdZoneName, boost::bind(&CEvohomeRadio::DecodeZoneName, this, _1)); +- RegisterDecoder(cmdZoneHeatDemand, boost::bind(&CEvohomeRadio::DecodeHeatDemand, this, _1)); +- RegisterDecoder(cmdOpenThermBridge, boost::bind(&CEvohomeRadio::DecodeOpenThermBridge, this, _1)); +- RegisterDecoder(cmdOpenThermSetpoint, boost::bind(&CEvohomeRadio::DecodeOpenThermSetpoint, this, _1)); +- RegisterDecoder(cmdZoneInfo, boost::bind(&CEvohomeRadio::DecodeZoneInfo, this, _1)); +- RegisterDecoder(cmdControllerHeatDemand, boost::bind(&CEvohomeRadio::DecodeHeatDemand, this, _1)); +- RegisterDecoder(cmdBinding, boost::bind(&CEvohomeRadio::DecodeBinding, this, _1)); +- RegisterDecoder(cmdActuatorState, boost::bind(&CEvohomeRadio::DecodeActuatorState, this, _1)); +- RegisterDecoder(cmdActuatorCheck, boost::bind(&CEvohomeRadio::DecodeActuatorCheck, this, _1)); +- RegisterDecoder(cmdZoneWindow, boost::bind(&CEvohomeRadio::DecodeZoneWindow, this, _1)); +- RegisterDecoder(cmdExternalSensor, boost::bind(&CEvohomeRadio::DecodeExternalSensor, this, _1)); +- RegisterDecoder(cmdDeviceInfo, boost::bind(&CEvohomeRadio::DecodeDeviceInfo, this, _1)); +- RegisterDecoder(cmdBatteryInfo, boost::bind(&CEvohomeRadio::DecodeBatteryInfo, this, _1)); +- RegisterDecoder(cmdSync, boost::bind(&CEvohomeRadio::DecodeSync, this, _1)); ++ RegisterDecoder(cmdZoneTemp, std::bind(&CEvohomeRadio::DecodeZoneTemp, this, _1)); ++ RegisterDecoder(cmdSetPoint, std::bind(&CEvohomeRadio::DecodeSetpoint, this, _1)); ++ RegisterDecoder(cmdSetpointOverride, std::bind(&CEvohomeRadio::DecodeSetpointOverride, this, _1)); ++ RegisterDecoder(cmdDHWState, std::bind(&CEvohomeRadio::DecodeDHWState, this, _1)); ++ RegisterDecoder(cmdDHWTemp, std::bind(&CEvohomeRadio::DecodeDHWTemp, this, _1)); ++ RegisterDecoder(cmdControllerMode, std::bind(&CEvohomeRadio::DecodeControllerMode, this, _1)); ++ RegisterDecoder(cmdSysInfo, std::bind(&CEvohomeRadio::DecodeSysInfo, this, _1)); ++ RegisterDecoder(cmdZoneName, std::bind(&CEvohomeRadio::DecodeZoneName, this, _1)); ++ RegisterDecoder(cmdZoneHeatDemand, std::bind(&CEvohomeRadio::DecodeHeatDemand, this, _1)); ++ RegisterDecoder(cmdOpenThermBridge, std::bind(&CEvohomeRadio::DecodeOpenThermBridge, this, _1)); ++ RegisterDecoder(cmdOpenThermSetpoint, std::bind(&CEvohomeRadio::DecodeOpenThermSetpoint, this, _1)); ++ RegisterDecoder(cmdZoneInfo, std::bind(&CEvohomeRadio::DecodeZoneInfo, this, _1)); ++ RegisterDecoder(cmdControllerHeatDemand, std::bind(&CEvohomeRadio::DecodeHeatDemand, this, _1)); ++ RegisterDecoder(cmdBinding, std::bind(&CEvohomeRadio::DecodeBinding, this, _1)); ++ RegisterDecoder(cmdActuatorState, std::bind(&CEvohomeRadio::DecodeActuatorState, this, _1)); ++ RegisterDecoder(cmdActuatorCheck, std::bind(&CEvohomeRadio::DecodeActuatorCheck, this, _1)); ++ RegisterDecoder(cmdZoneWindow, std::bind(&CEvohomeRadio::DecodeZoneWindow, this, _1)); ++ RegisterDecoder(cmdExternalSensor, std::bind(&CEvohomeRadio::DecodeExternalSensor, this, _1)); ++ RegisterDecoder(cmdDeviceInfo, std::bind(&CEvohomeRadio::DecodeDeviceInfo, this, _1)); ++ RegisterDecoder(cmdBatteryInfo, std::bind(&CEvohomeRadio::DecodeBatteryInfo, this, _1)); ++ RegisterDecoder(cmdSync, std::bind(&CEvohomeRadio::DecodeSync, this, _1)); + } + + +--- a/hardware/EvohomeSerial.cpp ++++ b/hardware/EvohomeSerial.cpp +@@ -7,6 +7,8 @@ + #include "../main/localtime_r.h" + #include + ++using namespace std::placeholders; ++ + CEvohomeSerial::CEvohomeSerial(const int ID, const std::string &szSerialPort, const int baudrate, const std::string &UserContID) : + CEvohomeRadio(ID, UserContID) + { +@@ -64,7 +66,7 @@ bool CEvohomeSerial::OpenSerialDevice() + } + m_nBufPtr=0; + m_bIsStarted=true; +- setReadCallback(boost::bind(&CEvohomeSerial::ReadCallback, this, _1, _2)); ++ setReadCallback(std::bind(&CEvohomeSerial::ReadCallback, this, _1, _2)); + sOnConnected(this); + return true; + } +--- a/hardware/MQTT.cpp ++++ b/hardware/MQTT.cpp +@@ -18,6 +18,8 @@ + #define TOPIC_IN "domoticz/in" + #define QOS 1 + ++using namespace std::placeholders; ++ + const char* szTLSVersions[3] = + { + "tlsv1", +@@ -133,8 +135,8 @@ void MQTT::on_connect(int rc) + _log.Log(LOG_STATUS, "MQTT: connected to: %s:%d", m_szIPAddress.c_str(), m_usIPPort); + m_IsConnected = true; + sOnConnected(this); +- m_sDeviceReceivedConnection = m_mainworker.sOnDeviceReceived.connect(boost::bind(&MQTT::SendDeviceInfo, this, _1, _2, _3, _4)); +- m_sSwitchSceneConnection = m_mainworker.sOnSwitchScene.connect(boost::bind(&MQTT::SendSceneInfo, this, _1, _2)); ++ m_sDeviceReceivedConnection = m_mainworker.sOnDeviceReceived.connect(std::bind(&MQTT::SendDeviceInfo, this, _1, _2, _3, _4)); ++ m_sSwitchSceneConnection = m_mainworker.sOnSwitchScene.connect(std::bind(&MQTT::SendSceneInfo, this, _1, _2)); + } + subscribe(NULL, m_TopicIn.c_str()); + } +--- a/hardware/Pinger.cpp ++++ b/hardware/Pinger.cpp +@@ -25,6 +25,8 @@ + #define GET_IO_SERVICE(s) ((s).get_io_service()) + #endif + ++using namespace std::placeholders; ++ + class pinger + : private domoticz::noncopyable + { +@@ -87,7 +89,7 @@ private: + } + else + { +- timer_.async_wait(boost::bind(&pinger::start_send, this)); ++ timer_.async_wait(std::bind(&pinger::start_send, this)); + } + } + } +@@ -100,7 +102,7 @@ private: + + // Wait for a reply. We prepare the buffer to receive up to 64KB. + socket_.async_receive(reply_buffer_.prepare(65536), +- boost::bind(&pinger::handle_receive, this, _2)); ++ std::bind(&pinger::handle_receive, this, _2)); + } + + void handle_receive(std::size_t length) +@@ -384,7 +386,7 @@ void CPinger::DoPingHosts() + if (m_iThreadsRunning < 1000) + { + //m_iThreadsRunning++; +- boost::thread t(boost::bind(&CPinger::Do_Ping_Worker, this, *itt)); ++ boost::thread t(std::bind(&CPinger::Do_Ping_Worker, this, *itt)); + SetThreadName(t.native_handle(), "PingerWorker"); + t.join(); + } +--- a/hardware/RAVEn.cpp ++++ b/hardware/RAVEn.cpp +@@ -11,6 +11,8 @@ + //Rainforest RAVEn USB ZigBee Smart Meter Adapter + //https://rainforestautomation.com/rfa-z106-raven/ + ++using namespace std::placeholders; ++ + RAVEn::RAVEn(const int ID, const std::string& devname) + : device_(devname), m_wptr(m_buffer), m_currUsage(0), m_totalUsage(0) + { +@@ -46,7 +48,7 @@ bool RAVEn::StartHardware() + _log.Log(LOG_ERROR, "RAVEn: Error opening serial port!!!"); + return false; + } +- setReadCallback(boost::bind(&RAVEn::readCallback, this, _1, _2)); ++ setReadCallback(std::bind(&RAVEn::readCallback, this, _1, _2)); + m_bIsStarted = true; + sOnConnected(this); + +--- a/hardware/RFLinkSerial.cpp ++++ b/hardware/RFLinkSerial.cpp +@@ -5,6 +5,8 @@ + #include "../main/localtime_r.h" + #include + ++using namespace std::placeholders; ++ + CRFLinkSerial::CRFLinkSerial(const int ID, const std::string& devname) : + m_szSerialPort(devname) + { +@@ -181,7 +183,7 @@ bool CRFLinkSerial::OpenSerialDevice() + m_rfbufferpos = 0; + m_LastReceivedTime = mytime(NULL); + +- setReadCallback(boost::bind(&CRFLinkSerial::readCallback, this, _1, _2)); ++ setReadCallback(std::bind(&CRFLinkSerial::readCallback, this, _1, _2)); + sOnConnected(this); + + return true; +--- a/hardware/TCPProxy/tcpproxy_server.cpp ++++ b/hardware/TCPProxy/tcpproxy_server.cpp +@@ -21,6 +21,8 @@ + #define GET_IO_SERVICE(s) ((s).get_io_service()) + #endif + ++using namespace std::placeholders; ++ + namespace tcp_proxy + { + bridge::bridge(boost::asio::io_service& ios) +@@ -186,8 +188,8 @@ namespace tcp_proxy + session_ = std::shared_ptr( + new bridge(io_service_) + ); +- session_->sDownstreamData.connect( boost::bind( &acceptor::OnDownstreamData, this, _1, _2 ) ); +- session_->sUpstreamData.connect( boost::bind( &acceptor::OnUpstreamData, this, _1, _2 ) ); ++ session_->sDownstreamData.connect( std::bind( &acceptor::OnDownstreamData, this, _1, _2 ) ); ++ session_->sUpstreamData.connect( std::bind( &acceptor::OnUpstreamData, this, _1, _2 ) ); + + acceptor_.async_accept(session_->downstream_socket(), + boost::bind(&acceptor::handle_accept, +--- a/hardware/ZiBlueSerial.cpp ++++ b/hardware/ZiBlueSerial.cpp +@@ -8,6 +8,8 @@ + + #define ZiBlue_RETRY_DELAY 30 + ++using namespace std::placeholders; ++ + CZiBlueSerial::CZiBlueSerial(const int ID, const std::string& devname) : + m_szSerialPort(devname) + { +@@ -136,7 +138,7 @@ bool CZiBlueSerial::OpenSerialDevice() + m_rfbufferpos = 0; + m_LastReceivedTime = mytime(NULL); + +- setReadCallback(boost::bind(&CZiBlueSerial::readCallback, this, _1, _2)); ++ setReadCallback(std::bind(&CZiBlueSerial::readCallback, this, _1, _2)); + + sOnConnected(this); + +--- a/hardware/plugins/PluginTransports.cpp ++++ b/hardware/plugins/PluginTransports.cpp +@@ -13,6 +13,8 @@ + #include "icmp_header.hpp" + #include "ipv4_header.hpp" + ++using namespace std::placeholders; ++ + namespace Plugins { + + void CPluginTransport::handleRead(const boost::system::error_code& e, std::size_t bytes_transferred) +@@ -972,7 +974,7 @@ namespace Plugins { + if (m_bConnected) + { + pPlugin->MessagePlugin(new onConnectCallback(pPlugin, m_pConnection, 0, "SerialPort " + m_Port + " opened successfully.")); +- setReadCallback(boost::bind(&CPluginTransportSerial::handleRead, this, _1, _2)); ++ setReadCallback(std::bind(&CPluginTransportSerial::handleRead, this, _1, _2)); + } + else + { +--- a/push/FibaroPush.cpp ++++ b/push/FibaroPush.cpp +@@ -14,6 +14,8 @@ + #define __STDC_FORMAT_MACROS + #include + ++using namespace std::placeholders; ++ + CFibaroPush::CFibaroPush() + { + m_bLinkActive = false; +@@ -22,7 +24,7 @@ CFibaroPush::CFibaroPush() + void CFibaroPush::Start() + { + UpdateActive(); +- m_sConnection = m_mainworker.sOnDeviceReceived.connect(boost::bind(&CFibaroPush::OnDeviceReceived, this, _1, _2, _3, _4)); ++ m_sConnection = m_mainworker.sOnDeviceReceived.connect(std::bind(&CFibaroPush::OnDeviceReceived, this, _1, _2, _3, _4)); + } + + void CFibaroPush::Stop() +@@ -400,4 +402,4 @@ namespace http { + root["title"] = "DeleteFibaroLink"; + } + } +-} +\ No newline at end of file ++} +--- a/push/GooglePubSubPush.cpp ++++ b/push/GooglePubSubPush.cpp +@@ -21,6 +21,8 @@ extern "C" { + #include + #endif + ++using namespace std::placeholders; ++ + extern std::string szUserDataFolder; + + // this should be filled in by the preprocessor +@@ -38,7 +40,7 @@ CGooglePubSubPush::CGooglePubSubPush() + void CGooglePubSubPush::Start() + { + UpdateActive(); +- m_sConnection = m_mainworker.sOnDeviceReceived.connect(boost::bind(&CGooglePubSubPush::OnDeviceReceived, this, _1, _2, _3, _4)); ++ m_sConnection = m_mainworker.sOnDeviceReceived.connect(std::bind(&CGooglePubSubPush::OnDeviceReceived, this, _1, _2, _3, _4)); + } + + void CGooglePubSubPush::Stop() +--- a/push/HttpPush.cpp ++++ b/push/HttpPush.cpp +@@ -15,6 +15,8 @@ + #define __STDC_FORMAT_MACROS + #include + ++using namespace std::placeholders; ++ + CHttpPush::CHttpPush() + { + m_bLinkActive = false; +@@ -23,7 +25,7 @@ CHttpPush::CHttpPush() + void CHttpPush::Start() + { + UpdateActive(); +- m_sConnection = m_mainworker.sOnDeviceReceived.connect(boost::bind(&CHttpPush::OnDeviceReceived, this, _1, _2, _3, _4)); ++ m_sConnection = m_mainworker.sOnDeviceReceived.connect(std::bind(&CHttpPush::OnDeviceReceived, this, _1, _2, _3, _4)); + } + + void CHttpPush::Stop() +--- a/push/InfluxPush.cpp ++++ b/push/InfluxPush.cpp +@@ -15,6 +15,8 @@ + #define __STDC_FORMAT_MACROS + #include + ++using namespace std::placeholders; ++ + CInfluxPush::CInfluxPush() : + m_InfluxPort(8086), + m_bInfluxDebugActive(false) +@@ -33,7 +35,7 @@ bool CInfluxPush::Start() + m_thread = std::make_shared(&CInfluxPush::Do_Work, this); + SetThreadName(m_thread->native_handle(), "InfluxPush"); + +- m_sConnection = m_mainworker.sOnDeviceReceived.connect(boost::bind(&CInfluxPush::OnDeviceReceived, this, _1, _2, _3, _4)); ++ m_sConnection = m_mainworker.sOnDeviceReceived.connect(std::bind(&CInfluxPush::OnDeviceReceived, this, _1, _2, _3, _4)); + + return (m_thread != NULL); + } +--- a/push/WebsocketPush.cpp ++++ b/push/WebsocketPush.cpp +@@ -3,6 +3,8 @@ + #include "../webserver/WebsocketHandler.h" + #include "../main/mainworker.h" + ++using namespace std::placeholders; ++ + extern boost::signals2::signal sOnNotificationReceived; + + +@@ -19,9 +21,9 @@ void CWebSocketPush::Start() + if (isStarted) { + return; + } +- m_sConnection = m_mainworker.sOnDeviceReceived.connect(boost::bind(&CWebSocketPush::OnDeviceReceived, this, _1, _2, _3, _4)); +- m_sNotification = sOnNotificationReceived.connect(boost::bind(&CWebSocketPush::OnNotificationReceived, this, _1, _2, _3, _4, _5, _6)); +- m_sSceneChanged = m_mainworker.sOnSwitchScene.connect(boost::bind(&CWebSocketPush::OnSceneChange, this, _1, _2)); ++ m_sConnection = m_mainworker.sOnDeviceReceived.connect(std::bind(&CWebSocketPush::OnDeviceReceived, this, _1, _2, _3, _4)); ++ m_sNotification = sOnNotificationReceived.connect(std::bind(&CWebSocketPush::OnNotificationReceived, this, _1, _2, _3, _4, _5, _6)); ++ m_sSceneChanged = m_mainworker.sOnSwitchScene.connect(std::bind(&CWebSocketPush::OnSceneChange, this, _1, _2)); + isStarted = true; + } + +--- a/webserver/proxyclient.cpp ++++ b/webserver/proxyclient.cpp +@@ -19,6 +19,8 @@ + + extern std::string szAppVersion; + ++using namespace std::placeholders; ++ + #define PROXY_TIMEOUT 60 + #define PONG "PONG" + +@@ -349,7 +351,7 @@ namespace http { + // todo: make a map of websocket connections. There can be more than one. + // open new virtual websocket connection + // todo: different request_url's can have different websocket handlers +- websocket_handlers[pdu->m_requestid] = new CWebsocketHandler(m_pWebEm, boost::bind(&CProxyClient::WS_Write, this, pdu->m_requestid, _1)); ++ websocket_handlers[pdu->m_requestid] = new CWebsocketHandler(m_pWebEm, std::bind(&CProxyClient::WS_Write, this, pdu->m_requestid, _1)); + websocket_handlers[pdu->m_requestid]->Start(); + } +