Version: 3.3.4 (using KDE KDE 3.5.4) Installed from: Ubuntu Packages OS: Linux When building a project, compiler output is parsed in the OutputView. In particular the lines corresponding to compiling, linking etc. are detected. This works by means of regular expressions, the code is visible in: parts/outputviews/makeactionfilter.cpp MakeActionFilter::actionFormats() Various well known compiler expressions are understood (e.g. cc, gcc, c++). However Sun's SunStudio C++ compiler goes by the name CC, hence it is not detected. Adding CC to the expressions allows output from the SunStudio compiler to be parsed correctly. I've patched this method on my own system as follows. A more generic fix would be to allow the user to enter the name of their compiler, however this simple change works for me. ================== // returns an array of ActionFormat MakeActionFilter::ActionFormat* MakeActionFilter::actionFormats() { static ActionFormat formats[] = { ActionFormat( i18n("compiling"), 1, 2, "(gcc|CC|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*`[^`]*`(?:[^/\\s;]*/)*([^/\\s;]+)"), ActionFormat( i18n("compiling"), 1, 2, "(gcc|CC|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*-o (?:\\S* )(?:[^/;]*/)*([^/\\s;]+)"), ActionFormat( i18n("compiling"), 1, 2, "(gcc|CC|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*(?:[^/]*/)*([^/\\s;]*)"), ActionFormat( i18n("compiling"), "unknown", "^compiling (.*)", 1 ), //moc and uic ActionFormat( i18n("generating"), 1, 2, "/(moc|uic)\\b.*\\s-o\\s([^\\s;]+)"), ActionFormat( i18n("linking"), "libtool", "/bin/sh\\s.*libtool.*--mode=link\\s.*\\s-o\\s([^\\s;]+)", 1 ), //can distcc link too ? ActionFormat( i18n("linking"), 1, 2, "(gcc|CC|cc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-o ([^\\s;]+)"), ActionFormat( i18n("creating"), "", "/(?:bin/sh\\s.*mkinstalldirs).*\\s([^\\s;]+)", 1 ), ActionFormat( i18n("installing"), "", "/(?:usr/bin/install|bin/sh\\s.*mkinstalldirs|bin/sh\\s.*libtool.*--mode=install).*\\s([^\\s;]+)", 1 ), ActionFormat( i18n("generating"), "dcopidl", "dcopidl .* > ([^\\s;]+)", 1 ), ActionFormat( i18n("compiling"), "dcopidl2cpp", "dcopidl2cpp (?:\\S* )*([^\\s;]+)", 1 ), ActionFormat( QString::null, QString::null, 0, 0 ) }; return formats; } ====================== Can we have "CC" be added as shown above. Or even better allow user input of their compiler name, that would be useful for users with strange compiler names. For example someone cross compiling for an embedded system. Thanks, Paul
SVN commit 620944 by dagerbo: Add various common ld and make error strings to the output error parser Add 'CC' among the possible compilers BUG: 71299 BUG: 72699 BUG: 131542 BUG: 91520 BUG: 132601 M +8 -0 compileerrorfilter.cpp M +3 -3 makeactionfilter.cpp --- branches/kdevelop/3.4/parts/outputviews/compileerrorfilter.cpp #620943:620944 @@ -50,6 +50,13 @@ ErrorFormat( "([^: \\t]+)\\(([0-9]+)\\):([^0-9]+)", 1, 2, 3, "intel" ), //libtool link ErrorFormat( "(libtool):( link):( warning): ", 0, 0, 0 ), + // ld + ErrorFormat( "undefined reference", 0, 0, 0 ), + ErrorFormat( "undefined symbol", 0, 0, 0 ), + ErrorFormat( "ld: cannot find", 0, 0, 0 ), + ErrorFormat( "No such file", 0, 0, 0 ), + // make + ErrorFormat( "No rule to make target", 0, 0, 0 ), // Fortran ErrorFormat( "\"(.*)\", line ([0-9]+):(.*)", 1, 2, 3 ), // Jade @@ -65,6 +72,7 @@ }; return formats; + } void CompileErrorFilter::processLine( const QString& line ) --- branches/kdevelop/3.4/parts/outputviews/makeactionfilter.cpp #620943:620944 @@ -72,9 +72,9 @@ MakeActionFilter::ActionFormat* MakeActionFilter::actionFormats() { static ActionFormat formats[] = { - ActionFormat( i18n("compiling"), 1, 2, "(gcc|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*`[^`]*`(?:[^/\\s;]*/)*([^/\\s;]+)"), - ActionFormat( i18n("compiling"), 1, 2, "(gcc|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*-o (?:\\S* )(?:[^/;]*/)*([^/\\s;]+)"), - ActionFormat( i18n("compiling"), 1, 2, "(gcc|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*(?:[^/]*/)*([^/\\s;]*)"), + ActionFormat( i18n("compiling"), 1, 2, "(gcc|CC|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*`[^`]*`(?:[^/\\s;]*/)*([^/\\s;]+)"), + ActionFormat( i18n("compiling"), 1, 2, "(gcc|CC|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*-o (?:\\S* )(?:[^/;]*/)*([^/\\s;]+)"), + ActionFormat( i18n("compiling"), 1, 2, "(gcc|CC|cc|distcc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-c (?:\\S* )*(?:[^/]*/)*([^/\\s;]*)"), ActionFormat( i18n("compiling"), 1, 1, "^compiling (.*)" ), //unsermake ActionFormat( i18n("compiling"), 1, 1, "\\[.+%\\] Building .* object (.*)" ), //cmake
Thank you Jens for the change which made it into KDevelop 3.4. The "compiling" detection now works for SunStudio's "CC" compiler. However, the "linking" detection was omitted from your change. Looking at the source for KDevelop 3.4.0, could line 90 be changed from: ActionFormat( i18n("linking"), 1, 2, "(gcc|cc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-o ([^\\s;]+)"), to: ActionFormat( i18n("linking"), 1, 2, "(gcc|CC|cc|c\\+\\+|g\\+\\+)\\ S* (?:\\S* )*-o ([^\\s;]+)"), That is, add "CC|". Thanks, Paul
Created attachment 20572 [details] Detect SunStudio linker output SunStudio C++ compiler/linker is "CC". It is already detected during compilation, this patch allows detection during linking. This makes the "Very Short Compiler Output" more useful.
SVN commit 665073 by apaku: Fix for Sun Compiler, patch from Paul Fee and finally closing the bugreport BUG:132601 M +1 -1 makeactionfilter.cpp --- branches/KDE/3.5/kdevelop/parts/outputviews/makeactionfilter.cpp #665072:665073 @@ -87,7 +87,7 @@ ActionFormat( i18n("linking"), "libtool", "/bin/sh\\s.*libtool.*--mode=link\\s.*\\s-o\\s([^\\s;]+)", 1 ), //can distcc link too ? - ActionFormat( i18n("linking"), 1, 2, "(gcc|cc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-o ([^\\s;]+)"), + ActionFormat( i18n("linking"), 1, 2, "(gcc|CC|cc|c\\+\\+|g\\+\\+)\\S* (?:\\S* )*-o ([^\\s;]+)"), ActionFormat( i18n("linking"), 1, 2, "^linking (.*)" ), //unsermaker ActionFormat( i18n("linking"), 1, 1, "^Linking .* module (.*)" ), //cmake ActionFormat( i18n("linking"), 1, 1, "^Linking (.*)" ), //cmake