CMakeLists: Improve handling of libintl

by refactoring it into a separate CMake module
This commit is contained in:
Alexis Hildebrandt 2014-02-26 13:55:43 +01:00 committed by ashleyh
parent fba074d994
commit 05b9e11584
4 changed files with 61 additions and 43 deletions

View File

@ -43,6 +43,9 @@ endif(NOT CMAKE_USE_PTHREADS_INIT)
# the static libuv doesn't but uses clock_gettime.
check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME)
find_package(LibIntl)
include_directories(${LibIntl_INCLUDE_DIR})
# Require libuv
find_package(LibUV REQUIRED)
include_directories(${LibUV_INCLUDE_DIRS})

54
cmake/FindLibIntl.cmake Normal file
View File

@ -0,0 +1,54 @@
# - Try to find libintl
# Once done, this will define
#
# LibIntl_FOUND - system has libintl
# LibIntl_INCLUDE_DIRS - the libintl include directories
# LibIntl_LIBRARIES - link these to use libintl
include(CheckCSourceCompiles)
include(LibFindMacros)
# Append custom gettext path to CMAKE_PREFIX_PATH
# if installed via Mac Hombrew
if (CMAKE_HOST_APPLE)
find_program(HOMEBREW_PROG brew)
if (EXISTS ${HOMEBREW_PROG})
execute_process(COMMAND ${HOMEBREW_PROG} --prefix gettext
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE HOMEBREW_GETTEXT_PREFIX)
list(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_GETTEXT_PREFIX}")
endif()
endif()
find_path(LibIntl_INCLUDE_DIR
NAMES libintl.h
)
find_library(LibIntl_LIBRARY
NAMES intl libintl.a
)
if (LibIntl_INCLUDE_DIR)
set(CMAKE_REQUIRED_INCLUDES "${LibIntl_INCLUDE_DIR}")
endif()
# This is required because some operating systems don't have a separate
# libintl--it is built into glibc. So we only need to specify the library
# if one was actually found.
if (LibIntl_LIBRARY)
set(CMAKE_REQUIRED_LIBRARIES "${LibIntl_LIBRARY}")
endif()
check_c_source_compiles("
#include <libintl.h>
int main(int argc, char** argv) {
gettext(\"foo\");
bindtextdomain(\"foo\", \"bar\");
bind_textdomain_codeset(\"foo\", \"bar\");
textdomain(\"foo\");
}" HAVE_WORKING_LIBINTL)
set(LibIntl_PROCESS_INCLUDES LibIntl_INCLUDE_DIR)
set(LibIntl_PROCESS_LIBS LibIntl_LIBRARY)
libfind_process(LibIntl)

View File

@ -1,49 +1,10 @@
include(CheckTypeSize)
include(CheckCSourceCompiles)
check_type_size("int" SIZEOF_INT)
check_type_size("long" SIZEOF_LONG)
check_type_size("time_t" SIZEOF_TIME_T)
check_type_size("off_t" SIZEOF_OFF_T)
if (CMAKE_HOST_APPLE)
find_program(HAVE_HOMEBREW brew)
if (HAVE_HOMEBREW)
execute_process(COMMAND brew --prefix gettext
OUTPUT_VARIABLE _TMP_HOMEBREW_GETTEXT_PREFIX
OUTPUT_STRIP_TRAILING_WHITESPACE)
set(HOMEBREW_GETTEXT_PREFIX ${_TMP_HOMEBREW_GETTEXT_PREFIX}
CACHE
PATH "homebrew gettext directory (${_TMP_HOMEBREW_GETTEXT_PREFIX})")
list(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_GETTEXT_PREFIX}")
endif()
endif()
find_path(LIBINTL_INCLUDE_DIR libintl.h)
find_library(LIBINTL_LIB intl)
get_filename_component(LIBINTL_LIB_DIR "${LIBINTL_LIB}" NAME)
if (LIBINTL_INCLUDE_DIR)
set(CMAKE_REQUIRED_INCLUDES "${LIBINTL_INCLUDE_DIR}")
endif()
# This is required because some operating systems don't have a separate
# libintl--it is built into glibc. So we only need to specify the library if
# one was actually found.
if (LIBINTL_LIB)
set(CMAKE_REQUIRED_LIBRARIES "${LIBINTL_LIB}")
endif()
check_c_source_compiles("
#include <libintl.h>
int main(int argc, char** argv) {
gettext(\"foo\");
bindtextdomain(\"foo\", \"bar\");
bind_textdomain_codeset(\"foo\", \"bar\");
textdomain(\"foo\");
}" HAVE_LIBINTL)
# generate configuration header and update include directories
configure_file (
"${PROJECT_SOURCE_DIR}/config/config.h.in"

View File

@ -23,6 +23,10 @@ if(HAVE_CLOCK_GETTIME)
list(APPEND NVIM_LINK_LIBRARIES rt)
endif(HAVE_CLOCK_GETTIME)
if (LibIntl_FOUND)
list(APPEND NVIM_LINK_LIBRARIES ${LibIntl_LIBRARY})
endif()
target_link_libraries (nvim ${NVIM_LINK_LIBRARIES})
include(CheckLibraryExists)
@ -40,10 +44,6 @@ else()
endif()
endif()
if (HAVE_LIBINTL AND LIBINTL_LIB)
target_link_libraries(nvim ${LIBINTL_LIB})
endif()
include_directories ("${PROJECT_SOURCE_DIR}/src/proto")
install(TARGETS nvim RUNTIME DESTINATION bin)