]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Require C11 thread_local keyword and <threads.h> header
authorOndřej Surý <ondrej@isc.org>
Tue, 10 Jan 2023 11:48:03 +0000 (12:48 +0100)
committerOndřej Surý <ondrej@isc.org>
Wed, 8 Feb 2023 20:33:23 +0000 (21:33 +0100)
Change the autoconf check to require C11 <threads.h> header and
thread_local keyword.

configure.ac
doc/arm/platforms.inc.rst
lib/isc/include/isc/thread.h
lib/isc/iterated_hash.c
lib/isc/tid.c
m4/ax_tls.m4 [deleted file]

index 00ce2ce05ac93f0c51f18f7a007f4354fdf6b0b6..9532243e473be71776ef142819621badf2640caa 100644 (file)
@@ -311,10 +311,9 @@ AC_CHECK_HEADERS([fcntl.h regex.h sys/time.h unistd.h sys/mman.h sys/sockio.h sy
 #
 # Check for thread local storage
 #
+# NOTE: OpenBSD doesn't ship <threads.h>, so we can't require it (yet).
+#
 AC_CHECK_HEADERS([threads.h])
-AX_TLS([AS_IF([test "$ac_cv_tls" != "thread_local"],
-             [AC_DEFINE_UNQUOTED([thread_local], [$ac_cv_tls], [Define if the compiler uses a different keyword than thread_local for TLS variables])])],
-       [AC_MSG_ERROR([Thread Local Storage support required, update your toolchain to build BIND 9])])
 
 AC_C_CONST
 AC_C_INLINE
index 50f1420f8f76afaf23fb2c5d228f96e727c9a101..e46bc36bd2495f7d4248486353a74a44d53afe1b 100644 (file)
@@ -20,24 +20,18 @@ found in the ISC Knowledgebase:
 https://kb.isc.org/docs/supported-platforms
 
 In general, this version of BIND will build and run on any
-POSIX-compliant system with a modern C compiler, BSD-style
+POSIX-compliant system with a modern C11 (or better) compiler, BSD-style
 sockets with RFC-compliant IPv6 support, POSIX-compliant threads, and
 the :ref:`required libraries <build_dependencies>`.
 
-The following C11 features are required in BIND 9:
+The following C11 features are required to compile BIND 9:
 
--  Atomic operations support, either in the form of C11 atomics or
-   **__atomic** builtin operations.
+-  Atomic operations support defined in <stdatomic.h>
 
--  Thread Local Storage support, either in the form of C11
-   **_Thread_local**/**thread_local**, or the **__thread** GCC
-   extension.
+-  Thread Local Storage support defined in <threads.h>
 
-The C11 variants are preferred.
-
-The following C23 features are required in BIND 9.
-
--  C23-style attributes - namely [[maybe_unused]] attribute.
+Where it makes sense, BIND 9 uses C-standard fixes introduced by C17 update
+of the C11 standard.
 
 ISC regularly tests BIND on many operating systems and architectures,
 but lacks the resources to test all of them. Consequently, ISC is only
@@ -74,7 +68,7 @@ regularly by ISC.
 -  NetBSD
 -  Other Linux distributions still supported by their vendors, such as:
 
-   -  Ubuntu 20.10+
+   -  Ubuntu 22.10+
    -  Gentoo
    -  Arch Linux
 
index a70e2c793716151fc07cc5634feea9caabc83baa..ade74f79115c20aae0bb1eb4b6e441520f5e24f4 100644 (file)
 /*! \file */
 
 #include <pthread.h>
+
 #if HAVE_THREADS_H
 #include <threads.h>
+#else
+#define thread_local _Thread_local
 #endif
 
 #if defined(HAVE_PTHREAD_NP_H)
index 263a7b9c6a7154bc0f255ce53090cd1958c65df5..3127b6dc595c30f1068130d6673b4e304b6ef381 100644 (file)
@@ -17,6 +17,7 @@
 #include <openssl/opensslv.h>
 
 #include <isc/iterated_hash.h>
+#include <isc/thread.h>
 #include <isc/util.h>
 
 #if OPENSSL_VERSION_NUMBER < 0x30000000L || OPENSSL_API_LEVEL < 30000
index 59c3928789e55f663ccdcee4520427369caf88a8..554ad965643925305e83f99ae3e3896740460871 100644 (file)
@@ -16,6 +16,7 @@
 #include <unistd.h>
 
 #include <isc/lang.h>
+#include <isc/thread.h>
 #include <isc/tid.h>
 #include <isc/util.h>
 
diff --git a/m4/ax_tls.m4 b/m4/ax_tls.m4
deleted file mode 100644 (file)
index 6474e97..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later WITH Autoconf-exception-3.0
-#
-# ===========================================================================
-#          https://www.gnu.org/software/autoconf-archive/ax_tls.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_TLS([action-if-found], [action-if-not-found])
-#
-# DESCRIPTION
-#
-#   Provides a test for the compiler support of thread local storage (TLS)
-#   extensions. Defines TLS if it is found. Currently knows about C++11,
-#   GCC/ICC, and MSVC. I think SunPro uses the same as GCC, and Borland
-#   apparently supports either.
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Alan Woodland <ajw05@aber.ac.uk>
-#   Copyright (c) 2010 Diego Elio Petteno` <flameeyes@gmail.com>
-#
-#   This program is free software: you can redistribute it and/or modify it
-#   under the terms of the GNU General Public License as published by the
-#   Free Software Foundation, either version 3 of the License, or (at your
-#   option) any later version.
-#
-#   This program 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 General
-#   Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License along
-#   with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-#   As a special exception, the respective Autoconf Macro's copyright owner
-#   gives unlimited permission to copy, distribute and modify the configure
-#   scripts that are the output of Autoconf when processing the Macro. You
-#   need not follow the terms of the GNU General Public License when using
-#   or distributing such scripts, even though portions of the text of the
-#   Macro appear in them. The GNU General Public License (GPL) does govern
-#   all other use of the material that constitutes the Autoconf Macro.
-#
-#   This special exception to the GPL applies to versions of the Autoconf
-#   Macro released by the Autoconf Archive. When you make and distribute a
-#   modified version of the Autoconf Macro, you may extend this special
-#   exception to the GPL to apply to your modified version as well.
-
-#serial 15
-
-AC_DEFUN([AX_TLS], [
-  AC_MSG_CHECKING([for thread local storage (TLS) class])
-  AC_CACHE_VAL([ac_cv_tls],
-   [for ax_tls_keyword in thread_local _Thread_local __thread '__declspec(thread)' none; do
-       AS_CASE([$ax_tls_keyword],
-          [none], [ac_cv_tls=none ; break],
-          [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
-              [#include <stdlib.h>],
-              [static  $ax_tls_keyword  int bar;]
-            )],
-            [ac_cv_tls=$ax_tls_keyword ; break],
-            [ac_cv_tls=none]
-          )]
-        )
-    done ]
-  )
-  AC_MSG_RESULT([$ac_cv_tls])
-
-  AS_IF([test "$ac_cv_tls" != "none"],
-    [AC_DEFINE_UNQUOTED([TLS],[$ac_cv_tls],[If the compiler supports a TLS storage class, define it to that here])
-     m4_ifnblank([$1],[$1],[[:]])],
-    [m4_ifnblank([$2],[$2],[[:]])])
-])