diff options
| author | Brad King <brad.king@kitware.com> | 2021-03-29 13:30:03 (GMT) |
|---|---|---|
| committer | Kitware Robot <kwrobot@kitware.com> | 2021-03-29 13:31:02 (GMT) |
| commit | 99dd2a6e159cc72cd76809d22abd13d07c99e849 (patch) | |
| tree | a69298e793d8433bbcae8fede83bf0470737c8c6 /Modules | |
| parent | 0e37e0d215a3f9c5b6108bf4e5366b9d7f03ff7b (diff) | |
| parent | e34d64c04d5715710a811325ce68a1481a514d3c (diff) | |
| download | CMake-99dd2a6e159cc72cd76809d22abd13d07c99e849.zip CMake-99dd2a6e159cc72cd76809d22abd13d07c99e849.tar.gz CMake-99dd2a6e159cc72cd76809d22abd13d07c99e849.tar.bz2 | |
Merge topic 'FindIntl-builtin' into release-3.20
e34d64c04d FindIntl: Fix detection of intl built in to C library
cb0d1a49e6 FindIntl: Improve documentation formatting
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Jeremy Tan <jtanx@outlook.com>
Acked-by: David Adam <zanchey@ucc.gu.uwa.edu.au>
Merge-request: !5948
Diffstat (limited to 'Modules')
| -rw-r--r-- | Modules/FindIntl.cmake | 117 |
1 files changed, 76 insertions, 41 deletions
diff --git a/Modules/FindIntl.cmake b/Modules/FindIntl.cmake index 686c818..43398c1 100644 --- a/Modules/FindIntl.cmake +++ b/Modules/FindIntl.cmake @@ -10,27 +10,38 @@ FindIntl Find the Gettext libintl headers and libraries. This module reports information about the Gettext libintl -installation in several variables. General variables:: +installation in several 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 +.. variable:: Intl_FOUND + + True if libintl is found. + +.. variable:: Intl_INCLUDE_DIRS + + The directory containing the libintl headers. + +.. variable:: Intl_LIBRARIES + + The intl libraries to be linked. .. versionadded:: 3.20 This module defines :prop_tgt:`IMPORTED` target ``Intl::Intl``. -The following cache variables may also be set:: +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 +.. variable:: Intl_INCLUDE_DIR -.. versionadded:: 3.20 - Added the ``Intl_HAVE_GETTEXT_BUILTIN``, ``Intl_HAVE_DCGETTEXT_BUILTIN`` and - ``Intl_IS_BUILTIN`` variables. + The directory containing the libintl headers + +.. variable:: Intl_LIBRARY + + The libintl library (if any) + +.. variable:: Intl_IS_BUILT_IN + + .. versionadded:: 3.20 + + whether ``intl`` is a part of the C library. .. note:: On some platforms, such as Linux with GNU libc, the gettext @@ -43,50 +54,74 @@ The following cache variables may also be set:: ``msgfmt``, etc.), use :module:`FindGettext`. #]=======================================================================] - -# Written by Roger Leigh <rleigh@codelibre.net> - include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/CheckSymbolExists.cmake) +if(CMAKE_C_COMPILER_LOADED) + include(${CMAKE_CURRENT_LIST_DIR}/CheckCSourceCompiles.cmake) +elseif(CMAKE_CXX_COMPILER_LOADED) + include(${CMAKE_CURRENT_LIST_DIR}/CheckCXXSourceCompiles.cmake) +else() + # If neither C nor CXX are loaded, implicit intl makes no sense. + set(Intl_IS_BUILT_IN FALSE) +endif() -# 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() +# Check if Intl is built in to the C library. +if(NOT DEFINED Intl_IS_BUILT_IN) + if(NOT DEFINED Intl_INCLUDE_DIR AND NOT DEFINED Intl_LIBRARY) + cmake_push_check_state(RESET) + set(CMAKE_REQUIRED_QUIET TRUE) + set(Intl_IMPLICIT_TEST_CODE [[ +#include <libintl.h> +int main(void) { + gettext(""); + dgettext("", ""); + dcgettext("", "", 0); + return 0; +} +]]) + if(CMAKE_C_COMPILER_LOADED) + check_c_source_compiles("${Intl_IMPLICIT_TEST_CODE}" Intl_IS_BUILT_IN) + else() + check_cxx_source_compiles("${Intl_IMPLICIT_TEST_CODE}" Intl_IS_BUILT_IN) + endif() + cmake_pop_check_state() + else() + set(Intl_IS_BUILT_IN FALSE) + endif() +endif() -if(Intl_HAVE_GETTEXT_BUILTIN AND Intl_HAVE_DCGETTEXT_BUILTIN) - set(Intl_IS_BUILTIN TRUE) +set(_Intl_REQUIRED_VARS) +if(Intl_IS_BUILT_IN) + set(_Intl_REQUIRED_VARS _Intl_IS_BUILT_IN_MSG) + set(_Intl_IS_BUILT_IN_MSG "built in to C library") else() - set(Intl_IS_BUILTIN FALSE) -endif() + set(_Intl_REQUIRED_VARS Intl_LIBRARY Intl_INCLUDE_DIR) -# Find include directory -find_path(Intl_INCLUDE_DIR - NAMES "libintl.h" - DOC "libintl include directory") -mark_as_advanced(Intl_INCLUDE_DIR) + find_path(Intl_INCLUDE_DIR + NAMES "libintl.h" + DOC "libintl include directory") + mark_as_advanced(Intl_INCLUDE_DIR) -# Find all Intl libraries -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 ${Intl_REQUIRED_VARS} + REQUIRED_VARS ${_Intl_REQUIRED_VARS} FAIL_MESSAGE "Failed to find Gettext libintl") -unset(Intl_REQUIRED_VARS) +unset(_Intl_REQUIRED_VARS) +unset(_Intl_IS_BUILT_IN_MSG) if(Intl_FOUND) - set(Intl_INCLUDE_DIRS "${Intl_INCLUDE_DIR}") - set(Intl_LIBRARIES "${Intl_LIBRARY}") + if(Intl_IS_BUILT_IN) + set(Intl_INCLUDE_DIRS "") + set(Intl_LIBRARIES "") + else() + set(Intl_INCLUDE_DIRS "${Intl_INCLUDE_DIR}") + set(Intl_LIBRARIES "${Intl_LIBRARY}") + endif() if(NOT TARGET Intl::Intl) add_library(Intl::Intl INTERFACE IMPORTED) set_target_properties(Intl::Intl PROPERTIES |
