From 63e30f5024a669cc9b9aec77026552000b4f8c5d Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 10 Apr 2015 07:25:03 +0200 Subject: [PATCH] build: add --enable-more-asserts configure option and nm_assert() macro NM already has two kinds of assertions: - g_assert*(), conditionally compiled via #ifndef G_DISABLE_ASSERT - g_return*(), conditionally compiled via #ifndef G_DISABLE_CHECKS In theory, one should be able to disable both asserts and NM should still work correctly (and possibly more efficient). In practice, hardly anybody is testing such a configuration and it might be broken. Especially, we don't disable asserts for production builds, both because of less test coverage and because it might reduce our ability to debug. Add a new configure option --enable-more-asserts, which defines NM_MORE_ASSERTS and nm_assert(). This is for expensive asserts, that -- contrary to the asserts above -- are disabled by default. This is useful for extended debugging. (cherry picked from commit 08ecafd2bf672e3e49a90f22dd87fabfa08f4e2c) --- configure.ac | 6 ++++++ include/nm-utils-internal.h | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/configure.ac b/configure.ac index a56ef5bfe3..1a501cd818 100644 --- a/configure.ac +++ b/configure.ac @@ -828,6 +828,12 @@ AM_CONDITIONAL(BUILD_NMTUI, test "$build_nmtui" = yes) NM_COMPILER_WARNINGS +AC_ARG_ENABLE(more-asserts, + AS_HELP_STRING([--enable-more-asserts], [Enable more assertions for debugging (default: no)])) +if test "${enable_more_asserts}" = "yes"; then + AC_DEFINE(NM_MORE_ASSERTS, [1], [Define if more asserts are enabled]) +fi + AC_ARG_ENABLE(lto, AS_HELP_STRING([--enable-lto], [Enable Link Time Optimization for smaller size (default: no)])) if (test "${enable_lto}" = "yes"); then CFLAGS="-flto $CFLAGS" diff --git a/include/nm-utils-internal.h b/include/nm-utils-internal.h index 227a210b2c..06d5d06357 100644 --- a/include/nm-utils-internal.h +++ b/include/nm-utils-internal.h @@ -102,6 +102,14 @@ /*****************************************************************************/ +#ifdef NM_MORE_ASSERTS +#define nm_assert(cond) G_STMT_START { g_assert (cond); } G_STMT_END +#else +#define nm_assert(cond) G_STMT_START { (void) 0; } G_STMT_END +#endif + +/*****************************************************************************/ + #define NM_DEFINE_SINGLETON_INSTANCE(TYPE) \ static TYPE *singleton_instance