--- /dev/null
+#ifndef NOTIFY_H_V4O5JY61
+#define NOTIFY_H_V4O5JY61
+
+/* simple common notify hook */
+
+typedef void (notify_fn_t)(unsigned int, const char *, ...);
+extern notify_fn_t *notify __attribute__((format(printf, 2, 3)));
+
+#define NOTIFY_LEVEL_FATAL 0
+#define NOTIFY_LEVEL_ERROR 1
+#define NOTIFY_LEVEL_INFO 2
+#define NOTIFY_LEVEL_VERBOSE 3
+#define NOTIFY_LEVEL_DEBUG 4
+#define NOTIFY_LEVEL_LOCK 5
+
+#define NOTIFY(__level__,__fmt__,...) do { if (notify) notify((__level__), __fmt__, ## __VA_ARGS__); } while (0)
+#define NOTIFY_FATAL(fmt,...) NOTIFY(NOTIFY_LEVEL_FATAL, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#define NOTIFY_ERROR(fmt,...) NOTIFY(NOTIFY_LEVEL_ERROR, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#define NOTIFY_INFO(fmt,...) NOTIFY(NOTIFY_LEVEL_INFO, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#define NOTIFY_VERBOSE(fmt,...) NOTIFY(NOTIFY_LEVEL_VERBOSE, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#ifndef NDEBUG
+#define NOTIFY_DEBUG(fmt,...) NOTIFY(NOTIFY_LEVEL_DEBUG, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#define NOTIFY_DEBUG_LOCK(fmt,...) NOTIFY((NOTIFY_LEVEL_LOCK), "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#else /* !NDEBUG */
+#define NOTIFY_DEBUG(fmt,...) do { } while (0)
+#define NOTIFY_DEBUG_LOCK(fmt,...) do { } while (0)
+#endif /* !NDEBUG */
+
+#endif /* NOTIFY_H_V4O5JY61 */