From 2ad7fad67080e88fa7fc191f9d613d8b7add9c62 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Wed, 13 Mar 2024 21:17:10 +0200 Subject: [PATCH] CMake: Disable symbol versioning on non-glibc Linux. This better matches what configure.ac does. For example, musl has only basic symbol versioning support: https://wiki.musl-libc.org/functional-differences-from-glibc.html#Symbol_versioning configure.ac tries to enable symbol versioning only with glibc so now CMake does the same. --- CMakeLists.txt | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4da57773..cc626b41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -358,8 +358,26 @@ if(NOT WIN32) # This includes a few extra compatibility symbols for RHEL/CentOS 7 # which are pointless on non-glibc non-Linux systems. # - # FIXME? Avoid symvers on Linux with non-glibc like musl? - set(SYMBOL_VERSIONING_DEFAULT "linux") + # Avoid symvers on Linux with non-glibc like musl and uClibc. + # In Autoconf it's enough to check that $host_os equals linux-gnu + # instead of, for example, linux-musl. CMake doesn't provide such + # a method. + # + # This check is here for now since it's not strictly required + # by anything else. + check_c_source_compiles( + "#include + #if defined(__GLIBC__) && !defined(__UCLIBC__) + int main(void) { return 0; } + #else + compile error + #endif + " + IS_LINUX_WITH_GLIBC) + + if(IS_LINUX_WITH_GLIBC) + set(SYMBOL_VERSIONING_DEFAULT "linux") + endif() elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") set(SYMBOL_VERSIONING_DEFAULT "generic")