diff options
author | Jia Tan <jiat0218@gmail.com> | 2023-08-09 20:35:16 +0800 |
---|---|---|
committer | Jia Tan <jiat0218@gmail.com> | 2023-10-26 06:22:24 +0800 |
commit | e919ebb29ac9f5270cd7176a39d0d3b4cea875a9 (patch) | |
tree | ed233c150206f2eeda6a72996a019e8aab332fda | |
parent | mythread.h: Fix typo error in Vista threads mythread_once(). (diff) | |
download | xz-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.ac | 21 |
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. ############################################################################### |