X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/187c2f81bc9a29e3ae643941c218c5d89c5369fc..c5453c7956e115a1e7290f01cbbd730a5d8f3448:/utils/ifacecheck/src/ifacecheck.cpp diff --git a/utils/ifacecheck/src/ifacecheck.cpp b/utils/ifacecheck/src/ifacecheck.cpp index 92192904f2..13aca6a97e 100644 --- a/utils/ifacecheck/src/ifacecheck.cpp +++ b/utils/ifacecheck/src/ifacecheck.cpp @@ -70,6 +70,19 @@ static const wxCmdLineEntryDesc g_cmdLineDesc[] = wxCMD_LINE_DESC_END }; +class IfaceCheckLog : public wxLog +{ +public: + IfaceCheckLog() {} + + virtual void DoLogText(const wxString& msg) + { + // send all messages to stdout (normal behaviour is to sent them to stderr) + wxPuts(msg); + fflush(stdout); + } +}; + class IfaceCheckApp : public wxAppConsole { public: @@ -84,7 +97,6 @@ public: bool FixMethod(const wxString& header, const wxMethod* iface, const wxMethod* api); bool StringContainsMethodName(const wxString& str, const wxMethod* m); - void ShowProgress(); void PrintStatistics(long secs); bool IsToProcess(const wxString& headername) const @@ -117,6 +129,10 @@ int IfaceCheckApp::OnRun() wxString::Format("wxWidgets Interface checker utility (built %s against %s)", __DATE__, wxVERSION_STRING)); + // make the output more readable: + wxLog::SetActiveTarget(new IfaceCheckLog); + wxLog::DisableTimestamp(); + // parse the command line... bool ok = true; wxString preprocFile; @@ -137,22 +153,18 @@ int IfaceCheckApp::OnRun() // in any case set basic std preprocessor #defines: m_doxyInterface.AddPreprocessorValue("NULL", "0"); - //g_bLogEnabled = false; - // parse the two XML files which contain the real and the doxygen interfaces // for wxWidgets API: if (!m_gccInterface.Parse(parser.GetParam(0)) || !m_doxyInterface.Parse(parser.GetParam(1))) return 1; - g_bLogEnabled = true; - if (parser.Found(DUMP_SWITCH)) { - LogMessage("Dumping real API to '%s'...", API_DUMP_FILE); + wxLogMessage("Dumping real API to '%s'...", API_DUMP_FILE); m_gccInterface.Dump(API_DUMP_FILE); - LogMessage("Dumping interface API to '%s'...", INTERFACE_DUMP_FILE); + wxLogMessage("Dumping interface API to '%s'...", INTERFACE_DUMP_FILE); m_doxyInterface.Dump(INTERFACE_DUMP_FILE); } else @@ -192,23 +204,19 @@ int IfaceCheckApp::OnRun() } } -void IfaceCheckApp::ShowProgress() -{ - wxPrint("."); - //fflush(stdout); -} - bool IfaceCheckApp::Compare() { const wxClassArray& interfaces = m_doxyInterface.GetClasses(); const wxClass* c; int mcount = 0, ccount = 0; - LogMessage("Comparing the interface API to the real API (%d classes to compare)...", - interfaces.GetCount()); + wxLogMessage("Comparing the interface API to the real API (%d classes to compare)...", + interfaces.GetCount()); if (!m_strToMatch.IsEmpty()) - LogMessage("Processing only header files matching '%s' expression.", m_strToMatch); + { + wxLogMessage("Processing only header files matching '%s' expression.", m_strToMatch); + } for (unsigned int i=0; iGetHeader(), &m, &tmp)) - LogMessage("Adjusted attributes of '%s' method", m.GetAsString()); + { + wxLogMessage("Adjusted attributes of '%s' method", m.GetAsString()); + } proceed = false; break; @@ -360,7 +374,7 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClass* api) { if (overloads.GetCount()==0) { - LogMessage("%s: real '%s' class and their parents have no method '%s'", + wxLogMessage("%s: real '%s' class and their parents have no method '%s'", header, api->GetName(), m.GetAsString()); // we've found no overloads } @@ -383,7 +397,7 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClass* api) for (unsigned int j=0; jGetAsString(true, true, true, true); - wxPrint(warning + "\n"); + wxLogWarning("%s", warning); count++; if (overloads.GetCount()>1) @@ -391,7 +405,9 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClass* api) // TODO: decide which of these overloads is the most "similar" to m // and eventually modify it if (m_modify) - wxPrint("\tmanual fix is required\n"); + { + wxLogWarning("\tmanual fix is required"); + } } else { @@ -399,7 +415,7 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClass* api) if (m_modify || m.IsCtor()) { - wxPrint("\tfixing it...\n"); + wxLogWarning("\tfixing it..."); // try to modify it! FixMethod(iface->GetHeader(), &m, overloads[0]); @@ -423,11 +439,12 @@ bool IfaceCheckApp::StringContainsMethodName(const wxString& str, const wxMethod bool IfaceCheckApp::FixMethod(const wxString& header, const wxMethod* iface, const wxMethod* api) { + unsigned int i,j; wxASSERT(iface && api); wxTextFile file; if (!file.Open(header)) { - LogError("\tcan't open the '%s' header file.", header); + wxLogError("\tcan't open the '%s' header file.", header); return false; } @@ -435,13 +452,13 @@ bool IfaceCheckApp::FixMethod(const wxString& header, const wxMethod* iface, con // i.e. the line containing the semicolon at the end of the declaration. int end = iface->GetLocation()-1; if (end <= 0 || end >= (int)file.GetLineCount()) { - LogWarning("\tinvalid location info for method '%s': %d.", + wxLogWarning("\tinvalid location info for method '%s': %d.", iface->GetAsString(), iface->GetLocation()); return false; } if (!file.GetLine(end).Contains(";")) { - LogWarning("\tinvalid location info for method '%s': %d.", + wxLogWarning("\tinvalid location info for method '%s': %d.", iface->GetAsString(), iface->GetLocation()); return false; } @@ -476,13 +493,13 @@ bool IfaceCheckApp::FixMethod(const wxString& header, const wxMethod* iface, con if (start <= 0 || !founddecl) { - LogError("\tcan't find the beginning of the declaration of '%s' method in '%s' header looking backwards from line %d; I arrived at %d and gave up", + wxLogError("\tcan't find the beginning of the declaration of '%s' method in '%s' header looking backwards from line %d; I arrived at %d and gave up", iface->GetAsString(), header, end+1 /* zero-based => 1-based */, start); return false; } // remove the old prototype - for (int i=start; i<=end; i++) + for (int k=start; k<=end; k++) file.RemoveLine(start); // remove (end-start)-nth times the start-th line #define INDENTATION_STR wxString(" ") @@ -510,7 +527,7 @@ bool IfaceCheckApp::FixMethod(const wxString& header, const wxMethod* iface, con const wxArgumentTypeArray& realargs = api->GetArgumentTypes(); if (realargs.GetCount() == doxygenargs.GetCount()) { - for (unsigned int j=0; j WRAP_COLUMN) @@ -552,12 +569,12 @@ bool IfaceCheckApp::FixMethod(const wxString& header, const wxMethod* iface, con } // insert the new lines - for (unsigned int i=0; iGetMethodCount(); j++) + for (j=0; j < cToUpdate[i]->GetMethodCount(); j++) { wxMethod& m = cToUpdate[i]->GetMethod(j); if (m.GetLocation() > iface->GetLocation()) @@ -592,7 +611,7 @@ bool IfaceCheckApp::ParsePreprocessorOutput(const wxString& filename) { wxTextFile tf; if (!tf.Open(filename)) { - LogError("can't open the '%s' preprocessor output file.", filename); + wxLogError("can't open the '%s' preprocessor output file.", filename); return false; } @@ -605,7 +624,7 @@ bool IfaceCheckApp::ParsePreprocessorOutput(const wxString& filename) // the format of this line should be: // #define DEFNAME DEFVALUE if (!line.StartsWith("#define ")) { - LogError("unexpected content in '%s' at line %d.", filename, i+1); + wxLogError("unexpected content in '%s' at line %d.", filename, i+1); return false; } @@ -634,7 +653,7 @@ bool IfaceCheckApp::ParsePreprocessorOutput(const wxString& filename) } } - LogMessage("Parsed %d preprocessor #defines from '%s' which will be used later...", + wxLogMessage("Parsed %d preprocessor #defines from '%s' which will be used later...", useful, filename); return true; @@ -645,9 +664,9 @@ void IfaceCheckApp::PrintStatistics(long secs) // these stats, for what regards the gcc XML, are all referred to the wxWidgets // classes only! - LogMessage("wx real headers contains declaration of %d classes (%d methods)", + wxLogMessage("wx real headers contains declaration of %d classes (%d methods)", m_gccInterface.GetClassesCount(), m_gccInterface.GetMethodCount()); - LogMessage("wx interface headers contains declaration of %d classes (%d methods)", + wxLogMessage("wx interface headers contains declaration of %d classes (%d methods)", m_doxyInterface.GetClassesCount(), m_doxyInterface.GetMethodCount()); // build a list of the undocumented wx classes @@ -664,7 +683,7 @@ void IfaceCheckApp::PrintStatistics(long secs) list.RemoveLast(); list.RemoveLast(); - LogMessage("the list of the %d undocumented wx classes is: %s", undoc, list); - LogMessage("total processing took %d seconds.", secs); + wxLogMessage("the list of the %d undocumented wx classes is: %s", undoc, list); + wxLogMessage("total processing took %d seconds.", secs); }