2003-01-18 Havoc Pennington <hp@pobox.com>
authorHavoc Pennington <hp@redhat.com>
Sat, 18 Jan 2003 15:52:53 +0000 (15:52 +0000)
committerHavoc Pennington <hp@redhat.com>
Sat, 18 Jan 2003 15:52:53 +0000 (15:52 +0000)
        Building --disable-verbose-mode --disable-asserts --disable-tests
cuts the library from 112K to 45K or so

* configure.in: check for varargs macro support,
add --enable-verbose-mode, --enable-asserts.

* dbus/dbus-internals.h (_dbus_assert): support
DBUS_DISABLE_ASSERT
(_dbus_verbose): support DBUS_ENABLE_VERBOSE_MODE

ChangeLog
configure.in
dbus/dbus-internals.c
dbus/dbus-internals.h

index d879044..26a9ce2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2003-01-18  Havoc Pennington  <hp@pobox.com>
 
+        Building --disable-verbose-mode --disable-asserts --disable-tests
+       cuts the library from 112K to 45K or so
+       
+       * configure.in: check for varargs macro support, 
+       add --enable-verbose-mode, --enable-asserts. 
+
+       * dbus/dbus-internals.h (_dbus_assert): support
+       DBUS_DISABLE_ASSERT
+       (_dbus_verbose): support DBUS_ENABLE_VERBOSE_MODE
+
+2003-01-18  Havoc Pennington  <hp@pobox.com>
+
        * dbus/dbus-test.c: include config.h so that tests actually run
 
        * dbus/dbus-string.c: add assertions that stuff is 8-byte aligned,
index 5e85944..9f136b6 100644 (file)
@@ -25,8 +25,10 @@ AM_PROG_LIBTOOL
 
 AC_ARG_ENABLE(qt,      [  --enable-qt      enable Qt-friendly client library],enable_qt=$enableval,enable_qt=auto)
 AC_ARG_ENABLE(glib,    [  --enable-glib    enable GLib-friendly client library],enable_glib=$enableval,enable_glib=auto)
-AC_ARG_ENABLE(tests,   [  --enable-tests enable unit test code],enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE)
-AC_ARG_ENABLE(ansi,    [  --enable-ansi enable -ansi -pedantic gcc flags],enable_ansi=$enableval,enable_ansi=no)
+AC_ARG_ENABLE(tests,   [  --enable-tests   enable unit test code],enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE)
+AC_ARG_ENABLE(ansi,    [  --enable-ansi    enable -ansi -pedantic gcc flags],enable_ansi=$enableval,enable_ansi=no)
+AC_ARG_ENABLE(verbose-mode, [  --enable-verbose-mode support verbose debug mode],enable_verbose_mode=$enableval,enable_verbose_mode=yes)
+AC_ARG_ENABLE(asserts, [  --enable-asserts include assertion checks],enable_asserts=$enableval,enable_asserts=yes)
 
 dnl DBUS_BUILD_TESTS controls unit tests built in to .c files 
 dnl and also some stuff in the test/ subdir
@@ -35,6 +37,13 @@ if test x$enable_tests = xyes; then
     AC_DEFINE(DBUS_BUILD_TESTS,1,[Build test code])
 fi
 
+if test x$enable_verbose_mode = xyes; then
+    AC_DEFINE(DBUS_ENABLE_VERBOSE_MODE,1,[Support a verbose mode])
+fi
+if test x$enable_asserts = xno; then
+    AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
+fi
+
 changequote(,)dnl
 if test "x$GCC" = "xyes"; then
   case " $CFLAGS " in
@@ -108,6 +117,32 @@ dnl check for writev header and writev function so we're
 dnl good to go if HAVE_WRITEV gets defined.
 AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])
 
+dnl check for flavours of varargs macros (test from GLib)
+AC_MSG_CHECKING(for ISO C99 varargs macros in C)
+AC_TRY_COMPILE([],[
+int a(int p1, int p2, int p3);
+#define call_a(...) a(1,__VA_ARGS__)
+call_a(2,3);
+],dbus_have_iso_c_varargs=yes,dbus_have_iso_c_varargs=no)
+AC_MSG_RESULT($dbus_have_iso_c_varargs)
+
+AC_MSG_CHECKING(for GNUC varargs macros)
+AC_TRY_COMPILE([],[
+int a(int p1, int p2, int p3);
+#define call_a(params...) a(1,params)
+call_a(2,3);
+],dbus_have_gnuc_varargs=yes,dbus_have_gnuc_varargs=no)
+AC_MSG_RESULT($dbus_have_gnuc_varargs)
+
+dnl Output varargs tests
+if test x$dbus_have_iso_c_varargs = xyes; then
+    AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros])
+fi
+if test x$dbus_have_gnuc_varargs = xyes; then
+    AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros])
+fi
+
+
 DBUS_CLIENT_CFLAGS=
 DBUS_CLIENT_LIBS=
 AC_SUBST(DBUS_CLIENT_CFLAGS)
@@ -205,6 +240,8 @@ echo "
 
         Maintainer mode:        ${USE_MAINTAINER_MODE}
         Building unit tests:    ${enable_tests}
+        Building verbose mode:  ${enable_verbose_mode}
+        Building assertions:    ${enable_asserts}
         Building Qt bindings:   ${have_qt}
         Building GLib bindings: ${have_glib}
 "
@@ -212,3 +249,9 @@ echo "
 if test x$enable_tests = xyes; then
         echo "NOTE: building with unit tests increases the size of the installed library"
 fi
+if test x$enable_verbose_mode = xyes; then
+        echo "NOTE: building with verbose mode increases library size, but is probably a good idea anyway."
+fi
+if test x$enable_asserts = xyes; then
+        echo "NOTE: building with assertions increases library size, but is probably a good idea anyway."
+fi
index 9b672ef..8413ac0 100644 (file)
@@ -147,12 +147,14 @@ _dbus_warn (const char *format,
 /**
  * Prints a warning message to stderr
  * if the user has enabled verbose mode.
+ * This is the real function implementation,
+ * use _dbus_verbose() macro in code.
  *
  * @param format printf-style format string.
  */
 void
-_dbus_verbose (const char *format,
-               ...)
+_dbus_verbose_real (const char *format,
+                    ...)
 {
   va_list args;
   static dbus_bool_t verbose = TRUE;
index 4bdf41d..f0baf46 100644 (file)
 
 DBUS_BEGIN_DECLS;
 
-void _dbus_warn    (const char *format,
-                    ...);
-void _dbus_verbose (const char *format,
-                    ...);
+void _dbus_warn         (const char *format,
+                         ...);
+void _dbus_verbose_real (const char *format,
+                         ...);
+
+
+#ifdef DBUS_ENABLE_VERBOSE_MODE
+#  define _dbus_verbose _dbus_verbose_real
+#else
+#  ifdef HAVE_ISO_VARARGS
+#    define _dbus_verbose(...)
+#  elif defined (HAVE_GNUC_VARARGS)
+#    define _dbus_verbose(format...)
+#  else
+#    error "This compiler does not support varargs macros and thus verbose mode can't be disabled meaningfully"
+#  endif
+#endif /* !DBUS_ENABLE_VERBOSE_MODE */
 
 const char* _dbus_strerror (int error_number);
 
 DBusResultCode _dbus_result_from_errno (int error_number);
 
+#ifdef DBUS_DISABLE_ASSERT
+#define _dbus_assert(condition)
+#else
 #define _dbus_assert(condition)                                         \
 do {                                                                    \
   if (!(condition))                                                     \
@@ -54,13 +70,18 @@ do {                                                                    \
       _dbus_abort ();                                                   \
     }                                                                   \
 } while (0)
+#endif /* !DBUS_DISABLE_ASSERT */
 
+#ifdef DBUS_DISABLE_ASSERT
+#define _dbus_assert_not_reached(explanation)
+#else
 #define _dbus_assert_not_reached(explanation)                                   \
 do {                                                                            \
     _dbus_warn ("File \"%s\" line %d should not have been reached: %s\n",       \
                __FILE__, __LINE__, (explanation));                              \
     _dbus_abort ();                                                             \
 } while (0)
+#endif /* !DBUS_DISABLE_ASSERT */
 
 #define _DBUS_N_ELEMENTS(array) ((int) (sizeof ((array)) / sizeof ((array)[0])))