mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
CMakeLists: Improve handling of libintl
by refactoring it into a separate CMake module
This commit is contained in:
parent
fba074d994
commit
05b9e11584
@ -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
54
cmake/FindLibIntl.cmake
Normal 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)
|
@ -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"
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user