aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-05-23 14:21:33 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-05-23 14:21:33 +0200
commitb9c2e80bd1dd6a336139aff32248100b61e34404 (patch)
treef2b80c49961dc888d52e801bf92fe858bc95d80f /src/lib/corelib
parent5e259141414a48199cb4491d7d9a5399c1b87e53 (diff)
parent85b28f9a057772db05c002b528655c1c093d0f50 (diff)
Merge 1.12 into master
Diffstat (limited to 'src/lib/corelib')
-rw-r--r--src/lib/corelib/language/moduleloader.cpp11
-rw-r--r--src/lib/corelib/qbs.h1
-rw-r--r--src/lib/corelib/tools/fileinfo.cpp8
-rw-r--r--src/lib/corelib/tools/filetime.cpp26
-rw-r--r--src/lib/corelib/tools/filetime.h22
5 files changed, 54 insertions, 14 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index 85b037ee5..933c49abc 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -1229,10 +1229,8 @@ void ModuleLoader::createSortedModuleList(const Item::Module &parentModule, Item
!= modules.cend()) {
return;
}
- if (!moduleRepresentsDisabledProduct(parentModule)) {
- for (const Item::Module &dep : parentModule.item->modules())
- createSortedModuleList(dep, modules);
- }
+ for (const Item::Module &dep : parentModule.item->modules())
+ createSortedModuleList(dep, modules);
modules.push_back(parentModule);
return;
}
@@ -1294,6 +1292,7 @@ void ModuleLoader::handleProduct(ModuleLoader::ProductContext *productContext)
Item * const item = productContext->item;
+ m_reader->setExtraSearchPathsStack(productContext->project->searchPathsStack);
SearchPathsManager searchPathsManager(m_reader, productContext->searchPaths);
addTransitiveDependencies(productContext);
@@ -3621,6 +3620,8 @@ void ModuleLoader::overrideItemProperties(Item *item, const QString &buildConfig
void ModuleLoader::collectAllModules(Item *item, std::vector<Item::Module> *modules)
{
for (const Item::Module &m : item->modules()) {
+ if (moduleRepresentsDisabledProduct(m))
+ m.item->removeModules();
auto it = std::find_if(modules->begin(), modules->end(),
[m] (const Item::Module &m2) { return m.name == m2.name; });
if (it != modules->end()) {
@@ -3631,8 +3632,6 @@ void ModuleLoader::collectAllModules(Item *item, std::vector<Item::Module> *modu
continue;
}
modules->push_back(m);
- if (moduleRepresentsDisabledProduct(m))
- continue;
collectAllModules(m.item, modules);
}
}
diff --git a/src/lib/corelib/qbs.h b/src/lib/corelib/qbs.h
index e6373b072..867051c45 100644
--- a/src/lib/corelib/qbs.h
+++ b/src/lib/corelib/qbs.h
@@ -60,6 +60,7 @@
#include "tools/projectgeneratormanager.h"
#include "tools/settings.h"
#include "tools/settingsmodel.h"
+#include "tools/settingsrepresentation.h"
#include "tools/setupprojectparameters.h"
#include "tools/toolchains.h"
#include "tools/version.h"
diff --git a/src/lib/corelib/tools/fileinfo.cpp b/src/lib/corelib/tools/fileinfo.cpp
index c4ba0e5e0..a1571b954 100644
--- a/src/lib/corelib/tools/fileinfo.cpp
+++ b/src/lib/corelib/tools/fileinfo.cpp
@@ -371,7 +371,9 @@ bool FileInfo::exists() const
FileTime FileInfo::lastModified() const
{
-#if HAS_CLOCK_GETTIME
+#if APPLE_STAT_TIMESPEC
+ return m_stat.st_mtimespec;
+#elif HAS_CLOCK_GETTIME
return m_stat.st_mtim;
#else
return m_stat.st_mtime;
@@ -380,7 +382,9 @@ FileTime FileInfo::lastModified() const
FileTime FileInfo::lastStatusChange() const
{
-#if HAS_CLOCK_GETTIME
+#if APPLE_STAT_TIMESPEC
+ return m_stat.st_ctimespec;
+#elif HAS_CLOCK_GETTIME
return m_stat.st_ctim;
#else
return m_stat.st_ctime;
diff --git a/src/lib/corelib/tools/filetime.cpp b/src/lib/corelib/tools/filetime.cpp
index 3f7148594..14680ef6e 100644
--- a/src/lib/corelib/tools/filetime.cpp
+++ b/src/lib/corelib/tools/filetime.cpp
@@ -55,6 +55,25 @@ template<bool> struct CompileTimeAssert;
template<> struct CompileTimeAssert<true> {};
#endif
+#ifdef APPLE_CUSTOM_CLOCK_GETTIME
+#include <sys/time.h>
+
+#ifndef CLOCK_REALTIME
+#define CLOCK_REALTIME 0
+#endif
+
+// clk_id isn't used, only the CLOCK_REALTIME case is implemented.
+int clock_gettime(int /*clk_id*/, struct timespec *t)
+{
+ struct timeval tv;
+ // Resolution of gettimeofday is 1000nsecs = 1 microsecond.
+ int ret = gettimeofday(&tv, NULL);
+ t->tv_sec = tv.tv_sec;
+ t->tv_nsec = tv.tv_usec * 1000;
+ return ret;
+}
+#endif
+
FileTime::FileTime()
{
#ifdef Q_OS_WIN
@@ -124,6 +143,13 @@ FileTime FileTime::currentTime()
FILETIME *const ft = reinterpret_cast<FILETIME *>(&result.m_fileTime);
SystemTimeToFileTime(&st, ft);
return result;
+#elif defined APPLE_CUSTOM_CLOCK_GETTIME
+ InternalType t;
+ // Explicitly use our custom version, so that we don't get an additional unresolved symbol on a
+ // system that actually provides one, but isn't used due to the minimium deployment target
+ // being lower.
+ qbs::Internal::clock_gettime(CLOCK_REALTIME, &t);
+ return t;
#elif HAS_CLOCK_GETTIME
InternalType t;
clock_gettime(CLOCK_REALTIME, &t);
diff --git a/src/lib/corelib/tools/filetime.h b/src/lib/corelib/tools/filetime.h
index d68c6ac4a..73e9d4544 100644
--- a/src/lib/corelib/tools/filetime.h
+++ b/src/lib/corelib/tools/filetime.h
@@ -45,17 +45,27 @@
#include <QtCore/qdatastream.h>
#include <QtCore/qdebug.h>
-#if defined(Q_OS_UNIX)
+#if defined(Q_OS_UNIX) && !defined(__APPLE__)
#include <time.h>
-#define BUILD_HOST_HAS_CLOCK_GETTIME (_POSIX_C_SOURCE >= 199309L)
+#define HAS_CLOCK_GETTIME (_POSIX_C_SOURCE >= 199309L)
+#endif // Q_OS_UNIX
+
#ifdef __APPLE__
+
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200
-#define HAS_CLOCK_GETTIME BUILD_HOST_HAS_CLOCK_GETTIME
+// macOS 10.12+ ships clock_gettime.
+#else
+// We implement our own clock_gettime.
+#define APPLE_CUSTOM_CLOCK_GETTIME 1
#endif // __MAC_OS_X_VERSION_MIN_REQUIRED
-#else // __APPLE__
-#define HAS_CLOCK_GETTIME BUILD_HOST_HAS_CLOCK_GETTIME
+
+// Either way we have a clock_gettime in the end.
+#define HAS_CLOCK_GETTIME 1
+
+// Apple stat struct has slightly different names for time fields.
+#define APPLE_STAT_TIMESPEC 1
+
#endif // __APPLE__
-#endif // Q_OS_UNIX
namespace qbs {
namespace Internal {