Require C11 thread_local keyword and <threads.h> header
Change the autoconf check to require C11 <threads.h> header and thread_local keyword.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -16,8 +16,11 @@
|
||||
/*! \file */
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#if HAVE_THREADS_H
|
||||
#include <threads.h>
|
||||
#else
|
||||
#define thread_local _Thread_local
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_PTHREAD_NP_H)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include <isc/lang.h>
|
||||
#include <isc/thread.h>
|
||||
#include <isc/tid.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
|
||||
73
m4/ax_tls.m4
73
m4/ax_tls.m4
@@ -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],[[:]])])
|
||||
])
|
||||
Reference in New Issue
Block a user