From 6bee0b695d5a3b1ebc2ce14baba7651ae37a2f1e Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 23 Feb 2017 14:53:27 +0100 Subject: [PATCH] qmake: improve time stamp precision of the touch() function sync-up with qmake; no effect on creator. Change-Id: I6928660230d84f8511bf0f58e268906d2e575e04 (cherry picked from qtbase/d83a20af1d05b5958d3559482b715777a57dea7a) Reviewed-by: Joerg Bornemann Reviewed-by: Tobias Hunger --- src/shared/proparser/qmakebuiltins.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp index 7d32611f56b..c935a364fe2 100644 --- a/src/shared/proparser/qmakebuiltins.cpp +++ b/src/shared/proparser/qmakebuiltins.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -1828,10 +1829,16 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( evalError(fL1S("Cannot stat() reference file %1: %2.").arg(rfn, fL1S(strerror(errno)))); return ReturnFalse; } +#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L + const struct timespec times[2] = { { 0, UTIME_NOW }, st.st_mtim }; + const bool utimeError = utimensat(AT_FDCWD, tfn.toLocal8Bit().constData(), times, 0) < 0; +#else struct utimbuf utb; utb.actime = time(0); utb.modtime = st.st_mtime; - if (utime(tfn.toLocal8Bit().constData(), &utb)) { + const bool utimeError = utime(tfn.toLocal8Bit().constData(), &utb) < 0; +#endif + if (utimeError) { evalError(fL1S("Cannot touch %1: %2.").arg(tfn, fL1S(strerror(errno)))); return ReturnFalse; }