Revert "move .qmake.cache search to Option"

We are now moving in the exact opposite direction.
This logically reverts commit 059200a44b.
Some adjustments were necessary to maintain the project root stuff.

Conflicts:

	qmake/main.cpp
	qmake/option.cpp
	qmake/option.h
	qmake/project.cpp

Change-Id: Ic14fa571cbbfe9ac159f92493e49741d70a87eff
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
This commit is contained in:
Oswald Buddenhagen 2012-05-09 15:14:37 +02:00
parent d8b2998dae
commit 4e9cbfc90f
4 changed files with 59 additions and 72 deletions

View File

@ -163,11 +163,6 @@ int runQMake(int argc, char **argv)
fn = fn.right(fn.length() - di - 1);
}
if (!Option::prepareProject(fn)) {
exit_val = 3;
break;
}
// read project..
if(!project.read(fn)) {
fprintf(stderr, "Error processing project file: %s\n",

View File

@ -114,8 +114,6 @@ bool Option::mkfile::do_dep_heuristics = true;
bool Option::mkfile::do_preprocess = false;
bool Option::mkfile::do_stub_makefile = false;
bool Option::mkfile::do_cache = true;
QString Option::mkfile::project_root;
QString Option::mkfile::project_build_root;
QString Option::mkfile::cachefile;
QStringList Option::mkfile::project_files;
QString Option::mkfile::qmakespec_commandline;
@ -583,62 +581,6 @@ void Option::applyHostMode()
}
}
bool Option::prepareProject(const QString &pfile)
{
mkfile::project_build_root.clear();
if (mkfile::do_cache) {
if (mkfile::cachefile.isEmpty()) { //find it as it has not been specified
QDir dir(output_dir);
while (!dir.exists(QLatin1String(".qmake.cache")))
if (dir.isRoot() || !dir.cdUp())
goto no_cache;
mkfile::cachefile = dir.filePath(QLatin1String(".qmake.cache"));
mkfile::project_build_root = dir.path();
} else {
QFileInfo fi(mkfile::cachefile);
mkfile::cachefile = QDir::cleanPath(fi.absoluteFilePath());
mkfile::project_build_root = QDir::cleanPath(fi.absolutePath());
}
if (mkfile::qmakespec.isEmpty()) {
QMakeProject cproj;
if (!cproj.read(mkfile::cachefile, QMakeProject::ReadProFile))
return false;
mkfile::qmakespec = cproj.first(QLatin1String("QMAKESPEC"));
}
}
no_cache:
QString srcpath = (pfile != "-")
? QDir::cleanPath(QFileInfo(pfile).absolutePath()) : qmake_getpwd();
if (srcpath != output_dir || mkfile::project_build_root.isEmpty()) {
QDir srcdir(srcpath);
QDir dstdir(output_dir);
do {
if (!mkfile::project_build_root.isEmpty()) {
// If we already know the build root, just match up the source root with it.
if (dstdir.path() == mkfile::project_build_root) {
mkfile::project_root = srcdir.path();
break;
}
} else {
// Look for mkspecs/ in source and build. First to win determines the root.
if (dstdir.exists("mkspecs") || srcdir.exists("mkspecs")) {
mkfile::project_build_root = dstdir.path();
mkfile::project_root = srcdir.path();
if (mkfile::project_root == mkfile::project_build_root)
mkfile::project_root.clear();
break;
}
}
} while (!srcdir.isRoot() && srcdir.cdUp() && !dstdir.isRoot() && dstdir.cdUp());
} else {
mkfile::project_root.clear();
}
return true;
}
bool Option::postProcessProject(QMakeProject *project)
{
Option::cpp_ext = project->variables()["QMAKE_EXT_CPP"];

View File

@ -109,7 +109,6 @@ struct Option
//both of these must be called..
static int init(int argc=0, char **argv=0); //parse cmdline
static void applyHostMode();
static bool prepareProject(const QString &pfile);
static bool postProcessProject(QMakeProject *);
enum StringFixFlags {
@ -203,8 +202,6 @@ struct Option
static bool do_dep_heuristics;
static bool do_preprocess;
static bool do_stub_makefile;
static QString project_root;
static QString project_build_root;
static QString cachefile;
static int cachefile_depth;
static QStringList project_files;

View File

@ -164,6 +164,9 @@ struct parser_info {
bool from_file;
} parser;
static QString project_root;
static QString project_build_root;
static QString remove_quotes(const QString &arg)
{
const ushort SINGLEQUOTE = '\'';
@ -612,10 +615,10 @@ QStringList qmake_mkspec_paths()
for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it)
ret << ((*it) + concat);
}
if (!Option::mkfile::project_build_root.isEmpty())
ret << Option::mkfile::project_build_root + concat;
if (!Option::mkfile::project_root.isEmpty())
ret << Option::mkfile::project_root + concat;
if (!project_build_root.isEmpty())
ret << project_build_root + concat;
if (!project_root.isEmpty())
ret << project_root + concat;
ret << QLibraryInfo::location(QLibraryInfo::DataPath) + concat;
ret.removeDuplicates();
@ -1298,11 +1301,61 @@ QMakeProject::read(uchar cmd)
if(!Option::user_template_prefix.isEmpty())
base_vars["TEMPLATE_PREFIX"] = QStringList(Option::user_template_prefix);
project_build_root.clear();
if (Option::mkfile::do_cache) { // parse the cache
if (Option::output_dir.startsWith(Option::mkfile::project_build_root))
if (Option::mkfile::cachefile.isEmpty()) { //find it as it has not been specified
QDir dir(Option::output_dir);
while (!dir.exists(QLatin1String(".qmake.cache")))
if (dir.isRoot() || !dir.cdUp())
goto no_cache;
Option::mkfile::cachefile = dir.filePath(QLatin1String(".qmake.cache"));
project_build_root = dir.path();
} else {
QFileInfo fi(Option::mkfile::cachefile);
Option::mkfile::cachefile = QDir::cleanPath(fi.absoluteFilePath());
project_build_root = QDir::cleanPath(fi.absolutePath());
}
QHash<QString, QStringList> cache;
if (!read(Option::mkfile::cachefile, cache)) {
Option::mkfile::cachefile.clear();
goto no_cache;
}
if (Option::mkfile::qmakespec.isEmpty() && !cache["QMAKESPEC"].isEmpty())
Option::mkfile::qmakespec = cache["QMAKESPEC"].first();
if (Option::output_dir.startsWith(project_build_root))
Option::mkfile::cachefile_depth =
Option::output_dir.mid(Option::mkfile::project_build_root.length()).count('/');
Option::output_dir.mid(project_build_root.length()).count('/');
}
no_cache:
if (qmake_getpwd() != Option::output_dir || project_build_root.isEmpty()) {
QDir srcdir(qmake_getpwd());
QDir dstdir(Option::output_dir);
do {
if (!project_build_root.isEmpty()) {
// If we already know the build root, just match up the source root with it.
if (dstdir.path() == project_build_root) {
project_root = srcdir.path();
break;
}
} else {
// Look for mkspecs/ in source and build. First to win determines the root.
if (dstdir.exists("mkspecs") || srcdir.exists("mkspecs")) {
project_build_root = dstdir.path();
project_root = srcdir.path();
if (project_root == project_build_root)
project_root.clear();
break;
}
}
} while (!srcdir.isRoot() && srcdir.cdUp() && !dstdir.isRoot() && dstdir.cdUp());
} else {
project_root.clear();
}
{ // parse mkspec
QString qmakespec = Option::mkfile::qmakespec;
if (qmakespec.isEmpty())