commit:     34c7d9e75fcc02ceb56c17f4da622e6d46ba3c6c
Author:     Bernard Cafarelli <voyageur <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 14 20:03:12 2023 +0000
Commit:     Bernard Cafarelli <voyageur <AT> gentoo <DOT> org>
CommitDate: Tue Mar 14 20:58:18 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=34c7d9e7

x11-plugins/wmpinboard: drop custom memcmp, causing issues with MUSL

Also update EAPI 6 -> 8

Closes: https://bugs.gentoo.org/715458
Closes: https://bugs.gentoo.org/899044
Signed-off-by: Bernard Cafarelli <voyageur <AT> gentoo.org>

 .../wmpinboard/files/wmpinboard-1.0.1-memcmp.patch | 443 +++++++++++++++++++++
 x11-plugins/wmpinboard/wmpinboard-1.0.1-r1.ebuild  |  28 ++
 2 files changed, 471 insertions(+)

diff --git a/x11-plugins/wmpinboard/files/wmpinboard-1.0.1-memcmp.patch 
b/x11-plugins/wmpinboard/files/wmpinboard-1.0.1-memcmp.patch
new file mode 100644
index 000000000000..616b4b8ddc59
--- /dev/null
+++ b/x11-plugins/wmpinboard/files/wmpinboard-1.0.1-memcmp.patch
@@ -0,0 +1,443 @@
+diff -Naur wmpinboard-1.0.1.orig/src/Makefile.am 
wmpinboard-1.0.1/src/Makefile.am
+--- wmpinboard-1.0.1.orig/src/Makefile.am      2015-05-25 02:30:37.000000000 
+0200
++++ wmpinboard-1.0.1/src/Makefile.am   2023-03-14 20:57:29.415810929 +0100
+@@ -5,7 +5,7 @@
+ 
+ bin_PROGRAMS = wmpinboard
+ 
+-wmpinboard_SOURCES = memcmp.c \
++wmpinboard_SOURCES = \
+       misc.c misc.h \
+       notes.c notes.h \
+       wmpinboard.c wmpinboard.h \
+@@ -13,6 +13,5 @@
+ wmpinboard_CFLAGS = -g
+ 
+ EXTRA_wmpinboard_SOURCES = \
+-      getopt.c getopt1.c getopt.h \
+-      memcmp.c memcmp.h
++      getopt.c getopt1.c getopt.h
+ 
+diff -Naur wmpinboard-1.0.1.orig/src/memcmp.c wmpinboard-1.0.1/src/memcmp.c
+--- wmpinboard-1.0.1.orig/src/memcmp.c 2015-05-25 02:30:37.000000000 +0200
++++ wmpinboard-1.0.1/src/memcmp.c      1970-01-01 01:00:00.000000000 +0100
+@@ -1,394 +0,0 @@
+-/* Copyright (C) 1991, 1993, 1995, 1997, 1998 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Torbjorn Granlund (t...@sics.se).
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Library General Public License as
+-   published by the Free Software Foundation; either version 2 of the
+-   License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Library General Public License for more details.
+-
+-   You should have received a copy of the GNU Library General Public
+-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
+-
+-#ifdef HAVE_CONFIG_H
+-# include <config.h>
+-#endif
+-
+-#undef        __ptr_t
+-#if defined __cplusplus || (defined __STDC__ && __STDC__)
+-# define __ptr_t      void *
+-#else /* Not C++ or ANSI C.  */
+-# undef       const
+-# define const
+-# define __ptr_t      char *
+-#endif /* C++ or ANSI C.  */
+-
+-#ifndef __P
+-# if defined __GNUC__ || (defined __STDC__ && __STDC__)
+-#  define __P(args) args
+-# else
+-#  define __P(args) ()
+-# endif  /* GCC.  */
+-#endif  /* Not __P.  */
+-
+-#if defined HAVE_STRING_H || defined _LIBC
+-# include <string.h>
+-#endif
+-
+-#undef memcmp
+-
+-#ifdef _LIBC
+-
+-# include <memcopy.h>
+-# include <endian.h>
+-
+-# if __BYTE_ORDER == __BIG_ENDIAN
+-#  define WORDS_BIGENDIAN
+-# endif
+-
+-#else /* Not in the GNU C library.  */
+-
+-# include <sys/types.h>
+-
+-/* Type to use for aligned memory operations.
+-   This should normally be the biggest type supported by a single load
+-   and store.  Must be an unsigned type.  */
+-# define op_t unsigned long int
+-# define OPSIZ        (sizeof(op_t))
+-
+-/* Threshold value for when to enter the unrolled loops.  */
+-# define OP_T_THRES   16
+-
+-/* Type to use for unaligned operations.  */
+-typedef unsigned char byte;
+-
+-# ifndef WORDS_BIGENDIAN
+-#  define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2)))
+-# else
+-#  define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2)))
+-# endif
+-
+-#endif        /* In the GNU C library.  */
+-
+-#ifdef WORDS_BIGENDIAN
+-# define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1)
+-#else
+-# define CMP_LT_OR_GT(a, b) memcmp_bytes ((a), (b))
+-#endif
+-
+-/* BE VERY CAREFUL IF YOU CHANGE THIS CODE!  */
+-
+-/* The strategy of this memcmp is:
+-
+-   1. Compare bytes until one of the block pointers is aligned.
+-
+-   2. Compare using memcmp_common_alignment or
+-      memcmp_not_common_alignment, regarding the alignment of the other
+-      block after the initial byte operations.  The maximum number of
+-      full words (of type op_t) are compared in this way.
+-
+-   3. Compare the few remaining bytes.  */
+-
+-#ifndef WORDS_BIGENDIAN
+-/* memcmp_bytes -- Compare A and B bytewise in the byte order of the machine.
+-   A and B are known to be different.
+-   This is needed only on little-endian machines.  */
+-
+-static int memcmp_bytes __P((op_t, op_t));
+-
+-# ifdef  __GNUC__
+-__inline
+-# endif
+-static int
+-memcmp_bytes (a, b)
+-     op_t a, b;
+-{
+-  long int srcp1 = (long int) &a;
+-  long int srcp2 = (long int) &b;
+-  op_t a0, b0;
+-
+-  do
+-    {
+-      a0 = ((byte *) srcp1)[0];
+-      b0 = ((byte *) srcp2)[0];
+-      srcp1 += 1;
+-      srcp2 += 1;
+-    }
+-  while (a0 == b0);
+-  return a0 - b0;
+-}
+-#endif
+-
+-static int memcmp_common_alignment __P((long, long, size_t));
+-
+-/* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN 
`op_t'
+-   objects (not LEN bytes!).  Both SRCP1 and SRCP2 should be aligned for
+-   memory operations on `op_t's.  */
+-#ifdef        __GNUC__
+-__inline
+-#endif
+-static int
+-memcmp_common_alignment (srcp1, srcp2, len)
+-     long int srcp1;
+-     long int srcp2;
+-     size_t len;
+-{
+-  op_t a0, a1;
+-  op_t b0, b1;
+-
+-  switch (len % 4)
+-    {
+-    default: /* Avoid warning about uninitialized local variables.  */
+-    case 2:
+-      a0 = ((op_t *) srcp1)[0];
+-      b0 = ((op_t *) srcp2)[0];
+-      srcp1 -= 2 * OPSIZ;
+-      srcp2 -= 2 * OPSIZ;
+-      len += 2;
+-      goto do1;
+-    case 3:
+-      a1 = ((op_t *) srcp1)[0];
+-      b1 = ((op_t *) srcp2)[0];
+-      srcp1 -= OPSIZ;
+-      srcp2 -= OPSIZ;
+-      len += 1;
+-      goto do2;
+-    case 0:
+-      if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+-      return 0;
+-      a0 = ((op_t *) srcp1)[0];
+-      b0 = ((op_t *) srcp2)[0];
+-      goto do3;
+-    case 1:
+-      a1 = ((op_t *) srcp1)[0];
+-      b1 = ((op_t *) srcp2)[0];
+-      srcp1 += OPSIZ;
+-      srcp2 += OPSIZ;
+-      len -= 1;
+-      if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+-      goto do0;
+-      /* Fall through.  */
+-    }
+-
+-  do
+-    {
+-      a0 = ((op_t *) srcp1)[0];
+-      b0 = ((op_t *) srcp2)[0];
+-      if (a1 != b1)
+-      return CMP_LT_OR_GT (a1, b1);
+-
+-    do3:
+-      a1 = ((op_t *) srcp1)[1];
+-      b1 = ((op_t *) srcp2)[1];
+-      if (a0 != b0)
+-      return CMP_LT_OR_GT (a0, b0);
+-
+-    do2:
+-      a0 = ((op_t *) srcp1)[2];
+-      b0 = ((op_t *) srcp2)[2];
+-      if (a1 != b1)
+-      return CMP_LT_OR_GT (a1, b1);
+-
+-    do1:
+-      a1 = ((op_t *) srcp1)[3];
+-      b1 = ((op_t *) srcp2)[3];
+-      if (a0 != b0)
+-      return CMP_LT_OR_GT (a0, b0);
+-
+-      srcp1 += 4 * OPSIZ;
+-      srcp2 += 4 * OPSIZ;
+-      len -= 4;
+-    }
+-  while (len != 0);
+-
+-  /* This is the right position for do0.  Please don't move
+-     it into the loop.  */
+- do0:
+-  if (a1 != b1)
+-    return CMP_LT_OR_GT (a1, b1);
+-  return 0;
+-}
+-
+-static int memcmp_not_common_alignment __P((long, long, size_t));
+-
+-/* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN
+-   `op_t' objects (not LEN bytes!).  SRCP2 should be aligned for memory
+-   operations on `op_t', but SRCP1 *should be unaligned*.  */
+-#ifdef        __GNUC__
+-__inline
+-#endif
+-static int
+-memcmp_not_common_alignment (srcp1, srcp2, len)
+-     long int srcp1;
+-     long int srcp2;
+-     size_t len;
+-{
+-  op_t a0, a1, a2, a3;
+-  op_t b0, b1, b2, b3;
+-  op_t x;
+-  int shl, shr;
+-
+-  /* Calculate how to shift a word read at the memory operation
+-     aligned srcp1 to make it aligned for comparison.  */
+-
+-  shl = 8 * (srcp1 % OPSIZ);
+-  shr = 8 * OPSIZ - shl;
+-
+-  /* Make SRCP1 aligned by rounding it down to the beginning of the `op_t'
+-     it points in the middle of.  */
+-  srcp1 &= -OPSIZ;
+-
+-  switch (len % 4)
+-    {
+-    default: /* Avoid warning about uninitialized local variables.  */
+-    case 2:
+-      a1 = ((op_t *) srcp1)[0];
+-      a2 = ((op_t *) srcp1)[1];
+-      b2 = ((op_t *) srcp2)[0];
+-      srcp1 -= 1 * OPSIZ;
+-      srcp2 -= 2 * OPSIZ;
+-      len += 2;
+-      goto do1;
+-    case 3:
+-      a0 = ((op_t *) srcp1)[0];
+-      a1 = ((op_t *) srcp1)[1];
+-      b1 = ((op_t *) srcp2)[0];
+-      srcp2 -= 1 * OPSIZ;
+-      len += 1;
+-      goto do2;
+-    case 0:
+-      if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+-      return 0;
+-      a3 = ((op_t *) srcp1)[0];
+-      a0 = ((op_t *) srcp1)[1];
+-      b0 = ((op_t *) srcp2)[0];
+-      srcp1 += 1 * OPSIZ;
+-      goto do3;
+-    case 1:
+-      a2 = ((op_t *) srcp1)[0];
+-      a3 = ((op_t *) srcp1)[1];
+-      b3 = ((op_t *) srcp2)[0];
+-      srcp1 += 2 * OPSIZ;
+-      srcp2 += 1 * OPSIZ;
+-      len -= 1;
+-      if (OP_T_THRES <= 3 * OPSIZ && len == 0)
+-      goto do0;
+-      /* Fall through.  */
+-    }
+-
+-  do
+-    {
+-      a0 = ((op_t *) srcp1)[0];
+-      b0 = ((op_t *) srcp2)[0];
+-      x = MERGE(a2, shl, a3, shr);
+-      if (x != b3)
+-      return CMP_LT_OR_GT (x, b3);
+-
+-    do3:
+-      a1 = ((op_t *) srcp1)[1];
+-      b1 = ((op_t *) srcp2)[1];
+-      x = MERGE(a3, shl, a0, shr);
+-      if (x != b0)
+-      return CMP_LT_OR_GT (x, b0);
+-
+-    do2:
+-      a2 = ((op_t *) srcp1)[2];
+-      b2 = ((op_t *) srcp2)[2];
+-      x = MERGE(a0, shl, a1, shr);
+-      if (x != b1)
+-      return CMP_LT_OR_GT (x, b1);
+-
+-    do1:
+-      a3 = ((op_t *) srcp1)[3];
+-      b3 = ((op_t *) srcp2)[3];
+-      x = MERGE(a1, shl, a2, shr);
+-      if (x != b2)
+-      return CMP_LT_OR_GT (x, b2);
+-
+-      srcp1 += 4 * OPSIZ;
+-      srcp2 += 4 * OPSIZ;
+-      len -= 4;
+-    }
+-  while (len != 0);
+-
+-  /* This is the right position for do0.  Please don't move
+-     it into the loop.  */
+- do0:
+-  x = MERGE(a2, shl, a3, shr);
+-  if (x != b3)
+-    return CMP_LT_OR_GT (x, b3);
+-  return 0;
+-}
+-
+-int
+-memcmp (s1, s2, len)
+-     const __ptr_t s1;
+-     const __ptr_t s2;
+-     size_t len;
+-{
+-  op_t a0;
+-  op_t b0;
+-  long int srcp1 = (long int) s1;
+-  long int srcp2 = (long int) s2;
+-  op_t res;
+-
+-  if (len >= OP_T_THRES)
+-    {
+-      /* There are at least some bytes to compare.  No need to test
+-       for LEN == 0 in this alignment loop.  */
+-      while (srcp2 % OPSIZ != 0)
+-      {
+-        a0 = ((byte *) srcp1)[0];
+-        b0 = ((byte *) srcp2)[0];
+-        srcp1 += 1;
+-        srcp2 += 1;
+-        res = a0 - b0;
+-        if (res != 0)
+-          return res;
+-        len -= 1;
+-      }
+-
+-      /* SRCP2 is now aligned for memory operations on `op_t'.
+-       SRCP1 alignment determines if we can do a simple,
+-       aligned compare or need to shuffle bits.  */
+-
+-      if (srcp1 % OPSIZ == 0)
+-      res = memcmp_common_alignment (srcp1, srcp2, len / OPSIZ);
+-      else
+-      res = memcmp_not_common_alignment (srcp1, srcp2, len / OPSIZ);
+-      if (res != 0)
+-      return res;
+-
+-      /* Number of bytes remaining in the interval [0..OPSIZ-1].  */
+-      srcp1 += len & -OPSIZ;
+-      srcp2 += len & -OPSIZ;
+-      len %= OPSIZ;
+-    }
+-
+-  /* There are just a few bytes to compare.  Use byte memory operations.  */
+-  while (len != 0)
+-    {
+-      a0 = ((byte *) srcp1)[0];
+-      b0 = ((byte *) srcp2)[0];
+-      srcp1 += 1;
+-      srcp2 += 1;
+-      res = a0 - b0;
+-      if (res != 0)
+-      return res;
+-      len -= 1;
+-    }
+-
+-  return 0;
+-}
+-
+-#ifdef weak_alias
+-# undef bcmp
+-weak_alias (memcmp, bcmp)
+-#endif
+diff -Naur wmpinboard-1.0.1.orig/src/memcmp.h wmpinboard-1.0.1/src/memcmp.h
+--- wmpinboard-1.0.1.orig/src/memcmp.h 2015-05-25 02:30:37.000000000 +0200
++++ wmpinboard-1.0.1/src/memcmp.h      1970-01-01 01:00:00.000000000 +0100
+@@ -1,8 +0,0 @@
+-#ifndef MEMCMP_H_INCLUDED
+-#define MEMCMP_H_INCLUDED
+-
+-extern int memcmp __P ((__const __ptr_t __s1, __const __ptr_t __s2,
+-  size_t __n));
+-
+-#endif  /* MEMCMP_H_INCLUDED */
+-
+diff -Naur wmpinboard-1.0.1.orig/src/notes.c wmpinboard-1.0.1/src/notes.c
+--- wmpinboard-1.0.1.orig/src/notes.c  2015-05-25 02:30:37.000000000 +0200
++++ wmpinboard-1.0.1/src/notes.c       2023-03-14 20:58:50.523898242 +0100
+@@ -20,9 +20,6 @@
+ #ifdef HAVE_STRING_H
+ #include <string.h>
+ #endif
+-#ifndef HAVE_MEMCMP
+-#include "memcmp.h"
+-#endif
+ 
+ /* a list of the upper left corners of the separate areas of the alarm panel,
+    numbered from left to right and from top to bottom (double digits followed

diff --git a/x11-plugins/wmpinboard/wmpinboard-1.0.1-r1.ebuild 
b/x11-plugins/wmpinboard/wmpinboard-1.0.1-r1.ebuild
new file mode 100644
index 000000000000..c7278245a254
--- /dev/null
+++ b/x11-plugins/wmpinboard/wmpinboard-1.0.1-r1.ebuild
@@ -0,0 +1,28 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Window Maker dock applet resembling a miniature pinboard"
+HOMEPAGE="https://github.com/bbidulock/wmpinboard";
+SRC_URI="https://github.com/bbidulock/${PN}/releases/download/${PV}/${P}.tar.gz";
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~ppc ~sparc ~x86"
+IUSE=""
+
+RDEPEND="x11-libs/libX11
+       x11-libs/libXext
+       x11-libs/libXpm"
+DEPEND="${RDEPEND}
+       x11-base/xorg-proto"
+
+PATCHES=( "${FILESDIR}"/${P}-memcmp.patch )
+
+src_prepare() {
+       default
+       eautoreconf
+}

Reply via email to