Fix iconv detection
[obexftp:mainline.git] / CMakeModules / FindIconv.cmake
1
2 find_path ( ICONV_INCLUDE_DIR iconv.h )
3 mark_as_advanced ( ICONV_INCLUDE_DIR )
4
5 set ( ICONV_INCLUDE_DIRS ${ICONV_INCLUDE_DIR} )
6
7 if ( ICONV_INCLUDE_DIRS )
8   include ( CheckFunctionExists )
9
10   unset ( CMAKE_REQUIRED_FLAGS )
11   unset ( CMAKE_REQUIRED_DEFINITIONS )
12   set ( CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIRS} )
13   unset ( CMAKE_REQUIRED_LIBRARIES )
14   check_function_exists ( iconv_open ICONV_FOUND )
15
16   if ( NOT ICONV_FOUND )
17     find_library ( iconv_LIBRARY iconv )
18     if ( iconv_LIBRARY )
19       set ( CMAKE_REQUIRED_LIBRARIES ${iconv_LIBRARY} )
20       check_function_exists ( iconv_open ICONV_FOUND )
21       if ( ICONV_FOUND )
22         set ( ICONV_LIBRARIES ${iconv_LIBRARY} )
23       endif ( ICONV_FOUND )
24     endif ( iconv_LIBRARY )
25   endif ( NOT ICONV_FOUND )
26 endif ( ICONV_INCLUDE_DIRS )
27
28 if ( ICONV_FOUND )
29   set ( ICONV_CONST_TEST_SOURCE "
30 #include <stdlib.h>
31 #include <iconv.h>
32 extern
33 #ifdef __cplusplus
34 \"C\"
35 #endif
36 #if defined(__STDC__) || defined(__cplusplus)
37 size_t iconv (iconv_t cd, const char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
38 #else
39 size_t iconv();
40 #endif
41
42 int main(void) { return 0; }
43 ")
44   unset ( CMAKE_REQUIRED_FLAGS )
45   unset ( CMAKE_REQUIRED_DEFINITIONS )
46   set ( CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIRS} )
47   unset ( CMAKE_REQUIRED_LIBRARIES )
48   check_c_source_compiles ( "${ICONV_CONST_TEST_SOURCE}" ICONV_USES_CONST )
49 endif ( ICONV_FOUND )
50
51 if ( NOT ICONV_FOUND )
52   if ( Iconv_REQUIRED )
53     message ( FATAL_ERROR "Iconv not found" )
54   endif ( Iconv_REQUIRED )
55 endif ( NOT ICONV_FOUND )