summaryrefslogtreecommitdiffstats
path: root/qmake
diff options
context:
space:
mode:
Diffstat (limited to 'qmake')
-rw-r--r--qmake/main.cpp5
-rw-r--r--qmake/option.cpp58
-rw-r--r--qmake/option.h3
-rw-r--r--qmake/project.cpp65
4 files changed, 59 insertions, 72 deletions
diff --git a/qmake/main.cpp b/qmake/main.cpp
index 985afaa8e8..38e09f60fd 100644
--- a/qmake/main.cpp
+++ b/qmake/main.cpp
@@ -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",
diff --git a/qmake/option.cpp b/qmake/option.cpp
index 3ddde2a11a..de907f0528 100644
--- a/qmake/option.cpp
+++ b/qmake/option.cpp
@@ -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"];
diff --git a/qmake/option.h b/qmake/option.h
index ce680b0d6a..0ec6a36a29 100644
--- a/qmake/option.h
+++ b/qmake/option.h
@@ -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;
diff --git a/qmake/project.cpp b/qmake/project.cpp
index 612acda2f4..283dee13c8 100644
--- a/qmake/project.cpp
+++ b/qmake/project.cpp
@@ -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())