summaryrefslogtreecommitdiffstats
path: root/qmake/generators
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-04-13 21:18:36 +0200
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-04-21 12:06:20 +0000
commit4c96367410500c1b373a78cc3b5c6e07e8c998a5 (patch)
treedd85decb58aa3c69f606e040c3d7a3bb5d0ab025 /qmake/generators
parent6234dec41f48383ea3fe848fa2b3f1de64e426ba (diff)
make fileFixify() calling convention somewhat sane
instead of allowing arbitrary input and output base paths, restrict them to the project input and output dirs (in any permutation), which are the only cases ever used anyway. this permits much clearer call sites, and allows later optimizations. Change-Id: I48d149a4417af5c858e66ec57c476a5bc6b17f17 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'qmake/generators')
-rw-r--r--qmake/generators/mac/pbuilder_pbx.cpp20
-rw-r--r--qmake/generators/makefile.cpp77
-rw-r--r--qmake/generators/makefile.h25
-rw-r--r--qmake/generators/projectgenerator.cpp2
-rw-r--r--qmake/generators/unix/unixmake2.cpp6
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp2
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp2
7 files changed, 69 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);
}
}
}