diff options
Diffstat (limited to 'qmake/generators/win32/msvc_vcproj.cpp')
-rw-r--r-- | qmake/generators/win32/msvc_vcproj.cpp | 52 |
1 files changed, 17 insertions, 35 deletions
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 24d1657552..f7837fc1b4 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -112,7 +112,7 @@ VcprojGenerator::VcprojGenerator() : Win32MakefileGenerator(), is64Bit(false), customBuildToolFilterFileSuffix(QStringLiteral(".cbt")), - projectWriter(0) + projectWriter(nullptr) { } @@ -208,16 +208,6 @@ struct VcsolutionDepend { QStringList dependencies; }; -/* Disable optimization in getProjectUUID() due to a compiler - * bug in MSVC 2010 that causes ASSERT: "&other != this" in the QString - * copy constructor for non-empty file names at: - * filename.isEmpty()?project->first("QMAKE_MAKEFILE"):filename */ - -#ifdef Q_CC_MSVC -# pragma optimize( "g", off ) -# pragma warning ( disable : 4748 ) -#endif - QUuid VcprojGenerator::getProjectUUID(const QString &filename) { bool validUUID = true; @@ -249,10 +239,6 @@ QUuid VcprojGenerator::getProjectUUID(const QString &filename) return uuid; } -#ifdef Q_CC_MSVC -# pragma optimize( "g", on ) -#endif - QUuid VcprojGenerator::increaseUUID(const QUuid &id) { QUuid result(id); @@ -471,9 +457,8 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt newDep->dependencies << "idc.exe"; // Add all unknown libs to the deps - QStringList where = QStringList() << "QMAKE_LIBS" << "QMAKE_LIBS_PRIVATE"; - if (!tmp_proj.isEmpty("QMAKE_INTERNAL_PRL_LIBS")) - where = tmp_proj.values("QMAKE_INTERNAL_PRL_LIBS").toQStringList(); + QStringList where = QStringList() << "LIBS" << "LIBS_PRIVATE" + << "QMAKE_LIBS" << "QMAKE_LIBS_PRIVATE"; for (QStringList::ConstIterator wit = where.begin(); wit != where.end(); ++wit) { const ProStringList &l = tmp_proj.values(ProKey(*wit)); @@ -764,7 +749,7 @@ void VcprojGenerator::init() projectTarget = Application; } else if(project->first("TEMPLATE") == "vclib") { if(project->isActiveConfig("staticlib")) { - project->values("QMAKE_LIBS") += project->values("RES_FILE"); + project->values("LIBS") += project->values("RES_FILE"); projectTarget = StaticLib; } else projectTarget = SharedLib; @@ -1100,7 +1085,8 @@ void VcprojGenerator::initLinkerTool() if (!project->values("DEF_FILE").isEmpty()) conf.linker.ModuleDefinitionFile = project->first("DEF_FILE").toQString(); - static const char * const lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; + static const char * const lflags[] = { "LIBS", "LIBS_PRIVATE", + "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", nullptr }; for (int i = 0; lflags[i]; i++) { const auto libs = fixLibFlags(lflags[i]); for (const ProString &lib : libs) { @@ -1195,7 +1181,8 @@ void VcprojGenerator::initDeploymentTool() if (!dllPaths.isEmpty() && !(conf.WinRT && project->first("MSVC_VER").toQString() == "14.0")) { // FIXME: This code should actually resolve the libraries from all Qt modules. - ProStringList arg = project->values("QMAKE_LIBS") + project->values("QMAKE_LIBS_PRIVATE"); + ProStringList arg = project->values("LIBS") + project->values("LIBS_PRIVATE") + + project->values("QMAKE_LIBS") + project->values("QMAKE_LIBS_PRIVATE"); bool qpaPluginDeployed = false; for (ProStringList::ConstIterator it = arg.constBegin(); it != arg.constEnd(); ++it) { QString dllName = (*it).toQString(); @@ -1617,20 +1604,15 @@ QString VcprojGenerator::replaceExtraCompilerVariables( bool VcprojGenerator::openOutput(QFile &file, const QString &/*build*/) const { - QString outdir; - if(!file.fileName().isEmpty()) { - QFileInfo fi(fileInfo(file.fileName())); - if(fi.isDir()) - outdir = file.fileName() + QDir::separator(); - } - if(!outdir.isEmpty() || file.fileName().isEmpty()) { - ProString ext = project->first("VCPROJ_EXTENSION"); - if(project->first("TEMPLATE") == "vcsubdirs") - ext = project->first("VCSOLUTION_EXTENSION"); - ProString outputName = project->first("TARGET"); - if (!project->first("MAKEFILE").isEmpty()) - outputName = project->first("MAKEFILE"); - file.setFileName(outdir + outputName + ext); + ProString fileName = file.fileName(); + ProString extension = project->first("TEMPLATE") == "vcsubdirs" + ? project->first("VCSOLUTION_EXTENSION") : project->first("VCPROJ_EXTENSION"); + if (!fileName.endsWith(extension)) { + if (fileName.isEmpty()) { + fileName = !project->first("MAKEFILE").isEmpty() + ? project->first("MAKEFILE") : project->first("TARGET"); + } + file.setFileName(fileName + extension); } return Win32MakefileGenerator::openOutput(file, QString()); } |