Github messages for voidlinux
 help / color / mirror / Atom feed
From: rmccask <rmccask@users.noreply.github.com>
To: ml@inbox.vuxu.org
Subject: Re: [PR PATCH] [Updated] mariadb: update to 10.1.45.
Date: Thu, 28 May 2020 00:45:57 +0200	[thread overview]
Message-ID: <20200527224557.-CMckdWGCKHNHKnFgEk8LVXgMSdGh9FciMDro4BPyjc@z> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-22348@inbox.vuxu.org>

[-- Attachment #1: Type: text/plain, Size: 325 bytes --]

There is an updated pull request by rmccask against master on the void-packages repository

https://github.com/rmccask/void-packages mariadb-10.1.45
https://github.com/void-linux/void-packages/pull/22348

mariadb: update to 10.1.45.


A patch file from https://github.com/void-linux/void-packages/pull/22348.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-mariadb-10.1.45-22348.patch --]
[-- Type: text/x-diff, Size: 35710 bytes --]

From 119b6f8dbb08834f792193101cb4511ee37ed8f8 Mon Sep 17 00:00:00 2001
From: Randy McCaskill <randy@mccaskill.us>
Date: Wed, 27 May 2020 02:22:24 -0400
Subject: [PATCH] mariadb: update to 10.1.45.

[ci skip]
---
 srcpkgs/mariadb/patches/c11_atomics.patch     | 128 ++++++++
 .../mariadb/patches/fix-pthread-detach.patch  |  34 --
 .../mariadb/patches/force-c11-atomics.patch   | 294 ------------------
 srcpkgs/mariadb/patches/libatomic.patch       | 103 ------
 .../patches/mips-connect-unaligned.patch      | 257 +++++++++++++++
 .../patches/mips-innobase-atomic.patch        |  20 ++
 srcpkgs/mariadb/patches/mips-machine.patch    |  23 ++
 srcpkgs/mariadb/patches/musl-ppc.patch        |  11 +-
 srcpkgs/mariadb/template                      |  10 +-
 9 files changed, 440 insertions(+), 440 deletions(-)
 create mode 100644 srcpkgs/mariadb/patches/c11_atomics.patch
 delete mode 100644 srcpkgs/mariadb/patches/fix-pthread-detach.patch
 delete mode 100644 srcpkgs/mariadb/patches/force-c11-atomics.patch
 delete mode 100644 srcpkgs/mariadb/patches/libatomic.patch
 create mode 100644 srcpkgs/mariadb/patches/mips-connect-unaligned.patch
 create mode 100644 srcpkgs/mariadb/patches/mips-innobase-atomic.patch
 create mode 100644 srcpkgs/mariadb/patches/mips-machine.patch

diff --git a/srcpkgs/mariadb/patches/c11_atomics.patch b/srcpkgs/mariadb/patches/c11_atomics.patch
new file mode 100644
index 00000000000..da84c12a0e1
--- /dev/null
+++ b/srcpkgs/mariadb/patches/c11_atomics.patch
@@ -0,0 +1,128 @@
+From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
+Date: Thu, 10 Aug 2017 20:40:29 +0200
+Subject: c11_atomics
+
+---
+ configure.cmake               | 23 +++++++++++++++++++++--
+ include/atomic/gcc_builtins.h | 15 +++++++++++++++
+ include/atomic/nolock.h       |  4 ++--
+ mysys/CMakeLists.txt          |  4 ++++
+ sql/CMakeLists.txt            |  4 ++++
+ 5 files changed, 46 insertions(+), 4 deletions(-)
+
+--- configure.cmake
++++ configure.cmake
+@@ -128,7 +128,7 @@ IF(UNIX)
+   ENDIF()
+   FIND_PACKAGE(Threads)
+ 
+-  SET(CMAKE_REQUIRED_LIBRARIES 
++  LIST(APPEND CMAKE_REQUIRED_LIBRARIES
+     ${LIBM} ${LIBNSL} ${LIBBIND} ${LIBCRYPT} ${LIBSOCKET} ${LIBDL} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${LIBEXECINFO})
+   # Need explicit pthread for gcc -fsanitize=address
+   IF(CMAKE_USE_PTHREADS_INIT AND CMAKE_C_FLAGS MATCHES "-fsanitize=")
+@@ -1038,7 +1038,26 @@ ELSEIF(NOT WITH_ATOMIC_OPS)
+     long long int *ptr= &var;
+     return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
+   }"
+-  HAVE_GCC_C11_ATOMICS)
++  HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
++  IF(HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
++    SET(HAVE_GCC_C11_ATOMICS True)
++  ELSE()
++    SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
++    LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
++    CHECK_CXX_SOURCE_COMPILES("
++    int main()
++    {
++      long long int var= 1;
++      long long int *ptr= &var;
++      return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
++    }"
++    HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
++    IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
++      SET(HAVE_GCC_C11_ATOMICS True)
++    ELSE()
++      SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
++    ENDIF()
++  ENDIF()
+ ELSE()
+   MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!")
+ ENDIF()
+--- include/atomic/gcc_builtins.h
++++ include/atomic/gcc_builtins.h
+@@ -16,6 +16,7 @@
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA */
+ 
++#if defined (HAVE_GCC_ATOMIC_BUILTINS)
+ #define make_atomic_add_body(S)                     \
+   v= __sync_fetch_and_add(a, v);
+ #define make_atomic_fas_body(S)                     \
+@@ -26,6 +27,20 @@
+   sav= __sync_val_compare_and_swap(a, cmp_val, set);\
+   if (!(ret= (sav == cmp_val))) *cmp= sav
+ 
++#elif defined(HAVE_GCC_C11_ATOMICS)
++
++#define make_atomic_add_body(S)                     \
++  v= __atomic_fetch_add(a, v, __ATOMIC_SEQ_CST)
++#define make_atomic_fas_body(S)                     \
++  v= __atomic_exchange_n(a, v, __ATOMIC_SEQ_CST)
++#define make_atomic_cas_body(S)                     \
++  int ## S sav;                                     \
++  ret= __atomic_compare_exchange_n(a, cmp, set,     \
++                                   0,               \
++                                   __ATOMIC_SEQ_CST,\
++                                   __ATOMIC_SEQ_CST);
++#endif
++
+ #ifdef MY_ATOMIC_MODE_DUMMY
+ #define make_atomic_load_body(S)   ret= *a
+ #define make_atomic_store_body(S)  *a= v
+--- include/atomic/nolock.h
++++ include/atomic/nolock.h
+@@ -17,7 +17,7 @@
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA */
+ 
+ #if defined(__i386__) || defined(_MSC_VER) || defined(__x86_64__)   \
+-    || defined(HAVE_GCC_ATOMIC_BUILTINS) \
++    || defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS) \
+     || defined(HAVE_SOLARIS_ATOMIC)
+ 
+ #  ifdef MY_ATOMIC_MODE_DUMMY
+@@ -41,7 +41,7 @@
+ #  elif __GNUC__
+ #    if defined(HAVE_SOLARIS_ATOMIC)
+ #      include "solaris.h"
+-#    elif defined(HAVE_GCC_ATOMIC_BUILTINS)
++#    elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS)
+ #      include "gcc_builtins.h"
+ #    elif defined(__i386__) || defined(__x86_64__)
+ #      include "x86-gcc.h"
+--- mysys/CMakeLists.txt
++++ mysys/CMakeLists.txt
+@@ -79,6 +79,10 @@ IF(HAVE_BFD_H)
+   TARGET_LINK_LIBRARIES(mysys bfd)  
+ ENDIF(HAVE_BFD_H)
+ 
++IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
++  TARGET_LINK_LIBRARIES(mysys atomic)
++ENDIF()
++
+ IF (WIN32)
+   TARGET_LINK_LIBRARIES(mysys IPHLPAPI)  
+ ENDIF(WIN32)
+--- sql/CMakeLists.txt
++++ sql/CMakeLists.txt
+@@ -165,6 +165,10 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATI
+   ${SSL_LIBRARIES}
+   ${LIBSYSTEMD})
+ 
++IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
++  TARGET_LINK_LIBRARIES(sql atomic)
++ENDIF()
++
+ IF(WIN32)
+   SET(MYSQLD_SOURCE main.cc nt_servc.cc message.rc)
+   TARGET_LINK_LIBRARIES(sql psapi)
diff --git a/srcpkgs/mariadb/patches/fix-pthread-detach.patch b/srcpkgs/mariadb/patches/fix-pthread-detach.patch
deleted file mode 100644
index a53c05b1320..00000000000
--- a/srcpkgs/mariadb/patches/fix-pthread-detach.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c45b4a774b6d1404a080a1c1759f780fa78f223b Mon Sep 17 00:00:00 2001
-From: Sergey Vojtovich <svoj@mariadb.org>
-Date: Fri, 21 Sep 2018 16:04:16 +0400
-Subject: [PATCH] MDEV-17200 - pthread_detach called for already detached
- threads
-
-pthread_detach_this_thread() was intended to be defined to something
-meaningful only on some ancient unixes, which don't have
-pthread_attr_setdetachstate() defined. Otherwise, on normal unixes,
-threads are created detached in the first place.
-
-This was broken in 0f01bf267680244ec488adaf65a42838756ed48e so that
-we started calling pthread_detach() for already detached threads.
-Intention was to detach aria checkpoint thread.
-
-However in 87007dc2f71634cc460271eb277ad851ec69c04b aria service threads
-were made joinable with appropriate handling, which makes breaking
-revision unneccessary.
-
-Revert remnants of 0f01bf267680244ec488adaf65a42838756ed48e, so that
-pthread_detach_this_thread() is meaningful only on some ancient unixes
-again.
-
---- include/my_pthread.h
-+++ include/my_pthread.h
-@@ -184,7 +184,7 @@ int pthread_cancel(pthread_t thread);
- #define pthread_key(T,V) pthread_key_t V
- #define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V))
- #define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V))
--#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); }
-+#define pthread_detach_this_thread()
- #define pthread_handler_t EXTERNC void *
- typedef void *(* pthread_handler)(void *);
- 
diff --git a/srcpkgs/mariadb/patches/force-c11-atomics.patch b/srcpkgs/mariadb/patches/force-c11-atomics.patch
deleted file mode 100644
index 9546798bf97..00000000000
--- a/srcpkgs/mariadb/patches/force-c11-atomics.patch
+++ /dev/null
@@ -1,294 +0,0 @@
---- include/my_atomic.h
-+++ include/my_atomic.h
-@@ -104,217 +104,6 @@
-   but can be added, if necessary.
- */
- 
--#define intptr         void *
--/**
--  Currently we don't support 8-bit and 16-bit operations.
--  It can be added later if needed.
--*/
--#undef MY_ATOMIC_HAS_8_16
--
--/*
-- * Attempt to do atomic ops without locks
-- */
--#include "atomic/nolock.h"
--
--#ifndef make_atomic_cas_body
--/* nolock.h was not able to generate even a CAS function, fall back */
--#error atomic ops for this platform are not implemented
--#endif
--
--/* define missing functions by using the already generated ones */
--#ifndef make_atomic_add_body
--#define make_atomic_add_body(S)                                 \
--  int ## S tmp=*a;                                              \
--  while (!my_atomic_cas ## S(a, &tmp, tmp+v)) ;                 \
--  v=tmp;
--#endif
--#ifndef make_atomic_fas_body
--#define make_atomic_fas_body(S)                                 \
--  int ## S tmp=*a;                                              \
--  while (!my_atomic_cas ## S(a, &tmp, v)) ;                     \
--  v=tmp;
--#endif
--#ifndef make_atomic_load_body
--#define make_atomic_load_body(S)                                \
--  ret= 0; /* avoid compiler warning */                          \
--  (void)(my_atomic_cas ## S(a, &ret, ret));
--#endif
--#ifndef make_atomic_store_body
--#define make_atomic_store_body(S)                               \
--  (void)(my_atomic_fas ## S (a, v));
--#endif
--
--/*
--  transparent_union doesn't work in g++
--  Bug ?
--
--  Darwin's gcc doesn't want to put pointers in a transparent_union
--  when built with -arch ppc64. Complains:
--  warning: 'transparent_union' attribute ignored
--*/
--#if defined(__GNUC__) && !defined(__cplusplus) && \
--      ! (defined(__APPLE__) && (defined(_ARCH_PPC64) ||defined (_ARCH_PPC)))
--/*
--  we want to be able to use my_atomic_xxx functions with
--  both signed and unsigned integers. But gcc will issue a warning
--  "passing arg N of `my_atomic_XXX' as [un]signed due to prototype"
--  if the signedness of the argument doesn't match the prototype, or
--  "pointer targets in passing argument N of my_atomic_XXX differ in signedness"
--  if int* is used where uint* is expected (or vice versa).
--  Let's shut these warnings up
--*/
--#define make_transparent_unions(S)                              \
--        typedef union {                                         \
--          int  ## S  i;                                         \
--          uint ## S  u;                                         \
--        } U_ ## S   __attribute__ ((transparent_union));        \
--        typedef union {                                         \
--          int  ## S volatile *i;                                \
--          uint ## S volatile *u;                                \
--        } Uv_ ## S   __attribute__ ((transparent_union));
--#define uintptr intptr
--make_transparent_unions(8)
--make_transparent_unions(16)
--make_transparent_unions(32)
--make_transparent_unions(64)
--make_transparent_unions(ptr)
--#undef uintptr
--#undef make_transparent_unions
--#define a       U_a.i
--#define cmp     U_cmp.i
--#define v       U_v.i
--#define set     U_set.i
--#else
--#define U_8    int8
--#define U_16   int16
--#define U_32   int32
--#define U_64   int64
--#define U_ptr  intptr
--#define Uv_8   int8
--#define Uv_16  int16
--#define Uv_32  int32
--#define Uv_64  int64
--#define Uv_ptr intptr
--#define U_a    volatile *a
--#define U_cmp  *cmp
--#define U_v    v
--#define U_set  set
--#endif /* __GCC__ transparent_union magic */
--
--#define make_atomic_cas(S)                                      \
--static inline int my_atomic_cas ## S(Uv_ ## S U_a,              \
--                            Uv_ ## S U_cmp, U_ ## S U_set)      \
--{                                                               \
--  int8 ret;                                                     \
--  make_atomic_cas_body(S);                                      \
--  return ret;                                                   \
--}
--
--#define make_atomic_add(S)                                      \
--static inline int ## S my_atomic_add ## S(                      \
--                        Uv_ ## S U_a, U_ ## S U_v)              \
--{                                                               \
--  make_atomic_add_body(S);                                      \
--  return v;                                                     \
--}
--
--#define make_atomic_fas(S)                                      \
--static inline int ## S my_atomic_fas ## S(                      \
--                         Uv_ ## S U_a, U_ ## S U_v)             \
--{                                                               \
--  make_atomic_fas_body(S);                                      \
--  return v;                                                     \
--}
--
--#define make_atomic_load(S)                                     \
--static inline int ## S my_atomic_load ## S(Uv_ ## S U_a)        \
--{                                                               \
--  int ## S ret;                                                 \
--  make_atomic_load_body(S);                                     \
--  return ret;                                                   \
--}
--
--#define make_atomic_store(S)                                    \
--static inline void my_atomic_store ## S(                        \
--                     Uv_ ## S U_a, U_ ## S U_v)                 \
--{                                                               \
--  make_atomic_store_body(S);                                    \
--}
--
--#ifdef MY_ATOMIC_HAS_8_16
--make_atomic_cas(8)
--make_atomic_cas(16)
--#endif
--make_atomic_cas(32)
--make_atomic_cas(64)
--make_atomic_cas(ptr)
--
--#ifdef MY_ATOMIC_HAS_8_16
--make_atomic_add(8)
--make_atomic_add(16)
--#endif
--make_atomic_add(32)
--make_atomic_add(64)
--
--#ifdef MY_ATOMIC_HAS_8_16
--make_atomic_load(8)
--make_atomic_load(16)
--#endif
--make_atomic_load(32)
--make_atomic_load(64)
--make_atomic_load(ptr)
--
--#ifdef MY_ATOMIC_HAS_8_16
--make_atomic_fas(8)
--make_atomic_fas(16)
--#endif
--make_atomic_fas(32)
--make_atomic_fas(64)
--make_atomic_fas(ptr)
--
--#ifdef MY_ATOMIC_HAS_8_16
--make_atomic_store(8)
--make_atomic_store(16)
--#endif
--make_atomic_store(32)
--make_atomic_store(64)
--make_atomic_store(ptr)
--
--#ifdef _atomic_h_cleanup_
--#include _atomic_h_cleanup_
--#undef _atomic_h_cleanup_
--#endif
--
--#undef U_8
--#undef U_16
--#undef U_32
--#undef U_64
--#undef U_ptr
--#undef Uv_8
--#undef Uv_16
--#undef Uv_32
--#undef Uv_64
--#undef Uv_ptr
--#undef a
--#undef cmp
--#undef v
--#undef set
--#undef U_a
--#undef U_cmp
--#undef U_v
--#undef U_set
--#undef make_atomic_add
--#undef make_atomic_cas
--#undef make_atomic_load
--#undef make_atomic_store
--#undef make_atomic_fas
--#undef make_atomic_add_body
--#undef make_atomic_cas_body
--#undef make_atomic_load_body
--#undef make_atomic_store_body
--#undef make_atomic_fas_body
--#undef intptr
--
- /*
-   the macro below defines (as an expression) the code that
-   will be run in spin-loops. Intel manuals recummend to have PAUSE there.
-@@ -328,7 +117,8 @@ make_atomic_store(ptr)
- #define MY_ATOMIC_NOT_1CPU 1
- extern int my_atomic_initialize();
- 
--#ifdef __ATOMIC_SEQ_CST
-+#define MY_ATOMIC_MODE "gcc-atomics-smp"
-+
- #define MY_MEMORY_ORDER_RELAXED __ATOMIC_RELAXED
- #define MY_MEMORY_ORDER_CONSUME __ATOMIC_CONSUME
- #define MY_MEMORY_ORDER_ACQUIRE __ATOMIC_ACQUIRE
-@@ -364,43 +154,27 @@ extern int my_atomic_initialize();
-   __atomic_compare_exchange_n((P), (E), (D), false, (S), (F))
- #define my_atomic_casptr_strong_explicit(P, E, D, S, F) \
-   __atomic_compare_exchange_n((P), (E), (D), false, (S), (F))
--#else
--#define MY_MEMORY_ORDER_RELAXED
--#define MY_MEMORY_ORDER_CONSUME
--#define MY_MEMORY_ORDER_ACQUIRE
--#define MY_MEMORY_ORDER_RELEASE
--#define MY_MEMORY_ORDER_ACQ_REL
--#define MY_MEMORY_ORDER_SEQ_CST
--
--#define my_atomic_store32_explicit(P, D, O) my_atomic_store32((P), (D))
--#define my_atomic_store64_explicit(P, D, O) my_atomic_store64((P), (D))
--#define my_atomic_storeptr_explicit(P, D, O) my_atomic_storeptr((P), (D))
--
--#define my_atomic_load32_explicit(P, O) my_atomic_load32((P))
--#define my_atomic_load64_explicit(P, O) my_atomic_load64((P))
--#define my_atomic_loadptr_explicit(P, O) my_atomic_loadptr((P))
--
--#define my_atomic_fas32_explicit(P, D, O) my_atomic_fas32((P), (D))
--#define my_atomic_fas64_explicit(P, D, O) my_atomic_fas64((P), (D))
--#define my_atomic_fasptr_explicit(P, D, O) my_atomic_fasptr((P), (D))
--
--#define my_atomic_add32_explicit(P, A, O) my_atomic_add32((P), (A))
--#define my_atomic_add64_explicit(P, A, O) my_atomic_add64((P), (A))
--#define my_atomic_addptr_explicit(P, A, O) my_atomic_addptr((P), (A))
- 
--#define my_atomic_cas32_weak_explicit(P, E, D, S, F) \
--  my_atomic_cas32((P), (E), (D))
--#define my_atomic_cas64_weak_explicit(P, E, D, S, F) \
--  my_atomic_cas64((P), (E), (D))
--#define my_atomic_casptr_weak_explicit(P, E, D, S, F) \
--  my_atomic_casptr((P), (E), (D))
-+#define my_atomic_store32(P, D) __atomic_store_n((P), (D), __ATOMIC_SEQ_CST)
-+#define my_atomic_store64(P, D) __atomic_store_n((P), (D), __ATOMIC_SEQ_CST)
-+#define my_atomic_storeptr(P, D) __atomic_store_n((P), (D), __ATOMIC_SEQ_CST)
- 
--#define my_atomic_cas32_strong_explicit(P, E, D, S, F) \
--  my_atomic_cas32((P), (E), (D))
--#define my_atomic_cas64_strong_explicit(P, E, D, S, F) \
--  my_atomic_cas64((P), (E), (D))
--#define my_atomic_casptr_strong_explicit(P, E, D, S, F) \
--  my_atomic_casptr((P), (E), (D))
--#endif
-+#define my_atomic_load32(P) __atomic_load_n((P), __ATOMIC_SEQ_CST)
-+#define my_atomic_load64(P) __atomic_load_n((P), __ATOMIC_SEQ_CST)
-+#define my_atomic_loadptr(P) __atomic_load_n((P), __ATOMIC_SEQ_CST)
-+
-+#define my_atomic_fas32(P, D) __atomic_exchange_n((P), (D), __ATOMIC_SEQ_CST)
-+#define my_atomic_fas64(P, D) __atomic_exchange_n((P), (D), __ATOMIC_SEQ_CST)
-+#define my_atomic_fasptr(P, D) __atomic_exchange_n((P), (D), __ATOMIC_SEQ_CST)
-+
-+#define my_atomic_add32(P, A) __atomic_fetch_add((P), (A), __ATOMIC_SEQ_CST)
-+#define my_atomic_add64(P, A) __atomic_fetch_add((P), (A), __ATOMIC_SEQ_CST)
-+
-+#define my_atomic_cas32(P, E, D) \
-+  __atomic_compare_exchange_n((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
-+#define my_atomic_cas64(P, E, D) \
-+  __atomic_compare_exchange_n((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
-+#define my_atomic_casptr(P, E, D) \
-+  __atomic_compare_exchange_n((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
- 
- #endif /* MY_ATOMIC_INCLUDED */
diff --git a/srcpkgs/mariadb/patches/libatomic.patch b/srcpkgs/mariadb/patches/libatomic.patch
deleted file mode 100644
index 0e8e872d9c2..00000000000
--- a/srcpkgs/mariadb/patches/libatomic.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-Source: Debian, q66
-
-This ensures arches that need libatomic properly get it where necessary.
-It also removes the sync builtin checks that are not necessary when
-using C11 atomics (like we always are because we're on a modern gcc)
-that break build on e.g. ppc32 and mips.
-
---- configure.cmake
-+++ configure.cmake
-@@ -992,35 +992,19 @@ SET(SIGNAL_WITH_VIO_CLOSE 1)
- 
- MARK_AS_ADVANCED(NO_ALARM)
- 
--
--IF(WITH_ATOMIC_OPS STREQUAL "up")
--  SET(MY_ATOMIC_MODE_DUMMY 1 CACHE BOOL "Assume single-CPU mode, no concurrency")
--ELSEIF(WITH_ATOMIC_OPS STREQUAL "smp")
--ELSEIF(NOT WITH_ATOMIC_OPS)
--  CHECK_CXX_SOURCE_COMPILES("
--  int main()
--  {
--    int foo= -10; int bar= 10;
--    long long int foo64= -10; long long int bar64= 10;
--    if (!__sync_fetch_and_add(&foo, bar) || foo)
--      return -1;
--    bar= __sync_lock_test_and_set(&foo, bar);
--    if (bar || foo != 10)
--      return -1;
--    bar= __sync_val_compare_and_swap(&bar, foo, 15);
--    if (bar)
--      return -1;
--    if (!__sync_fetch_and_add(&foo64, bar64) || foo64)
--      return -1;
--    bar64= __sync_lock_test_and_set(&foo64, bar64);
--    if (bar64 || foo64 != 10)
--      return -1;
--    bar64= __sync_val_compare_and_swap(&bar64, foo, 15);
--    if (bar64)
--      return -1;
--    return 0;
--  }"
--  HAVE_GCC_ATOMIC_BUILTINS)
-+CHECK_CXX_SOURCE_COMPILES("
-+int main()
-+{
-+  long long int var= 1;
-+  long long int *ptr= &var;
-+  return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
-+}"
-+HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
-+IF (HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
-+  SET(HAVE_GCC_C11_ATOMICS True)
-+ELSE()
-+  SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-+  LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
-   CHECK_CXX_SOURCE_COMPILES("
-   int main()
-   {
-@@ -1028,14 +1012,13 @@ ELSEIF(NOT WITH_ATOMIC_OPS)
-     long long int *ptr= &var;
-     return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
-   }"
--  HAVE_GCC_C11_ATOMICS)
--ELSE()
--  MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!")
-+  HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
-+  IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
-+    SET(HAVE_GCC_C11_ATOMICS True)
-+  ENDIF()
-+  SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
- ENDIF()
- 
--SET(WITH_ATOMIC_OPS "${WITH_ATOMIC_OPS}" CACHE STRING "Implement atomic operations using atomic CPU instructions for multi-processor (smp) or uniprocessor (up) configuration. By default gcc built-in sync functions are used, if available and 'smp' configuration otherwise.")
--MARK_AS_ADVANCED(WITH_ATOMIC_OPS MY_ATOMIC_MODE_DUMMY)
--
- IF(WITH_VALGRIND)
-   SET(HAVE_valgrind 1)
- ENDIF()
---- mysys/CMakeLists.txt
-+++ mysys/CMakeLists.txt
-@@ -74,6 +74,10 @@ TARGET_LINK_LIBRARIES(mysys dbug strings mysys_ssl ${ZLIB_LIBRARY}
-  ${LIBNSL} ${LIBM} ${LIBRT} ${LIBDL} ${LIBSOCKET} ${LIBEXECINFO})
- DTRACE_INSTRUMENT(mysys)
- 
-+IF (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
-+  TARGET_LINK_LIBRARIES(mysys atomic)
-+ENDIF()
-+
- IF(HAVE_BFD_H)
-   TARGET_LINK_LIBRARIES(mysys bfd)  
- ENDIF(HAVE_BFD_H)
---- sql/CMakeLists.txt
-+++ sql/CMakeLists.txt
-@@ -172,6 +172,9 @@ ELSE()
-   SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL})
- ENDIF()
- 
-+IF (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
-+  TARGET_LINK_LIBRARIES(sql atomic)
-+ENDIF()
- 
- IF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS)
- 
diff --git a/srcpkgs/mariadb/patches/mips-connect-unaligned.patch b/srcpkgs/mariadb/patches/mips-connect-unaligned.patch
new file mode 100644
index 00000000000..ae2f6e03d2e
--- /dev/null
+++ b/srcpkgs/mariadb/patches/mips-connect-unaligned.patch
@@ -0,0 +1,257 @@
+From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
+Date: Thu, 10 Aug 2017 20:40:28 +0200
+Subject: mips-connect-unaligned
+
+---
+ storage/connect/valblk.cpp | 41 ++++++++++++++++++-------------------
+ storage/connect/valblk.h   | 51 +++++++++++++++++++++++++++++-----------------
+ 2 files changed, 52 insertions(+), 40 deletions(-)
+
+--- storage/connect/valblk.cpp
++++ storage/connect/valblk.cpp
+@@ -268,14 +268,14 @@ bool TYPBLK<TYPE>::Init(PGLOBAL g, bool
+ template <class TYPE>
+ char *TYPBLK<TYPE>::GetCharString(char *p, int n)
+   {
+-  sprintf(p, Fmt, Typp[n]);
++  sprintf(p, Fmt, UnalignedRead(n));
+   return p;
+   } // end of GetCharString
+ 
+ template <>
+ char *TYPBLK<double>::GetCharString(char *p, int n)
+   {
+-  sprintf(p, Fmt, Prec, Typp[n]);
++  sprintf(p, Fmt, Prec, UnalignedRead(n));
+   return p;
+   } // end of GetCharString
+ 
+@@ -291,7 +291,7 @@ void TYPBLK<TYPE>::SetValue(PVAL valp, i
+   ChkTyp(valp);
+ 
+   if (!(b = valp->IsNull()))
+-    Typp[n] = GetTypedValue(valp);
++    UnalignedWrite(n, GetTypedValue(valp));
+   else
+     Reset(n);
+ 
+@@ -353,9 +353,9 @@ void TYPBLK<TYPE>::SetValue(PCSZ p, int
+   ulonglong val = CharToNumber(p, strlen(p), maxval, Unsigned, &minus); 
+     
+   if (minus && val < maxval)
+-    Typp[n] = (TYPE)(-(signed)val);
++    UnalignedWrite(n, (TYPE)(-(signed)val));
+   else
+-    Typp[n] = (TYPE)val;
++    UnalignedWrite(n, (TYPE)val);
+ 
+   SetNull(n, false);
+   } // end of SetValue
+@@ -398,7 +398,7 @@ void TYPBLK<double>::SetValue(PCSZ p, in
+ 		throw Type;
+ 	} // endif Check
+ 
+-  Typp[n] = atof(p);
++  UnalignedWrite(n, atof(p));
+   SetNull(n, false);
+   } // end of SetValue
+ 
+@@ -430,7 +430,7 @@ void TYPBLK<TYPE>::SetValue(PVBLK pv, in
+   ChkTyp(pv);
+ 
+   if (!(b = pv->IsNull(n2) && Nullable))
+-    Typp[n1] = GetTypedValue(pv, n2);
++    UnalignedWrite(n1, GetTypedValue(pv, n2));
+   else
+     Reset(n1);
+ 
+@@ -481,10 +481,10 @@ void TYPBLK<TYPE>::SetMin(PVAL valp, int
+   {
+   CheckParms(valp, n)
+   TYPE  tval = GetTypedValue(valp);
+-  TYPE& tmin = Typp[n];
++  TYPE  tmin = UnalignedRead(n);
+ 
+   if (tval < tmin)
+-    tmin = tval;
++    UnalignedWrite(n, tval);
+ 
+   } // end of SetMin
+ 
+@@ -496,10 +496,10 @@ void TYPBLK<TYPE>::SetMax(PVAL valp, int
+   {
+   CheckParms(valp, n)
+   TYPE  tval = GetTypedValue(valp);
+-  TYPE& tmin = Typp[n];
++  TYPE  tmin = UnalignedRead(n);
+ 
+   if (tval > tmin)
+-    tmin = tval;
++    UnalignedWrite(n, tval);
+ 
+   } // end of SetMax
+ 
+@@ -513,8 +513,7 @@ void TYPBLK<TYPE>::SetValues(PVBLK pv, i
+   CheckType(pv)
+   TYPE *lp = ((TYPBLK*)pv)->Typp;
+ 
+-  for (int i = k; i < n; i++)          // TODO
+-    Typp[i] = lp[i];
++  memcpy(Typp + k, lp + k, sizeof(TYPE) * n);
+ 
+   } // end of SetValues
+ #endif // 0
+@@ -525,7 +524,7 @@ void TYPBLK<TYPE>::SetValues(PVBLK pv, i
+ template <class TYPE>
+ void TYPBLK<TYPE>::Move(int i, int j)
+   {
+-  Typp[j] = Typp[i];
++  UnalignedWrite(j, UnalignedRead(i));
+   MoveNull(i, j);
+   } // end of Move
+ 
+@@ -539,7 +538,7 @@ int TYPBLK<TYPE>::CompVal(PVAL vp, int n
+   ChkIndx(n);
+   ChkTyp(vp);
+ #endif   // _DEBUG
+-  TYPE mlv = Typp[n];
++  TYPE mlv = UnalignedRead(n);
+   TYPE vlv = GetTypedValue(vp);
+ 
+   return (vlv > mlv) ? 1 : (vlv < mlv) ? (-1) : 0;
+@@ -551,8 +550,8 @@ int TYPBLK<TYPE>::CompVal(PVAL vp, int n
+ template <class TYPE>
+ int TYPBLK<TYPE>::CompVal(int i1, int i2)
+   {
+-  TYPE lv1 = Typp[i1];
+-  TYPE lv2 = Typp[i2];
++  TYPE lv1 = UnalignedRead(i1);
++  TYPE lv2 = UnalignedRead(i2);
+ 
+   return (lv1 > lv2) ? 1 : (lv1 < lv2) ? (-1) : 0;
+   } // end of CompVal
+@@ -589,7 +588,7 @@ int TYPBLK<TYPE>::Find(PVAL vp)
+   TYPE n = GetTypedValue(vp);
+ 
+   for (i = 0; i < Nval; i++)
+-    if (n == Typp[i])
++    if (n == UnalignedRead(i))
+       break;
+ 
+   return (i < Nval) ? i : (-1);
+@@ -605,7 +604,7 @@ int TYPBLK<TYPE>::GetMaxLength(void)
+   int i, n, m;
+ 
+   for (i = n = 0; i < Nval; i++) {
+-    m = sprintf(buf, Fmt, Typp[i]);
++    m = sprintf(buf, Fmt, UnalignedRead(i));
+     n = MY_MAX(n, m);
+     } // endfor i
+ 
+@@ -1335,7 +1334,7 @@ char *DATBLK::GetCharString(char *p, int
+   char *vp;
+ 
+   if (Dvalp) {
+-    Dvalp->SetValue(Typp[n]);
++    Dvalp->SetValue(UnalignedRead(n));
+     vp = Dvalp->GetCharString(p);
+   } else
+     vp = TYPBLK<int>::GetCharString(p, n);
+@@ -1351,7 +1350,7 @@ void DATBLK::SetValue(PCSZ p, int n)
+   if (Dvalp) {
+     // Decode the string according to format
+     Dvalp->SetValue_psz(p);
+-    Typp[n] = Dvalp->GetIntValue();
++    UnalignedWrite(n, Dvalp->GetIntValue());
+   } else
+     TYPBLK<int>::SetValue(p, n);
+ 
+--- storage/connect/valblk.h
++++ storage/connect/valblk.h
+@@ -139,6 +139,7 @@ class VALBLK : public BLOCK {
+   int     Prec;             // Precision of float values
+   }; // end of class VALBLK
+ 
++
+ /***********************************************************************/
+ /*  Class TYPBLK: represents a block of typed values.                  */
+ /***********************************************************************/
+@@ -151,40 +152,41 @@ class TYPBLK : public VALBLK {
+   // Implementation
+   virtual bool   Init(PGLOBAL g, bool check);
+   virtual int    GetVlen(void) {return sizeof(TYPE);}
+-  virtual char   GetTinyValue(int n) {return (char)Typp[n];}
+-  virtual uchar  GetUTinyValue(int n) {return (uchar)Typp[n];}
+-  virtual short  GetShortValue(int n) {return (short)Typp[n];}
+-  virtual ushort GetUShortValue(int n) {return (ushort)Typp[n];}
+-  virtual int    GetIntValue(int n) {return (int)Typp[n];}
+-  virtual uint   GetUIntValue(int n) {return (uint)Typp[n];}
+-  virtual longlong GetBigintValue(int n) {return (longlong)Typp[n];}
+-  virtual ulonglong GetUBigintValue(int n) {return (ulonglong)Typp[n];}
+-  virtual double GetFloatValue(int n) {return (double)Typp[n];}
++
++  virtual char   GetTinyValue(int n) {return (char)UnalignedRead(n);}
++  virtual uchar  GetUTinyValue(int n) {return (uchar)UnalignedRead(n);}
++  virtual short  GetShortValue(int n) {return (short)UnalignedRead(n);}
++  virtual ushort GetUShortValue(int n) {return (ushort)UnalignedRead(n);}
++  virtual int    GetIntValue(int n) {return (int)UnalignedRead(n);}
++  virtual uint   GetUIntValue(int n) {return (uint)UnalignedRead(n);}
++  virtual longlong GetBigintValue(int n) {return (longlong)UnalignedRead(n);}
++  virtual ulonglong GetUBigintValue(int n) {return (ulonglong)UnalignedRead(n);}
++  virtual double GetFloatValue(int n) {return (double)UnalignedRead(n);}
+   virtual char  *GetCharString(char *p, int n);
+-  virtual void   Reset(int n) {Typp[n] = 0;}
++  virtual void   Reset(int n) {UnalignedWrite(n, 0);}
+ 
+   // Methods
+   using VALBLK::SetValue;
+   virtual void   SetValue(PCSZ sp, int n);
+   virtual void   SetValue(const char *sp, uint len, int n);
+   virtual void   SetValue(short sval, int n)
+-                  {Typp[n] = (TYPE)sval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)sval); SetNull(n, false);}
+   virtual void   SetValue(ushort sval, int n)
+-                  {Typp[n] = (TYPE)sval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)sval); SetNull(n, false);}
+   virtual void   SetValue(int lval, int n)
+-                  {Typp[n] = (TYPE)lval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
+   virtual void   SetValue(uint lval, int n)
+-                  {Typp[n] = (TYPE)lval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
+   virtual void   SetValue(longlong lval, int n)
+-                  {Typp[n] = (TYPE)lval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
+   virtual void   SetValue(ulonglong lval, int n)
+-                  {Typp[n] = (TYPE)lval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
+   virtual void   SetValue(double fval, int n)
+-                  {Typp[n] = (TYPE)fval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)fval); SetNull(n, false);}
+   virtual void   SetValue(char cval, int n)
+-                  {Typp[n] = (TYPE)cval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)cval); SetNull(n, false);}
+   virtual void   SetValue(uchar cval, int n)
+-                  {Typp[n] = (TYPE)cval; SetNull(n, false);}
++                  {UnalignedWrite(n, (TYPE)cval); SetNull(n, false);}
+   virtual void   SetValue(PVAL valp, int n);
+   virtual void   SetValue(PVBLK pv, int n1, int n2);
+   virtual void   SetMin(PVAL valp, int n);
+@@ -206,6 +208,17 @@ class TYPBLK : public VALBLK {
+   // Members
+   TYPE* const &Typp;
+   const char  *Fmt;
++
++  // Unaligned access
++  TYPE UnalignedRead(int n) const {
++    TYPE result;
++    memcpy(&result, Typp + n, sizeof(TYPE));
++    return result;
++  }
++
++  void UnalignedWrite(int n, TYPE value) {
++    memcpy(Typp + n, &value, sizeof(TYPE));
++  }
+   }; // end of class TYPBLK
+ 
+ /***********************************************************************/
diff --git a/srcpkgs/mariadb/patches/mips-innobase-atomic.patch b/srcpkgs/mariadb/patches/mips-innobase-atomic.patch
new file mode 100644
index 00000000000..195fe41a422
--- /dev/null
+++ b/srcpkgs/mariadb/patches/mips-innobase-atomic.patch
@@ -0,0 +1,20 @@
+From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
+Date: Thu, 10 Aug 2017 20:40:29 +0200
+Subject: mips-innobase-atomic
+
+---
+ storage/innobase/include/os0sync.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git storage/innobase/include/os0sync.h storage/innobase/include/os0sync.h
+index bb225c5..6520237 100644
+--- storage/innobase/include/os0sync.h
++++ storage/innobase/include/os0sync.h
+@@ -37,6 +37,7 @@ Created 9/6/1995 Heikki Tuuri
+ 
+ #include "univ.i"
+ #include "ut0lst.h"
++#include "sync0types.h"
+ 
+ /** CPU cache line size */
+ #ifdef __powerpc__
diff --git a/srcpkgs/mariadb/patches/mips-machine.patch b/srcpkgs/mariadb/patches/mips-machine.patch
new file mode 100644
index 00000000000..3dbbbaaa538
--- /dev/null
+++ b/srcpkgs/mariadb/patches/mips-machine.patch
@@ -0,0 +1,23 @@
+From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
+Date: Thu, 10 Aug 2017 20:40:29 +0200
+Subject: mips-machine
+
+---
+ cmake/package_name.cmake | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git cmake/package_name.cmake cmake/package_name.cmake
+index 4930a6b..7681f78 100644
+--- cmake/package_name.cmake
++++ cmake/package_name.cmake
+@@ -34,6 +34,10 @@ IF(NOT VERSION)
+       SET(DEFAULT_MACHINE "mips")
+     ENDIF()
+ 
++    IF(NOT 64BIT AND CMAKE_SYSTEM_PROCESSOR MATCHES "^mips64")
++      SET(DEFAULT_MACHINE "mips")
++    ENDIF()
++
+     IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
+       SET(NEED_DASH_BETWEEN_PLATFORM_AND_MACHINE 0)
+       SET(DEFAULT_PLATFORM "win")
diff --git a/srcpkgs/mariadb/patches/musl-ppc.patch b/srcpkgs/mariadb/patches/musl-ppc.patch
index 16cbac71a94..57c7f4bf15b 100644
--- a/srcpkgs/mariadb/patches/musl-ppc.patch
+++ b/srcpkgs/mariadb/patches/musl-ppc.patch
@@ -15,12 +15,11 @@ builtin for this in gcc for ages, so just use that instead.
  # endif
 --- storage/xtradb/include/ut0ut.h
 +++ storage/xtradb/include/ut0ut.h
-@@ -86,8 +86,7 @@ struct ut_when_dtor {
-    independent way by using YieldProcessor. */
- #  define UT_RELAX_CPU() YieldProcessor()
- # elif defined(__powerpc__)
--#include <sys/platform/ppc.h>
--#  define UT_RELAX_CPU() __ppc_get_timebase()
+@@ -86,6 +86,8 @@
+ # elif defined(__powerpc__) && defined __GLIBC__
+ #include <sys/platform/ppc.h>
+ #  define UT_RELAX_CPU() __ppc_get_timebase()
++# elif defined(__powerpc__)
 +#  define UT_RELAX_CPU() __builtin_ppc_get_timebase()
  # else
  #  define UT_RELAX_CPU() ((void)0) /* avoid warning for an empty statement */
diff --git a/srcpkgs/mariadb/template b/srcpkgs/mariadb/template
index 88611438a99..8ba4c5e8642 100644
--- a/srcpkgs/mariadb/template
+++ b/srcpkgs/mariadb/template
@@ -1,7 +1,7 @@
 # Template file for 'mariadb'
 pkgname=mariadb
-version=10.1.30
-revision=8
+version=10.1.45
+revision=1
 build_style=cmake
 configure_args="-DMYSQL_DATADIR=/var/lib/mysql
  -DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock -DDEFAULT_CHARSET=utf8
@@ -27,7 +27,7 @@ maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-2.0-only"
 homepage="https://mariadb.org/"
 distfiles="http://archive.mariadb.org/$pkgname-$version/source/$pkgname-$version.tar.gz"
-checksum=173a5e5a24819e0a469c3bd09b5c98491676c37c6095882a2ea34c5af0996c88
+checksum=9d8f0f71f9613b2028ffc5c5be8b98948ec955eb0d89600d18ed7cc04807dad5
 lib32disabled=yes
 provides="mysql-${version}_${revision}"
 replaces="mysql>=0"
@@ -36,6 +36,10 @@ system_accounts="mysql"
 mysql_homedir="/var/lib/mysql"
 CFLAGS="-w"
 
+if [ "$XBPS_TARGET_NO_ATOMIC8" ]; then
+	makedepends+=" libatomic-devel"
+fi
+
 pre_configure() {
 	# We need some host binaries before starting cross compilation.
 	if [ "$CROSS_BUILD" ]; then

  parent reply	other threads:[~2020-05-27 22:45 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-27  6:23 [PR PATCH] " rmccask
2020-05-27 12:48 ` [PR PATCH] [Updated] " rmccask
2020-05-27 12:52 ` sgn
2020-05-27 12:54 ` sgn
2020-05-27 17:28 ` [PR PATCH] [Updated] " rmccask
2020-05-27 18:17 ` rmccask
2020-05-27 18:17 ` rmccask
2020-05-27 18:23 ` rmccask
2020-05-27 22:45 ` rmccask [this message]
2020-05-27 23:58 ` [PR PATCH] [Updated] " rmccask
2020-05-28  3:19 ` rmccask
2020-05-28  3:48 ` rmccask
2020-10-24 15:26 ` [PR PATCH] [Closed]: " leahneukirchen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200527224557.-CMckdWGCKHNHKnFgEk8LVXgMSdGh9FciMDro4BPyjc@z \
    --to=rmccask@users.noreply.github.com \
    --cc=ml@inbox.vuxu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).