<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/d803d3647b2240ea93607eea7783ffbe630d0e71">https://github.com/macports/macports-legacy-support/commit/d803d3647b2240ea93607eea7783ffbe630d0e71</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit d803d3647b2240ea93607eea7783ffbe630d0e71
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Fri Feb 21 22:28:23 2025 -0800

<span style='display:block; white-space:pre;color:#404040;'>    Add mach_approximate_time() and derivatives (10.10+).
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This makes mach_approximate_time() available prior to its addition in
</span><span style='display:block; white-space:pre;color:#404040;'>    10.10, by falling back to mach_absolute_time().  The cases of
</span><span style='display:block; white-space:pre;color:#404040;'>    clock_gettime[_nsec_np]() that use the approximate versions are also
</span><span style='display:block; white-space:pre;color:#404040;'>    updated to use it, which has no effect prior to 10.10, but uses the
</span><span style='display:block; white-space:pre;color:#404040;'>    approximate versons in 10.10+.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'>    Passes new clock test on all platforms.
</span>---
 include/MacportsLegacySupport.h |  4 ++++
 include/mach/mach_time.h        | 39 +++++++++++++++++++++++++++++++++++++++
 src/time.c                      | 39 +++++++++++++++++++++++++++++++++------
 3 files changed, 76 insertions(+), 6 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/MacportsLegacySupport.h b/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 7bb6420..0090fc2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/MacportsLegacySupport.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -153,6 +153,10 @@
</span> #define __MPLS_SDK_SUPPORT_UTIMENSAT__        (__MPLS_SDK_MAJOR < 101300)
 #define __MPLS_LIB_SUPPORT_UTIMENSAT__        (__MPLS_TARGET_OSVER < 101300)
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* mach_approximate_time */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_SDK_SUPPORT_APPROX_TIME__      (__MPLS_SDK_MAJOR < 101000)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_LIB_SUPPORT_APPROX_TIME__      (__MPLS_TARGET_OSVER < 101000)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* clock_gettime */
 #define __MPLS_SDK_SUPPORT_GETTIME__          (__MPLS_SDK_MAJOR < 101200)
 #define __MPLS_LIB_SUPPORT_GETTIME__          (__MPLS_TARGET_OSVER < 101200)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/mach/mach_time.h b/include/mach/mach_time.h
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..2691470
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/mach/mach_time.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,39 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2025 Frederick H. G. Wright II <fw@fwright.net>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef _MACPORTS_MACH_TIME_H_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _MACPORTS_MACH_TIME_H_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* MP support header */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "MacportsLegacySupport.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Do our SDK-related setup */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <_macports_extras/sdkversion.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Include the primary system mach/mach_time.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include_next <mach/mach_time.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_SDK_SUPPORT_APPROX_TIME__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__MP__BEGIN_DECLS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+uint64_t mach_approximate_time(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__MP__END_DECLS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MPLS_SDK_SUPPORT_APPROX_TIME__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* _MACPORTS_MACH_TIME_H_ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/time.c b/src/time.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 03e3142..712a9a9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/time.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/time.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -18,6 +18,25 @@
</span> /* MP support header */
 #include "MacportsLegacySupport.h"
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_LIB_SUPPORT_APPROX_TIME__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <mach/mach_time.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Here we provide a version of mach_approximate_time() which is just a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * wrapper around the non-approximate version.  Since the only purpose of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the "approximate" version is to sacrifice accuracy for greater speed,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * it's highly unlikely that we could come up with a reasonable way to do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * better than the fallback approach.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+uint64_t mach_approximate_time(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return mach_absolute_time();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __MPLS_LIB_SUPPORT_APPROX_TIME__ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #if __MPLS_LIB_SUPPORT_GETTIME__
 
 #include <errno.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -361,14 +380,18 @@ clock_gettime_nsec_np(clockid_t clk_id)
</span>     return (ut.seconds + st.seconds) * BILLION64
            + (ut.microseconds + st.microseconds) * 1000;
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  /* For now these are all the same, matching CLOCK_UPTIME_RAW */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  /* For now these are both the same, matching CLOCK_UPTIME_RAW */
</span>   case CLOCK_MONOTONIC_RAW:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  case CLOCK_MONOTONIC_RAW_APPROX:
</span>   case CLOCK_UPTIME_RAW:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  case CLOCK_UPTIME_RAW_APPROX:
</span>     mach_time = mach_absolute_time();
     break;
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+  /* For now these are both the same, matching CLOCK_UPTIME_RAW_APPROX */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  case CLOCK_MONOTONIC_RAW_APPROX:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  case CLOCK_UPTIME_RAW_APPROX:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    mach_time = mach_approximate_time();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>   default:
     errno = EINVAL;
     return 0;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -419,14 +442,18 @@ clock_gettime(clockid_t clk_id, struct timespec *ts)
</span>     }
     return ret;
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  /* For now these are all the same, matching CLOCK_UPTIME_RAW */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  /* For now these are both the same, matching CLOCK_UPTIME_RAW */
</span>   case CLOCK_MONOTONIC_RAW:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  case CLOCK_MONOTONIC_RAW_APPROX:
</span>   case CLOCK_UPTIME_RAW:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  case CLOCK_UPTIME_RAW_APPROX:
</span>     mach_time = mach_absolute_time();
     break;
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+  /* For now these are both the same, matching CLOCK_UPTIME_RAW_APPROX */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  case CLOCK_MONOTONIC_RAW_APPROX:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  case CLOCK_UPTIME_RAW_APPROX:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    mach_time = mach_approximate_time();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>   default:
     errno = EINVAL;
     return -1;
</pre><pre style='margin:0'>

</pre>