From 826c43a337b0de06af74081b8471e2ee7a2fec29 Mon Sep 17 00:00:00 2001
From: Fawzi Mohamed <fawzi.mohamed@digia.com>
Date: Thu, 30 Oct 2014 18:50:34 +0100
Subject: [PATCH] xcodeparser: detect replacing signature warning
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The “replacing signature” warning of codesign is interpreted by the
LdParser as an error. Handle it in the xcodeparser.

Change-Id: Ic7e654d7d60a5030be309509d27080ab7cb3bd4f
Task-number: QTCREATORBUG-13256
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
---
 .../projectexplorer/xcodebuildparser.cpp      | 33 +++++++++++++++++++
 .../projectexplorer/xcodebuildparser.h        |  1 +
 2 files changed, 34 insertions(+)

diff --git a/src/plugins/projectexplorer/xcodebuildparser.cpp b/src/plugins/projectexplorer/xcodebuildparser.cpp
index 95107fa8e45..ce83d203723 100644
--- a/src/plugins/projectexplorer/xcodebuildparser.cpp
+++ b/src/plugins/projectexplorer/xcodebuildparser.cpp
@@ -41,6 +41,7 @@ namespace ProjectExplorer {
 static const char failureRe[] = "\\*\\* BUILD FAILED \\*\\*$";
 static const char successRe[] = "\\*\\* BUILD SUCCEEDED \\*\\*$";
 static const char buildRe[] = "=== BUILD (AGGREGATE )?TARGET (.*) OF PROJECT (.*) WITH .* ===$";
+static const char signatureChangeRe[] = "(.+): replacing existing signature$";
 
 XcodebuildParser::XcodebuildParser() :
     m_fatalErrorCount(0),
@@ -53,6 +54,8 @@ XcodebuildParser::XcodebuildParser() :
     QTC_CHECK(m_successRe.isValid());
     m_buildRe.setPattern(QLatin1String(buildRe));
     QTC_CHECK(m_buildRe.isValid());
+    m_replacingSignatureRe.setPattern(QLatin1String(signatureChangeRe));
+    QTC_CHECK(m_replacingSignatureRe.isValid());
 }
 
 bool XcodebuildParser::hasFatalErrors() const
@@ -74,6 +77,16 @@ void XcodebuildParser::stdOutput(const QString &line)
             m_xcodeBuildParserState = OutsideXcodebuild;
             return;
         }
+        if (m_replacingSignatureRe.indexIn(lne) > -1) {
+            Task task(Task::Warning,
+                      QCoreApplication::translate("ProjectExplorer::XcodebuildParser",
+                                                  "Replacing signature"),
+                      Utils::FileName::fromString(m_replacingSignatureRe.cap(1)), /* filename */
+                      -1, /* line */
+                      Constants::TASK_CATEGORY_COMPILE);
+            taskAdded(task);
+            return;
+        }
         IOutputParser::stdError(line);
     } else {
         IOutputParser::stdOutput(line);
@@ -241,6 +254,26 @@ void ProjectExplorerPlugin::testXcodebuildParserParsing_data()
                     Constants::TASK_CATEGORY_COMPILE))
             << QString()
             << XcodebuildParser::UnknownXcodebuildState;
+    QTest::newRow("inside catch codesign replace signature")
+            << XcodebuildParser::InXcodebuild
+            << QString::fromLatin1("/somepath/somefile.app: replacing existing signature") << OutputParserTester::STDOUT
+            << QString() << QString()
+            << (QList<Task>()
+                << Task(Task::Warning,
+                        QCoreApplication::translate("ProjectExplorer::XcodebuildParser",
+                                                    "Replacing signature"),
+                        Utils::FileName::fromString(QLatin1String("/somepath/somefile.app")), /* filename */
+                        -1, /* line */
+                        Constants::TASK_CATEGORY_COMPILE))
+            << QString()
+            << XcodebuildParser::InXcodebuild;
+    QTest::newRow("outside forward codesign replace signature")
+            << XcodebuildParser::OutsideXcodebuild
+            << QString::fromLatin1("/somepath/somefile.app: replacing existing signature") << OutputParserTester::STDOUT
+            << QString::fromLatin1("/somepath/somefile.app: replacing existing signature\n") << QString()
+            << QList<Task>()
+            << QString()
+            << XcodebuildParser::OutsideXcodebuild;
 }
 
 void ProjectExplorerPlugin::testXcodebuildParserParsing()
diff --git a/src/plugins/projectexplorer/xcodebuildparser.h b/src/plugins/projectexplorer/xcodebuildparser.h
index 49baff868c6..bb49fce88fe 100644
--- a/src/plugins/projectexplorer/xcodebuildparser.h
+++ b/src/plugins/projectexplorer/xcodebuildparser.h
@@ -59,6 +59,7 @@ private:
     QRegExp m_failureRe;
     QRegExp m_successRe;
     QRegExp m_buildRe;
+    QRegExp m_replacingSignatureRe;
     XcodebuildStatus m_xcodeBuildParserState;
     QString m_lastTarget;
     QString m_lastProject;
-- 
GitLab