Do not require logging support for BT_[CTF_]ASSERT_PRE()
[babeltrace.git] / src / lib / assert-pre.h
index 6264c8ac1c0e6e5cb7fc57794df466676ae48747..48fe9598f4c83f107a83c145426114e504b143d0 100644 (file)
  */
 
 /*
- * The macros in this header use macros defined in
- * <lib/lib-logging.h>. We don't want this header to
- * automatically include <lib/lib-logging.h> because you
- * need to manually define BT_LOG_TAG before including
- * <lib/lib-logging.h> and it is unexpected that you
+ * The macros in this header use macros defined in "lib/logging.h".
+ * We don't want this header to automatically include
+ * "lib/logging.h" because you need to manually define BT_LOG_TAG
+ * before including "lib/logging.h" and it is unexpected that you
  * also need to define it before including this header.
  *
- * This is a reminder that in order to use
- * <lib/assert-pre.h>, you also need to use logging
- * explicitly.
+ * This is a reminder that in order to use "lib/assert-pre.h", you also
+ * need to use logging explicitly.
  */
 
-#ifndef BABELTRACE_LIB_LOGGING_INTERNAL_H
-# error Include <lib/lib-logging.h> before this header.
+#ifndef BT_LIB_LOG_SUPPORTED
+# error Include "lib/logging.h" before this header.
 #endif
 
 #include <stdlib.h>
 #include <inttypes.h>
-#include "common/babeltrace.h"
+#include "common/macros.h"
 
 #ifdef BT_DEV_MODE
-/*
- * Asserts that the library precondition _cond is satisfied.
- *
- * If _cond is false, log a fatal statement using _fmt and the optional
- * arguments using BT_LIB_LOGF(), and abort.
- *
- * To assert that a postcondition is satisfied or that some internal
- * object/context/value is in the expected state, use BT_ASSERT().
- */
-# define BT_ASSERT_PRE(_cond, _fmt, ...)                               \
-       do {                                                            \
-               if (!(_cond)) {                                         \
-                       BT_LOGF_STR("Library precondition not satisfied; error is:"); \
-                       BT_LIB_LOGF((_fmt), ##__VA_ARGS__);             \
-                       BT_LOGF_STR("Aborting...");                     \
-                       abort();                                        \
-               }                                                       \
-       } while (0)
-
-/*
- * Marks a function as being only used within a BT_ASSERT_PRE() context.
- */
-# define BT_ASSERT_PRE_FUNC
-
 /*
  * Prints the details of an unsatisfied precondition without immediately
  * aborting. You should use this within a function which checks
  *     BT_ASSERT_PRE(check_complex_precond(...),
  *                   "Precondition is not satisfied: ...", ...);
  */
-# define BT_ASSERT_PRE_MSG     BT_LIB_LOGF
+# define BT_ASSERT_PRE_MSG(_fmt, ...)                                  \
+       do {                                                            \
+               bt_lib_log(_BT_LOG_SRCLOC_FUNCTION, __FILE__,           \
+                       __LINE__, BT_LOG_FATAL, BT_LOG_TAG,             \
+                       (_fmt), ##__VA_ARGS__);                         \
+       } while (0)
+
+/*
+ * Asserts that the library precondition _cond is satisfied.
+ *
+ * If `_cond` is false, log a fatal statement using `_fmt` and the
+ * optional arguments (same usage as BT_LIB_LOGF()), and abort.
+ *
+ * To assert that a postcondition is satisfied or that some internal
+ * object/context/value is in the expected state, use BT_ASSERT().
+ */
+# define BT_ASSERT_PRE(_cond, _fmt, ...)                               \
+       do {                                                            \
+               if (!(_cond)) {                                         \
+                       BT_ASSERT_PRE_MSG("Babeltrace 2 library precondition not satisfied; error is:"); \
+                       BT_ASSERT_PRE_MSG((_fmt), ##__VA_ARGS__);       \
+                       BT_ASSERT_PRE_MSG("Aborting...");               \
+                       abort();                                        \
+               }                                                       \
+       } while (0)
+
+/*
+ * Marks a function as being only used within a BT_ASSERT_PRE() context.
+ */
+# define BT_ASSERT_PRE_FUNC
 #else
 # define BT_ASSERT_PRE(_cond, _fmt, ...)       ((void) sizeof((void) (_cond), 0))
-# define BT_ASSERT_PRE_FUNC    BT_UNUSED
+# define BT_ASSERT_PRE_FUNC    __attribute__((unused))
 # define BT_ASSERT_PRE_MSG(_fmt, ...)
 #endif /* BT_DEV_MODE */
 
This page took 0.026378 seconds and 4 git commands to generate.