+DECLARE_LOG_FUNCTION_PUBLIC(SysError)
+
+// debug functions do nothing in release mode
+#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 wxChar*, 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
+
+// wxLogFatalError helper: show the (fatal) error to the user in a safe way,
+// i.e. without using wxMessageBox() for example because it could crash
+void WXDLLIMPEXP_BASE
+wxSafeShowMessage(const wxString& title, const wxString& text);
+
+// ----------------------------------------------------------------------------
+// debug only logging functions: use them with API name and error code
+// ----------------------------------------------------------------------------
+
+#ifdef __WXDEBUG__