diff options
-rw-r--r-- | qmake/generators/mac/pbuilder_pbx.cpp | 20 | ||||
-rw-r--r-- | qmake/generators/makefile.cpp | 77 | ||||
-rw-r--r-- | qmake/generators/makefile.h | 25 | ||||
-rw-r--r-- | qmake/generators/projectgenerator.cpp | 2 | ||||
-rw-r--r-- | qmake/generators/unix/unixmake2.cpp | 6 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_objectmodel.cpp | 2 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_vcproj.cpp | 2 | ||||
-rw-r--r-- | qmake/project.cpp | 1 | ||||
-rw-r--r-- | qmake/project.h | 2 |
9 files changed, 72 insertions, 65 deletions
diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp index c9ec5fe9a6..fcd6bf8308 100644 --- a/qmake/generators/mac/pbuilder_pbx.cpp +++ b/qmake/generators/mac/pbuilder_pbx.cpp @@ -105,7 +105,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) { if(project->isActiveConfig("generate_pbxbuild_makefile")) { QString mkwrap = fileFixify(pbx_dir + Option::dir_sep + ".." + Option::dir_sep + project->first("MAKEFILE"), - qmake_getpwd()); + FileFixifyToIndir); QFile mkwrapf(mkwrap); if(mkwrapf.open(QIODevice::WriteOnly | QIODevice::Text)) { debug_msg(1, "pbuilder: Creating file: %s", mkwrap.toLatin1().constData()); @@ -184,13 +184,13 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) bool in_root = true; QString name = qmake_getpwd(); if(project->isActiveConfig("flat")) { - QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative); + QString flat_file = fileFixify(name, FileFixifyBackwards | FileFixifyRelative); if(flat_file.indexOf(Option::dir_sep) != -1) { QStringList dirs = flat_file.split(Option::dir_sep); name = dirs.back(); } } else { - QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative); + QString flat_file = fileFixify(name, FileFixifyBackwards | FileFixifyRelative); if(QDir::isRelativePath(flat_file) && flat_file.indexOf(Option::dir_sep) != -1) { QString last_grp("QMAKE_SUBDIR_PBX_HEIR_GROUP"); QStringList dirs = flat_file.split(Option::dir_sep); @@ -560,7 +560,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) // 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(), - QString(), Option::output_dir, FileFixifyAbsolute)); + FileFixifyFromOutdir | FileFixifyAbsolute)); //DUMP SOURCES QMap<QString, ProStringList> groups; @@ -618,7 +618,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProStringList &root_group_list = project->values("QMAKE_PBX_GROUPS"); const QStringList &files = fileFixify(sources.at(source).files(project), - QString(), Option::output_dir, FileFixifyAbsolute); + FileFixifyFromOutdir | FileFixifyAbsolute); for(int f = 0; f < files.count(); ++f) { QString file = files[f]; if(!sources.at(source).compilerName().isNull() && @@ -634,7 +634,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if (!project->isActiveConfig("flat")) { // Build group hierarchy for file references that match the source our build dir - QString relativePath = fileFixify(file, qmake_getpwd(), QString(), FileFixifyRelative); + QString relativePath = fileFixify(file, FileFixifyToIndir | FileFixifyRelative); if (QDir::isRelativePath(relativePath) && relativePath.startsWith(QLatin1String("../"))) relativePath = fileFixify(file, FileFixifyRelative); // Try build dir @@ -764,7 +764,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if(added && !(added % 3)) mkt << "\\\n\t"; ++added; - const QString file_name = fileFixify(fn, Option::output_dir, Option::output_dir); + const QString file_name = fileFixify(fn, FileFixifyFromOutdir); mkt << ' ' << escapeDependencyPath(Option::fixPathToTargetOS( replaceExtraCompilerVariables(tmp_out.first().toQString(), file_name, QString(), NoShell))); } @@ -921,7 +921,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if(!path.isEmpty() && !libdirs.contains(path)) libdirs += path; } - library = fileFixify(library, Option::output_dir, Option::output_dir); + library = fileFixify(library, FileFixifyFromOutdir); QString key = keyFor(library); if (!project->values("QMAKE_PBX_LIBRARIES").contains(key)) { bool is_frmwrk = (library.endsWith(".framework")); @@ -1076,7 +1076,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if (!project->isEmpty("DESTDIR")) { QString phase_key = keyFor("QMAKE_PBX_TARGET_COPY_PHASE"); QString destDir = fileFixify(project->first("DESTDIR").toQString(), - QString(), Option::output_dir, FileFixifyAbsolute); + FileFixifyFromOutdir | FileFixifyAbsolute); project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" @@ -1470,7 +1470,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if ((project->first("TEMPLATE") == "app" && project->isActiveConfig("app_bundle")) || (project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") && project->isActiveConfig("lib_bundle"))) { - QString plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString(), qmake_getpwd()); + QString plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString(), FileFixifyToIndir); if (!plist.isEmpty()) { if (exists(plist)) t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fileFixify(plist)) << ";\n"; diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 7e118b127c..5aaaf49334 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -162,8 +162,6 @@ MakefileGenerator::initOutPaths() v["QMAKE_ABSOLUTE_SOURCE_PATH"].clear(); } - QString currentDir = qmake_getpwd(); //just to go back to - //some builtin directories if(project->isEmpty("PRECOMPILED_DIR") && !project->isEmpty("OBJECTS_DIR")) v["PRECOMPILED_DIR"] = v["OBJECTS_DIR"]; @@ -177,7 +175,7 @@ MakefileGenerator::initOutPaths() const ProString orig_path = v[dkey].first(); ProString &pathRef = v[dkey].first(); - pathRef = fileFixify(pathRef.toQString(), Option::output_dir, Option::output_dir); + pathRef = fileFixify(pathRef.toQString(), FileFixifyFromOutdir); #ifdef Q_OS_WIN // We don't want to add a separator for DLLDESTDIR on Windows (###why?) @@ -192,7 +190,7 @@ MakefileGenerator::initOutPaths() continue; QString path = project->first(dkey).toQString(); //not to be changed any further - path = fileFixify(path, currentDir, Option::output_dir); + path = fileFixify(path, FileFixifyBackwards); debug_msg(3, "Fixed output_dir %s (%s) into %s", dirs[x], orig_path.toLatin1().constData(), path.toLatin1().constData()); if(!mkdir(path)) @@ -210,7 +208,7 @@ MakefileGenerator::initOutPaths() for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { ProStringList &inputs = project->values((*it2).toKey()); for (ProStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) { - QString finp = fileFixify((*input).toQString(), Option::output_dir, Option::output_dir); + QString finp = fileFixify((*input).toQString(), FileFixifyFromOutdir); *input = ProString(finp); QString path = replaceExtraCompilerVariables(tmp_out, finp, QString(), NoShell); path = Option::normalizePath(path); @@ -220,7 +218,7 @@ MakefileGenerator::initOutPaths() // Make out path only if it does not contain makefile variables if(!path.contains("${")) if(path != "." && - !mkdir(fileFixify(path, qmake_getpwd(), Option::output_dir))) + !mkdir(fileFixify(path, FileFixifyBackwards))) warn_msg(WarnLogic, "%s: Cannot access directory '%s'", (*it).toLatin1().constData(), path.toLatin1().constData()); } @@ -276,7 +274,7 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString continue; } if(!(flags & VPATH_NoFixify)) - file = fileFixify(file, qmake_getpwd(), Option::output_dir); + file = fileFixify(file, FileFixifyBackwards); if(exists(file)) { ++val_it; @@ -314,7 +312,7 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); real_dir = dir; if(!(flags & VPATH_NoFixify)) - real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir) + '/'; + real_dir = fileFixify(real_dir, FileFixifyBackwards) + '/'; regex.remove(0, dir.length()); } if(real_dir.isEmpty() || exists(real_dir)) { @@ -495,10 +493,10 @@ MakefileGenerator::init() sub.toLatin1().constData()); continue; } - inn = fileFixify(tinn.first().toQString(), qmake_getpwd()); - outn = fileFixify(toutn.first().toQString(), qmake_getpwd(), Option::output_dir); + inn = fileFixify(tinn.first().toQString(), FileFixifyToIndir); + outn = fileFixify(toutn.first().toQString(), FileFixifyBackwards); } else { - inn = fileFixify(sub, qmake_getpwd()); + inn = fileFixify(sub, FileFixifyToIndir); if (!QFile::exists(inn)) { // random insanity for backwards compat: .in file specified with absolute out dir inn = fileFixify(sub); @@ -508,7 +506,7 @@ MakefileGenerator::init() inn.toLatin1().constData()); continue; } - outn = fileFixify(inn.left(inn.length()-3), qmake_getpwd(), Option::output_dir); + outn = fileFixify(inn.left(inn.length() - 3), FileFixifyBackwards); } const ProKey confign(sub + ".CONFIG"); @@ -687,7 +685,7 @@ MakefileGenerator::init() if(tmp_out.indexOf("$") == -1) { if(!verifyExtraCompiler((*it), QString())) //verify continue; - QString out = fileFixify(tmp_out.toQString(), Option::output_dir, Option::output_dir); + QString out = fileFixify(tmp_out.toQString(), FileFixifyFromOutdir); bool pre_dep = (config.indexOf("target_predeps") != -1); if (v.contains(vokey)) { const ProStringList &var_out = v.value(vokey); @@ -728,7 +726,7 @@ MakefileGenerator::init() if (!verifyExtraCompiler((*it).toQString(), inpf)) //verify continue; QString out = replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString(), NoShell); - out = fileFixify(out, Option::output_dir, Option::output_dir); + out = fileFixify(out, FileFixifyFromOutdir); bool pre_dep = (config.indexOf("target_predeps") != -1); if (v.contains(vokey)) { const ProStringList &var_out = project->values(vokey); @@ -886,7 +884,7 @@ MakefileGenerator::processPrlFile(QString &file) // meta_file = fileFixify(meta_file); QString real_meta_file = Option::normalizePath(meta_file); if(!meta_file.isEmpty()) { - QString f = fileFixify(real_meta_file, qmake_getpwd(), Option::output_dir); + QString f = fileFixify(real_meta_file, FileFixifyBackwards); if(QMakeMetaInfo::libExists(f)) { QMakeMetaInfo libinfo(project); debug_msg(1, "Processing PRL file: %s", real_meta_file.toLatin1().constData()); @@ -1101,7 +1099,7 @@ MakefileGenerator::prlFileName(bool fixify) if(fixify) { if(!project->isEmpty("DESTDIR")) ret.prepend(project->first("DESTDIR").toQString()); - ret = fileFixify(ret, qmake_getpwd(), Option::output_dir); + ret = fileFixify(ret, FileFixifyBackwards); } return ret; } @@ -1507,7 +1505,7 @@ MakefileGenerator::createObjectList(const ProStringList &sources) QString dir; if (project->isActiveConfig("object_parallel_to_source")) { // The source paths are relative to the output dir, but we need source-relative paths - QString sourceRelativePath = fileFixify(sfn, qmake_getpwd(), Option::output_dir); + QString sourceRelativePath = fileFixify(sfn, FileFixifyBackwards); if (sourceRelativePath.startsWith(".." + Option::dir_sep)) sourceRelativePath = fileFixify(sourceRelativePath, FileFixifyAbsolute); @@ -1523,7 +1521,7 @@ MakefileGenerator::createObjectList(const ProStringList &sources) if (!noIO()) { // Ensure that the final output directory of each object exists - QString outRelativePath = fileFixify(dir, qmake_getpwd(), Option::output_dir); + QString outRelativePath = fileFixify(dir, FileFixifyBackwards); if (!mkdir(outRelativePath)) warn_msg(WarnLogic, "Cannot create directory '%s'", outRelativePath.toLatin1().constData()); } @@ -1795,7 +1793,7 @@ MakefileGenerator::writeExtraTargets(QTextStream &t) } const ProStringList &config = project->values(ProKey(*it + ".CONFIG")); if (config.indexOf("fix_target") != -1) - targ = fileFixify(targ, Option::output_dir, Option::output_dir); + targ = fileFixify(targ, FileFixifyFromOutdir); if (config.indexOf("phony") != -1) deps += QLatin1String(" FORCE"); t << escapeDependencyPath(targ) << ":" << deps; @@ -1812,7 +1810,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { QString tmp_out = fileFixify(project->first(ProKey(*it + ".output")).toQString(), - Option::output_dir, Option::output_dir); + FileFixifyFromOutdir); const QString tmp_cmd = project->values(ProKey(*it + ".commands")).join(' '); const QString tmp_dep_cmd = project->values(ProKey(*it + ".depend_command")).join(' '); QString dep_cd_cmd; @@ -1923,7 +1921,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } QStringList deps, inputs; if(!tmp_dep.isEmpty()) - deps += fileFixify(tmp_dep, Option::output_dir, Option::output_dir); + deps += fileFixify(tmp_dep, FileFixifyFromOutdir); for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { QString inpf = (*input).toQString(); deps += findDependencies(inpf); @@ -1998,7 +1996,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) t << escapeDependencyPath(Option::fixPathToTargetOS(out)) << ":"; // compiler.CONFIG+=explicit_dependencies means that ONLY compiler.depends gets to cause Makefile dependencies if (config.indexOf("explicit_dependencies") != -1) { - t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, Option::output_dir, Option::output_dir))); + t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, FileFixifyFromOutdir))); } else { t << " " << valList(escapeDependencyPaths(inputs)) << " " << valList(escapeDependencyPaths(deps)); } @@ -2012,7 +2010,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) deps << in; QString out = Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, inpf, QString(), NoShell)); if(!tmp_dep.isEmpty()) { - QStringList pre_deps = fileFixify(tmp_dep, Option::output_dir, Option::output_dir); + QStringList pre_deps = fileFixify(tmp_dep, FileFixifyFromOutdir); for(int i = 0; i < pre_deps.size(); ++i) deps << replaceExtraCompilerVariables(pre_deps.at(i), inpf, out, NoShell); } @@ -2330,7 +2328,7 @@ MakefileGenerator::findSubDirsSubTargets() const if(fileInfo(st->in_directory).isRelative()) st->out_directory = st->in_directory; else - st->out_directory = fileFixify(st->in_directory, qmake_getpwd(), Option::output_dir); + st->out_directory = fileFixify(st->in_directory, FileFixifyBackwards); const ProKey mkey(fixedSubdir + ".makefile"); if (!project->isEmpty(mkey)) { st->makefile = project->first(mkey).toQString(); @@ -2808,22 +2806,20 @@ MakefileGenerator::escapeDependencyPaths(const ProStringList &paths) const } QStringList -MakefileGenerator::fileFixify(const QStringList& files, const QString &out_dir, const QString &in_dir, - FileFixifyType fix, bool canon) const +MakefileGenerator::fileFixify(const QStringList &files, FileFixifyTypes fix, bool canon) const { if(files.isEmpty()) return files; QStringList ret; for(QStringList::ConstIterator it = files.begin(); it != files.end(); ++it) { if(!(*it).isEmpty()) - ret << fileFixify((*it), out_dir, in_dir, fix, canon); + ret << fileFixify((*it), fix, canon); } return ret; } QString -MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const QString &in_d, - FileFixifyType fix, bool canon) const +MakefileGenerator::fileFixify(const QString &file, FileFixifyTypes fix, bool canon) const { if(file.isEmpty()) return file; @@ -2837,9 +2833,10 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q else warn_msg(WarnLogic, "Unable to expand ~ in %s", ret.toLatin1().constData()); } - if(fix == FileFixifyAbsolute || (fix == FileFixifyDefault && project->isActiveConfig("no_fixpath"))) { - if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) { //already absolute - QString pwd = QDir(qmake_getpwd()).absoluteFilePath(in_d); + if ((fix & FileFixifyAbsolute) + || (!(fix & FileFixifyRelative) && project->isActiveConfig("no_fixpath"))) { + if ((fix & FileFixifyAbsolute) && QDir::isRelativePath(ret)) { + QString pwd = !(fix & FileFixifyFromOutdir) ? project->projectDir() : Option::output_dir; { QFileInfo in_fi(fileInfo(pwd)); if (in_fi.exists()) @@ -2851,8 +2848,8 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q } ret = Option::fixPathToTargetOS(ret, false, canon); } else { //fix it.. - QString out_dir = QDir(Option::output_dir).absoluteFilePath(out_d); - QString in_dir = QDir(qmake_getpwd()).absoluteFilePath(in_d); + QString out_dir = (fix & FileFixifyToIndir) ? project->projectDir() : Option::output_dir; + QString in_dir = !(fix & FileFixifyFromOutdir) ? project->projectDir() : Option::output_dir; { QFileInfo in_fi(fileInfo(in_dir)); if(in_fi.exists()) @@ -2914,8 +2911,8 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q } if(ret.isEmpty()) ret = "."; - debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s] [%s::%s]", fix, canon, orig_file.toLatin1().constData(), - ret.toLatin1().constData(), in_d.toLatin1().constData(), out_d.toLatin1().constData(), + debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s]", + int(fix), canon, orig_file.toLatin1().constData(), ret.toLatin1().constData(), qmake_getpwd().toLatin1().constData(), Option::output_dir.toLatin1().constData()); return ret; } @@ -2924,7 +2921,7 @@ QMakeLocalFileName MakefileGenerator::fixPathForFile(const QMakeLocalFileName &file, bool forOpen) { if(forOpen) - return QMakeLocalFileName(fileFixify(file.real(), qmake_getpwd(), Option::output_dir)); + return QMakeLocalFileName(fileFixify(file.real(), FileFixifyBackwards)); return QMakeLocalFileName(fileFixify(file.real())); } @@ -2979,7 +2976,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca if(QDir::isRelativePath(dir)) { if(!dir.endsWith(Option::dir_sep)) dir += Option::dir_sep; - QString shadow = fileFixify(dir + dep.local(), pwd, Option::output_dir); + QString shadow = fileFixify(dir + dep.local(), FileFixifyBackwards); if(exists(shadow)) { ret = QMakeLocalFileName(shadow); goto found_dep_from_heuristic; @@ -3015,7 +3012,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca QString out = Option::fixPathToTargetOS( replaceExtraCompilerVariables(tmp_out.toQString(), (*input).toQString(), QString(), NoShell)); if (out == dep.real() || out.section(Option::dir_sep, -1) == dep_basename) { - ret = QMakeLocalFileName(fileFixify(out, qmake_getpwd(), Option::output_dir)); + ret = QMakeLocalFileName(fileFixify(out, FileFixifyBackwards)); goto found_dep_from_heuristic; } } @@ -3132,7 +3129,7 @@ MakefileGenerator::pkgConfigFileName(bool fixify) if(fixify) { if(QDir::isRelativePath(ret) && !project->isEmpty("DESTDIR")) ret.prepend(project->first("DESTDIR").toQString()); - ret = fileFixify(ret, qmake_getpwd(), Option::output_dir); + ret = fileFixify(ret, FileFixifyBackwards); } return ret; } diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h index d57fdbaca3..07483dbcb0 100644 --- a/qmake/generators/makefile.h +++ b/qmake/generators/makefile.h @@ -224,16 +224,22 @@ protected: ProStringList fixLibFlags(const ProKey &var); virtual ProString fixLibFlag(const ProString &lib); +public: //file fixification to unify all file names into a single pattern - enum FileFixifyType { FileFixifyAbsolute, FileFixifyRelative, FileFixifyDefault }; - QString fileFixify(const QString& file, const QString &out_dir=QString(), - const QString &in_dir=QString(), FileFixifyType fix=FileFixifyDefault, bool canon=true) const; - inline QString fileFixify(const QString& file, FileFixifyType fix, bool canon=true) const - { return fileFixify(file, QString(), QString(), fix, canon); } - QStringList fileFixify(const QStringList& files, const QString &out_dir=QString(), - const QString &in_dir=QString(), FileFixifyType fix=FileFixifyDefault, bool canon=true) const; - inline QStringList fileFixify(const QStringList& files, FileFixifyType fix, bool canon=true) const - { return fileFixify(files, QString(), QString(), fix, canon); } + enum FileFixifyType { + FileFixifyFromIndir = 0, + FileFixifyFromOutdir = 1, + FileFixifyToOutDir = 0, + FileFixifyToIndir = 2, + FileFixifyBackwards = FileFixifyFromOutdir | FileFixifyToIndir, + FileFixifyDefault = 0, + FileFixifyAbsolute = 4, + FileFixifyRelative = 8 + }; + Q_DECLARE_FLAGS(FileFixifyTypes, FileFixifyType) +protected: + QString fileFixify(const QString &file, FileFixifyTypes fix = FileFixifyDefault, bool canon = true) const; + QStringList fileFixify(const QStringList &files, FileFixifyTypes fix = FileFixifyDefault, bool canon = true) const; QString installMetaFile(const ProKey &replace_rule, const QString &src, const QString &dst); @@ -259,6 +265,7 @@ public: bool isWindowsShell() const { return Option::dir_sep == QLatin1String("\\"); } QString shellQuote(const QString &str); }; +Q_DECLARE_OPERATORS_FOR_FLAGS(MakefileGenerator::FileFixifyTypes) inline void MakefileGenerator::setNoIO(bool o) { no_io = o; } diff --git a/qmake/generators/projectgenerator.cpp b/qmake/generators/projectgenerator.cpp index bcda1dbf0c..9b1796c45d 100644 --- a/qmake/generators/projectgenerator.cpp +++ b/qmake/generators/projectgenerator.cpp @@ -379,7 +379,7 @@ ProjectGenerator::addConfig(const QString &cfg, bool add) bool ProjectGenerator::addFile(QString file) { - file = fileFixify(file, qmake_getpwd()); + file = fileFixify(file, FileFixifyToIndir); QString dir; int s = file.lastIndexOf(Option::dir_sep); if(s != -1) diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp index 7822107a37..d873e91170 100644 --- a/qmake/generators/unix/unixmake2.cpp +++ b/qmake/generators/unix/unixmake2.cpp @@ -107,7 +107,7 @@ UnixMakefileGenerator::writeDefaultVariables(QTextStream &t) project->values("QMAKE_DISTDIR") = project->first("QMAKE_DISTNAME"); t << "DISTDIR = " << escapeFilePath(fileFixify( (project->isEmpty("OBJECTS_DIR") ? ProString(".tmp/") : project->first("OBJECTS_DIR")) + project->first("QMAKE_DISTDIR"), - Option::output_dir, Option::output_dir, FileFixifyAbsolute)) << endl; + FileFixifyFromOutdir | FileFixifyAbsolute)) << endl; } void @@ -377,7 +377,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) } if(!d_file.isEmpty()) { - d_file = odir + ".deps/" + fileFixify(d_file, pwd, Option::output_dir) + ".d"; + d_file = odir + ".deps/" + fileFixify(d_file, FileFixifyBackwards) + ".d"; QString d_file_d = escapeDependencyPath(d_file); QStringList deps = findDependencies((*it).toQString()).filter(QRegExp( "((^|/)" + Option::h_moc_mod + "|" + Option::cpp_moc_ext + "$)")); @@ -1396,7 +1396,7 @@ UnixMakefileGenerator::libtoolFileName(bool fixify) if(fixify) { if(QDir::isRelativePath(ret) && !project->isEmpty("DESTDIR")) ret.prepend(project->first("DESTDIR").toQString()); - ret = fileFixify(ret, qmake_getpwd(), Option::output_dir); + ret = fileFixify(ret, FileFixifyBackwards); } return ret; } diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 917f4467a0..aa7320bc27 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -2337,7 +2337,7 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info) for (int i = 0; i < extradeps.count(); ++i) { QString dd = extradeps.at(i).simplified(); if (!dd.isEmpty()) - deps += Project->fileFixify(dd, QString(), Option::output_dir); + deps += Project->fileFixify(dd, MakefileGenerator::FileFixifyFromOutdir); } } } diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 2a5d6a9906..0d78766606 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -1588,7 +1588,7 @@ void VcprojGenerator::initResourceFiles() QT_PCLOSE(proc); if(!indeps.isEmpty()) deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' '), - QString(), Option::output_dir); + FileFixifyFromOutdir); } } } diff --git a/qmake/project.cpp b/qmake/project.cpp index 445c5c9bc5..faea6da650 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -70,6 +70,7 @@ bool QMakeProject::read(const QString &project, LoadFlags what) QString absproj = (project == QLatin1String("-")) ? QLatin1String("(stdin)") : QDir::cleanPath(QDir(qmake_getpwd()).absoluteFilePath(project)); + m_projectDir = QFileInfo(absproj).path(); return boolRet(evaluateFile(absproj, QMakeHandler::EvalProjectFile, what)); } diff --git a/qmake/project.h b/qmake/project.h index 9a5d0e285e..7cd49a457c 100644 --- a/qmake/project.h +++ b/qmake/project.h @@ -41,6 +41,7 @@ QT_BEGIN_NAMESPACE class QMakeProject : private QMakeEvaluator { QString m_projectFile; + QString m_projectDir; public: QMakeProject(); @@ -49,6 +50,7 @@ public: bool read(const QString &project, LoadFlags what = LoadAll); QString projectFile() const { return m_projectFile; } + QString projectDir() const { return m_projectDir; } QString sourceRoot() const { return m_sourceRoot.isEmpty() ? m_buildRoot : m_sourceRoot; } QString buildRoot() const { return m_buildRoot; } QString confFile() const { return m_conffile; } |