aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJia Tan <jiat0218@gmail.com>2023-08-09 20:35:16 +0800
committerJia Tan <jiat0218@gmail.com>2023-10-26 06:22:24 +0800
commite919ebb29ac9f5270cd7176a39d0d3b4cea875a9 (patch)
treeed233c150206f2eeda6a72996a019e8aab332fda
parentmythread.h: Fix typo error in Vista threads mythread_once(). (diff)
downloadxz-e919ebb29ac9f5270cd7176a39d0d3b4cea875a9.tar.xz
Build: Conditionally allow win95 threads and --enable-small.
When the compiler supports __attribute__((__constructor__)) mythread_once() is never used, even with --enable-small. A configuration with win95 threads and --enable-small will compile and be thread safe so it can be allowed. This isn't a very common configuration since MSVC does not support __attribute__((__constructor__)), but MINGW32 and CLANG32 environments for MSYS2 can use win95 threads and have __attribute__((__constructor__)) support.
-rw-r--r--configure.ac21
1 files changed, 13 insertions, 8 deletions
diff --git a/configure.ac b/configure.ac
index 72021882..45c74776 100644
--- a/configure.ac
+++ b/configure.ac
@@ -437,14 +437,6 @@ case $enable_threads in
;;
esac
-# The Win95 threading lacks thread-safe one-time initialization function.
-# It's better to disallow it instead of allowing threaded but thread-unsafe
-# build.
-if test "x$enable_small$enable_threads" = xyeswin95; then
- AC_MSG_ERROR([--enable-threads=win95 and --enable-small cannot be
- used at the same time])
-fi
-
# We use the actual result a little later.
@@ -862,6 +854,19 @@ AC_COMPILE_IFELSE([
CFLAGS="$OLD_CFLAGS"
+# The Win95 threading lacks a thread-safe one-time initialization function.
+# The one-time initialization is needed for crc32_small.c and crc64_small.c
+# create the CRC tables. So if small mode is enabled, the threading mode is
+# win95, and the compiler does not support attribute constructor, then we
+# would end up with a multithreaded build that is thread-unsafe. As a
+# result this configuration is not allowed.
+if test "x$enable_small$enable_threads$have_func_attribute_constructor"\
+ = xyeswin95no; then
+ AC_MSG_ERROR([--enable-threads=win95 and --enable-small cannot be
+ used at the same time with a compiler that doesn't support
+ __attribute__((__constructor__))])
+fi
+
###############################################################################
# Checks for library functions.
###############################################################################