From 598bf7936a0213254dd1fb1493f418099c28d60f Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 9 Jun 2022 15:35:40 -0700 Subject: [PATCH] clamav: fix compilation without libiconv-stub Ported similar patch from hidapi. Signed-off-by: Rosen Penev --- net/clamav/Makefile | 2 - net/clamav/patches/020-iconv.patch | 63 ++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 net/clamav/patches/020-iconv.patch diff --git a/net/clamav/Makefile b/net/clamav/Makefile index 6fb63aa67..de53e6bf3 100644 --- a/net/clamav/Makefile +++ b/net/clamav/Makefile @@ -70,8 +70,6 @@ CMAKE_OPTIONS += \ -DENABLE_EXAMPLES=OFF \ -DENABLE_UNRAR=OFF \ -DENABLE_SYSTEMD=OFF \ - -DIconv_INCLUDE_DIR=$(ICONV_PREFIX)/include \ - -DIconv_LIBRARY=$(ICONV_PREFIX)/lib/libiconv.$(if $(ICONV_FULL),so,a) \ -DHAVE_SYSTEM_LFS_FTS=O$(if $(CONFIG_USE_GLIBC),N,FF) TARGET_CXXFLAGS += -ffunction-sections -fdata-sections -fno-rtti -flto diff --git a/net/clamav/patches/020-iconv.patch b/net/clamav/patches/020-iconv.patch new file mode 100644 index 000000000..09cd49145 --- /dev/null +++ b/net/clamav/patches/020-iconv.patch @@ -0,0 +1,63 @@ +--- 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 ++ #include ++ 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 )