domoticz: fix compilation with boost 1.73 12119/head
authorRosen Penev <rosenp@gmail.com>
Thu, 7 May 2020 22:37:01 +0000 (15:37 -0700)
committerRosen Penev <rosenp@gmail.com>
Fri, 8 May 2020 20:08:44 +0000 (13:08 -0700)
Signed-off-by: Rosen Penev <rosenp@gmail.com>
utils/domoticz/Makefile
utils/domoticz/patches/010-boost-173.patch [new file with mode: 0644]

index 9f9ec34f80ed643d7a3323e108d7e986f0b85709..95d3c9eaff3f650f0982760d6e868b1581ab64ea 100644 (file)
@@ -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 (file)
index 0000000..85697c3
--- /dev/null
@@ -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<std::thread>(&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 <boost/exception/diagnostic_information.hpp>
++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 <boost/exception/diagnostic_information.hpp>
++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<bridge>(
+                               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 <inttypes.h>
++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 <boost/python.hpp>
+ #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 <inttypes.h>
++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 <inttypes.h>
++using namespace std::placeholders;
++
+ CInfluxPush::CInfluxPush() :
+       m_InfluxPort(8086),
+       m_bInfluxDebugActive(false)
+@@ -33,7 +35,7 @@ bool CInfluxPush::Start()
+       m_thread = std::make_shared<std::thread>(&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<void(const std::string &Subject, const std::string &Text, const std::string &ExtraData, const int Priority, const std::string & Sound, const bool bFromNotification)> 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();
+               }