Files
macports-ports/lang/ruby31/files/patch-thread_pthread.diff
Sergey Fedorov f5ed23cd1b ruby-devel: new port (latest Ruby), supports PPC (#16454)
* ruby-devel: new port, supports PPC

* ruby31: fix PPC build, needed for ruby-devel

* ruby-devel: add kimuraw as co-maintainer
[skip ci]

Co-authored-by: kimura wataru <kimuraw@macports.org>
2022-10-27 22:09:28 +09:00

45 lines
1.5 KiB
Diff

--- thread_pthread.c.orig 2022-04-12 19:11:15.000000000 +0800
+++ thread_pthread.c 2022-10-24 05:26:46.000000000 +0800
@@ -40,6 +40,10 @@
#include <time.h>
#include <signal.h>
+#if defined __APPLE__
+# include <AvailabilityMacros.h>
+#endif
+
#if defined(HAVE_SYS_EVENTFD_H) && defined(HAVE_EVENTFD)
# define USE_EVENTFD (1)
# include <sys/eventfd.h>
@@ -1732,9 +1736,29 @@
return INT2FIX(tid);
#elif defined(__APPLE__)
uint64_t tid;
- int e = pthread_threadid_np(target_th->thread_id, &tid);
+# if (!defined(MAC_OS_X_VERSION_10_6) || \
+ (MAC_OS_X_VERSION_MAX_ALLOWED < 1060) || \
+ defined(__POWERPC__) /* never defined for PowerPC platforms */)
+ const bool no_pthread_threadid_np = true;
+# define NO_PTHREAD_MACH_THREAD_NP 1
+# elif MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
+ const bool no_pthread_threadid_np = false;
+# else
+# if !(defined(__has_attribute) && __has_attribute(availability))
+ /* __API_AVAILABLE macro does nothing on gcc */
+ __attribute__((weak)) int pthread_threadid_np(pthread_t, uint64_t*);
+# endif
+ /* Check weakly linked symbol */
+ const bool no_pthread_threadid_np = !&pthread_threadid_np;
+# endif
+ if (no_pthread_threadid_np) {
+ return ULL2NUM(pthread_mach_thread_np(pthread_self()));
+ }
+# ifndef NO_PTHREAD_MACH_THREAD_NP
+ int e = pthread_threadid_np(target_th->thread_id, &tid);
if (e != 0) rb_syserr_fail(e, "pthread_threadid_np");
return ULL2NUM((unsigned long long)tid);
+# endif
#endif
}
# define USE_NATIVE_THREAD_NATIVE_THREAD_ID 1