cmFileTimeComparison: Port to OS X nanosecond times (#15769)
This commit is contained in:
parent
0faccb839a
commit
8d27b40778
|
@ -550,6 +550,7 @@ endforeach()
|
|||
|
||||
foreach(check
|
||||
STAT_HAS_ST_MTIM
|
||||
STAT_HAS_ST_MTIMESPEC
|
||||
)
|
||||
if(KWSYS_CXX_${check}_COMPILED) # abuse KWSys check cache entry
|
||||
set(CMake_${check} 1)
|
||||
|
|
|
@ -166,6 +166,24 @@ int cmFileTimeComparisonInternal::Compare(cmFileTimeComparison_Type* s1,
|
|||
{
|
||||
return 1;
|
||||
}
|
||||
# elif CMake_STAT_HAS_ST_MTIMESPEC
|
||||
// Compare using nanosecond resolution.
|
||||
if(s1->st_mtimespec.tv_sec < s2->st_mtimespec.tv_sec)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if(s1->st_mtimespec.tv_sec > s2->st_mtimespec.tv_sec)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(s1->st_mtimespec.tv_nsec < s2->st_mtimespec.tv_nsec)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if(s1->st_mtimespec.tv_nsec > s2->st_mtimespec.tv_nsec)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
# else
|
||||
// Compare using 1 second resolution.
|
||||
if(s1->st_mtime < s2->st_mtime)
|
||||
|
@ -207,6 +225,23 @@ bool cmFileTimeComparisonInternal::TimesDiffer(cmFileTimeComparison_Type* s1,
|
|||
{
|
||||
return false;
|
||||
}
|
||||
# elif CMake_STAT_HAS_ST_MTIMESPEC
|
||||
// Times are integers in units of 1ns.
|
||||
long long bil = 1000000000;
|
||||
long long t1 = s1->st_mtimespec.tv_sec * bil + s1->st_mtimespec.tv_nsec;
|
||||
long long t2 = s2->st_mtimespec.tv_sec * bil + s2->st_mtimespec.tv_nsec;
|
||||
if(t1 < t2)
|
||||
{
|
||||
return (t2 - t1) >= bil;
|
||||
}
|
||||
else if(t2 < t1)
|
||||
{
|
||||
return (t1 - t2) >= bil;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
# else
|
||||
// Times are integers in units of 1s.
|
||||
if(s1->st_mtime < s2->st_mtime)
|
||||
|
|
Loading…
Reference in New Issue