comparison Resources/CMake/LibIconvConfiguration.cmake @ 2366:26f3a346226f

more consistent handling of libiconv in cmake
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 21 Aug 2017 21:21:48 +0200
parents 423d3b692bb9
children 2aff870c2c58
comparison
equal deleted inserted replaced
2365:9e0eae8a5ea4 2366:26f3a346226f
1 set(LIBICONV_SOURCES_DIR ${CMAKE_BINARY_DIR}/libiconv-1.15) 1 if (NOT USE_BOOST_ICONV)
2 set(LIBICONV_URL "http://www.orthanc-server.com/downloads/third-party/libiconv-1.15.tar.gz") 2 message("Not using libiconv")
3 set(LIBICONV_MD5 "ace8b5f2db42f7b3b3057585e80d9808")
4 3
5 DownloadPackage(${LIBICONV_MD5} ${LIBICONV_URL} "${LIBICONV_SOURCES_DIR}") 4 if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
5 # Starting with release 0.8.2, Orthanc statically links against
6 # libiconv, even on Windows. Indeed, the "WCONV" library of
7 # Windows XP seems not to support properly several codepages
8 # (notably "Latin3", "Hebrew", and "Arabic"). The flag
9 # "USE_BOOST_ICONV" allows to force the use of "WCONV".
10 add_definitions(-DBOOST_LOCALE_WITH_WCONV=1)
11 else()
12 message(FATAL_ERROR "Support your platform here")
13 endif()
6 14
7 # https://groups.google.com/d/msg/android-ndk/AS1nkxnk6m4/EQm09hD1tigJ 15 else()
8 add_definitions( 16 message("Using libiconv")
9 -DBOOST_LOCALE_WITH_ICONV=1
10 -DBUILDING_LIBICONV=1
11 -DIN_LIBRARY=1
12 -DLIBDIR=""
13 -DICONV_CONST=
14 )
15 17
16 configure_file( 18 add_definitions(
17 ${LIBICONV_SOURCES_DIR}/srclib/localcharset.h 19 -DBOOST_LOCALE_WITH_ICONV=1
18 ${LIBICONV_SOURCES_DIR}/include 20 )
19 COPYONLY)
20 21
21 set(HAVE_VISIBILITY 0) 22 if (STATIC_BUILD OR NOT USE_SYSTEM_LIBICONV)
22 set(ICONV_CONST ${ICONV_CONST}) 23 set(LIBICONV_SOURCES_DIR ${CMAKE_BINARY_DIR}/libiconv-1.15)
23 set(USE_MBSTATE_T 1) 24 set(LIBICONV_URL "http://www.orthanc-server.com/downloads/third-party/libiconv-1.15.tar.gz")
24 set(BROKEN_WCHAR_H 0) 25 set(LIBICONV_MD5 "ace8b5f2db42f7b3b3057585e80d9808")
25 set(EILSEQ)
26 set(HAVE_WCHAR_T 1)
27 configure_file(
28 ${LIBICONV_SOURCES_DIR}/include/iconv.h.build.in
29 ${LIBICONV_SOURCES_DIR}/include/iconv.h
30 )
31 unset(HAVE_VISIBILITY)
32 unset(ICONV_CONST)
33 unset(USE_MBSTATE_T)
34 unset(BROKEN_WCHAR_H)
35 unset(EILSEQ)
36 unset(HAVE_WCHAR_T)
37 26
38 # Create an empty "config.h" for libiconv 27 DownloadPackage(${LIBICONV_MD5} ${LIBICONV_URL} "${LIBICONV_SOURCES_DIR}")
39 file(WRITE ${LIBICONV_SOURCES_DIR}/include/config.h "")
40 28
41 include_directories( 29 # Disable the support of libiconv that is shipped by default with
42 ${LIBICONV_SOURCES_DIR}/include 30 # the C standard library on Linux. Setting this macro redirects
43 ) 31 # calls from "iconv*()" to "libiconv*()" in the source code of
32 # "libiconv-1.15".
33 add_definitions(-DLIBICONV_PLUG=1)
44 34
45 list(APPEND BOOST_SOURCES 35 # https://groups.google.com/d/msg/android-ndk/AS1nkxnk6m4/EQm09hD1tigJ
46 ${LIBICONV_SOURCES_DIR}/lib/iconv.c 36 add_definitions(
47 ${LIBICONV_SOURCES_DIR}/lib/relocatable.c 37 -DBUILDING_LIBICONV=1
48 ${LIBICONV_SOURCES_DIR}/libcharset/lib/localcharset.c 38 -DIN_LIBRARY=1
49 ${LIBICONV_SOURCES_DIR}/libcharset/lib/relocatable.c 39 -DLIBDIR=""
50 ) 40 -DICONV_CONST=
41 )
51 42
52 source_group(ThirdParty\\libiconv REGULAR_EXPRESSION ${LIBICONV_SOURCES_DIR}/.*) 43 configure_file(
44 ${LIBICONV_SOURCES_DIR}/srclib/localcharset.h
45 ${LIBICONV_SOURCES_DIR}/include
46 COPYONLY)
47
48 set(HAVE_VISIBILITY 0)
49 set(ICONV_CONST ${ICONV_CONST})
50 set(USE_MBSTATE_T 1)
51 set(BROKEN_WCHAR_H 0)
52 set(EILSEQ)
53 set(HAVE_WCHAR_T 1)
54 configure_file(
55 ${LIBICONV_SOURCES_DIR}/include/iconv.h.build.in
56 ${LIBICONV_SOURCES_DIR}/include/iconv.h
57 )
58 unset(HAVE_VISIBILITY)
59 unset(ICONV_CONST)
60 unset(USE_MBSTATE_T)
61 unset(BROKEN_WCHAR_H)
62 unset(EILSEQ)
63 unset(HAVE_WCHAR_T)
64
65 # Create an empty "config.h" for libiconv
66 file(WRITE ${LIBICONV_SOURCES_DIR}/include/config.h "")
67
68 include_directories(
69 ${LIBICONV_SOURCES_DIR}/include
70 )
71
72 set(LIBICONV_SOURCES
73 ${LIBICONV_SOURCES_DIR}/lib/iconv.c
74 ${LIBICONV_SOURCES_DIR}/lib/relocatable.c
75 ${LIBICONV_SOURCES_DIR}/libcharset/lib/localcharset.c
76 ${LIBICONV_SOURCES_DIR}/libcharset/lib/relocatable.c
77 )
78
79 source_group(ThirdParty\\libiconv REGULAR_EXPRESSION ${LIBICONV_SOURCES_DIR}/.*)
80
81 if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
82 add_definitions(-DHAVE_WORKING_O_NOFOLLOW=0)
83 else()
84 add_definitions(-DHAVE_WORKING_O_NOFOLLOW=1)
85 endif()
86
87 else()
88 CHECK_INCLUDE_FILE_CXX(iconv.h HAVE_ICONV_H)
89 if (NOT HAVE_ICONV_H)
90 message(FATAL_ERROR "Please install the libiconv-dev package")
91 endif()
92
93 # Check whether the support for libiconv is bundled within the
94 # standard library
95 CHECK_FUNCTION_EXISTS(iconv_open HAVE_ICONV_LIB)
96 if (NOT HAVE_ICONV_LIB)
97 # No builtin support for libiconv, try and find an external library.
98 # Open question: Does this make sense on any platform?
99 CHECK_LIBRARY_EXISTS(iconv iconv_open "" HAVE_ICONV_LIB_2)
100 if (NOT HAVE_ICONV_LIB_2)
101 message(FATAL_ERROR "Please install the libiconv-dev package")
102 else()
103 link_libraries(iconv)
104 endif()
105 endif()
106
107 endif()
108 endif()