From b4df8d43e86c114ea35646459d6ec3c071a8c662 Mon Sep 17 00:00:00 2001
From: Edric Milaret <edric.ladent-milaret@savoirfairelinux.com>
Date: Tue, 21 Apr 2015 11:53:10 -0400
Subject: [PATCH] Win32 Portablity patch

Win32 Portablity patch
---
 CMakeLists.txt                       |  7 ++++++-
 cmake/FindRing.cmake                 |  3 +++
 cmake/winBuild.cmake                 | 10 ++++++++++
 src/accountstatusmodel.cpp           | 18 ++++++++++++++++++
 src/collectionmanagerinterface.h     |  2 +-
 src/qtwrapper/instancemanager.cpp    |  4 ++--
 src/qtwrapper/instancemanager_wrap.h |  3 ++-
 7 files changed, 42 insertions(+), 5 deletions(-)
 create mode 100644 cmake/winBuild.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index cd3fae90..fb10f4e9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,6 +8,10 @@ IF(POLICY CMP0043)
    CMAKE_POLICY(SET CMP0043 NEW)
 ENDIF(POLICY CMP0043)
 
+IF(POLICY CMP0020)
+   CMAKE_POLICY(SET CMP0020 NEW)
+ENDIF(POLICY CMP0020)
+
 # First, check is the compiler is new enough, most version of Clang are fine
 # until problems arise, checking for GCC is enough
 IF (CMAKE_COMPILER_IS_GNUCC)
@@ -504,7 +508,7 @@ IF(NOT ${ENABLE_STATIC} MATCHES false)
    )
 ENDIF()
 
-QT5_USE_MODULES(ringclient Core)
+QT5_USE_MODULES(ringclient Core Concurrent)
 
 IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
   QT5_USE_MODULES(ringclient DBus)
@@ -579,6 +583,7 @@ STRING(REPLACE "${CMAKE_LIBRARY_ARCHITECTURE}" "" SANE_LIBRARY_PATH "${CMAKE_INS
 
 INSTALL( TARGETS ringclient
   ARCHIVE DESTINATION ${SANE_LIBRARY_PATH}
+  RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
   LIBRARY DESTINATION ${SANE_LIBRARY_PATH}
   DESTINATION ${SANE_LIBRARY_PATH}
 )
diff --git a/cmake/FindRing.cmake b/cmake/FindRing.cmake
index 86760349..713df9a2 100644
--- a/cmake/FindRing.cmake
+++ b/cmake/FindRing.cmake
@@ -20,6 +20,7 @@ FIND_LIBRARY(ring_BIN NAMES ring
    PATHS ${RING_BUILD_DIR}/.libs
    PATHS ${CMAKE_INSTALL_PREFIX}/lib
    PATHS ${CMAKE_INSTALL_PREFIX}/libexec
+   PATHS ${CMAKE_INSTALL_PREFIX}/bin
 )
 
 # Try a static version too
@@ -32,7 +33,9 @@ IF(${ring_BIN} MATCHES "")
       PATHS ${CMAKE_INSTALL_PREFIX}/libexec
    )
 
+IF(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    ADD_DEFINITIONS(-fPIC)
+ENDIF()
 
 ENDIF()
 
diff --git a/cmake/winBuild.cmake b/cmake/winBuild.cmake
new file mode 100644
index 00000000..3b2bf73a
--- /dev/null
+++ b/cmake/winBuild.cmake
@@ -0,0 +1,10 @@
+# this one is important
+SET(CMAKE_SYSTEM_NAME Windows)
+
+# specify the cross compiler
+SET(CMAKE_C_COMPILER   i686-w64-mingw32-gcc)
+SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
+SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
+SET(CMAKE_ASM_YASM_COMPILER yasm)
+SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32/)
+set(LIB_FLAGS "-Wl,--output-def,libringclient.def")
\ No newline at end of file
diff --git a/src/accountstatusmodel.cpp b/src/accountstatusmodel.cpp
index be13ab4b..c7d8c748 100644
--- a/src/accountstatusmodel.cpp
+++ b/src/accountstatusmodel.cpp
@@ -20,6 +20,24 @@
 //System
 #include <errno.h>
 
+#ifdef _WIN32
+#include <winerror.h>
+#define ESHUTDOWN WSAESHUTDOWN
+#define ENODATA WSANO_DATA
+#define ETIME WSAETIMEDOUT
+#define EPFNOSUPPORT WSAEPROTONOSUPPORT
+#define EHOSTDOWN WSAEHOSTDOWN
+#define ESTALE WSAESTALE
+#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#define ETOOMANYREFS WSAETOOMANYREFS
+#define EUSERS WSAEUSERS
+#define EBADMSG 9905
+#define ENOLINK 9918
+#define ENOSR 9922
+#define ENOSTR 9924
+#define EMULTIHOP 2004
+#endif
+
 //Qt
 #include <QtCore/QCoreApplication>
 #include <QtCore/QDateTime>
diff --git a/src/collectionmanagerinterface.h b/src/collectionmanagerinterface.h
index 78bc5fc3..8920c56f 100644
--- a/src/collectionmanagerinterface.h
+++ b/src/collectionmanagerinterface.h
@@ -46,7 +46,7 @@ class CollectionConfigurationInterface;
 /**
  * Common elements for each CollectionManagerInterface
  */
-class CollectionManagerInterfaceBase {
+class LIB_EXPORT CollectionManagerInterfaceBase {
 public:
    virtual bool hasEnabledCollections (CollectionInterface::SupportedFeatures features = CollectionInterface::SupportedFeatures::NONE) const = 0;
    virtual bool hasCollections        (CollectionInterface::SupportedFeatures features = CollectionInterface::SupportedFeatures::NONE) const = 0;
diff --git a/src/qtwrapper/instancemanager.cpp b/src/qtwrapper/instancemanager.cpp
index 486a4725..1f03a389 100644
--- a/src/qtwrapper/instancemanager.cpp
+++ b/src/qtwrapper/instancemanager.cpp
@@ -45,7 +45,7 @@ InstanceInterface::InstanceInterface() : m_pTimer(nullptr)
 
    m_pTimer = new QTimer(this);
    m_pTimer->setInterval(50);
-   connect(m_pTimer,&QTimer::timeout,this,&pollEvents);
+   connect(m_pTimer,SIGNAL(timeout()),this,SLOT(pollEvents()));
    m_pTimer->start();
    ringFlags |= DRing::DRING_FLAG_DEBUG;
    ringFlags |= DRing::DRING_FLAG_CONSOLE_LOG;
@@ -70,7 +70,7 @@ InstanceInterface::~InstanceInterface()
 
 }
 
-void pollEvents()
+void InstanceInterface::pollEvents()
 {
     DRing::pollEvents();
 }
diff --git a/src/qtwrapper/instancemanager_wrap.h b/src/qtwrapper/instancemanager_wrap.h
index 792833cb..df7820f4 100644
--- a/src/qtwrapper/instancemanager_wrap.h
+++ b/src/qtwrapper/instancemanager_wrap.h
@@ -40,7 +40,6 @@ class InstanceInterface: public QObject
    Q_OBJECT
 public:
    InstanceInterface();
-
    ~InstanceInterface();
 
 // TODO: These are not present in dring.h
@@ -59,6 +58,8 @@ public Q_SLOTS: // METHODS
 
    bool isConnected();
 
+   void pollEvents();
+
 private:
    QTimer* m_pTimer;
 
-- 
GitLab