diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-06-25 11:02:46 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-07-13 15:38:36 +0200 |
commit | bcfde1607f92b0ae5081289597f19110afc80ee1 (patch) | |
tree | ddf43f2c1d3d477001b311fef3aaf9fa7d80f66d /cmake | |
parent | 15bea65d1928883d0ea189f5e5b701ad7652191c (diff) |
configure: Merge the three iconv libraries
The distinction between the GNU and POSIX flavors is not necessary
anymore since a recent commit that employs a const_cast to support both
flavors unconditionally.
The SUN iconv library is the same as GNU without the -liconv linker
flag. The iconv versions that need or may not need the -liconv linker
flag are covered by one common "iconv" library.
Fixes: QTBUG-84708
Change-Id: I3db530c9403afd9bc3db43849f7da1b4fcda917c
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/FindWrapIconv.cmake | 32 | ||||
-rw-r--r-- | cmake/Qt5CompatSetup.cmake | 65 |
2 files changed, 32 insertions, 65 deletions
diff --git a/cmake/FindWrapIconv.cmake b/cmake/FindWrapIconv.cmake new file mode 100644 index 0000000..0c2a45c --- /dev/null +++ b/cmake/FindWrapIconv.cmake @@ -0,0 +1,32 @@ +# We can't create the same interface imported target multiple times, CMake will complain if we do +# that. This can happen if the find_package call is done in multiple different subdirectories. +if(TARGET WrapIconv::WrapIconv) + set(WrapIconv_FOUND ON) + return() +endif() + +include(CheckCXXSourceCompiles) + +set(iconv_test_sources "#include <iconv.h> + +int main(int, char **) +{ + iconv_t x = iconv_open(\"\", \"\"); + iconv_close(x); + return 0; +}") + +check_cxx_source_compiles("${iconv_test_sources}" HAVE_ICONV) +if(NOT HAVE_ICONV) + set(_req_libraries "${CMAKE_REQUIRE_LIBRARIES}") + set(CMAKE_REQUIRE_LIBRARIES "iconv") + check_cxx_source_compiles("${iconv_test_sources}" HAVE_ICONV_WITH_LIB) + set(CMAKE_REQUIRE_LIBRARIES "${_req_libraries}") +endif() + +add_library(WrapIconv::WrapIconv INTERFACE IMPORTED) +if(HAVE_ICONV_WITH_LIB) + target_link_libraries(WrapIconv::WrapIconv INTERFACE iconv) +endif() + +set(WrapIconv_FOUND 1) diff --git a/cmake/Qt5CompatSetup.cmake b/cmake/Qt5CompatSetup.cmake deleted file mode 100644 index 6442055..0000000 --- a/cmake/Qt5CompatSetup.cmake +++ /dev/null @@ -1,65 +0,0 @@ -function(qt_run_config_test_posix_iconv) - set(source "#include <iconv.h> - -int main(int, char **) -{ - iconv_t x = iconv_open(\"\", \"\"); - char *inp; - char *outp; - size_t inbytes, outbytes; - iconv(x, &inp, &inbytes, &outp, &outbytes); - iconv_close(x); - return 0; -}") - check_cxx_source_compiles("${source}" HAVE_POSIX_ICONV) - - if(NOT HAVE_POSIX_ICONV) - set(_req_libraries "${CMAKE_REQUIRE_LIBRARIES}") - set(CMAKE_REQUIRE_LIBRARIES "iconv") - check_cxx_source_compiles("${source}" HAVE_POSIX_ICONV) - set(CMAKE_REQUIRE_LIBRARIES "${_req_libraries}") - if(HAVE_POSIX_ICONV) - set(TEST_iconv_needlib 1 CACHE INTERNAL "Need to link against libiconv") - endif() - endif() - - set(TEST_posix_iconv "${HAVE_POSIX_ICONV}" CACHE INTERNAL "POSIX iconv") -endfunction() - - -function(qt_run_config_test_sun_iconv) - set(source "#include <iconv.h> - -int main(int, char **) -{ - iconv_t x = iconv_open(\"\", \"\"); - const char *inp; - char *outp; - size_t inbytes, outbytes; - iconv(x, &inp, &inbytes, &outp, &outbytes); - iconv_close(x); - return 0; -}") - if(DARWIN) - # as per !config.darwin in configure.json - set(HAVE_SUN_ICONV OFF) - else() - check_cxx_source_compiles("${source}" HAVE_SUN_ICONV) - endif() - - set(TEST_sun_iconv "${HAVE_SUN_ICONV}" CACHE INTERNAL "SUN libiconv") -endfunction() - -function(qt_run_qt5compat_config_tests) - qt_run_config_test_posix_iconv() - - add_library(Iconv INTERFACE) - if(TEST_iconv_needlib) - target_link_libraries(Iconv PUBLIC iconv) - endif() - - if(NOT TEST_posix_iconv) - qt_run_config_test_sun_iconv() - endif() -endfunction() -qt_run_qt5compat_config_tests() |