commit:     ed868768e7a6b77262543f379bb0ca9e7db0974c
Author:     Brahmajit Das <brahmajit.xyz <AT> gmail <DOT> com>
AuthorDate: Wed Jun 14 10:37:33 2023 +0000
Commit:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
CommitDate: Sun Jun 18 12:56:46 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ed868768

dev-db/kyotocabinet: Fix build error /w clang

and most probably musl too

Signed-off-by: Brahmajit Das <brahmajit.xyz <AT> gmail.com>
Closes: https://github.com/gentoo/gentoo/pull/31433
Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org>

 ...1.2.79-initialize-parameter-error-clang16.patch | 62 +++++++++++++++++++
 dev-db/kyotocabinet/kyotocabinet-1.2.79-r2.ebuild  | 70 ++++++++++++++++++++++
 2 files changed, 132 insertions(+)

diff --git 
a/dev-db/kyotocabinet/files/kyotocabinet-1.2.79-initialize-parameter-error-clang16.patch
 
b/dev-db/kyotocabinet/files/kyotocabinet-1.2.79-initialize-parameter-error-clang16.patch
new file mode 100644
index 000000000000..4739a433ab40
--- /dev/null
+++ 
b/dev-db/kyotocabinet/files/kyotocabinet-1.2.79-initialize-parameter-error-clang16.patch
@@ -0,0 +1,62 @@
+Without the patch I'm getting the following error/s:
+kcthread.cc:671:50: error: cannot initialize a parameter of type 'void *' with 
an rvalue of type 'int'
+  while (!__sync_bool_compare_and_swap(&opq_, 0, 1)) {
+                                                 ^
+kcthread.cc:696:49: error: cannot initialize a parameter of type 'void *' with 
an rvalue of type 'int'
+  return __sync_bool_compare_and_swap(&opq_, 0, 1);
+--- a/kcthread.cc
++++ b/kcthread.cc
+@@ -668,7 +668,7 @@ void SpinLock::lock() {
+ #elif _KC_GCCATOMIC
+   _assert_(true);
+   uint32_t wcnt = 0;
+-  while (!__sync_bool_compare_and_swap(&opq_, 0, 1)) {
++  while (!__sync_bool_compare_and_swap(&opq_, 0, (void *)1)) {
+     if (wcnt >= LOCKBUSYLOOP) {
+       Thread::chill();
+     } else {
+@@ -693,7 +693,7 @@ bool SpinLock::lock_try() {
+   return ::InterlockedCompareExchange((LONG*)&opq_, 1, 0) == 0;
+ #elif _KC_GCCATOMIC
+   _assert_(true);
+-  return __sync_bool_compare_and_swap(&opq_, 0, 1);
++  return __sync_bool_compare_and_swap(&opq_, 0, (void *)1);
+ #else
+   _assert_(true);
+   ::pthread_spinlock_t* spin = (::pthread_spinlock_t*)opq_;
+@@ -811,7 +811,7 @@ void SlottedSpinLock::lock(size_t idx) {
+   SlottedSpinLockCore* core = (SlottedSpinLockCore*)opq_;
+   uint32_t* lock = core->locks + idx;
+   uint32_t wcnt = 0;
+-  while (!__sync_bool_compare_and_swap(lock, 0, 1)) {
++  while (!__sync_bool_compare_and_swap(lock, 0, (unsigned int)1)) {
+     if (wcnt >= LOCKBUSYLOOP) {
+       Thread::chill();
+     } else {
+@@ -880,7 +880,7 @@ void SlottedSpinLock::lock_all() {
+   for (size_t i = 0; i < slotnum; i++) {
+     uint32_t* lock = locks + i;
+     uint32_t wcnt = 0;
+-    while (!__sync_bool_compare_and_swap(lock, 0, 1)) {
++    while (!__sync_bool_compare_and_swap(lock, 0, (unsigned int)1)) {
+       if (wcnt >= LOCKBUSYLOOP) {
+         Thread::chill();
+       } else {
+@@ -1449,7 +1449,7 @@ static void spinrwlocklock(SpinRWLockCore* core) {
+   }
+ #elif _KC_GCCATOMIC
+   _assert_(core);
+-  while (!__sync_bool_compare_and_swap(&core->sem, 0, 1)) {
++  while (!__sync_bool_compare_and_swap(&core->sem, 0, (unsigned int)1)) {
+     ::sched_yield();
+   }
+ #else
+@@ -1732,7 +1732,7 @@ static void slottedspinrwlocklock(SlottedSpinRWLockCore* 
core, size_t idx) {
+   }
+ #elif _KC_GCCATOMIC
+   _assert_(core);
+-  while (!__sync_bool_compare_and_swap(core->sems + idx, 0, 1)) {
++  while (!__sync_bool_compare_and_swap(core->sems + idx, 0, (unsigned int)1)) 
{
+     ::sched_yield();
+   }
+ #else

diff --git a/dev-db/kyotocabinet/kyotocabinet-1.2.79-r2.ebuild 
b/dev-db/kyotocabinet/kyotocabinet-1.2.79-r2.ebuild
new file mode 100644
index 000000000000..fc4463ca0d3a
--- /dev/null
+++ b/dev-db/kyotocabinet/kyotocabinet-1.2.79-r2.ebuild
@@ -0,0 +1,70 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools toolchain-funcs
+
+DESCRIPTION="A straightforward implementation of DBM"
+HOMEPAGE="https://dbmx.net/kyotocabinet/";
+SRC_URI="https://dbmx.net/kyotocabinet/pkg/${P}.tar.gz";
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv 
~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="debug doc examples +lzma +lzo static-libs"
+
+DEPEND="sys-libs/zlib[static-libs?]
+       lzma? ( app-arch/xz-utils:=[static-libs?] )
+       lzo? ( dev-libs/lzo:=[static-libs?] )"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+       "${FILESDIR}"/fix_configure-1.2.62.patch
+       "${FILESDIR}"/${PN}-1.2.76-configure-8-byte-atomics.patch
+       "${FILESDIR}"/${PN}-1.2.76-flags.patch
+       "${FILESDIR}"/${PN}-1.2.79-configure-clang16.patch
+       "${FILESDIR}"/${PN}-1.2.79-initialize-parameter-error-clang16.patch
+)
+
+src_prepare() {
+       default
+
+       sed -i -e "/DOCDIR/d" Makefile.in || die
+       tc-export AR
+
+       mv configure.in configure.ac || die
+       eautoreconf
+}
+
+src_configure() {
+       # We need to set LD_LIBRARY_PATH which will be assigned to RUNENV later
+       # used by test suite
+       LD_LIBRARY_PATH=. \
+       econf $(use_enable debug) \
+               $(use_enable static-libs static) \
+               $(use_enable !static-libs shared) \
+               $(use_enable lzma) \
+               $(use_enable lzo)
+}
+
+src_test() {
+       emake -j1 check
+}
+
+src_install() {
+       default
+
+       if ! use static-libs; then
+               find "${ED}" -name '*.a' -delete || die
+       fi
+
+       if use doc; then
+               dodoc -r doc/*
+       fi
+
+       if use examples; then
+               docinto example
+               dodoc example/*
+       fi
+}

Reply via email to