From 45d89cfd526bf7fa3f7865f2e78f10cd9a85a2f6 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Mon, 22 Sep 2014 15:20:15 +0200
Subject: fix Linux build

---
 facetracknoir/export.hpp         |  7 ++++
 facetracknoir/plugin-api.hpp     | 78 +++-------------------------------------
 facetracknoir/plugin-qt-api.hpp  | 65 +++++++++++++++++++++++++++++++++
 facetracknoir/plugin-support.cpp | 33 +++++++++--------
 4 files changed, 94 insertions(+), 89 deletions(-)
 create mode 100644 facetracknoir/export.hpp
 create mode 100644 facetracknoir/plugin-qt-api.hpp

(limited to 'facetracknoir')

diff --git a/facetracknoir/export.hpp b/facetracknoir/export.hpp
new file mode 100644
index 00000000..8c8bdc69
--- /dev/null
+++ b/facetracknoir/export.hpp
@@ -0,0 +1,7 @@
+#pragma once
+#ifdef _WIN32
+#   define OPENTRACK_LINKAGE __declspec(dllexport)
+#else
+#   define OPENTRACK_LINKAGE
+#endif
+#define OPENTRACK_EXPORT __attribute__ ((visibility ("default"))) OPENTRACK_LINKAGE
diff --git a/facetracknoir/plugin-api.hpp b/facetracknoir/plugin-api.hpp
index f50b9617..d458d25c 100644
--- a/facetracknoir/plugin-api.hpp
+++ b/facetracknoir/plugin-api.hpp
@@ -1,7 +1,6 @@
 #pragma once
 
-#include <QtGlobal>
-#include <QFrame>
+#include "facetracknoir/export.hpp"
 
 #if defined(_WIN32)
 #   define CALLING_CONVENTION __stdcall
@@ -13,75 +12,6 @@ enum Axis {
     TX = 0, TY, TZ, Yaw, Pitch, Roll
 };
 
-struct Metadata
-{
-    Metadata() {}
-    virtual ~Metadata() {}
-
-    virtual void getFullName(QString *strToBeFilled) = 0;
-    virtual void getShortName(QString *strToBeFilled) = 0;
-    virtual void getDescription(QString *strToBeFilled) = 0;
-    virtual void getIcon(QIcon *icon) = 0;
-};
-
-struct IFilter
-{
-    virtual ~IFilter() = 0;
-    virtual void FilterHeadPoseData(const double *target_camera_position, double *new_camera_position) = 0;
-    virtual void reset() = 0;
-};
-
-inline IFilter::~IFilter() {}
-
-struct IFilterDialog
-{
-    virtual ~IFilterDialog() {}
-    virtual void registerFilter(IFilter* tracker) = 0;
-    virtual void unregisterFilter() = 0;
-};
-
-struct IProtocol
-{
-    virtual ~IProtocol() = 0;
-    virtual bool checkServerInstallationOK() = 0;
-    virtual void sendHeadposeToGame( const double* headpose ) = 0;
-    virtual QString getGameName() = 0;
-};
-
-inline IProtocol::~IProtocol() {}
-
-struct IProtocolDialog
-{
-    virtual ~IProtocolDialog() {}
-    virtual void registerProtocol(IProtocol *protocol) = 0;
-    virtual void unRegisterProtocol() = 0;
-};
-
-struct ITracker
-{
-    virtual ~ITracker() = 0;
-    virtual void StartTracker( QFrame* frame ) = 0;
-    virtual void GetHeadPoseData(double *data) = 0;
-    virtual int preferredHz() { return 200; }
-};
-
-inline ITracker::~ITracker() {}
-
-struct ITrackerDialog
-{
-    virtual ~ITrackerDialog() {}
-    virtual void registerTracker(ITracker *tracker) = 0;
-    virtual void unRegisterTracker() = 0;
-};
-
-#ifndef OPENTRACK_EXPORT
-#   ifdef IN_OPENTRACK
-#    if !defined(_MSC_VER)
-#      define OPENTRACK_EXPORT __attribute__ ((visibility ("default"))) Q_DECL_EXPORT
-#    else
-#     error "MSVC support removed"
-#   endif
-#   else
-#       error "Use only for exporting dynamic modules"
-#   endif
-#endif
+#ifndef OPENTRACK_CROSS_ONLY
+#   include "facetracknoir/plugin-qt-api.hpp"
+#endif
\ No newline at end of file
diff --git a/facetracknoir/plugin-qt-api.hpp b/facetracknoir/plugin-qt-api.hpp
new file mode 100644
index 00000000..a8dd153b
--- /dev/null
+++ b/facetracknoir/plugin-qt-api.hpp
@@ -0,0 +1,65 @@
+#pragma once
+
+#include <QString>
+#include <QFrame>
+
+struct Metadata
+{
+    Metadata() {}
+    virtual ~Metadata() {}
+
+    virtual void getFullName(QString *strToBeFilled) = 0;
+    virtual void getShortName(QString *strToBeFilled) = 0;
+    virtual void getDescription(QString *strToBeFilled) = 0;
+    virtual void getIcon(QIcon *icon) = 0;
+};
+
+struct IFilter
+{
+    virtual ~IFilter() = 0;
+    virtual void FilterHeadPoseData(const double *target_camera_position, double *new_camera_position) = 0;
+    virtual void reset() = 0;
+};
+inline IFilter::~IFilter() {}
+
+struct IFilterDialog
+{
+    virtual ~IFilterDialog() = 0;
+    virtual void registerFilter(IFilter* tracker) = 0;
+    virtual void unregisterFilter() = 0;
+};
+inline IFilterDialog::~IFilterDialog() {}
+
+struct IProtocol
+{
+    virtual ~IProtocol() = 0;
+    virtual bool checkServerInstallationOK() = 0;
+    virtual void sendHeadposeToGame( const double* headpose ) = 0;
+    virtual QString getGameName() = 0;
+};
+inline IProtocol::~IProtocol() {}
+
+struct IProtocolDialog
+{
+    virtual ~IProtocolDialog() = 0;
+    virtual void registerProtocol(IProtocol *protocol) = 0;
+    virtual void unRegisterProtocol() = 0;
+};
+inline IProtocolDialog::~IProtocolDialog() {}
+
+struct ITracker
+{
+    virtual ~ITracker() = 0;
+    virtual void StartTracker( QFrame* frame ) = 0;
+    virtual void GetHeadPoseData(double *data) = 0;
+    virtual int preferredHz() { return 200; }
+};
+inline ITracker::~ITracker() {}
+
+struct ITrackerDialog
+{
+    virtual ~ITrackerDialog() = 0;
+    virtual void registerTracker(ITracker *tracker) = 0;
+    virtual void unRegisterTracker() = 0;
+};
+inline ITrackerDialog::~ITrackerDialog() {}
\ No newline at end of file
diff --git a/facetracknoir/plugin-support.cpp b/facetracknoir/plugin-support.cpp
index 71279cb9..c6622fe0 100644
--- a/facetracknoir/plugin-support.cpp
+++ b/facetracknoir/plugin-support.cpp
@@ -1,5 +1,6 @@
 #include "plugin-support.h"
 #include <QCoreApplication>
+#include <QFile>
 
 #if !(defined(_WIN32))
 #   include <dlfcn.h>
@@ -109,23 +110,25 @@ DynamicLibrary::DynamicLibrary(const QString& filename) :
                     0
 #   endif
                     );
-    if (handle)
-    {
-        struct _foo {
-            static bool err(void*& handle)
+
+    struct _foo {
+        static bool err(void*& handle)
+        {
+            const char* err = dlerror();
+            if (err)
             {
-                const char* err = dlerror();
-                if (err)
-                {
-                    fprintf(stderr, "Error, ignoring: %s\n", err);
-                    fflush(stderr);
-                    dlclose(handle);
-                    handle = nullptr;
-                    return true;
-                }
-                false;
+                fprintf(stderr, "Error, ignoring: %s\n", err);
+                fflush(stderr);
+                dlclose(handle);
+                handle = nullptr;
+                return true;
             }
-        };
+            false;
+        }
+    };
+
+    if (handle)
+    {
         if (_foo::err(handle))
             return;
         Dialog = (DIALOG_FUNPTR) dlsym(handle, "GetDialog");
-- 
cgit v1.2.3