summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2020-06-25 11:02:46 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2020-07-13 15:38:36 +0200
commitbcfde1607f92b0ae5081289597f19110afc80ee1 (patch)
treeddf43f2c1d3d477001b311fef3aaf9fa7d80f66d /cmake
parent15bea65d1928883d0ea189f5e5b701ad7652191c (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.cmake32
-rw-r--r--cmake/Qt5CompatSetup.cmake65
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()