From: Viktor Szakats Date: Sat, 8 Nov 2025 01:27:23 +0000 (+0100) Subject: cmake: adjust defaults for target platforms not supporting shared libs X-Git-Tag: rc-8_18_0-1~388 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=49ef2f8d1ef78e702c73f5d72242301cc2a0157e;p=thirdparty%2Fcurl.git cmake: adjust defaults for target platforms not supporting shared libs If CMake reports the target platform not supporting shared libs, turn `BUILD_SHARED_LIBS` off by default. CMake 3.30+ fails with an error when trying to create a `SHARED` target for such platforms. Earlier versions used a workaround that may or may not have worked in practice. Ref: https://cmake.org/cmake/help/v3.30/policy/CMP0164.html Seen this with a build setting `-DCMAKE_SYSTEM_NAME=Generic`, e.g. AmigaOS. Note this may introduce incompatibility for "Generic" targets, which support shared libs. If that's the case, set `BUILD_SHARED_LIBS=ON` manually. Also drop AmigaOS-specific logic handled automatically after this patch. Ref: https://cmake.org/cmake/help/v3.7/command/get_property.html Ref: https://cmake.org/cmake/help/v3.7/prop_gbl/TARGET_SUPPORTS_SHARED_LIBS.html Closes #19420 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 068d97d49b..8113cdea90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -204,7 +204,8 @@ endif() option(CURL_WERROR "Turn compiler warnings into errors" OFF) option(PICKY_COMPILER "Enable picky compiler options" ON) option(BUILD_CURL_EXE "Build curl executable" ON) -option(BUILD_SHARED_LIBS "Build shared libraries" ON) +get_property(_has_shared GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) +option(BUILD_SHARED_LIBS "Build shared libraries" ${_has_shared}) option(BUILD_STATIC_LIBS "Build static libraries" OFF) option(BUILD_STATIC_CURL "Build curl executable with static libcurl" OFF) option(ENABLE_ARES "Enable c-ares support" OFF) @@ -260,7 +261,7 @@ if(WIN32) endif() unset(MINGW64_VERSION CACHE) # Avoid storing in CMake cache endif() -elseif(DOS OR AMIGA) +elseif(DOS) set(BUILD_SHARED_LIBS OFF) set(BUILD_STATIC_LIBS ON) endif() diff --git a/docs/INSTALL-CMAKE.md b/docs/INSTALL-CMAKE.md index edce5c0e72..9921fbf12c 100644 --- a/docs/INSTALL-CMAKE.md +++ b/docs/INSTALL-CMAKE.md @@ -221,7 +221,7 @@ target_link_libraries(my_target PRIVATE CURL::libcurl) - `BUILD_EXAMPLES`: Build libcurl examples. Default: `ON` - `BUILD_LIBCURL_DOCS`: Build libcurl man pages. Default: `ON` - `BUILD_MISC_DOCS`: Build misc man pages (e.g. `curl-config` and `mk-ca-bundle`). Default: `ON` -- `BUILD_SHARED_LIBS`: Build shared libraries. Default: `ON` +- `BUILD_SHARED_LIBS`: Build shared libraries. Default: `ON` (if target platform supports shared libs, otherwise `OFF`) - `BUILD_STATIC_CURL`: Build curl executable with static libcurl. Default: `OFF` (turns to `ON`, when building static libcurl only) - `BUILD_STATIC_LIBS`: Build static libraries. Default: `OFF` (turns to `ON` if `BUILD_SHARED_LIBS` is `OFF`) - `BUILD_TESTING`: Build tests. Default: `ON`