diff options
Diffstat (limited to 'qmake/generators')
-rw-r--r-- | qmake/generators/makefile.cpp | 24 | ||||
-rw-r--r-- | qmake/generators/makefile.h | 20 | ||||
-rw-r--r-- | qmake/generators/makefiledeps.cpp | 26 | ||||
-rw-r--r-- | qmake/generators/makefiledeps.h | 6 | ||||
-rw-r--r-- | qmake/generators/unix/unixmake.cpp | 29 | ||||
-rw-r--r-- | qmake/generators/unix/unixmake2.cpp | 56 | ||||
-rw-r--r-- | qmake/generators/win32/mingw_make.cpp | 60 | ||||
-rw-r--r-- | qmake/generators/win32/msbuild_objectmodel.cpp | 63 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_nmake.cpp | 72 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_nmake.h | 2 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_objectmodel.cpp | 44 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_objectmodel.h | 4 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_vcproj.cpp | 28 | ||||
-rw-r--r-- | qmake/generators/win32/winmakefile.cpp | 42 |
14 files changed, 298 insertions, 178 deletions
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 946a1ee986..83d38d1b14 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -456,6 +456,8 @@ MakefileGenerator::init() if (v["QMAKE_LINK_O_FLAG"].isEmpty()) v["QMAKE_LINK_O_FLAG"].append("-o "); + setSystemIncludes(v["QMAKE_DEFAULT_INCDIRS"]); + ProStringList &quc = v["QMAKE_EXTRA_COMPILERS"]; //make sure the COMPILERS are in the correct input/output chain order @@ -1420,31 +1422,31 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) } QString -MakefileGenerator::var(const ProKey &var) +MakefileGenerator::var(const ProKey &var) const { return val(project->values(var)); } QString -MakefileGenerator::val(const ProStringList &varList) +MakefileGenerator::val(const ProStringList &varList) const { return valGlue(varList, "", " ", ""); } QString -MakefileGenerator::val(const QStringList &varList) +MakefileGenerator::val(const QStringList &varList) const { return valGlue(varList, "", " ", ""); } QString -MakefileGenerator::varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) +MakefileGenerator::varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const { return valGlue(project->values(var), before, glue, after); } QString -MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) +MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const { ProStringList varList; foreach (const ProString &val, project->values(var)) @@ -1453,7 +1455,7 @@ MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const Q } QString -MakefileGenerator::valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after) +MakefileGenerator::valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after) const { QString ret; for (ProStringList::ConstIterator it = varList.begin(); it != varList.end(); ++it) { @@ -1467,7 +1469,7 @@ MakefileGenerator::valGlue(const ProStringList &varList, const QString &before, } QString -MakefileGenerator::valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after) +MakefileGenerator::valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after) const { QString ret; for(QStringList::ConstIterator it = varList.begin(); it != varList.end(); ++it) { @@ -1482,19 +1484,19 @@ MakefileGenerator::valGlue(const QStringList &varList, const QString &before, co QString -MakefileGenerator::varList(const ProKey &var) +MakefileGenerator::varList(const ProKey &var) const { return valList(project->values(var)); } QString -MakefileGenerator::valList(const ProStringList &varList) +MakefileGenerator::valList(const ProStringList &varList) const { return valGlue(varList, "", " \\\n\t\t", ""); } QString -MakefileGenerator::valList(const QStringList &varList) +MakefileGenerator::valList(const QStringList &varList) const { return valGlue(varList, "", " \\\n\t\t", ""); } @@ -2464,8 +2466,6 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT t << "include " << (*qeui_it) << endl; if (!(flags & SubTargetSkipDefaultVariables)) { - /* Calling Option::fixPathToTargetOS() is necessary for MinGW/MSYS, which requires - * back-slashes to be turned into slashes. */ t << "QMAKE = " << var("QMAKE_QMAKE") << endl; t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl; diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h index 4b8a96c15f..a382ca6bf6 100644 --- a/qmake/generators/makefile.h +++ b/qmake/generators/makefile.h @@ -225,16 +225,16 @@ protected: virtual bool findLibraries(); //for retrieving values and lists of values - virtual QString var(const ProKey &var); - QString varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after); - QString fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after); - QString varList(const ProKey &var); - QString val(const ProStringList &varList); - QString val(const QStringList &varList); - QString valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after); - QString valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after); - QString valList(const QStringList &varList); - QString valList(const ProStringList &varList); + virtual QString var(const ProKey &var) const; + QString varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const; + QString fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const; + QString varList(const ProKey &var) const; + QString val(const ProStringList &varList) const; + QString val(const QStringList &varList) const; + QString valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after) const; + QString valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after) const; + QString valList(const QStringList &varList) const; + QString valList(const ProStringList &varList) const; QString filePrefixRoot(const QString &, const QString &); diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp index df37957f9b..edc9a0ed7f 100644 --- a/qmake/generators/makefiledeps.cpp +++ b/qmake/generators/makefiledeps.cpp @@ -345,6 +345,30 @@ bool QMakeSourceFileInfo::containsSourceFile(const QString &f, SourceFileType ty return false; } +bool QMakeSourceFileInfo::isSystemInclude(const QString &name) +{ + if (QDir::isRelativePath(name)) { + // if we got a relative path here, it's either an -I flag with a relative path + // or an include file we couldn't locate. Either way, conclude it's not + // a system include. + return false; + } + + for (int i = 0; i < systemIncludes.size(); ++i) { + // check if name is located inside the system include dir: + QDir systemDir(systemIncludes.at(i)); + QString relativePath = systemDir.relativeFilePath(name); + + // the relative path might be absolute if we're crossing drives on Windows + if (QDir::isAbsolutePath(relativePath) || relativePath.startsWith("../")) + continue; + debug_msg(5, "File/dir %s is in system dir %s, skipping", + qPrintable(name), qPrintable(systemIncludes.at(i))); + return true; + } + return false; +} + char *QMakeSourceFileInfo::getBuffer(int s) { if(!spare_buffer || spare_buffer_size < s) spare_buffer = (char *)realloc(spare_buffer, spare_buffer_size=s); @@ -655,7 +679,7 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file) } else { exists = QFile::exists(lfn.real()); } - if(!lfn.isNull()) { + if (!lfn.isNull() && !isSystemInclude(lfn.real())) { dep = files->lookupFile(lfn); if(!dep) { dep = new SourceFile; diff --git a/qmake/generators/makefiledeps.h b/qmake/generators/makefiledeps.h index ba55c36998..516abd4afd 100644 --- a/qmake/generators/makefiledeps.h +++ b/qmake/generators/makefiledeps.h @@ -78,6 +78,7 @@ private: SourceFiles *files, *includes; bool files_changed; QList<QMakeLocalFileName> depdirs; + QStringList systemIncludes; //sleezy buffer code char *spare_buffer; @@ -98,6 +99,7 @@ protected: virtual QFileInfo findFileInfo(const QMakeLocalFileName &); public: + QMakeSourceFileInfo(const QString &cachefile=""); virtual ~QMakeSourceFileInfo(); @@ -108,11 +110,15 @@ public: inline void setDependencyMode(DependencyMode mode) { dep_mode = mode; } inline DependencyMode dependencyMode() const { return dep_mode; } + void setSystemIncludes(const ProStringList &list) + { systemIncludes = list.toQStringList(); } + enum SourceFileType { TYPE_UNKNOWN, TYPE_C, TYPE_UI, TYPE_QRC }; enum SourceFileSeek { SEEK_DEPS=0x01, SEEK_MOCS=0x02 }; void addSourceFiles(const ProStringList &, uchar seek, SourceFileType type=TYPE_C); void addSourceFile(const QString &, uchar seek, SourceFileType type=TYPE_C); bool containsSourceFile(const QString &, SourceFileType type=TYPE_C); + bool isSystemInclude(const QString &); int included(const QString &file); QStringList dependencies(const QString &file); diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp index ea6a6a6e90..cadd5cf316 100644 --- a/qmake/generators/unix/unixmake.cpp +++ b/qmake/generators/unix/unixmake.cpp @@ -94,6 +94,27 @@ UnixMakefileGenerator::init() if(project->isEmpty("QMAKE_SYMBOLIC_LINK")) project->values("QMAKE_SYMBOLIC_LINK").append("ln -f -s"); + if (!project->isEmpty("TARGET")) + project->values("TARGET") = escapeFilePaths(project->values("TARGET")); + project->values("QMAKE_ORIG_TARGET") = project->values("TARGET"); + + //version handling + if (project->isEmpty("VERSION")) { + project->values("VERSION").append( + "1.0." + (project->isEmpty("VER_PAT") ? QString("0") : project->first("VER_PAT"))); + } + QStringList l = project->first("VERSION").toQString().split('.'); + l << "0" << "0"; //make sure there are three + project->values("VER_MAJ").append(l[0]); + project->values("VER_MIN").append(l[1]); + project->values("VER_PAT").append(l[2]); + + QString sroot = project->sourceRoot(); + foreach (const ProString &iif, project->values("QMAKE_INTERNAL_INCLUDED_FILES")) { + if (iif.startsWith(sroot) && iif.at(sroot.length()) == QLatin1Char('/')) + project->values("DISTFILES") += fileFixify(iif.toQString(), FileFixifyRelative); + } + /* this should probably not be here, but I'm using it to wrap the .t files */ if(project->first("TEMPLATE") == "app") project->values("QMAKE_APP_FLAG").append("1"); @@ -106,10 +127,6 @@ UnixMakefileGenerator::init() return; /* subdirs is done */ } - if (!project->isEmpty("TARGET")) - project->values("TARGET") = escapeFilePaths(project->values("TARGET")); - - project->values("QMAKE_ORIG_TARGET") = project->values("TARGET"); project->values("QMAKE_ORIG_DESTDIR") = project->values("DESTDIR"); project->values("QMAKE_LIBS") += escapeFilePaths(project->values("LIBS")); project->values("QMAKE_LIBS_PRIVATE") += escapeFilePaths(project->values("LIBS_PRIVATE")); @@ -304,10 +321,6 @@ UnixMakefileGenerator::init() project->values("QMAKE_BUNDLE_LOCATION").clear(); } - if(!project->isEmpty("QMAKE_INTERNAL_INCLUDED_FILES")) - project->values("DISTFILES") += project->values("QMAKE_INTERNAL_INCLUDED_FILES"); - project->values("DISTFILES") += project->projectFile(); - init2(); project->values("QMAKE_INTERNAL_PRL_LIBS") << "QMAKE_LIBS"; if(!project->isEmpty("QMAKE_MAX_FILES_PER_AR")) { diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp index 7ed89e23d7..eb68614fe6 100644 --- a/qmake/generators/unix/unixmake2.cpp +++ b/qmake/generators/unix/unixmake2.cpp @@ -125,10 +125,16 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) t << " -I" << pwd; } { + QString isystem = var("QMAKE_CFLAGS_ISYSTEM"); const ProStringList &incs = project->values("INCLUDEPATH"); for(int i = 0; i < incs.size(); ++i) { ProString inc = escapeFilePath(incs.at(i)); - if(!inc.isEmpty()) + if (inc.isEmpty()) + continue; + + if (!isystem.isEmpty() && isSystemInclude(inc.toQString())) + t << ' ' << isystem << ' ' << inc; + else t << " -I" << inc; } } @@ -210,7 +216,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) } if(do_incremental && !src_incremental) do_incremental = false; - t << "DIST = " << valList(fileFixify(project->values("DISTFILES").toQStringList())) << endl; + t << "DIST = " << valList(fileFixify(project->values("DISTFILES").toQStringList())) << " " + << valList(escapeFilePaths(project->values("SOURCES"))) << endl; t << "QMAKE_TARGET = " << var("QMAKE_ORIG_TARGET") << endl; // The comment is important for mingw32-make.exe on Windows as otherwise trailing slashes // would be interpreted as line continuation. The lack of spacing between the value and the @@ -809,7 +816,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) Option::output_dir, Option::output_dir)); t << "dist: \n\t" << mkdir_p_asstring(ddir_c, false) << "\n\t" - << "$(COPY_FILE) --parents $(SOURCES) $(DIST) " << ddir_c << Option::dir_sep << " && "; + << "$(COPY_FILE) --parents $(DIST) " << ddir_c << Option::dir_sep << " && "; if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) { const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { @@ -897,17 +904,6 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) t << varGlue("QMAKE_CLEAN","-$(DEL_FILE) "," ","\n\t") << "-$(DEL_FILE) *~ core *.core\n" << varGlue("CLEAN_FILES","\t-$(DEL_FILE) "," ","") << endl << endl; - t << "####### Sub-libraries\n\n"; - if (!project->values("SUBLIBS").isEmpty()) { - ProString libdir = "tmp/"; - if(!project->isEmpty("SUBLIBS_DIR")) - libdir = project->first("SUBLIBS_DIR"); - const ProStringList &l = project->values("SUBLIBS"); - for(it = l.begin(); it != l.end(); ++it) - t << libdir << project->first("QMAKE_PREFIX_STATICLIB") << (*it) << "." - << project->first("QMAKE_EXTENSION_STATICLIB") << ":\n\t" - << var(ProKey("MAKELIB" + *it)) << endl << endl; - } ProString destdir = project->first("DESTDIR"); if (!destdir.isEmpty() && !destdir.endsWith(Option::dir_sep)) @@ -934,9 +930,21 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) } t << endl << endl; + t << "####### Sub-libraries\n\n"; + if (!project->values("SUBLIBS").isEmpty()) { + ProString libdir = "tmp/"; + if (!project->isEmpty("SUBLIBS_DIR")) + libdir = project->first("SUBLIBS_DIR"); + const ProStringList &l = project->values("SUBLIBS"); + for (it = l.begin(); it != l.end(); ++it) + t << libdir << project->first("QMAKE_PREFIX_STATICLIB") << (*it) << "." + << project->first("QMAKE_EXTENSION_STATICLIB") << ":\n\t" + << var(ProKey("MAKELIB" + *it)) << endl << endl; + } + if(doPrecompiledHeaders() && !project->isEmpty("PRECOMPILED_HEADER")) { QString pchInput = project->first("PRECOMPILED_HEADER").toQString(); - t << "###### Prefix headers\n"; + t << "###### Precompiled headers\n"; QString comps[] = { "C", "CXX", "OBJC", "OBJCXX", QString() }; for(int i = 0; !comps[i].isNull(); i++) { QString pchFlags = var(ProKey("QMAKE_" + comps[i] + "FLAGS_PRECOMPILE")); @@ -1013,16 +1021,6 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) void UnixMakefileGenerator::init2() { - //version handling - if(project->isEmpty("VERSION")) - project->values("VERSION").append("1.0." + - (project->isEmpty("VER_PAT") ? QString("0") : - project->first("VER_PAT"))); - QStringList l = project->first("VERSION").toQString().split('.'); - l << "0" << "0"; //make sure there are three - project->values("VER_MAJ").append(l[0]); - project->values("VER_MIN").append(l[1]); - project->values("VER_PAT").append(l[2]); if(project->isEmpty("QMAKE_FRAMEWORK_VERSION")) project->values("QMAKE_FRAMEWORK_VERSION").append(project->values("VER_MAJ").first()); @@ -1231,8 +1229,10 @@ void UnixMakefileGenerator::init2() } if (include_deps && project->isActiveConfig("gcc_MD_depends")) { - project->values("QMAKE_CFLAGS") += "-MD"; - project->values("QMAKE_CXXFLAGS") += "-MD"; + // use -MMD if we know about -isystem too + ProString MD_flag(project->values("QMAKE_CFLAGS_ISYSTEM").isEmpty() ? "-MD" : "-MMD"); + project->values("QMAKE_CFLAGS") += MD_flag; + project->values("QMAKE_CXXFLAGS") += MD_flag; } if(!project->isEmpty("QMAKE_BUNDLE")) { @@ -1314,7 +1314,7 @@ UnixMakefileGenerator::writeLibtoolFile() t << "# " << lname << " - a libtool library file\n"; t << "# Generated by qmake/libtool (" QMAKE_VERSION_STR ") (Qt " << QT_VERSION_STR << ") on: " << QDateTime::currentDateTime().toString(); - t << "\n"; + t << "\n"; t << "# The name that we can dlopen(3).\n" << "dlname='" << var(project->isActiveConfig("plugin") ? "TARGET" : "TARGET_x") diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 29b27cb7d7..6d5764f59c 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -101,7 +101,7 @@ bool MingwMakefileGenerator::findLibraries() } if (!out.isEmpty()) // We assume if it never finds it that its correct (*it) = out; - } else if((*it).startsWith("-L")) { + } else if ((*it).startsWith("-L")) { dirs.append(QMakeLocalFileName((*it).mid(2).toQString())); } @@ -159,7 +159,7 @@ void createLdObjectScriptFile(const QString &fileName, const ProStringList &objL t << path << endl; } t << ");\n"; - t.flush(); + t.flush(); file.close(); } } @@ -175,7 +175,7 @@ void createArObjectScriptFile(const QString &fileName, const QString &target, co t << "ADDMOD " << *it << endl; } t << "SAVE\n"; - t.flush(); + t.flush(); file.close(); } } @@ -204,16 +204,16 @@ void MingwMakefileGenerator::writeMingwParts(QTextStream &t) if (!preCompHeaderOut.isEmpty()) { QString header = project->first("PRECOMPILED_HEADER").toQString(); - QString cHeader = preCompHeaderOut + Option::dir_sep + "c"; - t << escapeDependencyPath(cHeader) << ": " << escapeDependencyPath(header) << " " + QString cHeader = preCompHeaderOut + Option::dir_sep + "c"; + t << escapeDependencyPath(cHeader) << ": " << escapeDependencyPath(header) << " " << escapeDependencyPaths(findDependencies(header)).join(" \\\n\t\t") - << "\n\t" << mkdir_p_asstring(preCompHeaderOut) + << "\n\t" << mkdir_p_asstring(preCompHeaderOut) << "\n\t$(CC) -x c-header -c $(CFLAGS) $(INCPATH) -o " << cHeader << " " << header << endl << endl; - QString cppHeader = preCompHeaderOut + Option::dir_sep + "c++"; - t << escapeDependencyPath(cppHeader) << ": " << escapeDependencyPath(header) << " " + QString cppHeader = preCompHeaderOut + Option::dir_sep + "c++"; + t << escapeDependencyPath(cppHeader) << ": " << escapeDependencyPath(header) << " " << escapeDependencyPaths(findDependencies(header)).join(" \\\n\t\t") - << "\n\t" << mkdir_p_asstring(preCompHeaderOut) + << "\n\t" << mkdir_p_asstring(preCompHeaderOut) << "\n\t$(CXX) -x c++-header -c $(CXXFLAGS) $(INCPATH) -o " << cppHeader << " " << header << endl << endl; } @@ -269,7 +269,7 @@ void MingwMakefileGenerator::init() destDir = Option::fixPathToTargetOS(project->first("DESTDIR") + Option::dir_sep, false, false); project->values("MINGW_IMPORT_LIB").prepend(destDir + "lib" + project->first("TARGET") + project->first("TARGET_VERSION_EXT") + ".a"); - project->values("QMAKE_LFLAGS").append(QString("-Wl,--out-implib,") + project->first("MINGW_IMPORT_LIB")); + project->values("QMAKE_LFLAGS").append(QString("-Wl,--out-implib,") + project->first("MINGW_IMPORT_LIB")); } if (!project->values("DEF_FILE").isEmpty()) { @@ -287,21 +287,21 @@ void MingwMakefileGenerator::init() && project->isActiveConfig("precompile_header")) { QString preCompHeader = var("PRECOMPILED_DIR") + QFileInfo(project->first("PRECOMPILED_HEADER").toQString()).fileName(); - preCompHeaderOut = preCompHeader + ".gch"; - project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c"); - project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c++"); + preCompHeaderOut = preCompHeader + ".gch"; + project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c"); + project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c++"); - project->values("QMAKE_RUN_CC").clear(); - project->values("QMAKE_RUN_CC").append("$(CC) -c -include " + preCompHeader + + project->values("QMAKE_RUN_CC").clear(); + project->values("QMAKE_RUN_CC").append("$(CC) -c -include " + preCompHeader + " $(CFLAGS) $(INCPATH) " + var("QMAKE_CC_O_FLAG") + "$obj $src"); project->values("QMAKE_RUN_CC_IMP").clear(); - project->values("QMAKE_RUN_CC_IMP").append("$(CC) -c -include " + preCompHeader + + project->values("QMAKE_RUN_CC_IMP").append("$(CC) -c -include " + preCompHeader + " $(CFLAGS) $(INCPATH) " + var("QMAKE_CC_O_FLAG") + "$@ $<"); project->values("QMAKE_RUN_CXX").clear(); - project->values("QMAKE_RUN_CXX").append("$(CXX) -c -include " + preCompHeader + + project->values("QMAKE_RUN_CXX").append("$(CXX) -c -include " + preCompHeader + " $(CXXFLAGS) $(INCPATH) " + var("QMAKE_CC_O_FLAG") + "$obj $src"); project->values("QMAKE_RUN_CXX_IMP").clear(); - project->values("QMAKE_RUN_CXX_IMP").append("$(CXX) -c -include " + preCompHeader + + project->values("QMAKE_RUN_CXX_IMP").append("$(CXX) -c -include " + preCompHeader + " $(CXXFLAGS) $(INCPATH) " + var("QMAKE_CC_O_FLAG") + "$@ $<"); } @@ -321,12 +321,18 @@ void MingwMakefileGenerator::writeIncPart(QTextStream &t) t << "-I" << pwd << " "; } + QString isystem = var("QMAKE_CFLAGS_ISYSTEM"); const ProStringList &incs = project->values("INCLUDEPATH"); for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) { QString inc = (*incit).toQString(); inc.replace(QRegExp("\\\\$"), ""); inc.replace(QRegExp("\""), ""); - t << "-I" << quote << inc << quote << " "; + + if (!isystem.isEmpty() && isSystemInclude(inc)) + t << isystem << ' '; + else + t << "-I"; + t << quote << inc << quote << " "; } t << "-I" << quote << specdir() << quote << endl; @@ -350,10 +356,10 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) if (project->values("OBJECTS").count() < var("QMAKE_LINK_OBJECT_MAX").toInt()) { objectsLinkLine = "$(OBJECTS)"; } else if (project->isActiveConfig("staticlib") && project->first("TEMPLATE") == "lib") { - QString ar_script_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET"); - if (!var("BUILD_NAME").isEmpty()) { - ar_script_file += "." + var("BUILD_NAME"); - } + QString ar_script_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET"); + if (!var("BUILD_NAME").isEmpty()) { + ar_script_file += "." + var("BUILD_NAME"); + } // QMAKE_LIB is used for win32, including mingw, whereas QMAKE_AR is used on Unix. if (project->isActiveConfig("rvct_linker")) { createRvctObjectScriptFile(ar_script_file, project->values("OBJECTS")); @@ -371,9 +377,9 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) } } else { QString ld_script_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET"); - if (!var("BUILD_NAME").isEmpty()) { - ld_script_file += "." + var("BUILD_NAME"); - } + if (!var("BUILD_NAME").isEmpty()) { + ld_script_file += "." + var("BUILD_NAME"); + } if (project->isActiveConfig("rvct_linker")) { createRvctObjectScriptFile(ld_script_file, project->values("OBJECTS")); objectsLinkLine = QString::fromLatin1("--via ") + escapeFilePath(ld_script_file); @@ -393,7 +399,7 @@ void MingwMakefileGenerator::writeBuildRulesPart(QTextStream &t) if(!project->isEmpty("QMAKE_PRE_LINK")) t << "\n\t" <<var("QMAKE_PRE_LINK"); if(project->isActiveConfig("staticlib") && project->first("TEMPLATE") == "lib") { - if (project->values("OBJECTS").count() < var("QMAKE_LINK_OBJECT_MAX").toInt()) { + if (project->values("OBJECTS").count() < var("QMAKE_LINK_OBJECT_MAX").toInt()) { t << "\n\t$(LIB) $(DESTDIR_TARGET) " << objectsLinkLine << " " ; } else { t << "\n\t" << objectsLinkLine << " " ; diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp index d1420e95f6..75d3c4fa9c 100644 --- a/qmake/generators/win32/msbuild_objectmodel.cpp +++ b/qmake/generators/win32/msbuild_objectmodel.cpp @@ -614,12 +614,16 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) << tag("ItemGroup") << attrTag("Label", "ProjectConfigurations"); + bool isWinRT = false; + bool isPhone = false; for (int i = 0; i < tool.SingleProjects.count(); ++i) { xml << tag("ProjectConfiguration") << attrTag("Include" , tool.SingleProjects.at(i).Configuration.Name) << tagValue("Configuration", tool.SingleProjects.at(i).Configuration.ConfigurationName) << tagValue("Platform", tool.SingleProjects.at(i).PlatformName) << closetag(); + isWinRT = isWinRT || tool.SingleProjects.at(i).Configuration.WinRT; + isPhone = isPhone || tool.SingleProjects.at(i).Configuration.WinPhone; } xml << closetag() @@ -629,18 +633,19 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) << tagValue("RootNamespace", tool.Name) << tagValue("Keyword", tool.Keyword); - if (tool.SingleProjects.at(0).Configuration.WinRT) { - xml << tagValue("MinimumVisualStudioVersion", "11.0"); - if (tool.SingleProjects.at(0).Configuration.WinPhone) + if (isWinRT) { + xml << tagValue("MinimumVisualStudioVersion", tool.Version); + if (isPhone) { xml << tagValue("WinMDAssembly", "true"); - else - xml << tagValue("AppContainerApplication", "true"); - } - - if (tool.SingleProjects.at(0).Configuration.WinPhone - && tool.SingleProjects.at(0).Configuration.ConfigurationType == typeApplication) { - xml << tagValue("XapOutputs", "true"); - xml << tagValue("XapFilename", "$(RootNamespace)_$(Configuration)_$(Platform).xap"); + if (tool.SingleProjects.at(0).Configuration.ConfigurationType == typeApplication) { + xml << tagValue("XapOutputs", "true"); + xml << tagValue("XapFilename", "$(RootNamespace)_$(Configuration)_$(Platform).xap"); + } + } else { + xml << tagValue("AppContainerApplication", "true") + << tagValue("ApplicationType", "Windows Store") + << tagValue("ApplicationTypeRevision", tool.SdkVersion); + } } xml << closetag(); @@ -824,9 +829,43 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) << closetag(); } + // App manifest + if (isWinRT) { + QString manifest = isPhone ? QStringLiteral("WMAppManifest.xml") : QStringLiteral("Package.appxmanifest"); + + // Find all icons referenced in the manifest + QSet<QString> icons; + QFile manifestFile(manifest); + if (manifestFile.open(QFile::ReadOnly)) { + const QString contents = manifestFile.readAll(); + QRegExp regexp("[\\\\/a-zA-Z0-9_\\-\\!]*\\.(png|jpg|jpeg)"); + int pos = 0; + while (pos > -1) { + pos = regexp.indexIn(contents, pos); + if (pos >= 0) { + const QString match = regexp.cap(0); + icons.insert(match); + pos += match.length(); + } + } + } + + // Write out manifest + icons as content items + xml << tag(_ItemGroup) + << tag(isPhone ? "Xml" : "AppxManifest") + << attrTag("Include", manifest) + << closetag(); + foreach (const QString &icon, icons) { + xml << tag("Image") + << attrTag("Include", icon) + << closetag(); + } + xml << closetag(); + } + xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets"); - if (tool.SingleProjects.at(0).Configuration.WinPhone) + if (isPhone) xml << import("Project", "$(MSBuildExtensionsPath)\\Microsoft\\WindowsPhone\\v8.0\\Microsoft.Cpp.WindowsPhone.8.0.targets"); xml << tag("ImportGroup") diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index 0abbd133cc..acccdc1bdc 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -124,28 +124,61 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) compiler = QStringLiteral("x86_amd64"); compilerArch = QStringLiteral("amd64"); } + + const QString msvcVer = project->first("MSVC_VER").toQString(); + if (msvcVer.isEmpty()) { + fprintf(stderr, "Mkspec does not specify MSVC_VER. Cannot continue.\n"); + return false; + } + const QString winsdkVer = project->first("WINSDK_VER").toQString(); + if (winsdkVer.isEmpty()) { + fprintf(stderr, "Mkspec does not specify WINSDK_VER. Cannot continue.\n"); + return false; + } + const QString targetVer = project->first("WINTARGET_VER").toQString(); + if (targetVer.isEmpty()) { + fprintf(stderr, "Mkspec does not specify WINTARGET_VER. Cannot continue.\n"); + return false; + } + + const bool isPhone = project->isActiveConfig(QStringLiteral("winphone")); #ifdef Q_OS_WIN -#ifdef Q_OS_WIN64 - const QString regKey = QStringLiteral("Software\\Wow6432Node\\Microsoft\\VisualStudio\\11.0\\Setup\\VC\\ProductDir"); -#else - const QString regKey = QStringLiteral("Software\\Microsoft\\VisualStudio\\11.0\\Setup\\VC\\ProductDir"); + QString regKeyPrefix; +#if !defined(Q_OS_WIN64) && _WIN32_WINNT >= 0x0501 + BOOL isWow64; + IsWow64Process(GetCurrentProcess(), &isWow64); + if (!isWow64) + regKeyPrefix = QStringLiteral("Software\\"); + else #endif + regKeyPrefix = QStringLiteral("Software\\Wow6432Node\\"); + + QString regKey = regKeyPrefix + QStringLiteral("Microsoft\\VisualStudio\\") + msvcVer + ("\\Setup\\VC\\ProductDir"); const QString vcInstallDir = qt_readRegistryKey(HKEY_LOCAL_MACHINE, regKey); if (vcInstallDir.isEmpty()) { - fprintf(stderr, "Failed to find the Visual Studio 2012 installation directory.\n" - "Is it installed?.\n"); + fprintf(stderr, "Failed to find the Visual Studio installation directory.\n"); + return false; + } + + regKey = regKeyPrefix + + (isPhone ? QStringLiteral("Microsoft\\Microsoft SDKs\\WindowsPhone\\v") + : QStringLiteral("Microsoft\\Microsoft SDKs\\Windows\\v")) + + winsdkVer + QStringLiteral("\\InstallationFolder"); + const QString kitDir = qt_readRegistryKey(HKEY_LOCAL_MACHINE, regKey); + if (kitDir.isEmpty()) { + fprintf(stderr, "Failed to find the Windows Kit installation directory.\n"); return false; } #else const QString vcInstallDir = "/fake/vc_install_dir"; + const QString kitDir = "/fake/sdk_install_dir"; #endif // Q_OS_WIN QStringList incDirs; QStringList libDirs; QStringList binDirs; - const bool isPhone = project->isActiveConfig(QStringLiteral("winphone")); if (isPhone) { - QString sdkDir = vcInstallDir + QStringLiteral("/WPSDK/WP80"); + QString sdkDir = vcInstallDir + QStringLiteral("/WPSDK/") + targetVer; if (!QDir(sdkDir).exists()) { fprintf(stderr, "Failed to find the Windows Phone SDK in %s.\n" "Check that it is properly installed.\n", @@ -155,14 +188,6 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) incDirs << sdkDir + QStringLiteral("/include"); libDirs << sdkDir + QStringLiteral("/lib/") + compilerArch; binDirs << sdkDir + QStringLiteral("/bin/") + compiler; - - QString kitDir = vcInstallDir + QStringLiteral("/../../Windows Phone Kits/8.0"); - if (!QDir(kitDir).exists()) { - fprintf(stderr, "Failed to find the Windows Phone Kit in %s.\n" - "Check that it is properly installed.\n", - qPrintable(QDir::toNativeSeparators(kitDir))); - return false; - } libDirs << kitDir + QStringLiteral("/lib/") + arch; incDirs << kitDir + QStringLiteral("/include") << kitDir + QStringLiteral("/include/abi") @@ -170,18 +195,11 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t) << kitDir + QStringLiteral("/include/minwin"); } else { incDirs << vcInstallDir + QStringLiteral("/include"); - libDirs << vcInstallDir + QStringLiteral("/lib/") + compilerArch; + libDirs << vcInstallDir + QStringLiteral("/lib/store/") + compilerArch + << vcInstallDir + QStringLiteral("/lib/") + compilerArch; binDirs << vcInstallDir + QStringLiteral("/bin/") + compiler << vcInstallDir + QStringLiteral("/../Common7/IDE"); - - QString kitDir = vcInstallDir + QStringLiteral("/../../Windows Kits/8.0"); - if (!QDir(kitDir).exists()) { - fprintf(stderr, "Failed to find the Windows Kit in %s.\n" - "Check that it is properly installed.\n", - qPrintable(QDir::toNativeSeparators(kitDir))); - return false; - } - libDirs << kitDir + QStringLiteral("/Lib/win8/um/") + arch; + libDirs << kitDir + QStringLiteral("/Lib/") + targetVer + ("/um/") + arch; incDirs << kitDir + QStringLiteral("/include/um") << kitDir + QStringLiteral("/include/shared") << kitDir + QStringLiteral("/include/winrt"); @@ -285,7 +303,7 @@ void NmakeMakefileGenerator::writeNmakeParts(QTextStream &t) } } -QString NmakeMakefileGenerator::var(const ProKey &value) +QString NmakeMakefileGenerator::var(const ProKey &value) const { if (usePCH) { if ((value == "QMAKE_RUN_CXX_IMP_BATCH" diff --git a/qmake/generators/win32/msvc_nmake.h b/qmake/generators/win32/msvc_nmake.h index 7a47bb8cec..4d3c69bdd6 100644 --- a/qmake/generators/win32/msvc_nmake.h +++ b/qmake/generators/win32/msvc_nmake.h @@ -62,7 +62,7 @@ protected: virtual QString getPdbTarget(); virtual QString defaultInstall(const QString &t); virtual QStringList &findDependencies(const QString &file); - QString var(const ProKey &value); + QString var(const ProKey &value) const; QString precompH, precompObj, precompPch; bool usePCH; diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 8159cf58e2..3217500916 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -1532,7 +1532,7 @@ bool VCLinkerTool::parseOption(const char* option) AdditionalOptions.append(option); } break; - case 0x379ED25: + case 0x379ED25: case 0x157cf65: // /MACHINE:{AM33|ARM|CEE|IA64|X86|M32R|MIPS|MIPS16|MIPSFPU|MIPSFPU16|MIPSR41XX|PPC|SH3|SH4|SH5|THUMB|TRICORE} switch (elfHash(option+9)) { // Very limited documentation on all options but X86, @@ -1662,7 +1662,7 @@ bool VCLinkerTool::parseOption(const char* option) else AdditionalOptions += option; break; - case 0x9B3C00D: + case 0x9B3C00D: case 0x78dc00d: // /SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}[,major[.minor]] { // Split up in subsystem, and version number @@ -2248,7 +2248,7 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info) CustomBuildTool.Description.clear(); CustomBuildTool.Outputs.clear(); CustomBuildTool.ToolPath.clear(); - CustomBuildTool.ToolName = QLatin1String(_VCCustomBuildTool); + CustomBuildTool.ToolName = QLatin1String(_VCCustomBuildTool); for (int x = 0; x < extraCompilers.count(); ++x) { const QString &extraCompilerName = extraCompilers.at(x); @@ -2286,13 +2286,13 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info) } // Dependency for the output - if(!tmp_dep.isEmpty()) - deps = tmp_dep; - if(!tmp_dep_cmd.isEmpty()) { + if (!tmp_dep.isEmpty()) + deps = tmp_dep; + if (!tmp_dep_cmd.isEmpty()) { // Execute dependency command, and add every line as a dep - char buff[256]; - QString dep_cmd = Project->replaceExtraCompilerVariables(tmp_dep_cmd, - Option::fixPathToLocalOS(inFile, true, false), + char buff[256]; + QString dep_cmd = Project->replaceExtraCompilerVariables(tmp_dep_cmd, + Option::fixPathToLocalOS(inFile, true, false), out); if(Project->canExecute(dep_cmd)) { dep_cmd.prepend(QLatin1String("cd ") @@ -2319,7 +2319,7 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info) } } for (int i = 0; i < deps.count(); ++i) - deps[i] = Option::fixPathToTargetOS( + deps[i] = Option::fixPathToTargetOS( Project->replaceExtraCompilerVariables(deps.at(i), inFile, out), false).trimmed(); // Command for file @@ -2348,18 +2348,18 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info) out); } // Name for command - if(!tmp_cmd_name.isEmpty()) { - cmd_name = Project->replaceExtraCompilerVariables(tmp_cmd_name, inFile, out); - } else { - int space = cmd.indexOf(' '); - if(space != -1) - cmd_name = cmd.left(space); - else - cmd_name = cmd; - if((cmd_name[0] == '\'' || cmd_name[0] == '"') && - cmd_name[0] == cmd_name[cmd_name.length()-1]) - cmd_name = cmd_name.mid(1,cmd_name.length()-2); - } + if (!tmp_cmd_name.isEmpty()) { + cmd_name = Project->replaceExtraCompilerVariables(tmp_cmd_name, inFile, out); + } else { + int space = cmd.indexOf(' '); + if (space != -1) + cmd_name = cmd.left(space); + else + cmd_name = cmd; + if ((cmd_name[0] == '\'' || cmd_name[0] == '"') && + cmd_name[0] == cmd_name[cmd_name.length()-1]) + cmd_name = cmd_name.mid(1,cmd_name.length()-2); + } // Fixify paths for (int i = 0; i < deps.count(); ++i) diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h index 58b528301c..7c51f6a67a 100644 --- a/qmake/generators/win32/msvc_objectmodel.h +++ b/qmake/generators/win32/msvc_objectmodel.h @@ -955,7 +955,7 @@ public: VCConfiguration* Config; QList<VCFilterFile> Files; - customBuildCheck CustomBuild; + customBuildCheck CustomBuild; bool useCustomBuildTool; VCCustomBuildTool CustomBuildTool; @@ -990,6 +990,7 @@ public: QString SccProjectName; QString SccLocalPath; QString PlatformName; + QString SdkVersion; // XML sub-parts VCConfiguration Configuration; @@ -1129,6 +1130,7 @@ public: QString SccProjectName; QString SccLocalPath; QString PlatformName; + QString SdkVersion; // Single projects QList<VCProjectSingleConfig> SingleProjects; diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index f86c8512d4..829be89097 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -111,9 +111,10 @@ QT_END_NAMESPACE #endif QT_BEGIN_NAMESPACE -DotNET which_dotnet_version() +DotNET which_dotnet_version(const QByteArray &preferredVersion = QByteArray()) { #ifndef Q_OS_WIN32 + Q_UNUSED(preferredVersion); return NET2002; // Always generate 7.0 versions on other platforms #else // Only search for the version once @@ -135,6 +136,10 @@ DotNET which_dotnet_version() installPaths.insert(lowestInstalledVersion->version, path); ++installed; current_version = lowestInstalledVersion->version; + if (QByteArray(lowestInstalledVersion->versionStr).contains(preferredVersion)) { + installed = 1; + break; + } } } @@ -286,6 +291,7 @@ bool VcprojGenerator::writeProjectMakefile() mergedProjects.at(0)->writePrlFile(); mergedProject.Name = project->first("QMAKE_PROJECT_NAME").toQString(); mergedProject.Version = mergedProjects.at(0)->vcProject.Version; + mergedProject.SdkVersion = mergedProjects.at(0)->vcProject.SdkVersion; mergedProject.ProjectGUID = project->isEmpty("QMAKE_UUID") ? getProjectUUID().toString().toUpper() : project->first("QMAKE_UUID").toQString(); mergedProject.Keyword = project->first("VCPROJ_KEYWORD").toQString(); mergedProject.SccProjectName = mergedProjects.at(0)->vcProject.SccProjectName; @@ -585,7 +591,7 @@ void VcprojGenerator::writeSubDirs(QTextStream &t) return; } - switch(which_dotnet_version()) { + switch (which_dotnet_version(project->first("MSVC_VER").toLatin1())) { case NET2013: t << _slnHeader120; break; @@ -874,12 +880,12 @@ void VcprojGenerator::initProject() // Own elements ----------------------------- vcProject.Name = unescapeFilePath(project->first("QMAKE_ORIG_TARGET").toQString()); - switch(which_dotnet_version()) { + switch (which_dotnet_version(project->first("MSVC_VER").toLatin1())) { case NET2013: - vcProject.Version = "13.00"; + vcProject.Version = "12.00"; break; case NET2012: - vcProject.Version = "12.00"; + vcProject.Version = "11.00"; break; case NET2010: vcProject.Version = "10.00"; @@ -912,6 +918,7 @@ void VcprojGenerator::initProject() } else { vcProject.PlatformName = project->values("CE_SDK").join(' ') + " (" + project->first("CE_ARCH") + ")"; } + vcProject.SdkVersion = project->first("WINSDK_VER").toQString(); // These are not used by Qt, but may be used by customers vcProject.SccProjectName = project->first("SCCPROJECTNAME").toQString(); vcProject.SccLocalPath = project->first("SCCLOCALPATH").toQString(); @@ -924,7 +931,7 @@ void VcprojGenerator::initConfiguration() // - Do this first since main configuration elements may need // - to know of certain compiler/linker options VCConfiguration &conf = vcProject.Configuration; - conf.CompilerVersion = which_dotnet_version(); + conf.CompilerVersion = which_dotnet_version(project->first("MSVC_VER").toLatin1()); initCompilerTool(); @@ -970,8 +977,13 @@ void VcprojGenerator::initConfiguration() if (conf.CompilerVersion >= NET2012) { conf.WinRT = project->isActiveConfig("winrt"); - if (conf.WinRT) + if (conf.WinRT) { conf.WinPhone = project->isActiveConfig("winphone"); + // Saner defaults + conf.compiler.UsePrecompiledHeader = pchNone; + conf.compiler.CompileAsWinRT = _False; + conf.linker.GenerateWindowsMetadata = _False; + } } conf.Name = project->values("BUILD_NAME").join(' '); @@ -988,7 +1000,7 @@ void VcprojGenerator::initConfiguration() conf.ATLMinimizesCRunTimeLibraryUsage = (project->first("ATLMinimizesCRunTimeLibraryUsage").isEmpty() ? _False : _True); conf.BuildBrowserInformation = triState(temp.isEmpty() ? (short)unset : temp.toShort()); temp = project->first("CharacterSet"); - conf.CharacterSet = charSet(temp.isEmpty() ? (short)charSetNotSet : temp.toShort()); + conf.CharacterSet = charSet(temp.isEmpty() ? short(conf.WinRT ? charSetUnicode : charSetNotSet) : temp.toShort()); conf.DeleteExtensionsOnClean = project->first("DeleteExtensionsOnClean").toQString(); conf.ImportLibrary = conf.linker.ImportLibrary; conf.IntermediateDirectory = project->first("OBJECTS_DIR").toQString(); diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index 30d28e6e11..de243e4394 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -89,12 +89,12 @@ Win32MakefileGenerator::findHighestVersion(const QString &d, const QString &stem QRegExp regx(QString("((lib)?%1([0-9]*)).(%2|prl)$").arg(stem).arg(ext), Qt::CaseInsensitive); for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) { if(regx.exactMatch((*it))) { - if (!regx.cap(3).isEmpty()) { - bool ok = true; - int num = regx.cap(3).toInt(&ok); - biggest = qMax(biggest, (!ok ? -1 : num)); - } - } + if (!regx.cap(3).isEmpty()) { + bool ok = true; + int num = regx.cap(3).toInt(&ok); + biggest = qMax(biggest, (!ok ? -1 : num)); + } + } } } if(libInfoRead @@ -485,20 +485,20 @@ void Win32MakefileGenerator::processRcFileVar() rcFile.close(); } if (writeRcFile) { - bool ok; - ok = rcFile.open(QFile::WriteOnly); - if (!ok) { - // The file can't be opened... try creating the containing - // directory first (needed for clean shadow builds) - QDir().mkpath(QFileInfo(rcFile).path()); - ok = rcFile.open(QFile::WriteOnly); - } - if (!ok) { - ::fprintf(stderr, "Cannot open for writing: %s", rcFile.fileName().toLatin1().constData()); - ::exit(1); - } - rcFile.write(rcString); - rcFile.close(); + bool ok; + ok = rcFile.open(QFile::WriteOnly); + if (!ok) { + // The file can't be opened... try creating the containing + // directory first (needed for clean shadow builds) + QDir().mkpath(QFileInfo(rcFile).path()); + ok = rcFile.open(QFile::WriteOnly); + } + if (!ok) { + ::fprintf(stderr, "Cannot open for writing: %s", rcFile.fileName().toLatin1().constData()); + ::exit(1); + } + rcFile.write(rcString); + rcFile.close(); } if (project->values("QMAKE_WRITE_DEFAULT_RC").isEmpty()) project->values("RC_FILE").insert(0, rcFile.fileName()); @@ -530,7 +530,7 @@ void Win32MakefileGenerator::processRcFileVar() } project->values("RES_FILE").first() = Option::fixPathToTargetOS( project->values("RES_FILE").first().toQString(), false, false); - project->values("POST_TARGETDEPS") += project->values("RES_FILE"); + project->values("POST_TARGETDEPS") += project->values("RES_FILE"); project->values("CLEAN_FILES") += project->values("RES_FILE"); } } |