$OpenBSD: patch-src_SWIG__threads_i,v 1.1 2021/07/24 20:02:04 sthen Exp $

Fix build with LibreSSL

Index: src/SWIG/_threads.i
--- src/SWIG/_threads.i.orig
+++ src/SWIG/_threads.i
@@ -5,7 +5,7 @@
 #include <pythread.h>
 #include <openssl/crypto.h>
 
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
+#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
 #define CRYPTO_num_locks()      (CRYPTO_NUM_LOCKS)
 static PyThread_type_lock lock_cs[CRYPTO_num_locks()];
 static long lock_count[CRYPTO_num_locks()];
@@ -13,7 +13,7 @@ static int thread_mode = 0;
 #endif
 
 void threading_locking_callback(int mode, int type, const char *file, int line) {
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
+#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
         if (mode & CRYPTO_LOCK) {
                 PyThread_acquire_lock(lock_cs[type], WAIT_LOCK);
                 lock_count[type]++;
@@ -25,7 +25,7 @@ void threading_locking_callback(int mode, int type, co
 }
 
 unsigned long threading_id_callback(void) {
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
+#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
     return (unsigned long)PyThread_get_thread_ident();
 #else
     return (unsigned long)0;
@@ -35,7 +35,7 @@ unsigned long threading_id_callback(void) {
 
 %inline %{
 void threading_init(void) {
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
+#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
     int i;
     if (!thread_mode) {
         for (i=0; i<CRYPTO_num_locks(); i++) {
@@ -50,7 +50,7 @@ void threading_init(void) {
 }
 
 void threading_cleanup(void) {
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
+#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
     int i;
     if (thread_mode) {
         CRYPTO_set_locking_callback(NULL);
