cmake: allow empty custom IMPORT_LIB_SUFFIX, add suffix collision detection

Allow overriding the `IMPORT_LIB_SUFFIX` default with an empty value.

Also:
- add a fatal error if the implib and static lib filename are identical.
- clarify `IMPORT_LIB_SUFFIX` default value in the documentation.

Reported-by: RubisetCie on Github
Fixes #16324
Ref: 1199308dbc #11505

Closes #16332
This commit is contained in:
Viktor Szakats 2025-02-14 11:35:12 +01:00
parent e7adf3e837
commit 1b87357967
No known key found for this signature in database
GPG Key ID: B5ABD165E2AEF201
2 changed files with 17 additions and 8 deletions

View File

@ -167,7 +167,7 @@ assumes that CMake generates `Makefile`:
- `ENABLE_CURLDEBUG`: Enable TrackMemory debug feature. Default: =`ENABLE_DEBUG` - `ENABLE_CURLDEBUG`: Enable TrackMemory debug feature. Default: =`ENABLE_DEBUG`
- `ENABLE_CURL_MANUAL`: Build the man page for curl and enable its `-M`/`--manual` option. Default: `ON` - `ENABLE_CURL_MANUAL`: Build the man page for curl and enable its `-M`/`--manual` option. Default: `ON`
- `ENABLE_DEBUG`: Enable curl debug features (for developing curl itself). Default: `OFF` - `ENABLE_DEBUG`: Enable curl debug features (for developing curl itself). Default: `OFF`
- `IMPORT_LIB_SUFFIX`: Import library suffix. Default: `_imp` - `IMPORT_LIB_SUFFIX`: Import library suffix. Default: `_imp` for MSVC-like toolchains, otherwise empty.
- `LIBCURL_OUTPUT_NAME`: Basename of the curl library. Default: `libcurl` - `LIBCURL_OUTPUT_NAME`: Basename of the curl library. Default: `libcurl`
- `PICKY_COMPILER`: Enable picky compiler options. Default: `ON` - `PICKY_COMPILER`: Enable picky compiler options. Default: `ON`
- `STATIC_LIB_SUFFIX`: Static library suffix. Default: (empty) - `STATIC_LIB_SUFFIX`: Static library suffix. Default: (empty)

View File

@ -69,18 +69,27 @@ endif()
## Library definition ## Library definition
if(NOT DEFINED IMPORT_LIB_SUFFIX) if(NOT DEFINED IMPORT_LIB_SUFFIX)
set(IMPORT_LIB_SUFFIX "") # Suffix implib name with "_imp" by default, to avoid conflicting with
# the generated static "libcurl.lib" (typically with MSVC).
if(WIN32 AND BUILD_SHARED_LIBS AND
CMAKE_IMPORT_LIBRARY_SUFFIX STREQUAL CMAKE_STATIC_LIBRARY_SUFFIX)
set(IMPORT_LIB_SUFFIX "_imp")
else()
set(IMPORT_LIB_SUFFIX "")
endif()
endif() endif()
if(NOT DEFINED STATIC_LIB_SUFFIX) if(NOT DEFINED STATIC_LIB_SUFFIX)
set(STATIC_LIB_SUFFIX "") set(STATIC_LIB_SUFFIX "")
endif() endif()
# Add "_imp" as a suffix before the extension to avoid conflicting with # Detect implib static lib filename collision
# the statically linked "libcurl.lib" (typically with MSVC) if(WIN32 AND BUILD_STATIC_LIBS AND BUILD_SHARED_LIBS AND
if(WIN32 AND "${IMPORT_LIB_SUFFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}" STREQUAL
NOT IMPORT_LIB_SUFFIX AND "${STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL CMAKE_IMPORT_LIBRARY_SUFFIX) message(FATAL_ERROR "Library suffix is the same ('${STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}') "
set(IMPORT_LIB_SUFFIX "_imp") "for the import and static '${LIBCURL_OUTPUT_NAME}' library. "
"Set IMPORT_LIB_SUFFIX and/or STATIC_LIB_SUFFIX to different values, "
"or disable building either the shared or static library to avoid the filename collision.")
endif() endif()
# Whether to do a single compilation pass for libcurl sources and reuse these # Whether to do a single compilation pass for libcurl sources and reuse these