From c30d06b7e66c9bfe52f91f472a38cefdfc527601 Mon Sep 17 00:00:00 2001 From: Sibi Siddharthan Date: Tue, 6 Oct 2020 09:37:40 +0530 Subject: FindIntl: Add imported target Fixes: #21271 Signed-off-by: Sibi Siddharthan --- Modules/FindIntl.cmake | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) (limited to 'Modules/FindIntl.cmake') diff --git a/Modules/FindIntl.cmake b/Modules/FindIntl.cmake index 1a09a60972..d29f554eae 100644 --- a/Modules/FindIntl.cmake +++ b/Modules/FindIntl.cmake @@ -15,11 +15,16 @@ installation in several variables. General variables:: Intl_FOUND - true if the libintl headers and libraries were found Intl_INCLUDE_DIRS - the directory containing the libintl headers Intl_LIBRARIES - libintl libraries to be linked + Intl::Intl - imported target for Intl The following cache variables may also be set:: Intl_INCLUDE_DIR - the directory containing the libintl headers Intl_LIBRARY - the libintl library (if any) + Intl_HAVE_GETTEXT_BUILTIN - check if gettext is in the C library + Intl_HAVE_DCGETTEXT_BUILTIN - check if dcgettext is in the C library + Intl_IS_BUILTIN - whether intl is a part of the C library determined + from the result of Intl_HAVE_GETTEXT_BUILTIN and Intl_HAVE_DCGETTEXT_BUILTIN .. note:: On some platforms, such as Linux with GNU libc, the gettext @@ -35,6 +40,22 @@ The following cache variables may also be set:: # Written by Roger Leigh +include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/CheckSymbolExists.cmake) + +# Check if we have libintl is a part of libc +cmake_push_check_state(RESET) +set(CMAKE_REQUIRED_QUIET TRUE) +check_symbol_exists(gettext libintl.h Intl_HAVE_GETTEXT_BUILTIN) +check_symbol_exists(dcgettext libintl.h Intl_HAVE_DCGETTEXT_BUILTIN) # redundant check +cmake_pop_check_state() + +if(Intl_HAVE_GETTEXT_BUILTIN AND Intl_HAVE_DCGETTEXT_BUILTIN) + set(Intl_IS_BUILTIN TRUE) +else() + set(Intl_IS_BUILTIN FALSE) +endif() + # Find include directory find_path(Intl_INCLUDE_DIR NAMES "libintl.h" @@ -42,21 +63,28 @@ find_path(Intl_INCLUDE_DIR mark_as_advanced(Intl_INCLUDE_DIR) # Find all Intl libraries -find_library(Intl_LIBRARY "intl" NAMES_PER_DIR - DOC "libintl libraries (if not in the C library)") -mark_as_advanced(Intl_LIBRARY) +set(Intl_REQUIRED_VARS) +if(NOT Intl_IS_BUILTIN) + find_library(Intl_LIBRARY "intl" "libintl" NAMES_PER_DIR + DOC "libintl libraries (if not in the C library)") + mark_as_advanced(Intl_LIBRARY) + list(APPEND Intl_REQUIRED_VARS Intl_LIBRARY) +endif() include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) FIND_PACKAGE_HANDLE_STANDARD_ARGS(Intl FOUND_VAR Intl_FOUND - REQUIRED_VARS Intl_INCLUDE_DIR + REQUIRED_VARS Intl_INCLUDE_DIR ${Intl_REQUIRED_VARS} FAIL_MESSAGE "Failed to find Gettext libintl") +unset(Intl_REQUIRED_VARS) if(Intl_FOUND) set(Intl_INCLUDE_DIRS "${Intl_INCLUDE_DIR}") - if(Intl_LIBRARY) - set(Intl_LIBRARIES "${Intl_LIBRARY}") - else() - unset(Intl_LIBRARIES) + set(Intl_LIBRARIES "${Intl_LIBRARY}") + if(NOT TARGET Intl::Intl) + add_library(Intl::Intl INTERFACE IMPORTED) + set_target_properties(Intl::Intl PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${Intl_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${Intl_LIBRARIES}") endif() endif() -- cgit v1.2.1