-#ifdef __WXDEBUG__
- DECLARE_LOG_FUNCTION(Debug);
-
- // first king of LogTrace is uncoditional: it doesn't check the level,
- // while the second one does nothing if all of level bits are not set
- // in wxLog::GetActive()->GetTraceMask().
- DECLARE_LOG_FUNCTION(Trace);
- DECLARE_LOG_FUNCTION2(Trace, wxTraceMask mask);
-#else //!debug
- // these functions do nothing
- inline void wxLogDebug(const char *, ...) { }
- inline void wxLogTrace(const char *, ...) { }
- inline void wxLogTrace(wxTraceMask, const char *, ...) { }
+#if wxUSE_LOG && wxUSE_LOG_DEBUG
+ DECLARE_LOG_FUNCTION(Debug);
+
+ // there is no more unconditional LogTrace: it is not different from
+ // LogDebug and it creates overload ambiguities
+ //DECLARE_LOG_FUNCTION(Trace);
+
+ // this version only logs the message if the mask had been added to the
+ // list of masks with AddTraceMask()
+ DECLARE_LOG_FUNCTION2_IMPL(Trace, const wxString&, mask);
+ // and this one does nothing if all of level bits are not set in
+ // wxLog::GetActive()->GetTraceMask() -- it's deprecated in favour of
+ // string identifiers
+ DECLARE_LOG_FUNCTION2_IMPL(Trace, wxTraceMask, mask);
+ DECLARE_LOG_FUNCTION_PUBLIC(Trace)
+#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
+ inline void wxLogNop() { }
+
+ #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)
+ //inline void wxLogTrace(wxTraceMask, const wxString& fmt, ...) {}
+ //inline void wxLogTrace(const wxString&, const wxString& fmt, ...) {}
+ WX_DEFINE_VARARG_FUNC_NOP(wxLogTrace)
+ #endif // HAVE_VARIADIC_MACROS/!HAVE_VARIADIC_MACROS
+#endif // debug/!debug
+
+#if defined(__VISUALC__) && __VISUALC__ < 1300
+ #pragma warning(default:4003)