diff options
Diffstat (limited to 'qmake')
-rw-r--r-- | qmake/Makefile.win32 | 2 | ||||
-rw-r--r-- | qmake/doc/snippets/code/doc_src_qmake-manual.pro | 9 | ||||
-rw-r--r-- | qmake/generators/mac/pbuilder_pbx.cpp | 21 | ||||
-rw-r--r-- | qmake/generators/metamakefile.cpp | 4 | ||||
-rw-r--r-- | qmake/generators/unix/unixmake.cpp | 2 | ||||
-rw-r--r-- | qmake/generators/unix/unixmake2.cpp | 1 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_vcproj.cpp | 4 | ||||
-rw-r--r-- | qmake/generators/win32/winmakefile.cpp | 4 | ||||
-rw-r--r-- | qmake/library/qmakebuiltins.cpp | 29 | ||||
-rw-r--r-- | qmake/library/qmakeevaluator.h | 6 |
10 files changed, 48 insertions, 34 deletions
diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32 index 44102474b8..bac6e950be 100644 --- a/qmake/Makefile.win32 +++ b/qmake/Makefile.win32 @@ -61,7 +61,7 @@ OBJS = project.obj main.obj ioutils.obj proitems.obj qmakevfs.obj \ qmakeglobals.obj qmakeparser.obj qmakeevaluator.obj qmakebuiltins.obj \ makefile.obj unixmake.obj unixmake2.obj mingw_make.obj \ option.obj winmakefile.obj projectgenerator.obj property.obj meta.obj \ - makefiledeps.obj metamakefile.obj xmloutput.obj pbuilder_pbx.obj \ + makefiledeps.obj metamakefile.obj xmloutput.obj \ msvc_nmake.obj msvc_vcproj.obj msvc_vcxproj.obj \ msvc_objectmodel.obj msbuild_objectmodel.obj registry.obj \ gbuild.obj cesdkhandler.obj diff --git a/qmake/doc/snippets/code/doc_src_qmake-manual.pro b/qmake/doc/snippets/code/doc_src_qmake-manual.pro index ff1edb878d..07bed62763 100644 --- a/qmake/doc/snippets/code/doc_src_qmake-manual.pro +++ b/qmake/doc/snippets/code/doc_src_qmake-manual.pro @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the documentation of the Qt Toolkit. @@ -218,13 +218,6 @@ FORMS = mydialog.ui \ #! [32] -#! [33] -FORMS3 = my_uic3_dialog.ui \ - my_uic3_widget.ui \ - my_uic3_config.ui -#! [33] - - #! [34] HEADERS = myclass.h \ login.h \ diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp index 835676d9fe..70ac77f5da 100644 --- a/qmake/generators/mac/pbuilder_pbx.cpp +++ b/qmake/generators/mac/pbuilder_pbx.cpp @@ -418,7 +418,7 @@ class ProjectBuilderSources bool buildable, object_output; QString key, group, compiler; public: - ProjectBuilderSources(const QString &key, bool buildable=false, const QString &group=QString(), const QString &compiler=QString(), bool producesObject=false); + ProjectBuilderSources(const QString &key, bool buildable = false, const QString &compiler = QString(), bool producesObject = false); QStringList files(QMakeProject *project) const; inline bool isBuildable() const { return buildable; } inline QString keyName() const { return key; } @@ -442,8 +442,8 @@ public: } }; -ProjectBuilderSources::ProjectBuilderSources(const QString &k, bool b, - const QString &g, const QString &c, bool o) : buildable(b), object_output(o), key(k), group(g), compiler(c) +ProjectBuilderSources::ProjectBuilderSources(const QString &k, bool b, const QString &c, bool o) : + buildable(b), object_output(o), key(k), compiler(c) { // Override group name for a few common keys if (k == "SOURCES" || k == "OBJECTIVE_SOURCES" || k == "HEADERS") @@ -463,10 +463,16 @@ ProjectBuilderSources::files(QMakeProject *project) const { QStringList ret = project->values(ProKey(key)).toQStringList(); if(key == "QMAKE_INTERNAL_INCLUDED_FILES") { + QString qtPrefix(QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::EffectivePaths) + '/'); + QString qtSrcPrefix(QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::EffectiveSourcePaths) + '/'); + QStringList newret; for(int i = 0; i < ret.size(); ++i) { - if(!ret.at(i).endsWith(Option::prf_ext)) - newret.append(ret.at(i)); + // Don't show files "internal" to Qt in Xcode + if (ret.at(i).startsWith(qtPrefix) || ret.at(i).startsWith(qtSrcPrefix)) + continue; + + newret.append(ret.at(i)); } ret = newret; } @@ -567,6 +573,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) // doesn't have access to any of the information it needs to resolve relative paths. project->values("QMAKE_INTERNAL_INCLUDED_FILES").prepend(fileFixify(project->projectFile(), qmake_getpwd(), input_dir)); + // Since we can't fileFixify inside ProjectBuilderSources::files(), we resolve the absolute paths here + project->values("QMAKE_INTERNAL_INCLUDED_FILES") = ProStringList(fileFixify(project->values("QMAKE_INTERNAL_INCLUDED_FILES").toQStringList(), FileFixifyAbsolute)); + //DUMP SOURCES QMap<QString, ProStringList> groups; QList<ProjectBuilderSources> sources; @@ -606,7 +615,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } } sources.append(ProjectBuilderSources(inputs.at(input).toQString(), true, - QString(), (*it).toQString(), isObj)); + (*it).toQString(), isObj)); if (isObj) { inputs.removeAt(input); diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp index a037a966f6..ababbb2076 100644 --- a/qmake/generators/metamakefile.cpp +++ b/qmake/generators/metamakefile.cpp @@ -444,7 +444,11 @@ MetaMakefileGenerator::createMakefileGenerator(QMakeProject *proj, bool noIO) } else if(gen == "MINGW") { mkfile = new MingwMakefileGenerator; } else if(gen == "PROJECTBUILDER" || gen == "XCODE") { +#ifdef Q_CC_MSVC + fprintf(stderr, "Generating Xcode projects is not supported with an MSVC build of Qt.\n"); +#else mkfile = new ProjectBuilderMakefileGenerator; +#endif } else if(gen == "MSVC.NET") { if (proj->first("TEMPLATE").startsWith("vc")) mkfile = new VcprojGenerator; diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp index 5ea47cc867..e426180012 100644 --- a/qmake/generators/unix/unixmake.cpp +++ b/qmake/generators/unix/unixmake.cpp @@ -111,6 +111,8 @@ UnixMakefileGenerator::init() QString sroot = project->sourceRoot(); foreach (const ProString &iif, project->values("QMAKE_INTERNAL_INCLUDED_FILES")) { + if (iif == project->cacheFile()) + continue; if (iif.startsWith(sroot) && iif.at(sroot.length()) == QLatin1Char('/')) project->values("DISTFILES") += fileFixify(iif.toQString(), FileFixifyRelative); } diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp index 0ac840d9c9..e16e0f5c20 100644 --- a/qmake/generators/unix/unixmake2.cpp +++ b/qmake/generators/unix/unixmake2.cpp @@ -278,6 +278,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) if(do_incremental && !src_incremental) do_incremental = false; t << "DIST = " << valList(fileFixify(project->values("DISTFILES").toQStringList())) << " " + << valList(escapeFilePaths(project->values("HEADERS"))) << " " << 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 diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index a28ddd63c4..9916db9f92 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -1480,10 +1480,7 @@ void VcprojGenerator::initFormFiles() vcProject.FormFiles.ParseFiles = _False; vcProject.FormFiles.Filter = "ui"; vcProject.FormFiles.Guid = _GUIDFormFiles; - vcProject.FormFiles.addFiles(project->values("FORMS")); - vcProject.FormFiles.addFiles(project->values("FORMS3")); - vcProject.FormFiles.Project = this; vcProject.FormFiles.Config = &(vcProject.Configuration); vcProject.FormFiles.CustomBuild = none; @@ -1543,7 +1540,6 @@ void VcprojGenerator::initExtraCompilerOutputs() { ProStringList otherFilters; otherFilters << "FORMS" - << "FORMS3" << "GENERATED_FILES" << "GENERATED_SOURCES" << "HEADERS" diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index da81b85e2a..1fee98fcbd 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -678,7 +678,9 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t) writeExtraCompilerVariables(t); writeExtraVariables(t); - t << "DIST = " << varList("DISTFILES") << endl; + t << "DIST = " << varList("DISTFILES") << " " + << varList("HEADERS") << " " + << varList("SOURCES") << endl; t << "QMAKE_TARGET = " << var("QMAKE_ORIG_TARGET") << endl; // The comment is important to maintain variable compatibility with Unix // Makefiles, while not interpreting a trailing-slash as a linebreak diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp index 46934c83e9..9824b306b9 100644 --- a/qmake/library/qmakebuiltins.cpp +++ b/qmake/library/qmakebuiltins.cpp @@ -437,8 +437,9 @@ QByteArray QMakeEvaluator::getCommandOutput(const QString &args) const void QMakeEvaluator::populateDeps( const ProStringList &deps, const ProString &prefix, const ProStringList &suffixes, + const ProString &priosfx, QHash<ProKey, QSet<ProKey> > &dependencies, ProValueMap &dependees, - ProStringList &rootSet) const + QMultiMap<int, ProString> &rootSet) const { foreach (const ProString &item, deps) if (!dependencies.contains(item.toKey())) { @@ -447,13 +448,13 @@ void QMakeEvaluator::populateDeps( foreach (const ProString &suffix, suffixes) depends += values(ProKey(prefix + item + suffix)); if (depends.isEmpty()) { - rootSet << item; + rootSet.insert(first(ProKey(prefix + item + priosfx)).toInt(), item); } else { foreach (const ProString &dep, depends) { dset.insert(dep.toKey()); dependees[dep.toKey()] << item; } - populateDeps(depends, prefix, suffixes, dependencies, dependees, rootSet); + populateDeps(depends, prefix, suffixes, priosfx, dependencies, dependees, rootSet); } } } @@ -974,27 +975,31 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand( break; case E_SORT_DEPENDS: case E_RESOLVE_DEPENDS: - if (args.count() < 1 || args.count() > 3) { - evalError(fL1S("%1(var, [prefix, [suffixes]]) requires one to three arguments.") + if (args.count() < 1 || args.count() > 4) { + evalError(fL1S("%1(var, [prefix, [suffixes, [prio-suffix]]]) requires one to four arguments.") .arg(func.toQString(m_tmp1))); } else { QHash<ProKey, QSet<ProKey> > dependencies; ProValueMap dependees; - ProStringList rootSet; + QMultiMap<int, ProString> rootSet; ProStringList orgList = values(args.at(0).toKey()); - populateDeps(orgList, (args.count() < 2 ? ProString() : args.at(1)), + ProString prefix = args.count() < 2 ? ProString() : args.at(1); + ProString priosfx = args.count() < 4 ? ProString(".priority") : args.at(3); + populateDeps(orgList, prefix, args.count() < 3 ? ProStringList(ProString(".depends")) : split_value_list(args.at(2).toQString(m_tmp2)), - dependencies, dependees, rootSet); - for (int i = 0; i < rootSet.size(); ++i) { - const ProString &item = rootSet.at(i); + priosfx, dependencies, dependees, rootSet); + while (!rootSet.isEmpty()) { + QMultiMap<int, ProString>::iterator it = rootSet.begin(); + const ProString item = *it; + rootSet.erase(it); if ((func_t == E_RESOLVE_DEPENDS) || orgList.contains(item)) ret.prepend(item); foreach (const ProString &dep, dependees[item.toKey()]) { QSet<ProKey> &dset = dependencies[dep.toKey()]; - dset.remove(rootSet.at(i).toKey()); // *Don't* use 'item' - rootSet may have changed! + dset.remove(item.toKey()); if (dset.isEmpty()) - rootSet << dep; + rootSet.insert(first(ProKey(prefix + dep + priosfx)).toInt(), dep); } } } diff --git a/qmake/library/qmakeevaluator.h b/qmake/library/qmakeevaluator.h index f322a48011..8b2fc3ef06 100644 --- a/qmake/library/qmakeevaluator.h +++ b/qmake/library/qmakeevaluator.h @@ -51,6 +51,7 @@ #include <qlist.h> #include <qlinkedlist.h> +#include <qmap.h> #include <qset.h> #include <qstack.h> #include <qstring.h> @@ -238,8 +239,9 @@ public: void populateDeps( const ProStringList &deps, const ProString &prefix, const ProStringList &suffixes, - QHash<ProKey, QSet<ProKey> > &dependencies, - ProValueMap &dependees, ProStringList &rootSet) const; + const ProString &priosfx, + QHash<ProKey, QSet<ProKey> > &dependencies, ProValueMap &dependees, + QMultiMap<int, ProString> &rootSet) const; VisitReturn writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode, const QString &contents); |