aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2011-04-28 14:38:04 +0000
committerPierre Ossman <ossman@cendio.se>2011-04-28 14:38:04 +0000
commitb232b5fd73140c09f739ddbbd045a89fc7259f19 (patch)
treeab6b2388cce07d06ff5e8b5a3c4f03c6e2c7cf8c
parentbb445ef944f3850de98a6a90b44b1f87c341e989 (diff)
downloadtigervnc-b232b5fd73140c09f739ddbbd045a89fc7259f19.tar.gz
tigervnc-b232b5fd73140c09f739ddbbd045a89fc7259f19.zip
Finish up the gettext handling in CMake. The included functions in CMake only
take care of finding the gettext tools, not the headers and libraries needed to build things. Use the licq project as inspiration on how to solve this. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4389 3789f03b-4d11-0410-bbf8-ca57d06f2519
-rw-r--r--CMakeLists.txt40
-rw-r--r--cmake/Modules/FindIconv.cmake66
-rw-r--r--cmake/getdate.bat (renamed from cmakescripts/getdate.bat)0
-rw-r--r--vncviewer/CMakeLists.txt3
4 files changed, 105 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7322cbc8..1731899c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,8 +4,12 @@
cmake_minimum_required(VERSION 2.6)
+# Internal cmake modules
+set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+
include(CheckIncludeFiles)
include(CheckFunctionExists)
+include(CheckLibraryExists)
include(CheckTypeSize)
include(CheckCSourceCompiles)
include(CheckCXXSourceCompiles)
@@ -29,7 +33,7 @@ add_definitions(-DLOCALEDIR="${CMAKE_INSTALL_PREFIX}/share/locale")
# some kind of Unix system. The id will be empty if things fail.
set(BUILD "")
if(MSVC)
- execute_process(COMMAND "${CMAKE_SOURCE_DIR}/cmakescripts/getdate.bat"
+ execute_process(COMMAND "${CMAKE_SOURCE_DIR}/cmake/getdate.bat"
OUTPUT_VARIABLE BUILD)
else()
execute_process(COMMAND "date" "+%Y%m%d" OUTPUT_VARIABLE BUILD)
@@ -125,8 +129,38 @@ endif()
# Check for gettext
option(ENABLE_NLS "Enable translation of program messages" ON)
-find_package(Gettext)
-set(LOCALE_DIR "${CMAKE_INSTALL_PREFIX}/share/locale")
+if(ENABLE_NLS)
+ # Tools
+ find_package(Gettext REQUIRED)
+ set(LOCALE_DIR "${CMAKE_INSTALL_PREFIX}/share/locale")
+
+ # Gettext needs iconv
+ find_package(Iconv REQUIRED)
+
+ # Headers and libraries (copied from licq)
+ set(GETTEXT_FOUND FALSE)
+
+ find_path(GETTEXT_INCLUDE_DIR libintl.h)
+ if(GETTEXT_INCLUDE_DIR)
+ set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES})
+ check_function_exists(dgettext LIBC_HAS_DGETTEXT)
+ if(LIBC_HAS_DGETTEXT)
+ set(GETTEXT_FOUND TRUE)
+ else()
+ find_library(LIBINTL_LIBRARY NAMES intl libintl)
+ check_library_exists(${LIBINTL_LIBRARY} "dgettext" "" LIBINTL_HAS_DGETTEXT)
+ if(LIBINTL_HAS_DGETTEXT)
+ set(GETTEXT_LIBRARIES ${LIBINTL_LIBRARY})
+ set(GETTEXT_FOUND TRUE)
+ endif()
+ endif()
+ set(CMAKE_REQUIRED_LIBRARIES)
+ endif()
+
+ if(NOT GETTEXT_FOUND)
+ message(FATAL_ERROR "Gettext NOT found")
+ endif()
+endif()
# Check for libjpeg
find_package(JPEG REQUIRED)
diff --git a/cmake/Modules/FindIconv.cmake b/cmake/Modules/FindIconv.cmake
new file mode 100644
index 00000000..cf268ea0
--- /dev/null
+++ b/cmake/Modules/FindIconv.cmake
@@ -0,0 +1,66 @@
+# From: http://gitorious.org/gammu/mainline/blobs/master/cmake/FindIconv.cmake
+
+# - Try to find Iconv
+# Once done this will define
+#
+# ICONV_FOUND - system has Iconv
+# ICONV_INCLUDE_DIR - the Iconv include directory
+# ICONV_LIBRARIES - Link these to use Iconv
+# ICONV_SECOND_ARGUMENT_IS_CONST - the second argument for iconv() is const
+#
+include(CheckCCompilerFlag)
+include(CheckCXXSourceCompiles)
+
+IF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
+ # Already in cache, be silent
+ SET(ICONV_FIND_QUIETLY TRUE)
+ENDIF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
+
+FIND_PATH(ICONV_INCLUDE_DIR iconv.h)
+
+FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv c)
+
+IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
+ SET(ICONV_FOUND TRUE)
+ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
+
+set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR})
+set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES})
+IF(ICONV_FOUND)
+ check_c_compiler_flag("-Werror" ICONV_HAVE_WERROR)
+ set (CMAKE_C_FLAGS_BACKUP "${CMAKE_C_FLAGS}")
+ if(ICONV_HAVE_WERROR)
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
+ endif(ICONV_HAVE_WERROR)
+ check_c_source_compiles("
+ #include <iconv.h>
+ int main(){
+ iconv_t conv = 0;
+ const char* in = 0;
+ size_t ilen = 0;
+ char* out = 0;
+ size_t olen = 0;
+ iconv(conv, &in, &ilen, &out, &olen);
+ return 0;
+ }
+" ICONV_SECOND_ARGUMENT_IS_CONST )
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_BACKUP}")
+ENDIF(ICONV_FOUND)
+set(CMAKE_REQUIRED_INCLUDES)
+set(CMAKE_REQUIRED_LIBRARIES)
+
+IF(ICONV_FOUND)
+ IF(NOT ICONV_FIND_QUIETLY)
+ MESSAGE(STATUS "Found Iconv: ${ICONV_LIBRARIES}")
+ ENDIF(NOT ICONV_FIND_QUIETLY)
+ELSE(ICONV_FOUND)
+ IF(Iconv_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "Could not find Iconv")
+ ENDIF(Iconv_FIND_REQUIRED)
+ENDIF(ICONV_FOUND)
+
+MARK_AS_ADVANCED(
+ ICONV_INCLUDE_DIR
+ ICONV_LIBRARIES
+ ICONV_SECOND_ARGUMENT_IS_CONST
+)
diff --git a/cmakescripts/getdate.bat b/cmake/getdate.bat
index b4251bbb..b4251bbb 100644
--- a/cmakescripts/getdate.bat
+++ b/cmake/getdate.bat
diff --git a/vncviewer/CMakeLists.txt b/vncviewer/CMakeLists.txt
index b4f888e1..c832b354 100644
--- a/vncviewer/CMakeLists.txt
+++ b/vncviewer/CMakeLists.txt
@@ -1,4 +1,5 @@
include_directories(${FLTK_INCLUDE_DIR})
+include_directories(${GETTEXT_INCLUDE_DIR})
include_directories(${CMAKE_SOURCE_DIR}/common)
set(VNCVIEWER_SOURCES
@@ -16,6 +17,6 @@ endif()
add_executable(vncviewer ${VNCVIEWER_SOURCES})
-target_link_libraries(vncviewer rfb network rdr os Xregion ${FLTK_LIBRARIES})
+target_link_libraries(vncviewer rfb network rdr os Xregion ${FLTK_LIBRARIES} ${GETTEXT_LIBRARIES})
install (TARGETS vncviewer DESTINATION bin)