-#else //!debug
- // these functions do nothing in release builds
-
- // note that leaving out "fmt" in the vararg functions provokes a warning
- // from SGI CC: "the last argument of the varargs function is unnamed"
- inline void wxVLogDebug(const wxChar *, va_list) { }
- inline void wxLogDebug(const wxChar *fmt, ...) { wxUnusedVar(fmt); }
- inline void wxVLogTrace(wxTraceMask, const wxChar *, va_list) { }
- inline void wxLogTrace(wxTraceMask, const wxChar *fmt, ...) { wxUnusedVar(fmt); }
- inline void wxVLogTrace(const wxChar *, const wxChar *, va_list) { }
- inline void wxLogTrace(const wxChar *, const wxChar *fmt, ...) { wxUnusedVar(fmt); }
+#ifdef __WATCOMC__
+ // workaround for http://bugzilla.openwatcom.org/show_bug.cgi?id=351
+ DECLARE_LOG_FUNCTION2(Trace, int, mask);
+#endif
+#else //!debug || !wxUSE_LOG
+ // these functions do nothing in release builds, but don't define them as
+ // nothing as it could result in different code structure in debug and
+ // release and this could result in trouble when these macros are used
+ // inside if/else
+ //
+ // note that making wxVLogDebug/Trace() themselves (empty inline) functions
+ // is a bad idea as some compilers are stupid enough to not inline even
+ // empty functions if their parameters are complicated enough, but by
+ // defining them as an empty inline function we ensure that even dumbest
+ // compilers optimise them away
+#ifdef __BORLANDC__
+ // but Borland gives "W8019: Code has no effect" for wxLogNop() so we need
+ // to define it differently for it to avoid these warnings (same problem as
+ // with wxUnusedVar())
+ #define wxLogNop() { }
+#else
+ inline void wxLogNop() { }
+#endif
+
+ #define wxVLogDebug(fmt, valist) wxLogNop()
+ #define wxVLogTrace(mask, fmt, valist) wxLogNop()
+
+ #ifdef HAVE_VARIADIC_MACROS
+ // unlike the inline functions below, this completely removes the
+ // wxLogXXX calls from the object file:
+ #define wxLogDebug(fmt, ...) wxLogNop()
+ #define wxLogTrace(mask, fmt, ...) wxLogNop()
+ #else // !HAVE_VARIADIC_MACROS
+ //inline void wxLogDebug(const wxString& fmt, ...) {}
+ WX_DEFINE_VARARG_FUNC_NOP(wxLogDebug, 1, (const wxString&))
+ //inline void wxLogTrace(wxTraceMask, const wxString& fmt, ...) {}
+ //inline void wxLogTrace(const wxString&, const wxString& fmt, ...) {}
+ WX_DEFINE_VARARG_FUNC_NOP(wxLogTrace, 2, (wxTraceMask, const wxString&))
+ WX_DEFINE_VARARG_FUNC_NOP(wxLogTrace, 2, (const wxString&, const wxString&))
+ #ifdef __WATCOMC__
+ // workaround for http://bugzilla.openwatcom.org/show_bug.cgi?id=351
+ WX_DEFINE_VARARG_FUNC_NOP(wxLogTrace, 2, (const char*, const char*))
+ WX_DEFINE_VARARG_FUNC_NOP(wxLogTrace, 2, (const wchar_t*, const wchar_t*))
+ #endif
+ #endif // HAVE_VARIADIC_MACROS/!HAVE_VARIADIC_MACROS