util: add ability to disable afb logging macro usage
[staging/windowmanager.git] / src / util.hpp
index ff173c8..b3f43de 100644 (file)
 
 #include <sys/poll.h>
 
+#ifndef DO_NOT_USE_AFB
 extern "C" {
 #include <afb/afb-binding.h>
 };
+#endif
+
+#define CONCAT_(X, Y) X##Y
+#define CONCAT(X, Y) CONCAT_(X, Y)
 
 #ifdef __GNUC__
 #define ATTR_FORMAT(stringindex, firsttocheck) \
@@ -36,6 +41,7 @@ extern "C" {
 #define ATTR_NORETURN
 #endif
 
+#ifdef AFB_BINDING_VERSION
 #define lognotice(...) AFB_NOTICE(__VA_ARGS__)
 #define logerror(...) AFB_ERROR(__VA_ARGS__)
 #define fatal(...)            \
@@ -43,20 +49,29 @@ extern "C" {
       AFB_ERROR(__VA_ARGS__); \
       abort();                \
    } while (0)
+#else
+#define lognotice(...)
+#define logerror(...)
+#define fatal(...)            \
+   do {                       \
+      abort();                \
+   } while (0)
+#endif
 
 #ifdef DEBUG_OUTPUT
+#ifdef AFB_BINDING_VERSION
 #define logdebug(...) AFB_DEBUG(__VA_ARGS__)
 #else
 #define logdebug(...)
 #endif
+#else
+#define logdebug(...)
+#endif
 
-#ifdef NDEBUG
+#ifndef SCOPE_TRACING
 #define ST()
 #define STN(N)
 #else
-#define CONCAT_(X, Y) X##Y
-#define CONCAT(X, Y) CONCAT_(X, Y)
-
 #define ST() \
     ScopeTrace __attribute__((unused)) CONCAT(trace_scope_, __LINE__)(__func__)
 #define STN(N) \
@@ -65,10 +80,8 @@ extern "C" {
 struct ScopeTrace {
    thread_local static int indent;
    char const *f{};
-   explicit ScopeTrace(char const *func) : f(func) {
-      fprintf(stderr, "%lu %*s%s -->\n", pthread_self(), 2 * indent++, "", this->f);
-   }
-   ~ScopeTrace() { fprintf(stderr, "%lu %*s%s <--\n", pthread_self(), 2 * --indent, "", this->f); }
+   explicit ScopeTrace(char const *func);
+   ~ScopeTrace();
 };
 #endif