<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/addca2d1a11e7f5233ea3124a13b971987c5722b">https://github.com/macports/macports-ports/commit/addca2d1a11e7f5233ea3124a13b971987c5722b</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new addca2d1a11 umem: Fix build on Apple Silicon
</span>addca2d1a11 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit addca2d1a11e7f5233ea3124a13b971987c5722b
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Fri Jul 9 09:58:11 2021 -0500

<span style='display:block; white-space:pre;color:#404040;'>    umem: Fix build on Apple Silicon
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/61954
</span>---
 devel/umem/Portfile           |  20 +++++---
 devel/umem/files/atomic.patch | 116 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 130 insertions(+), 6 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/umem/Portfile b/devel/umem/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 669d565051f..61af30ac75b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/umem/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/umem/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,9 +1,12 @@
</span> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
 
 PortSystem 1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup               github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup            omniti-labs portableumem 1.0.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision                1
</span> 
 name                    umem
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version                 1.0.1
</span> description             userland slab allocator
 long_description        Libumem is a library used to detect memory management bugs in applications. \
 It is based on the Slab allocator concept. Functions in this library provide fast, scalable \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -19,8 +22,8 @@ categories              devel
</span> license                 CDDL-1
 platforms               darwin
 maintainers             nomaintainer
<span style='display:block; white-space:pre;background:#ffe0e0;'>-homepage                https://web.archive.org/web/20111205182722/http://developers.sun.com/solaris/articles/libumem_library.html
</span> master_sites            https://web.archive.org/web/20151129071107/https://labs.omniti.com/portableumem/releases/1.0/
<span style='display:block; white-space:pre;background:#e0ffe0;'>+distname                ${name}-${version}
</span> use_bzip2               yes
 
 checksums               sha1    cdb2a7d3c29df21fc2ca85bcff6d2367c89c5bbe \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -28,12 +31,17 @@ checksums               sha1    cdb2a7d3c29df21fc2ca85bcff6d2367c89c5bbe \
</span>                         sha256  d6148d236c6e49f0243c712b939f08d654498f3bea80b2319c74247220972cf2 \
                         size    305999
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles              implicit.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# bundled config.{guess,sub} are from 2007, update with copies from automake
</span> depends_build-append    port:automake
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles              atomic.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        implicit.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> post-patch {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    copy -force {*}[glob ${prefix}/share/automake-*/config.{guess,sub}] ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Use newer config.guess and config.sub to support Apple Silicon.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set automake_dirs [glob -directory ${prefix}/share automake-*]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set automake_dir [lindex [lsort -command vercmp $automake_dirs] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    copy -force ${automake_dir}/config.guess ${automake_dir}/config.sub \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ${worksrcpath}
</span> }
 
 configure.args          --mandir=${prefix}/share/man
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/umem/files/atomic.patch b/devel/umem/files/atomic.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9ca8a904f2e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/umem/files/atomic.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,116 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Improve compatibility with PPC (and ARM) platforms.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/omniti-labs/portableumem/commit/cbaa083431161b8f6cdac780d133f5cb6f7d4b30
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- misc.c.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ misc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -66,6 +66,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define   ERR_SIZE 8192           /* must be a power of 2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static mutex_t umem_error_lock = DEFAULTMUTEX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef NEED_64_LOCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++pthread_mutex_t umem_ppc_64inc_lock = PTHREAD_MUTEX_INITIALIZER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static char umem_error_buffer[ERR_SIZE] = "";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static uint_t umem_error_begin = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- sol_compat.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ sol_compat.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -59,7 +59,7 @@ static INLINE hrtime_t gethrtime(void) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static INLINE thread_t _thr_self(void) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return thr_self();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(_MACH_PORT_T)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__MACH__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define CPUHINT() (pthread_mach_thread_np(pthread_self()))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define thr_sigsetmask            pthread_sigmask
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -114,6 +114,12 @@ static INLINE int thr_create(void *stack_base,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ifdef _WIN32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  define ec_atomic_inc(a)                InterlockedIncrement(a)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  define ec_atomic_inc64(a)    InterlockedIncrement64(a)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# elif defined(__MACH__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  include <libkern/OSAtomic.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  define ec_atomic_inc(x) OSAtomicIncrement32Barrier((int32_t*)x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  if !defined(__ppc__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   define ec_atomic_inc64(x) OSAtomicIncrement64Barrier((int64_t*)x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # elif (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static INLINE uint_t ec_atomic_cas(uint_t *mem, uint_t with, uint_t cmp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -124,6 +130,40 @@ static INLINE uint_t ec_atomic_cas(uint_t *mem, uint_t with, uint_t cmp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         : "memory");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return prev;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static INLINE uint64_t ec_atomic_cas64(uint64_t *mem, uint64_t with,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  uint64_t cmp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  uint64_t prev;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  if defined(__x86_64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  __asm__ volatile ("lock; cmpxchgq %1, %2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    : "=a" (prev)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    : "r" (with), "m" (*(mem)), "0" (cmp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    : "memory");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  __asm__ volatile (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "pushl %%ebx;"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "mov 4+%1,%%ecx;"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "mov %1,%%ebx;"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "lock;"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "cmpxchg8b (%3);"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "popl %%ebx"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    : "=A" (prev)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    : "m" (with), "A" (cmp), "r" (mem)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    : "%ecx", "memory");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return prev;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static INLINE uint64_t ec_atomic_inc64(uint64_t *mem)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  register uint64_t last;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  do {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    last = *mem;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } while (ec_atomic_cas64(mem, last+1, last) != last);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return ++last;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  define ec_atomic_inc64 ec_atomic_inc64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  error no atomic solution for your platform
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ifndef ec_atomic_inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -139,7 +179,18 @@ static INLINE uint_t ec_atomic_inc(uint_t *mem)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ifndef ec_atomic_inc64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* yeah, it's not great.  It's only used to bump failed allocation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * counts, so it is not critical right now. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  define ec_atomic_inc64(a)  (*a)++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern pthread_mutex_t umem_ppc_64inc_lock;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static INLINE uint64_t ec_atomic_inc64(uint64_t *val)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  uint64_t rval;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  pthread_mutex_lock(&umem_ppc_64inc_lock);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  rval = *val + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  *val = rval;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  pthread_mutex_unlock(&umem_ppc_64inc_lock);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return rval;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  define ec_atomic_inc64 ec_atomic_inc64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  define NEED_64_LOCK 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- umem.c.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ umem.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -518,13 +518,10 @@ umem_log_header_t *umem_failure_log;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ umem_log_header_t *umem_slab_log;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern thread_t _thr_self(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__MACH__) || defined(__FreeBSD__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef CPUHINT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define CPUHINT()        ((int)(_thr_self()))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#ifndef CPUHINT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define   CPUHINT()               (_thr_self())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define   CPUHINT_MAX()           INT_MAX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span></pre><pre style='margin:0'>

</pre>