forked from qt-creator/qt-creator
CppTools: Support MSVC in CompilerOptionsBuilder.
Needed for clang static analyzer. Change-Id: I0221b7e87f7b52a4aa5ebf7f4b26c19e584d63e7 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
@@ -473,9 +473,11 @@ void ProjectPartBuilder::createProjectPart(const QStringList &theSources,
|
||||
|
||||
QStringList CompilerOptionsBuilder::createHeaderPathOptions(
|
||||
const ProjectPart::HeaderPaths &headerPaths,
|
||||
IsBlackListed isBlackListed)
|
||||
IsBlackListed isBlackListed, const QString &toolchainType)
|
||||
{
|
||||
typedef ProjectPart::HeaderPath HeaderPath;
|
||||
const QString defaultPrefix
|
||||
= QLatin1String(toolchainType == QLatin1String("msvc") ? "/I" : "-I");
|
||||
|
||||
QStringList result;
|
||||
|
||||
@@ -494,7 +496,7 @@ QStringList CompilerOptionsBuilder::createHeaderPathOptions(
|
||||
default: // This shouldn't happen, but let's be nice..:
|
||||
// intentional fall-through:
|
||||
case HeaderPath::IncludePath:
|
||||
prefix = QLatin1String("-I");
|
||||
prefix = defaultPrefix;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -505,9 +507,11 @@ QStringList CompilerOptionsBuilder::createHeaderPathOptions(
|
||||
}
|
||||
|
||||
QStringList CompilerOptionsBuilder::createDefineOptions(const QByteArray &defines,
|
||||
bool toolchainDefines)
|
||||
bool toolchainDefines,
|
||||
const QString &toolchainType)
|
||||
{
|
||||
QStringList result;
|
||||
const QString option = QLatin1String(toolchainType == QLatin1String("msvc") ? "/D" : "-D");
|
||||
|
||||
foreach (QByteArray def, defines.split('\n')) {
|
||||
if (def.isEmpty())
|
||||
@@ -533,9 +537,9 @@ QStringList CompilerOptionsBuilder::createDefineOptions(const QByteArray &define
|
||||
int spaceIdx = str.indexOf(' ');
|
||||
QString arg;
|
||||
if (spaceIdx != -1) {
|
||||
arg = QLatin1String("-D" + str.left(spaceIdx) + "=" + str.mid(spaceIdx + 1));
|
||||
arg = option + QLatin1String(str.left(spaceIdx) + "=" + str.mid(spaceIdx + 1));
|
||||
} else {
|
||||
arg = QLatin1String("-D" + str);
|
||||
arg = option + QLatin1String(str);
|
||||
}
|
||||
arg = arg.replace(QLatin1String("\\\""), QLatin1String("\""));
|
||||
arg = arg.replace(QLatin1String("\""), QLatin1String(""));
|
||||
@@ -546,7 +550,7 @@ QStringList CompilerOptionsBuilder::createDefineOptions(const QByteArray &define
|
||||
return result;
|
||||
}
|
||||
|
||||
QStringList CompilerOptionsBuilder::createLanguageOption(ProjectFile::Kind fileKind, bool objcExt)
|
||||
static QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt)
|
||||
{
|
||||
QStringList opts;
|
||||
opts += QLatin1String("-x");
|
||||
@@ -599,12 +603,40 @@ QStringList CompilerOptionsBuilder::createLanguageOption(ProjectFile::Kind fileK
|
||||
return opts;
|
||||
}
|
||||
|
||||
static QStringList createLanguageOptionMsvc(ProjectFile::Kind fileKind)
|
||||
{
|
||||
QStringList opts;
|
||||
switch (fileKind) {
|
||||
case ProjectFile::CHeader:
|
||||
case ProjectFile::CSource:
|
||||
opts << QLatin1String("/TC");
|
||||
break;
|
||||
case ProjectFile::CXXHeader:
|
||||
case ProjectFile::CXXSource:
|
||||
opts << QLatin1String("/TP");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return opts;
|
||||
}
|
||||
|
||||
QStringList CompilerOptionsBuilder::createLanguageOption(ProjectFile::Kind fileKind, bool objcExt,
|
||||
const QString &toolchainType)
|
||||
{
|
||||
return toolchainType == QLatin1String("msvc") ? createLanguageOptionMsvc(fileKind)
|
||||
: createLanguageOptionGcc(fileKind, objcExt);
|
||||
}
|
||||
|
||||
QStringList CompilerOptionsBuilder::createOptionsForLanguage(
|
||||
ProjectPart::LanguageVersion languageVersion,
|
||||
ProjectPart::LanguageExtensions languageExtensions,
|
||||
bool checkForBorlandExtensions)
|
||||
bool checkForBorlandExtensions,
|
||||
const QString &toolchainType)
|
||||
{
|
||||
QStringList opts;
|
||||
if (toolchainType == QLatin1String("msvc"))
|
||||
return opts;
|
||||
bool gnuExtensions = languageExtensions & ProjectPart::GnuExtensions;
|
||||
switch (languageVersion) {
|
||||
case ProjectPart::C89:
|
||||
|
@@ -208,15 +208,19 @@ class CPPTOOLS_EXPORT CompilerOptionsBuilder
|
||||
public:
|
||||
typedef std::function<bool (const QString &)> IsBlackListed;
|
||||
static QStringList createHeaderPathOptions(const ProjectPart::HeaderPaths &headerPaths,
|
||||
IsBlackListed isBlackListed = IsBlackListed());
|
||||
IsBlackListed isBlackListed = IsBlackListed(),
|
||||
const QString &toolchainType = QLatin1String("clang"));
|
||||
|
||||
static QStringList createDefineOptions(const QByteArray &defines,
|
||||
bool toolchainDefines = false);
|
||||
bool toolchainDefines = false,
|
||||
const QString &toolchainType = QLatin1String("clang"));
|
||||
|
||||
static QStringList createLanguageOption(ProjectFile::Kind fileKind, bool objcExt);
|
||||
static QStringList createLanguageOption(ProjectFile::Kind fileKind, bool objcExt,
|
||||
const QString &toolchainType = QLatin1String("clang"));
|
||||
static QStringList createOptionsForLanguage(ProjectPart::LanguageVersion languageVersion,
|
||||
ProjectPart::LanguageExtensions languageExtensions,
|
||||
bool checkForBorlandExtensions = true);
|
||||
bool checkForBorlandExtensions = true,
|
||||
const QString &toolchainType = QLatin1String("clang"));
|
||||
};
|
||||
|
||||
} // namespace CppTools
|
||||
|
Reference in New Issue
Block a user