63 lines
2.2 KiB
Diff
63 lines
2.2 KiB
Diff
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -448,7 +448,7 @@ endif()
|
|
|
|
# libclamav feature dependencies
|
|
if(NOT WIN32)
|
|
- find_package(Iconv REQUIRED)
|
|
+ find_package(Iconv)
|
|
# Set variable required by libclamav to use iconv
|
|
set(HAVE_ICONV 1)
|
|
endif()
|
|
--- a/libclamav/CMakeLists.txt
|
|
+++ b/libclamav/CMakeLists.txt
|
|
@@ -536,10 +536,39 @@ if(ENABLE_SHARED_LIB)
|
|
ClamAV::win32_compat
|
|
wsock32 ws2_32 )
|
|
else()
|
|
+ if(Iconv_FOUND)
|
|
+ if(NOT Iconv_IS_BUILT_IN)
|
|
+ target_link_libraries(clamav PRIVATE Iconv::Iconv)
|
|
+ set(CMAKE_REQUIRED_LIBRARIES "Iconv::Iconv")
|
|
+ endif()
|
|
+ else()
|
|
+ # Sometime the build environment is not setup
|
|
+ # in a way CMake can find Iconv on its own by default.
|
|
+ # But if we simply link against iconv (-liconv), the build may succeed
|
|
+ # due to other compiler/link flags.
|
|
+ set(CMAKE_REQUIRED_LIBRARIES "iconv")
|
|
+ check_c_source_compiles("
|
|
+ #include <stddef.h>
|
|
+ #include <iconv.h>
|
|
+ int main() {
|
|
+ char *a, *b;
|
|
+ size_t i, j;
|
|
+ iconv_t ic;
|
|
+ ic = iconv_open(\"to\", \"from\");
|
|
+ iconv(ic, &a, &i, &b, &j);
|
|
+ iconv_close(ic);
|
|
+ }
|
|
+ "
|
|
+ Iconv_EXPLICITLY_AT_ENV)
|
|
+ if(Iconv_EXPLICITLY_AT_ENV)
|
|
+ target_link_libraries(clamav PRIVATE iconv)
|
|
+ else()
|
|
+ message(FATAL_ERROR "Iconv is not found, make sure to provide it in the build environment")
|
|
+ endif()
|
|
+ endif()
|
|
target_link_libraries( clamav
|
|
PUBLIC
|
|
Threads::Threads
|
|
- Iconv::Iconv
|
|
${CMAKE_DL_LIBS}
|
|
m )
|
|
endif()
|
|
@@ -556,8 +585,6 @@ if(ENABLE_SHARED_LIB)
|
|
|
|
if(WIN32)
|
|
set_target_properties( clamav PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
|
- else()
|
|
- target_link_libraries( clamav PUBLIC Iconv::Iconv )
|
|
endif()
|
|
if(WIN32)
|
|
install( TARGETS clamav DESTINATION . COMPONENT libraries )
|