git: 36957cf636cb - main - mail/thunderbird: fix build on legacy FreeBSD

From: Christoph Moench-Tegeder <cmt_at_FreeBSD.org>
Date: Sun, 11 Sep 2022 20:58:57 UTC
The branch main has been updated by cmt:

URL: https://cgit.FreeBSD.org/ports/commit/?id=36957cf636cb0634fd04720ee05b9aa5f9226f68

commit 36957cf636cb0634fd04720ee05b9aa5f9226f68
Author:     Christoph Moench-Tegeder <cmt@FreeBSD.org>
AuthorDate: 2022-09-11 20:54:35 +0000
Commit:     Christoph Moench-Tegeder <cmt@FreeBSD.org>
CommitDate: 2022-09-11 20:54:35 +0000

    mail/thunderbird: fix build on legacy FreeBSD
    
    just as firefox/firefox-esr, we need to work around missing CPU_SET
    macros on old FreeBSD. Patch taken from 65f70bb54d/4a4ffa51d5.
    
    Reported by: Barbara
---
 .../files/patch-tools_profiler_core_patform.cpp    | 51 ++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/mail/thunderbird/files/patch-tools_profiler_core_patform.cpp b/mail/thunderbird/files/patch-tools_profiler_core_patform.cpp
new file mode 100644
index 000000000000..905e6d7bbe49
--- /dev/null
+++ b/mail/thunderbird/files/patch-tools_profiler_core_patform.cpp
@@ -0,0 +1,51 @@
+commit 45a7951cb6a9b1735b9b6cec89db69b5933715c7
+Author: Christoph Moench-Tegeder <cmt@FreeBSD.org>
+Date:   Mon Mar 28 21:54:35 2022 +0200
+
+    FreeBSD can use sched_getcpu() from 1400046/1300524 on
+
+diff --git tools/profiler/core/platform.cpp tools/profiler/core/platform.cpp
+index 92bcc1100687..2f17a88942a8 100644
+--- tools/profiler/core/platform.cpp
++++ tools/profiler/core/platform.cpp
+@@ -111,6 +111,20 @@
+ #  include <cpuid.h>
+ #endif
+ 
++#if defined(GP_OS_freebsd)
++#include <sys/param.h>
++// "after making CPU_SET macros compatible with glibc"
++#  if __FreeBSD_version > 1400045 || (__FreeBSD_version > 1300523 && __FreeBSD_version < 1400000)
++#  include <sched.h>
++#  else
++#    if __x86_64__ || __i386__
++// similar cpuid_count() trick as on Darwin, using LLVM
++// but not for all CPUs
++#      include <cpuid.h>
++#    endif
++#  endif
++#endif
++
+ #if defined(GP_OS_windows)
+ #  include <processthreadsapi.h>
+ 
+@@ -6368,6 +6382,19 @@ void profiler_mark_thread_awake() {
+     cpuId = ebx >> 24;
+   }
+ #  endif
++#elif defined(GP_OS_freebsd) 
++#  if __FreeBSD_version > 1400045 || (__FreeBSD_version > 1300523 && __FreeBSD_version < 1400000)
++  cpuId = sched_getcpu();
++#  elif defined(__amd64__)
++  unsigned int eax, ebx, ecx, edx;
++  __cpuid_count(1, 0, eax, ebx, ecx, edx);
++  // Check if we have an APIC.
++  if ((edx & (1 << 9))) {
++    // APIC ID is bits 24-31 of EBX
++    cpuId = ebx >> 24;
++  }
++#  endif
++// the fallthrough is cpuID = 0
+ #else
+   cpuId = sched_getcpu();
+ #endif