From 2af0ddbcf5cf32e4f6e8e1e3993a1aca0c409c90 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Wed, 30 Oct 2013 17:22:02 +0100
Subject: add initial, untested opentrack-api.dll

Signed-off-by: Stanislaw Halik <sthalik@misaki.pl>
---
 opentrack-api/context.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 108 insertions(+)
 create mode 100644 opentrack-api/context.cpp

(limited to 'opentrack-api/context.cpp')

diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
new file mode 100644
index 00000000..100acf5c
--- /dev/null
+++ b/opentrack-api/context.cpp
@@ -0,0 +1,108 @@
+#include "opentrack-guts.h"
+#include "opentrack.h"
+
+#if defined(__APPLE__)
+#   define SONAME "dylib"
+#elif defined(_WIN32)
+#   define SONAME "dll"
+#else
+#   define SONAME "so"
+#endif
+
+#include <iostream>
+
+#ifdef _MSC_VER
+#   define LIB_PREFIX ""
+#else
+#   define LIB_PREFIX "lib"
+#endif
+
+// shamelessly copied from core
+static Metadata* get_metadata(DynamicLibrary* lib, QString& longName, QIcon& icon)
+{
+    Metadata* meta;
+    if (!lib->Metadata || ((meta = lib->Metadata()), !meta))
+        return NULL;
+    meta->getFullName(&longName);
+    meta->getIcon(&icon);
+    return meta;
+}
+
+static QList<opentrack_meta> list_files(QDir& dir, QString filter)
+{
+    QList<opentrack_meta> ret;
+    QStringList filenames = dir.entryList( QStringList() << (LIB_PREFIX + filter + ("*." SONAME)), QDir::Files, QDir::Name );
+    for ( int i = 0; i < filenames.size(); i++) {
+        QIcon icon;
+        QString long_name;
+        QString str = filenames.at(i);
+        DynamicLibrary* lib = new DynamicLibrary(str);
+        qDebug() << "Loading" << str;
+        std::cout.flush();
+        Metadata* meta;
+        if (!(meta = get_metadata(lib, long_name, icon)))
+        {
+            delete lib;
+            continue;
+        }
+        QString prefix(LIB_PREFIX + filter);
+        QString suffix("*." SONAME);
+        if (str.size() > prefix.size() + suffix.size() && str.startsWith(prefix) && str.endsWith(suffix))
+        {
+            auto str2 = str.mid(prefix.size(), str.size() - prefix.size() - suffix.size());
+            opentrack_meta item(meta, str2, lib);
+            ret.push_back(item);
+        }
+    }
+
+    return ret;
+}
+
+opentrack_ctx::opentrack_ctx(QDir& dir) :
+    dir(dir),
+    meta_list(list_files(dir, "opentrack-tracker-"))
+{
+    const int count = meta_list.size();
+    list = new char*[count + 1];
+    for (int i = 0; i < count; i++)
+    {
+        QByteArray tmp = meta_list.at(i).path.toUtf8();
+        int len = tmp.size();
+        auto foo = new char[len+1];
+        for (int j = 0; j < len; j++)
+            foo[j] = tmp.at(j);
+        foo[len] = '\0';
+        list[i] = foo;
+    }
+    list[count] = NULL;
+}
+
+opentrack_ctx::~opentrack_ctx()
+{
+    for (int i = 0; list[i]; i++)
+    {
+        delete list[i];
+    }
+    delete list;
+}
+
+extern "C"
+{
+
+const char** OPENTRACK_EXPORT opentrack_enum_trackers(opentrack ctx)
+{
+    return const_cast<const char**>(ctx->list);
+}
+
+opentrack OPENTRACK_EXPORT opentrack_make_ctx(const char *dir)
+{
+    QDir d(dir);
+    return new opentrack_ctx(d);
+}
+
+void OPENTRACK_EXPORT opentrack_finalize_ctx(opentrack foo)
+{
+    delete foo;
+}
+
+}
-- 
cgit v1.2.3


From 95f7e4c5b9608c550d008c662dc41fa049a6b725 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Wed, 30 Oct 2013 18:24:51 +0100
Subject: clean up the visibility mess in a messiest way possible

Signed-off-by: Stanislaw Halik <sthalik@misaki.pl>
---
 CMakeLists.txt                    | 13 ++++++++-----
 facetracknoir/global-settings.cpp | 12 ++++++++++++
 facetracknoir/global-settings.h   | 15 +++++++++++++++
 opentrack-api/context.cpp         | 15 +++++++++++----
 opentrack-api/opentrack-guts.h    | 24 +++++++++++++-----------
 opentrack-api/opentrack.h         |  7 ++++++-
 6 files changed, 65 insertions(+), 21 deletions(-)

(limited to 'opentrack-api/context.cpp')

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 239cafb5..1aafaa16 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -154,8 +154,8 @@ else()
 endif()
 # main app
 
-file(GLOB opentrack-lib-c "opentrack-api/*.cpp")
-file(GLOB opentrack-lib-h "opentrack-api/*.h")
+file(GLOB opentrack-lib-c "opentrack-api/*.cpp" "facetracknoir/global-settings.cpp")
+file(GLOB opentrack-lib-h "opentrack-api/*.h" "facetracknoir/global-settings.h")
 
 file(GLOB opentrack-bin-c "facetracknoir/*.cpp" "facetracknoir/*.rc")
 file(GLOB opentrack-bin-h "facetracknoir/*.h")
@@ -614,9 +614,12 @@ configure_file("${CMAKE_SOURCE_DIR}/opentrack-version.h" "${CMAKE_BINARY_DIR}/op
 
 add_library(opentrack-api SHARED ${opentrack-lib-c} ${opentrack-lib-h} ${opentrack-lib-moc})
 target_link_libraries(opentrack-api ${MY_QT_LIBS})
-if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
-    SET_TARGET_PROPERTIES(opentrack-api
-    PROPERTIES LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/opentrack-api/gnuc-version-script.txt")
+if(CMAKE_COMPILER_IS_GNUCXX)
+    SET_TARGET_PROPERTIES(opentrack-api PROPERTIES
+        LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/opentrack-api/gnuc-version-script.txt"
+        COMPILE_FLAGS "-fvisibility=protected  -fvisibility-inlines-hidden"
+        COMPILE_DEFINITIONS IN_OPENTRACK_API
+    )
 endif()
 
 set_target_properties(opentrack PROPERTIES COMPILE_DEFINITIONS OPENTRACK_VERSION=\"${OPENTRACK__COMMIT}\")
diff --git a/facetracknoir/global-settings.cpp b/facetracknoir/global-settings.cpp
index b198f327..42646742 100644
--- a/facetracknoir/global-settings.cpp
+++ b/facetracknoir/global-settings.cpp
@@ -4,6 +4,12 @@
 #   include <dlfcn.h>
 #endif
 
+#ifdef IN_OPENTRACK_API
+#   ifdef __GNUC__
+#       pragma GCC visibility push(protected)
+#   endif
+#endif
+
 SelectedLibraries* Libraries = NULL;
 
 SelectedLibraries::~SelectedLibraries()
@@ -128,3 +134,9 @@ DynamicLibrary::~DynamicLibrary()
         (void) dlclose(handle);
 #endif
 }
+
+#ifdef IN_OPENTRACK_API
+#   ifdef __GNUC__
+#       pragma GCC visibility pop
+#   endif
+#endif
diff --git a/facetracknoir/global-settings.h b/facetracknoir/global-settings.h
index b2a54e20..ea36abac 100644
--- a/facetracknoir/global-settings.h
+++ b/facetracknoir/global-settings.h
@@ -12,6 +12,14 @@
 #   define MAYBE_STDCALL_UNDERSCORE ""
 #endif
 
+#include <cstdio>
+
+#ifdef IN_OPENTRACK_API
+#   ifdef __GNUC__
+#       pragma GCC visibility push(protected)
+#   endif
+#endif
+
 #include <QWidget>
 #include <QDebug>
 #include <QString>
@@ -83,3 +91,10 @@ public:
     virtual DynamicLibrary* current_filter() = 0;
     virtual QFrame* get_video_widget() = 0;
 };
+
+
+#ifdef IN_OPENTRACK_API
+#   ifdef __GNUC__
+#       pragma GCC visibility pop
+#   endif
+#endif
diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
index 100acf5c..1fdf6713 100644
--- a/opentrack-api/context.cpp
+++ b/opentrack-api/context.cpp
@@ -17,7 +17,10 @@
 #   define LIB_PREFIX "lib"
 #endif
 
-// shamelessly copied from core
+#ifdef __GNUC__
+#   pragma GCC visibility push(protected)
+#endif
+
 static Metadata* get_metadata(DynamicLibrary* lib, QString& longName, QIcon& icon)
 {
     Metadata* meta;
@@ -89,20 +92,24 @@ opentrack_ctx::~opentrack_ctx()
 extern "C"
 {
 
-const char** OPENTRACK_EXPORT opentrack_enum_trackers(opentrack ctx)
+const char** opentrack_enum_trackers(opentrack ctx)
 {
     return const_cast<const char**>(ctx->list);
 }
 
-opentrack OPENTRACK_EXPORT opentrack_make_ctx(const char *dir)
+opentrack opentrack_make_ctx(const char *dir)
 {
     QDir d(dir);
     return new opentrack_ctx(d);
 }
 
-void OPENTRACK_EXPORT opentrack_finalize_ctx(opentrack foo)
+void opentrack_finalize_ctx(opentrack foo)
 {
     delete foo;
 }
 
 }
+
+#ifdef __GNUC__
+#   pragma GCC visibility pop
+#endif
diff --git a/opentrack-api/opentrack-guts.h b/opentrack-api/opentrack-guts.h
index 3f8806cc..01463cfc 100644
--- a/opentrack-api/opentrack-guts.h
+++ b/opentrack-api/opentrack-guts.h
@@ -1,8 +1,9 @@
 #pragma once
 
-#include "ftnoir_tracker_base/ftnoir_tracker_base.h"
-#include "facetracknoir/global-settings.h"
-#include <QString>
+#ifdef __GNUC__
+#   pragma GCC visibility push(protected)
+#endif
+
 #include <QDir>
 #include <QList>
 #include <QStringList>
@@ -10,16 +11,13 @@
 #include <QIcon>
 #include <iostream>
 #include <cstring>
-
-#ifdef __GNUC__
-#   define OPENTRACK_HIDDEN __attribute__((visibility ("hidden")))
-#else
-#   define OPENTRACK_HIDDEN
-#endif
+#include <QString>
+#include "ftnoir_tracker_base/ftnoir_tracker_base.h"
+#include "facetracknoir/global-settings.h"
 
 typedef ITracker* opentrack_tracker;
 
-class OPENTRACK_HIDDEN opentrack_meta {
+class opentrack_meta {
 public:
     Metadata* meta;
     QString path;
@@ -35,7 +33,7 @@ public:
     }
 };
 
-typedef class OPENTRACK_HIDDEN opentrack_ctx {
+typedef class opentrack_ctx {
 public:
     QDir dir;
     char** list;
@@ -44,3 +42,7 @@ public:
     opentrack_ctx(QDir& dir);
     ~opentrack_ctx();
 } *opentrack;
+
+#ifdef __GNUC__
+#   pragma GCC visibility pop
+#endif
diff --git a/opentrack-api/opentrack.h b/opentrack-api/opentrack.h
index 8d28b5b8..1c8fcee5 100644
--- a/opentrack-api/opentrack.h
+++ b/opentrack-api/opentrack.h
@@ -15,7 +15,11 @@ typedef opentrack_opaque_tracker* opentrack_tracker;
 #   ifdef _WIN32
 #       define OPENTRACK_EXPORT __declspec(dllexport)
 #   else
-#       define OPENTRACK_EXPORT
+#       ifdef __GNUC__
+#           define OPENTRACK_EXPORT __attribute__((visibility ("default")))
+#       else
+#           define OPENTRACK_EXPORT
+#       endif
 #   endif
 #else
 #   ifdef _WIN32
@@ -55,3 +59,4 @@ void opentrack_finalize_tracker(opentrack_tracker tracker);
 #ifdef __cplusplus
 }
 #endif
+
-- 
cgit v1.2.3


From 5eb570d1608e2071c0d01412925ac43768770624 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Wed, 30 Oct 2013 18:40:06 +0100
Subject: end this foolishness, a linker script is more than enough

Signed-off-by: Stanislaw Halik <sthalik@misaki.pl>
---
 facetracknoir/global-settings.cpp | 12 ------------
 facetracknoir/global-settings.h   | 13 -------------
 opentrack-api/context.cpp         |  7 -------
 opentrack-api/opentrack-guts.h    |  8 --------
 4 files changed, 40 deletions(-)

(limited to 'opentrack-api/context.cpp')

diff --git a/facetracknoir/global-settings.cpp b/facetracknoir/global-settings.cpp
index 42646742..b198f327 100644
--- a/facetracknoir/global-settings.cpp
+++ b/facetracknoir/global-settings.cpp
@@ -4,12 +4,6 @@
 #   include <dlfcn.h>
 #endif
 
-#ifdef IN_OPENTRACK_API
-#   ifdef __GNUC__
-#       pragma GCC visibility push(protected)
-#   endif
-#endif
-
 SelectedLibraries* Libraries = NULL;
 
 SelectedLibraries::~SelectedLibraries()
@@ -134,9 +128,3 @@ DynamicLibrary::~DynamicLibrary()
         (void) dlclose(handle);
 #endif
 }
-
-#ifdef IN_OPENTRACK_API
-#   ifdef __GNUC__
-#       pragma GCC visibility pop
-#   endif
-#endif
diff --git a/facetracknoir/global-settings.h b/facetracknoir/global-settings.h
index ea36abac..3e24bf74 100644
--- a/facetracknoir/global-settings.h
+++ b/facetracknoir/global-settings.h
@@ -14,12 +14,6 @@
 
 #include <cstdio>
 
-#ifdef IN_OPENTRACK_API
-#   ifdef __GNUC__
-#       pragma GCC visibility push(protected)
-#   endif
-#endif
-
 #include <QWidget>
 #include <QDebug>
 #include <QString>
@@ -91,10 +85,3 @@ public:
     virtual DynamicLibrary* current_filter() = 0;
     virtual QFrame* get_video_widget() = 0;
 };
-
-
-#ifdef IN_OPENTRACK_API
-#   ifdef __GNUC__
-#       pragma GCC visibility pop
-#   endif
-#endif
diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
index 1fdf6713..003377ce 100644
--- a/opentrack-api/context.cpp
+++ b/opentrack-api/context.cpp
@@ -17,10 +17,6 @@
 #   define LIB_PREFIX "lib"
 #endif
 
-#ifdef __GNUC__
-#   pragma GCC visibility push(protected)
-#endif
-
 static Metadata* get_metadata(DynamicLibrary* lib, QString& longName, QIcon& icon)
 {
     Metadata* meta;
@@ -110,6 +106,3 @@ void opentrack_finalize_ctx(opentrack foo)
 
 }
 
-#ifdef __GNUC__
-#   pragma GCC visibility pop
-#endif
diff --git a/opentrack-api/opentrack-guts.h b/opentrack-api/opentrack-guts.h
index 01463cfc..b9c3878b 100644
--- a/opentrack-api/opentrack-guts.h
+++ b/opentrack-api/opentrack-guts.h
@@ -1,9 +1,5 @@
 #pragma once
 
-#ifdef __GNUC__
-#   pragma GCC visibility push(protected)
-#endif
-
 #include <QDir>
 #include <QList>
 #include <QStringList>
@@ -42,7 +38,3 @@ public:
     opentrack_ctx(QDir& dir);
     ~opentrack_ctx();
 } *opentrack;
-
-#ifdef __GNUC__
-#   pragma GCC visibility pop
-#endif
-- 
cgit v1.2.3


From 4aed930154638707e5e6cd37abfda2f8c369d444 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Wed, 30 Oct 2013 18:42:59 +0100
Subject: fix braino

Signed-off-by: Stanislaw Halik <sthalik@misaki.pl>
---
 opentrack-api/context.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'opentrack-api/context.cpp')

diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
index 003377ce..9b8aa718 100644
--- a/opentrack-api/context.cpp
+++ b/opentrack-api/context.cpp
@@ -45,7 +45,7 @@ static QList<opentrack_meta> list_files(QDir& dir, QString filter)
             continue;
         }
         QString prefix(LIB_PREFIX + filter);
-        QString suffix("*." SONAME);
+        QString suffix("." SONAME);
         if (str.size() > prefix.size() + suffix.size() && str.startsWith(prefix) && str.endsWith(suffix))
         {
             auto str2 = str.mid(prefix.size(), str.size() - prefix.size() - suffix.size());
-- 
cgit v1.2.3


From 657cf32cb57257556c26f702e9e09b0edb15f350 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Wed, 30 Oct 2013 23:09:36 +0100
Subject: make standalone libopentrack-api.so work

---
 opentrack-api/context.cpp      | 20 +++++++++++---------
 opentrack-api/opentrack-guts.h | 27 +++++++++++++++++----------
 opentrack-api/opentrack.h      |  6 +++---
 opentrack-api/trackers.cpp     |  9 +++++----
 4 files changed, 36 insertions(+), 26 deletions(-)

(limited to 'opentrack-api/context.cpp')

diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
index 9b8aa718..e0fd5357 100644
--- a/opentrack-api/context.cpp
+++ b/opentrack-api/context.cpp
@@ -27,10 +27,12 @@ static Metadata* get_metadata(DynamicLibrary* lib, QString& longName, QIcon& ico
     return meta;
 }
 
-static QList<opentrack_meta> list_files(QDir& dir, QString filter)
+static QList<opentrack_meta> list_files(QString filter)
 {
     QList<opentrack_meta> ret;
-    QStringList filenames = dir.entryList( QStringList() << (LIB_PREFIX + filter + ("*." SONAME)), QDir::Files, QDir::Name );
+    QStringList filenames = QDir((qApp->applicationDirPath())).entryList(
+                QStringList() << (LIB_PREFIX + filter + ("*." SONAME)),
+                QDir::Files, QDir::Name );
     for ( int i = 0; i < filenames.size(); i++) {
         QIcon icon;
         QString long_name;
@@ -49,7 +51,7 @@ static QList<opentrack_meta> list_files(QDir& dir, QString filter)
         if (str.size() > prefix.size() + suffix.size() && str.startsWith(prefix) && str.endsWith(suffix))
         {
             auto str2 = str.mid(prefix.size(), str.size() - prefix.size() - suffix.size());
-            opentrack_meta item(meta, str2, lib);
+            opentrack_meta item(str2, lib);
             ret.push_back(item);
         }
     }
@@ -57,9 +59,10 @@ static QList<opentrack_meta> list_files(QDir& dir, QString filter)
     return ret;
 }
 
-opentrack_ctx::opentrack_ctx(QDir& dir) :
-    dir(dir),
-    meta_list(list_files(dir, "opentrack-tracker-"))
+opentrack_ctx::opentrack_ctx(int argc, char** argv, void* window_parent) :
+    app(argc, argv),
+    meta_list(list_files("opentrack-tracker-")),
+    fake_frame(window_parent)
 {
     const int count = meta_list.size();
     list = new char*[count + 1];
@@ -93,10 +96,9 @@ const char** opentrack_enum_trackers(opentrack ctx)
     return const_cast<const char**>(ctx->list);
 }
 
-opentrack opentrack_make_ctx(const char *dir)
+opentrack opentrack_make_ctx(int argc, char** argv, void* window_parent)
 {
-    QDir d(dir);
-    return new opentrack_ctx(d);
+    return new opentrack_ctx(argc, argv, window_parent);
 }
 
 void opentrack_finalize_ctx(opentrack foo)
diff --git a/opentrack-api/opentrack-guts.h b/opentrack-api/opentrack-guts.h
index b9c3878b..fd94ea34 100644
--- a/opentrack-api/opentrack-guts.h
+++ b/opentrack-api/opentrack-guts.h
@@ -1,5 +1,6 @@
 #pragma once
 
+#include <QFrame>
 #include <QDir>
 #include <QList>
 #include <QStringList>
@@ -8,33 +9,39 @@
 #include <iostream>
 #include <cstring>
 #include <QString>
+#include <QApplication>
 #include "ftnoir_tracker_base/ftnoir_tracker_base.h"
 #include "facetracknoir/global-settings.h"
+#include <memory>
 
 typedef ITracker* opentrack_tracker;
 
 class opentrack_meta {
 public:
-    Metadata* meta;
     QString path;
-    DynamicLibrary* lib;
+    std::shared_ptr<DynamicLibrary> lib;
 
-    opentrack_meta(Metadata* meta, QString& path, DynamicLibrary* lib) :
-        meta(meta), path(path), lib(lib)
+    opentrack_meta(QString& path, DynamicLibrary* lib) :
+        path(path), lib(lib)
     {}
-    ~opentrack_meta()
+};
+
+class MyFrame : public QFrame {
+    Q_OBJECT
+public:
+    MyFrame(void* parent)
     {
-        delete meta;
-        delete lib;
+        create((WId) parent);
     }
+    explicit MyFrame() {}
 };
 
 typedef class opentrack_ctx {
 public:
-    QDir dir;
+    QApplication app;
     char** list;
     QList<opentrack_meta> meta_list;
-    QFrame fake_frame;
-    opentrack_ctx(QDir& dir);
+    MyFrame fake_frame;
+    opentrack_ctx(int argc, char** argv, void* window_parent);
     ~opentrack_ctx();
 } *opentrack;
diff --git a/opentrack-api/opentrack.h b/opentrack-api/opentrack.h
index 1c8fcee5..63136abc 100644
--- a/opentrack-api/opentrack.h
+++ b/opentrack-api/opentrack.h
@@ -6,9 +6,9 @@ extern "C" {
 #ifndef IN_OPENTRACK
 /* opaque pointers, forward definitions */
 struct opentrack_opaque_ctx;
-typedef opentrack_opaque_ctx* opentrack;
+typedef struct opentrack_opaque_ctx* opentrack;
 struct opentrack_opaque_tracker;
-typedef opentrack_opaque_tracker* opentrack_tracker;
+typedef struct opentrack_opaque_tracker* opentrack_tracker;
 #endif
 
 #ifdef IN_OPENTRACK
@@ -42,7 +42,7 @@ enum opentrack_dof {
 };
 #endif
 
-opentrack opentrack_make_ctx(const char* dir);
+opentrack opentrack_make_ctx(int argc, char** argv, void* window_parent);
 void opentrack_finalize_ctx(opentrack self);
 
 /* no need to free the return value; invalid to modify it */
diff --git a/opentrack-api/trackers.cpp b/opentrack-api/trackers.cpp
index 2527017b..0f698e4c 100644
--- a/opentrack-api/trackers.cpp
+++ b/opentrack-api/trackers.cpp
@@ -5,13 +5,12 @@ extern "C" {
 
 opentrack_tracker OPENTRACK_EXPORT opentrack_make_tracker(opentrack ctx, const char* name)
 {
-    QString n(name);
     for (int i = 0; i < ctx->meta_list.size(); i++)
     {
-        auto meta = ctx->meta_list[i];
+        auto meta = ctx->meta_list.at(i);
         if (ctx->meta_list.at(i).path == name)
         {
-            ITracker* foo = reinterpret_cast<ITracker*>(meta.lib->Constructor());
+            ITracker* foo = static_cast<ITracker*>(meta.lib->Constructor());
             return foo;
         }
     }
@@ -32,7 +31,9 @@ void OPENTRACK_EXPORT opentrack_tracker_start(opentrack self, opentrack_tracker
 
 int OPENTRACK_EXPORT opentrack_tracker_tick(opentrack_tracker tracker, double* headpose)
 {
-    return tracker->GiveHeadPoseData(headpose);
+    int ret = tracker->GiveHeadPoseData(headpose);
+    QApplication::processEvents(0, 5);
+    return ret;
 }
 
 }
-- 
cgit v1.2.3


From e7f264c09a2d1f4f1f6c6a3144fd5993e72a408d Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Wed, 30 Oct 2013 23:22:13 +0100
Subject: mismatched delete/delete[]

Signed-off-by: Stanislaw Halik <sthalik@misaki.pl>
---
 opentrack-api/context.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'opentrack-api/context.cpp')

diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
index e0fd5357..84089c43 100644
--- a/opentrack-api/context.cpp
+++ b/opentrack-api/context.cpp
@@ -83,9 +83,9 @@ opentrack_ctx::~opentrack_ctx()
 {
     for (int i = 0; list[i]; i++)
     {
-        delete list[i];
+        delete[] list[i];
     }
-    delete list;
+    delete[] list;
 }
 
 extern "C"
-- 
cgit v1.2.3


From 50a101da6278f40e2c3a13234078b4404a99d718 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Wed, 30 Oct 2013 23:24:27 +0100
Subject: plug in memleak in api

Signed-off-by: Stanislaw Halik <sthalik@misaki.pl>
---
 opentrack-api/context.cpp | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'opentrack-api/context.cpp')

diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
index 84089c43..eb5b8a58 100644
--- a/opentrack-api/context.cpp
+++ b/opentrack-api/context.cpp
@@ -46,6 +46,8 @@ static QList<opentrack_meta> list_files(QString filter)
             delete lib;
             continue;
         }
+        /* TODO perhaps return full name and somesuch */
+        delete meta;
         QString prefix(LIB_PREFIX + filter);
         QString suffix("." SONAME);
         if (str.size() > prefix.size() + suffix.size() && str.startsWith(prefix) && str.endsWith(suffix))
-- 
cgit v1.2.3


From ecbb8c37edd201115ebc4a0d1cc272f1c56933c2 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Thu, 31 Oct 2013 07:56:30 +0100
Subject: aid MSVC symbol exportitude

Signed-off-by: Stanislaw Halik <sthalik@misaki.pl>
---
 opentrack-api/context.cpp |  6 +++---
 opentrack-api/opentrack.h | 20 ++++++++------------
 2 files changed, 11 insertions(+), 15 deletions(-)

(limited to 'opentrack-api/context.cpp')

diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
index eb5b8a58..5b218f93 100644
--- a/opentrack-api/context.cpp
+++ b/opentrack-api/context.cpp
@@ -93,17 +93,17 @@ opentrack_ctx::~opentrack_ctx()
 extern "C"
 {
 
-const char** opentrack_enum_trackers(opentrack ctx)
+const char** OPENTRACK_EXPORT opentrack_enum_trackers(opentrack ctx)
 {
     return const_cast<const char**>(ctx->list);
 }
 
-opentrack opentrack_make_ctx(int argc, char** argv, void* window_parent)
+opentrack OPENTRACK_EXPORT opentrack_make_ctx(int argc, char** argv, void* window_parent)
 {
     return new opentrack_ctx(argc, argv, window_parent);
 }
 
-void opentrack_finalize_ctx(opentrack foo)
+void OPENTRACK_EXPORT opentrack_finalize_ctx(opentrack foo)
 {
     delete foo;
 }
diff --git a/opentrack-api/opentrack.h b/opentrack-api/opentrack.h
index 63136abc..b0883d50 100644
--- a/opentrack-api/opentrack.h
+++ b/opentrack-api/opentrack.h
@@ -15,11 +15,7 @@ typedef struct opentrack_opaque_tracker* opentrack_tracker;
 #   ifdef _WIN32
 #       define OPENTRACK_EXPORT __declspec(dllexport)
 #   else
-#       ifdef __GNUC__
-#           define OPENTRACK_EXPORT __attribute__((visibility ("default")))
-#       else
-#           define OPENTRACK_EXPORT
-#       endif
+#       define OPENTRACK_EXPORT
 #   endif
 #else
 #   ifdef _WIN32
@@ -42,20 +38,20 @@ enum opentrack_dof {
 };
 #endif
 
-opentrack opentrack_make_ctx(int argc, char** argv, void* window_parent);
-void opentrack_finalize_ctx(opentrack self);
+opentrack OPENTRACK_EXPORT opentrack_make_ctx(int argc, char** argv, void* window_parent);
+void OPENTRACK_EXPORT opentrack_finalize_ctx(opentrack self);
 
 /* no need to free the return value; invalid to modify it */
-const char** opentrack_enum_trackers(opentrack self);
+const char** OPENTRACK_EXPORT opentrack_enum_trackers(opentrack self);
 
 /*
  * don't `opentrack_tracker_tick an unstarted tracker, it's invalid to do so
  * it's also invalid to start a finalized tracker
  */
-opentrack_tracker opentrack_make_tracker(opentrack ctx, const char* name);
-void opentrack_tracker_start(opentrack self, opentrack_tracker tracker);
-int opentrack_tracker_tick(opentrack_tracker tracker, double* headpose);
-void opentrack_finalize_tracker(opentrack_tracker tracker);
+opentrack_tracker OPENTRACK_EXPORT opentrack_make_tracker(opentrack ctx, const char* name);
+void OPENTRACK_EXPORT opentrack_tracker_start(opentrack self, opentrack_tracker tracker);
+int OPENTRACK_EXPORT opentrack_tracker_tick(opentrack_tracker tracker, double* headpose);
+void OPENTRACK_EXPORT opentrack_finalize_tracker(opentrack_tracker tracker);
 #ifdef __cplusplus
 }
 #endif
-- 
cgit v1.2.3


From a36b0c4fb8cfd3d28710f0cb7534e8a0d86cc3cb Mon Sep 17 00:00:00 2001
From: Ryan Spicer <ryanspicer@gmail.com>
Date: Sun, 3 Nov 2013 12:06:54 -0800
Subject: MSVC 11 expects __declspec(dllexport) before return type.

---
 opentrack-api/context.cpp |  6 +++---
 opentrack-api/opentrack.h | 14 +++++++-------
 2 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'opentrack-api/context.cpp')

diff --git a/opentrack-api/context.cpp b/opentrack-api/context.cpp
index 5b218f93..04fa5ac2 100644
--- a/opentrack-api/context.cpp
+++ b/opentrack-api/context.cpp
@@ -93,17 +93,17 @@ opentrack_ctx::~opentrack_ctx()
 extern "C"
 {
 
-const char** OPENTRACK_EXPORT opentrack_enum_trackers(opentrack ctx)
+OPENTRACK_EXPORT const char** opentrack_enum_trackers(opentrack ctx)
 {
     return const_cast<const char**>(ctx->list);
 }
 
-opentrack OPENTRACK_EXPORT opentrack_make_ctx(int argc, char** argv, void* window_parent)
+OPENTRACK_EXPORT opentrack  opentrack_make_ctx(int argc, char** argv, void* window_parent)
 {
     return new opentrack_ctx(argc, argv, window_parent);
 }
 
-void OPENTRACK_EXPORT opentrack_finalize_ctx(opentrack foo)
+OPENTRACK_EXPORT void  opentrack_finalize_ctx(opentrack foo)
 {
     delete foo;
 }
diff --git a/opentrack-api/opentrack.h b/opentrack-api/opentrack.h
index b0883d50..990b6aa4 100644
--- a/opentrack-api/opentrack.h
+++ b/opentrack-api/opentrack.h
@@ -38,20 +38,20 @@ enum opentrack_dof {
 };
 #endif
 
-opentrack OPENTRACK_EXPORT opentrack_make_ctx(int argc, char** argv, void* window_parent);
-void OPENTRACK_EXPORT opentrack_finalize_ctx(opentrack self);
+OPENTRACK_EXPORT opentrack opentrack_make_ctx(int argc, char** argv, void* window_parent);
+OPENTRACK_EXPORT void opentrack_finalize_ctx(opentrack self);
 
 /* no need to free the return value; invalid to modify it */
-const char** OPENTRACK_EXPORT opentrack_enum_trackers(opentrack self);
+OPENTRACK_EXPORT const char** opentrack_enum_trackers(opentrack self);
 
 /*
  * don't `opentrack_tracker_tick an unstarted tracker, it's invalid to do so
  * it's also invalid to start a finalized tracker
  */
-opentrack_tracker OPENTRACK_EXPORT opentrack_make_tracker(opentrack ctx, const char* name);
-void OPENTRACK_EXPORT opentrack_tracker_start(opentrack self, opentrack_tracker tracker);
-int OPENTRACK_EXPORT opentrack_tracker_tick(opentrack_tracker tracker, double* headpose);
-void OPENTRACK_EXPORT opentrack_finalize_tracker(opentrack_tracker tracker);
+OPENTRACK_EXPORT opentrack_tracker opentrack_make_tracker(opentrack ctx, const char* name);
+OPENTRACK_EXPORT void  opentrack_tracker_start(opentrack self, opentrack_tracker tracker);
+OPENTRACK_EXPORT int opentrack_tracker_tick(opentrack_tracker tracker, double* headpose);
+OPENTRACK_EXPORT void opentrack_finalize_tracker(opentrack_tracker tracker);
 #ifdef __cplusplus
 }
 #endif
-- 
cgit v1.2.3