+bool IfaceCheckApp::ParsePreprocessorOutput(const wxString& filename)
+{
+ wxTextFile tf;
+ if (!tf.Open(filename)) {
+ LogError("can't open the '%s' preprocessor output file.", filename);
+ return false;
+ }
+
+ size_t useful = 0;
+ for (unsigned int i=0; i < tf.GetLineCount(); i++)
+ {
+ const wxString& line = tf.GetLine(i);
+ wxString defnameval = line.Mid(8); // what follows the "#define " string
+
+ // the format of this line should be:
+ // #define DEFNAME DEFVALUE
+ if (!line.StartsWith("#define ") || !defnameval.Contains(" ")) {
+ LogError("unexpected content in '%s' at line %d.", filename, i);
+ return false;
+ }
+
+ // get DEFNAME
+ wxString defname = defnameval.BeforeFirst(' ');
+ if (defname.Contains("("))
+ continue; // this is a macro, skip it!
+
+ // get DEFVAL
+ wxString defval = defnameval.AfterFirst(' ').Strip(wxString::both);
+ if (defval.StartsWith("(") && defval.EndsWith(")"))
+ defval = defval.Mid(1, defval.Len()-2);
+
+ // store this pair in the doxygen interface, where it can be useful
+ m_interface.AddPreprocessorValue(defname, defval);
+ useful++;
+ }
+
+ LogMessage("Parsed %d preprocessor #defines from '%s' which will be used later...",
+ useful, filename);
+
+ return true;
+}
+