Merge windows+cc branch into cairocanvas branch. Not finished, need to now merge...
[ardour.git] / libs / pbd / pbd / stacktrace.h
index 00cb253c700c48a7d9e9821582459e9235120893..c5d9743b1e55678ea2f97cbf09f43b4534e9ddfa 100644 (file)
 #ifndef __libpbd_stacktrace_h__
 #define __libpbd_stacktrace_h__
 
-#include <iostream>
-#include <ostream>
-#include <glibmm/thread.h>
-#include <list>
-
-namespace PBD {
-       void stacktrace (std::ostream& out, int levels = 0);
-       void trace_twb();
-
 #ifdef HAVE_WAFBUILD
 #include "libpbd-config.h"
 #endif
 
+#include <iostream>
+#include <ostream>
+#include <glibmm/threads.h>
+#include <list>
+
 #ifdef HAVE_EXECINFO
 #include <execinfo.h>
-#include <stdlib.h>
+#include <cstdlib>
 #endif
 
+#include "pbd/libpbd_visibility.h"
+
+
+namespace PBD {
+
+       LIBPBD_API void stacktrace (std::ostream& out, int levels = 0);
+       LIBPBD_API void trace_twb();
+       LIBPBD_API std::string demangle (const std::string&);
+
 template<typename T>
-class thing_with_backtrace 
+class /*LIBPBD_API*/ thing_with_backtrace 
 {
   public:
     thing_with_backtrace () {
@@ -50,7 +55,7 @@ class thing_with_backtrace
 #else 
            allocation_backtrace_size = 0;
 #endif
-           Glib::Mutex::Lock lm (all_mutex);
+           Glib::Threads::Mutex::Lock lm (all_mutex);
            all.push_back (this);
     }
 
@@ -62,7 +67,7 @@ class thing_with_backtrace
 #else 
            allocation_backtrace_size = 0;
 #endif
-           Glib::Mutex::Lock lm (all_mutex);
+           Glib::Threads::Mutex::Lock lm (all_mutex);
            all.push_back (this);
     }
 
@@ -70,7 +75,7 @@ class thing_with_backtrace
            if (allocation_backtrace_size) {
                    delete [] allocation_backtrace;
            }
-           Glib::Mutex::Lock lm (all_mutex);
+           Glib::Threads::Mutex::Lock lm (all_mutex);
            all.remove (this);
     }
 
@@ -105,14 +110,14 @@ private:
     void** allocation_backtrace;
     int allocation_backtrace_size;
     static std::list<thing_with_backtrace<T>* > all;
-    static Glib::StaticMutex all_mutex;
+    static Glib::Threads::Mutex all_mutex;
 };
 
-template<typename T> std::list<PBD::thing_with_backtrace<T> *> PBD::thing_with_backtrace<T>::all;
-template<typename T> Glib::StaticMutex PBD::thing_with_backtrace<T>::all_mutex = GLIBMM_STATIC_MUTEX_INIT;
+template<typename T> /*LIBPBD_API*/ std::list<PBD::thing_with_backtrace<T> *> PBD::thing_with_backtrace<T>::all;
+template<typename T> /*LIBPBD_API*/ Glib::Threads::Mutex PBD::thing_with_backtrace<T>::all_mutex;
 
 } // namespace PBD
 
-
+// JE - !!!!#include "../pbd/stacktrace.impl"
 
 #endif /* __libpbd_stacktrace_h__ */