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:
parent
e7adf3e837
commit
1b87357967
@ -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)
|
||||||
|
|||||||
@ -69,18 +69,27 @@ endif()
|
|||||||
## Library definition
|
## Library definition
|
||||||
|
|
||||||
if(NOT DEFINED IMPORT_LIB_SUFFIX)
|
if(NOT DEFINED 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 "")
|
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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user