Skip to content

Commit 5a79106

Browse files
Improve include resolution fix for older compilers
The primary way to detect includes is to scan the compiler error output for "#include" lines. However, older gcc versions did not print the error line itself, only a message about the error, which would not be detected. In bd5d3ec (Fix include resolution for older compilers), a fallback was added to scan for "fatal error" followed by the missing include filename, but that fallback only looked at the first line of the error output. When the missing #include line is not in the source file being compiled, but in an included file, the error message would something like this: In file included from binouts.ino:52:0: regtable.h:31:22: fatal error: register.h: No such file or directory So the filename that should be found is in the second line (or further). This commit changes the fallback process to keep scanning lines of compiler output, until one is found, instead of only looking at the first line. This fixes #97. Signed-off-by: Matthijs Kooijman <matthijs@stdin.nl>
1 parent 6183f3b commit 5a79106

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/arduino.cc/builder/includes_finder_with_regexp.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,13 @@ func (s *IncludesFinderWithRegExp) Run(ctx *types.Context) error {
6363
}
6464

6565
func findIncludesForOldCompilers(source string) string {
66-
firstLine := strings.Split(source, "\n")[0]
67-
splittedLine := strings.Split(firstLine, ":")
68-
for i, _ := range splittedLine {
69-
if strings.Contains(splittedLine[i], "fatal error") {
70-
return strings.TrimSpace(splittedLine[i+1])
66+
lines := strings.Split(source, "\n")
67+
for _, line := range lines {
68+
splittedLine := strings.Split(line, ":")
69+
for i, _ := range splittedLine {
70+
if strings.Contains(splittedLine[i], "fatal error") {
71+
return strings.TrimSpace(splittedLine[i+1])
72+
}
7173
}
7274
}
7375
return ""

0 commit comments

Comments
 (0)