aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2018-07-04 12:47:21 +0200
committerTobias Hunger <tobias.hunger@qt.io>2018-07-04 15:17:04 +0000
commit9bbb085718ca1af4f816331d450b2129e30ff281 (patch)
treeca8e7cbfec1affcbee03e59d95b1fe6ff7ebe613
parent2ba326cd0426341a2f753fe340469580141345cb (diff)
QMake parsing: Improve behavior in case of empty build directoryv4.7.0-rc1
The build directory can be "empty" if there is no build configuration, or if the build configuration's build directory is empty. Handle both cases in the same way. This avoids passing an actually empty build directory to the parser, which the parser does no longer handles gracefully on Windows. If the build directory is empty, use the project's source path (instead of QDir(QString()) which is the current working directory), which makes it consistent with the behavior when actually building in that case. The parser does not actually write files to disk, so there is no issue with temporarily using that directory and later switching to a shadow build directory. Task-number: QTCREATORBUG-20121 Change-Id: Ia454085edae6b55b445cc5cf0ec3ae1c85464b0c Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
index 41ae3acf03..66448835cf 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
@@ -45,6 +45,7 @@
#include <utils/qtcprocess.h>
#include <utils/mimetypes/mimedatabase.h>
#include <utils/stringutils.h>
+#include <utils/temporarydirectory.h>
#include <utils/QtConcurrentTools>
#include <QLoggingCategory>
@@ -1870,9 +1871,11 @@ FileName QmakeProFile::buildDir(QmakeBuildConfiguration *bc) const
const QString relativeDir = srcDirRoot.relativeFilePath(directoryPath().toString());
if (!bc && m_project->activeTarget())
bc = static_cast<QmakeBuildConfiguration *>(m_project->activeTarget()->activeBuildConfiguration());
- if (!bc)
- return { };
- return FileName::fromString(QDir::cleanPath(QDir(bc->buildDirectory().toString()).absoluteFilePath(relativeDir)));
+ const QString buildConfigBuildDir = bc ? bc->buildDirectory().toString() : QString();
+ const QString buildDir = buildConfigBuildDir.isEmpty()
+ ? m_project->projectDirectory().toString()
+ : buildConfigBuildDir;
+ return FileName::fromString(QDir::cleanPath(QDir(buildDir).absoluteFilePath(relativeDir)));
}
FileNameList QmakeProFile::generatedFiles(const FileName &buildDir,