| Summary: | SunStudio C++ compiler not detected in Compiler Output view. | ||
|---|---|---|---|
| Product: | [Applications] kdevelop | Reporter: | Paul Fee <paul.f.fee> |
| Component: | Output Views | Assignee: | kdevelop-bugs-null |
| Status: | RESOLVED FIXED | ||
| Severity: | wishlist | ||
| Priority: | NOR | ||
| Version First Reported In: | 3.3.4 | ||
| Target Milestone: | --- | ||
| Platform: | Ubuntu | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: | Detect SunStudio linker output | ||
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
|
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