PchManager: Split pch tasks in project and system pch tasks

Like you can see in the task numbers this patch is touching many different
areas. So I will only touch the main parts. It is using a clang action
instead of an extra process which will be enabling the handling of
generated files in PCHs. The flags from the project part are now not
anymore transformed in a command line but they are saved in the container
semantically aware so that they can later be merged. Most of this patch is
simply polishing of other patches.

Task-number: QTCREATORBUG-21346
Task-number: QTCREATORBUG-21380
Task-number: QTCREATORBUG-21382
Task-number: QTCREATORBUG-21383
Task-number: QTCREATORBUG-21693
Task-number: QTCREATORBUG-21778
Change-Id: I9b0c02d8149b554254e819448fbc61eeaa5b7494
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Marco Bubke
2018-12-17 12:06:57 +01:00
parent a78e3e5dd5
commit dd366b68de
114 changed files with 3742 additions and 1787 deletions

View File

@@ -48,8 +48,8 @@ public:
}
void insertProjectPrecompiledHeader(Utils::SmallStringView projectPartName,
Utils::SmallStringView pchPath,
long long pchBuildTime) override
Utils::SmallStringView pchPath,
long long pchBuildTime) override
{
try {
Sqlite::ImmediateTransaction transaction{m_database};
@@ -76,42 +76,44 @@ public:
}
}
void insertSystemPrecompiledHeader(Utils::SmallStringView projectPartName,
Utils::SmallStringView pchPath,
long long pchBuildTime) override
void insertSystemPrecompiledHeaders(const Utils::SmallStringVector &projectPartNames,
Utils::SmallStringView pchPath,
long long pchBuildTime) override
{
try {
Sqlite::ImmediateTransaction transaction{m_database};
m_insertProjectPartStatement.write(projectPartName);
m_insertSystemPrecompiledHeaderStatement.write(projectPartName, pchPath, pchBuildTime);
for (Utils::SmallStringView projectPartName : projectPartNames) {
m_insertProjectPartStatement.write(projectPartName);
m_insertSystemPrecompiledHeaderStatement.write(projectPartName, pchPath, pchBuildTime);
}
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
insertSystemPrecompiledHeader(projectPartName, pchPath, pchBuildTime);
insertSystemPrecompiledHeaders(projectPartNames, pchPath, pchBuildTime);
}
}
void deleteSystemPrecompiledHeader(Utils::SmallStringView projectPartName) override
void deleteSystemPrecompiledHeaders(const Utils::SmallStringVector &projectPartNames) override
{
try {
Sqlite::ImmediateTransaction transaction{m_database};
m_deleteSystemPrecompiledHeaderStatement.write(projectPartName);
for (Utils::SmallStringView projectPartName : projectPartNames)
m_deleteSystemPrecompiledHeaderStatement.write(projectPartName);
transaction.commit();
} catch (const Sqlite::StatementIsBusy) {
deleteSystemPrecompiledHeader(projectPartName);
deleteSystemPrecompiledHeaders(projectPartNames);
}
}
Utils::PathString fetchSystemPrecompiledHeaderPath(Utils::SmallStringView projectPartName) override
FilePath fetchSystemPrecompiledHeaderPath(Utils::SmallStringView projectPartName) override
{
try {
Sqlite::DeferredTransaction transaction{m_database};
auto value = m_fetchSystemPrecompiledHeaderPathStatement
.template value<Utils::PathString>(projectPartName);
auto value = m_fetchSystemPrecompiledHeaderPathStatement.template value<FilePath>(
projectPartName);
if (value)
return value.value();
@@ -121,7 +123,7 @@ public:
return fetchSystemPrecompiledHeaderPath(projectPartName);
}
return Utils::SmallStringView("");
return FilePath("");
}
public: