summaryrefslogtreecommitdiffstats
path: root/qmake/generators/win32
diff options
context:
space:
mode:
Diffstat (limited to 'qmake/generators/win32')
-rw-r--r--qmake/generators/win32/cesdkhandler.cpp2
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.cpp98
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.h20
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp59
-rw-r--r--qmake/generators/win32/msvc_objectmodel.h9
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp8
6 files changed, 104 insertions, 92 deletions
diff --git a/qmake/generators/win32/cesdkhandler.cpp b/qmake/generators/win32/cesdkhandler.cpp
index 97ee4eca09..f2e6758704 100644
--- a/qmake/generators/win32/cesdkhandler.cpp
+++ b/qmake/generators/win32/cesdkhandler.cpp
@@ -97,7 +97,7 @@ bool CeSdkHandler::parse()
return false;
}
- return m_list.size() > 0 ? true : false;
+ return m_list.size() > 0;
}
QString CeSdkHandler::fixPaths(QString path) const
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index 6311128d70..6751dc0f6b 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -341,7 +341,8 @@ static QStringList unquote(const QStringList &values)
}
// Tree file generation ---------------------------------------------
-void XTreeNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &tool, const QString &filter) {
+void XTreeNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName,
+ VCProject &tool, const QString &filter, const QString &filterId) {
if (children.size()) {
// Filter
@@ -362,38 +363,39 @@ void XTreeNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString
if ((*it)->children.size())
{
if ( !tempFilterName.isEmpty() )
- (*it)->generateXML(xml, xmlFilter, it.key(), tool, tempFilterName);
+ (*it)->generateXML(xml, xmlFilter, it.key(), tool, tempFilterName, filterId);
else
- (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter);
+ (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter, filterId);
}
// Second round, do leafs
for (it = children.constBegin(); it != end; ++it)
if (!(*it)->children.size())
{
if ( !tempFilterName.isEmpty() )
- (*it)->generateXML(xml, xmlFilter, it.key(), tool, tempFilterName);
+ (*it)->generateXML(xml, xmlFilter, it.key(), tool, tempFilterName, filterId);
else
- (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter);
+ (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter, filterId);
}
} else {
// Leaf
xml << tag(_ItemGroup);
xmlFilter << tag(_ItemGroup);
- VCXProjectWriter::outputFileConfigs(tool, xml, xmlFilter, info, filter);
+ VCXProjectWriter::outputFileConfigs(tool, xml, xmlFilter, info, filter, filterId);
xmlFilter << closetag();
xml << closetag();
}
}
// Flat file generation ---------------------------------------------
-void XFlatNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &/*tagName*/, VCProject &tool, const QString &filter) {
+void XFlatNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &/*tagName*/,
+ VCProject &tool, const QString &filter, const QString &filterId) {
if (children.size()) {
ChildrenMapFlat::ConstIterator it = children.constBegin();
ChildrenMapFlat::ConstIterator end = children.constEnd();
xml << tag(_ItemGroup);
xmlFilter << tag(_ItemGroup);
for (; it != end; ++it) {
- VCXProjectWriter::outputFileConfigs(tool, xml, xmlFilter, (*it), filter);
+ VCXProjectWriter::outputFileConfigs(tool, xml, xmlFilter, (*it), filter, filterId);
}
xml << closetag();
xmlFilter << closetag();
@@ -1836,22 +1838,47 @@ void VCXProjectWriter::outputFilter(VCProject &project, XmlOutput &xml, XmlOutpu
if (!root->hasElements())
return;
- root->generateXML(xml, xmlFilter, "", project, filtername); // output root tree
+ root->generateXML(xml, xmlFilter, "", project, filtername, filtername); // output root tree
}
// Output all configurations (by filtername) for a file (by info)
// A filters config output is in VCFilter.outputFileConfig()
-void VCXProjectWriter::outputFileConfigs(VCProject &project, XmlOutput &xml, XmlOutput &xmlFilter, const VCFilterFile &info, const QString &filtername)
+void VCXProjectWriter::outputFileConfigs(VCProject &project, XmlOutput &xml, XmlOutput &xmlFilter,
+ const VCFilterFile &info, const QString &filtername,
+ const QString &filterId)
{
// We need to check if the file has any custom build step.
// If there is one then it has to be included with "CustomBuild Include"
- bool fileAdded = false;
+ bool hasCustomBuildStep = false;
+ QVarLengthArray<OutputFilterData> data(project.SingleProjects.count());
+ for (int i = 0; i < project.SingleProjects.count(); ++i) {
+ data[i].filter = project.SingleProjects.at(i).filterByName(filterId);
+ if (!data[i].filter.Config) // only if the filter is not empty
+ continue;
+ VCFilter &filter = data[i].filter;
+
+ // Clearing each filter tool
+ filter.useCustomBuildTool = false;
+ filter.useCompilerTool = false;
+ filter.CustomBuildTool = VCCustomBuildTool();
+ filter.CustomBuildTool.config = filter.Config;
+ filter.CompilerTool = VCCLCompilerTool();
+ filter.CompilerTool.config = filter.Config;
+ VCFilterFile fileInFilter = filter.findFile(info.file, &data[i].inBuild);
+ data[i].inBuild &= !fileInFilter.excludeFromBuild;
+ if (data[i].inBuild && filter.addExtraCompiler(fileInFilter))
+ hasCustomBuildStep = true;
+ }
+
+ bool fileAdded = false;
for (int i = 0; i < project.SingleProjects.count(); ++i) {
- const VCFilter &filter = project.SingleProjects.at(i).filterByName(filtername);
- if (filter.Config) // only if the filter is not empty
- if (outputFileConfig(filter, xml, xmlFilter, info.file, fileAdded)) // only add it once.
- fileAdded = true;
+ const VCFilter &filter = project.SingleProjects.at(i).filterByName(filterId);
+ if (!filter.Config) // only if the filter is not empty
+ continue;
+ if (outputFileConfig(&data[i], xml, xmlFilter, info.file, fileAdded,
+ hasCustomBuildStep))
+ fileAdded = true;
}
if ( !fileAdded )
@@ -1861,42 +1888,25 @@ void VCXProjectWriter::outputFileConfigs(VCProject &project, XmlOutput &xml, Xml
xmlFilter << closetag();
}
-bool VCXProjectWriter::outputFileConfig(VCFilter filter, XmlOutput &xml, XmlOutput &xmlFilter,
- const QString &filename, bool fileAdded)
+bool VCXProjectWriter::outputFileConfig(OutputFilterData *d, XmlOutput &xml, XmlOutput &xmlFilter,
+ const QString &filename, bool fileAdded,
+ bool hasCustomBuildStep)
{
- // Clearing each filter tool
- filter.useCustomBuildTool = false;
- filter.useCompilerTool = false;
- filter.CustomBuildTool = VCCustomBuildTool();
- filter.CustomBuildTool.config = filter.Config;
- filter.CompilerTool = VCCLCompilerTool();
- filter.CompilerTool.config = filter.Config;
-
- bool inBuild = false;
- VCFilterFile info;
- for (int i = 0; i < filter.Files.count(); ++i) {
- if (filter.Files.at(i).file == filename) {
- info = filter.Files.at(i);
- inBuild = true;
- }
- }
- inBuild &= !info.excludeFromBuild;
-
- if (inBuild) {
- filter.addExtraCompiler(info);
+ VCFilter &filter = d->filter;
+ if (d->inBuild) {
if (filter.Project->usePCH)
- filter.modifyPCHstage(info.file);
+ filter.modifyPCHstage(filename);
} else {
// Excluded files uses an empty compiler stage
- if(info.excludeFromBuild)
+ if (d->info.excludeFromBuild)
filter.useCompilerTool = true;
}
// Actual XML output ----------------------------------
- if (filter.useCustomBuildTool || filter.useCompilerTool
- || !inBuild || filter.Name.startsWith("Deployment Files")) {
+ if (hasCustomBuildStep || filter.useCompilerTool
+ || !d->inBuild || filter.Name.startsWith("Deployment Files")) {
- if (filter.useCustomBuildTool)
+ if (hasCustomBuildStep)
{
if (!fileAdded) {
fileAdded = true;
@@ -1925,13 +1935,13 @@ bool VCXProjectWriter::outputFileConfig(VCFilter filter, XmlOutput &xml, XmlOutp
}
const QString condition = generateCondition(*filter.Config);
- if(!inBuild) {
+ if (!d->inBuild) {
xml << tag("ExcludedFromBuild")
<< attrTag("Condition", condition)
<< valueTag("true");
}
- if (filter.Name.startsWith("Deployment Files") && inBuild) {
+ if (filter.Name.startsWith("Deployment Files") && d->inBuild) {
xml << tag("DeploymentContent")
<< attrTag("Condition", condition)
<< valueTag("true");
diff --git a/qmake/generators/win32/msbuild_objectmodel.h b/qmake/generators/win32/msbuild_objectmodel.h
index c44897c96a..a562cc364b 100644
--- a/qmake/generators/win32/msbuild_objectmodel.h
+++ b/qmake/generators/win32/msbuild_objectmodel.h
@@ -56,7 +56,8 @@ public:
}
virtual void addElement(const QString &filepath, const VCFilterFile &allInfo) = 0;
virtual void removeElements()= 0;
- virtual void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &tool, const QString &filter) = 0;
+ virtual void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName,
+ VCProject &tool, const QString &filter, const QString &filterId) = 0;
virtual bool hasElements() = 0;
};
@@ -106,7 +107,8 @@ public:
children.clear();
}
- void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &tool, const QString &filter);
+ void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &tool,
+ const QString &filter, const QString &filterId);
bool hasElements() {
return children.size() != 0;
}
@@ -146,7 +148,8 @@ public:
children.clear();
}
- void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &proj, const QString &filter);
+ void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &proj,
+ const QString &filter, const QString &filterId);
bool hasElements() {
return children.size() != 0;
}
@@ -171,10 +174,17 @@ public:
void write(XmlOutput &, VCFilter &);
private:
+ struct OutputFilterData
+ {
+ VCFilter filter;
+ VCFilterFile info;
+ bool inBuild;
+ };
+
static void addFilters(VCProject &project, XmlOutput &xmlFilter, const QString &filterName);
static void outputFilter(VCProject &project, XmlOutput &xml, XmlOutput &xmlFilter, const QString &filtername);
- static void outputFileConfigs(VCProject &project, XmlOutput &xml, XmlOutput &xmlFilter, const VCFilterFile &info, const QString &filtername);
- static bool outputFileConfig(VCFilter filter, XmlOutput &xml, XmlOutput &xmlFilter, const QString &filename, bool fileAdded);
+ static void outputFileConfigs(VCProject &project, XmlOutput &xml, XmlOutput &xmlFilter, const VCFilterFile &info, const QString &filtername, const QString &filterId);
+ static bool outputFileConfig(OutputFilterData *d, XmlOutput &xml, XmlOutput &xmlFilter, const QString &filename, bool fileAdded, bool hasCustomBuildStep);
static void outputFileConfig(XmlOutput &xml, XmlOutput &xmlFilter, const QString &fileName, const QString &filterName);
static QString generateCondition(const VCConfiguration &config);
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index 75134d9182..f8e67718f7 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -2241,6 +2241,19 @@ void VCFilter::modifyPCHstage(QString str)
CompilerTool.ForcedIncludeFiles = QStringList("$(NOINHERIT)");
}
+VCFilterFile VCFilter::findFile(const QString &filePath, bool *found) const
+{
+ for (int i = 0; i < Files.count(); ++i) {
+ const VCFilterFile &f = Files.at(i);
+ if (f.file == filePath) {
+ *found = true;
+ return f;
+ }
+ }
+ *found = false;
+ return VCFilterFile();
+}
+
bool VCFilter::addExtraCompiler(const VCFilterFile &info)
{
const QStringList &extraCompilers = Project->extraCompilerSources.value(info.file);
@@ -2508,14 +2521,14 @@ void VCProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool)
// XML output functionality
VCProject tempProj;
tempProj.SingleProjects += tool;
- outputFilter(tempProj, xml, "Sources");
- outputFilter(tempProj, xml, "Headers");
- outputFilter(tempProj, xml, "GeneratedFiles");
- outputFilter(tempProj, xml, "LexYaccFiles");
- outputFilter(tempProj, xml, "TranslationFiles");
- outputFilter(tempProj, xml, "FormFiles");
- outputFilter(tempProj, xml, "ResourceFiles");
- outputFilter(tempProj, xml, "DeploymentFiles");
+ outputFilter(tempProj, xml, "Source Files");
+ outputFilter(tempProj, xml, "Header Files");
+ outputFilter(tempProj, xml, "Generated Files");
+ outputFilter(tempProj, xml, "LexYacc Files");
+ outputFilter(tempProj, xml, "Translation Files");
+ outputFilter(tempProj, xml, "Form Files");
+ outputFilter(tempProj, xml, "Resource Files");
+ outputFilter(tempProj, xml, "Deployment Files");
QSet<QString> extraCompilersInProject;
for (int i = 0; i < tool.ExtraCompilersFiles.count(); ++i) {
@@ -2529,7 +2542,7 @@ void VCProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool)
for (int x = 0; x < tempProj.ExtraCompilers.count(); ++x) {
outputFilter(tempProj, xml, tempProj.ExtraCompilers.at(x));
}
- outputFilter(tempProj, xml, "RootFiles");
+ outputFilter(tempProj, xml, "Root Files");
xml << closetag(q_Files)
<< tag(_Globals)
<< data(); // No "/>" end tag
@@ -2561,18 +2574,18 @@ void VCProjectWriter::write(XmlOutput &xml, VCProject &tool)
write(xml, tool.SingleProjects.at(i).Configuration);
xml << closetag(_Configurations)
<< tag(q_Files);
- outputFilter(tool, xml, "Sources");
- outputFilter(tool, xml, "Headers");
- outputFilter(tool, xml, "GeneratedFiles");
- outputFilter(tool, xml, "LexYaccFiles");
- outputFilter(tool, xml, "TranslationFiles");
- outputFilter(tool, xml, "FormFiles");
- outputFilter(tool, xml, "ResourceFiles");
- outputFilter(tool, xml, "DeploymentFiles");
+ outputFilter(tool, xml, "Source Files");
+ outputFilter(tool, xml, "Header Files");
+ outputFilter(tool, xml, "Generated Files");
+ outputFilter(tool, xml, "LexYacc Files");
+ outputFilter(tool, xml, "Translation Files");
+ outputFilter(tool, xml, "Form Files");
+ outputFilter(tool, xml, "Resource Files");
+ outputFilter(tool, xml, "Deployment Files");
for (int x = 0; x < tool.ExtraCompilers.count(); ++x) {
outputFilter(tool, xml, tool.ExtraCompilers.at(x));
}
- outputFilter(tool, xml, "RootFiles");
+ outputFilter(tool, xml, "Root Files");
xml << closetag(q_Files)
<< tag(_Globals)
<< data(); // No "/>" end tag
@@ -2974,14 +2987,8 @@ void VCProjectWriter::outputFileConfig(VCFilter &filter, XmlOutput &xml, const Q
filter.CompilerTool.WarningLevel = warningLevelUnknown;
filter.CompilerTool.config = filter.Config;
- bool inBuild = false;
- VCFilterFile info;
- for (int i = 0; i < filter.Files.count(); ++i) {
- if (filter.Files.at(i).file == filename) {
- info = filter.Files.at(i);
- inBuild = true;
- }
- }
+ bool inBuild;
+ VCFilterFile info = filter.findFile(filename, &inBuild);
inBuild &= !info.excludeFromBuild;
if (inBuild) {
diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h
index ed07b1cca4..850f5f0f57 100644
--- a/qmake/generators/win32/msvc_objectmodel.h
+++ b/qmake/generators/win32/msvc_objectmodel.h
@@ -72,12 +72,6 @@ enum DotNET {
forcing the tool to utilize default values.
False/True values will be in the output...
*/
-enum customBuildCheck {
- none,
- mocSrc,
- mocHdr,
- lexyacc
-};
enum triState {
unset = -1,
_False = 0,
@@ -958,6 +952,7 @@ public:
void addFiles(const ProStringList& fileList);
bool addExtraCompiler(const VCFilterFile &info);
void modifyPCHstage(QString str);
+ VCFilterFile findFile(const QString &filePath, bool *found) const;
// Variables
QString Name;
@@ -968,8 +963,6 @@ public:
VCConfiguration* Config;
QList<VCFilterFile> Files;
- customBuildCheck CustomBuild;
-
bool useCustomBuildTool;
VCCustomBuildTool CustomBuildTool;
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 739b5cbb3c..24421c6c28 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -1346,7 +1346,6 @@ void VcprojGenerator::initDeploymentTool()
if (conf.WinRT) {
vcProject.DeploymentFiles.Project = this;
vcProject.DeploymentFiles.Config = &(vcProject.Configuration);
- vcProject.DeploymentFiles.CustomBuild = none;
}
}
}
@@ -1385,7 +1384,6 @@ void VcprojGenerator::initRootFiles()
vcProject.RootFiles.Project = this;
vcProject.RootFiles.Config = &(vcProject.Configuration);
- vcProject.RootFiles.CustomBuild = none;
}
void VcprojGenerator::initSourceFiles()
@@ -1398,7 +1396,6 @@ void VcprojGenerator::initSourceFiles()
vcProject.SourceFiles.Project = this;
vcProject.SourceFiles.Config = &(vcProject.Configuration);
- vcProject.SourceFiles.CustomBuild = none;
}
void VcprojGenerator::initHeaderFiles()
@@ -1450,7 +1447,6 @@ void VcprojGenerator::initLexYaccFiles()
vcProject.LexYaccFiles.Project = this;
vcProject.LexYaccFiles.Config = &(vcProject.Configuration);
- vcProject.LexYaccFiles.CustomBuild = lexyacc;
}
void VcprojGenerator::initTranslationFiles()
@@ -1464,7 +1460,6 @@ void VcprojGenerator::initTranslationFiles()
vcProject.TranslationFiles.Project = this;
vcProject.TranslationFiles.Config = &(vcProject.Configuration);
- vcProject.TranslationFiles.CustomBuild = none;
}
void VcprojGenerator::initFormFiles()
@@ -1476,7 +1471,6 @@ void VcprojGenerator::initFormFiles()
vcProject.FormFiles.addFiles(project->values("FORMS"));
vcProject.FormFiles.Project = this;
vcProject.FormFiles.Config = &(vcProject.Configuration);
- vcProject.FormFiles.CustomBuild = none;
}
void VcprojGenerator::initResourceFiles()
@@ -1526,7 +1520,6 @@ void VcprojGenerator::initResourceFiles()
vcProject.ResourceFiles.Project = this;
vcProject.ResourceFiles.Config = &(vcProject.Configuration);
- vcProject.ResourceFiles.CustomBuild = none;
}
void VcprojGenerator::initExtraCompilerOutputs()
@@ -1603,7 +1596,6 @@ void VcprojGenerator::initExtraCompilerOutputs()
}
extraCompile.Project = this;
extraCompile.Config = &(vcProject.Configuration);
- extraCompile.CustomBuild = none;
vcProject.ExtraCompilersFiles.append(extraCompile);
}