mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-29 04:09:35 +03:00
cmake_host_system_information: Add query for the locale's charset
Issue: #27562
This commit is contained in:
@@ -108,6 +108,7 @@ set(CMake_TEST_IPO_WORKS_Fortran "ON" CACHE BOOL "")
|
||||
if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
|
||||
set(CMake_TEST_ISPC "ON" CACHE STRING "")
|
||||
endif()
|
||||
set(CMake_TEST_LOCALE_CHARSET "ISO-8859-1" CACHE STRING "")
|
||||
set(CMake_TEST_Qt5 "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_TLS_VERIFY_URL "https://gitlab.kitware.com" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERIFY_URL_BAD "https://badtls-expired.kitware.com" CACHE STRING "")
|
||||
|
||||
@@ -4,6 +4,7 @@ if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
|
||||
set(CMake_TEST_CPACK_APPIMAGE_RUNTIME_FILE "$ENV{CI_PROJECT_DIR}/.gitlab/appimagetool/lib/appimagetool/runtime" CACHE FILEPATH "")
|
||||
set(CMake_TEST_ISPC "ON" CACHE STRING "")
|
||||
endif()
|
||||
set(CMake_TEST_LOCALE_CHARSET "UTF-8" CACHE STRING "")
|
||||
set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly,build_database" CACHE STRING "")
|
||||
set(CMake_TEST_Rust "ON" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERIFY_URL "https://gitlab.kitware.com" CACHE STRING "")
|
||||
|
||||
@@ -6,6 +6,7 @@ set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_CXX "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_GUI "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_LOCALE_CHARSET "UTF-8" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERIFY_URL "https://gitlab.kitware.com" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERIFY_URL_BAD "https://badtls-expired.kitware.com" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERSION "1.2" CACHE STRING "")
|
||||
|
||||
@@ -9,6 +9,7 @@ set(CMake_TEST_GUI "ON" CACHE BOOL "")
|
||||
if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
|
||||
set(CMake_TEST_ISPC "ON" CACHE STRING "")
|
||||
endif()
|
||||
set(CMake_TEST_LOCALE_CHARSET "UTF-8" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERIFY_URL "https://gitlab.kitware.com" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERIFY_URL_BAD "https://badtls-expired.kitware.com" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERSION "1.2" CACHE STRING "")
|
||||
|
||||
@@ -2,6 +2,7 @@ set(BUILD_QtDialog ON CACHE BOOL "")
|
||||
set(BUILD_CursesDialog ON CACHE BOOL "")
|
||||
set(CMAKE_PREFIX_PATH "$ENV{CI_PROJECT_DIR}/.gitlab/qt" CACHE STRING "")
|
||||
set(CMake_TEST_Java OFF CACHE BOOL "")
|
||||
set(CMake_TEST_LOCALE_CHARSET "UTF-8" CACHE STRING "")
|
||||
set(Python_FIND_REGISTRY NEVER CACHE STRING "")
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
if test "$CMAKE_CI_NIGHTLY" = "true"; then
|
||||
source .gitlab/ci/ispc-env.sh
|
||||
fi
|
||||
|
||||
# Test in a Latin-1 locale.
|
||||
export LANG=en_US.ISO-8859-1
|
||||
|
||||
@@ -2,3 +2,6 @@ if test "$CMAKE_CI_NIGHTLY" = "true"; then
|
||||
source .gitlab/ci/appimagetool-env.sh
|
||||
source .gitlab/ci/ispc-env.sh
|
||||
fi
|
||||
|
||||
# Test in a UTF-8 locale.
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
@@ -137,6 +137,17 @@ queried. The list of queried values is stored in ``<variable>``.
|
||||
|
||||
Human readable full processor description
|
||||
|
||||
``LOCALE_CHARSET``
|
||||
.. versionadded:: 4.3
|
||||
|
||||
The locale's character set, if known, otherwise empty.
|
||||
|
||||
This is the :ref:`encoding <CMake Language Encoding>` expected
|
||||
in :manual:`cmake-language(7)` files and scripts:
|
||||
|
||||
* On Windows, this is always ``UTF-8``.
|
||||
* On UNIX and macOS, this is based on the current locale.
|
||||
|
||||
``OS_NAME``
|
||||
.. versionadded:: 3.10
|
||||
|
||||
|
||||
@@ -78,6 +78,11 @@ Furthermore, CMake 3.0 and above allow a leading UTF-8
|
||||
|
||||
.. _Byte-Order Mark: https://en.wikipedia.org/wiki/Byte_order_mark
|
||||
|
||||
.. versionadded:: 4.3
|
||||
|
||||
The :command:`cmake_host_system_information` command's ``LOCALE_CHARSET``
|
||||
query returns the expected character set encoding.
|
||||
|
||||
Source Files
|
||||
------------
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
cmake-locale
|
||||
------------
|
||||
|
||||
* The :command:`cmake_host_system_information` command gained a
|
||||
``LOCALE_CHARSET`` query for the expected :manual:`cmake-language(7)`
|
||||
script encoding.
|
||||
@@ -15,6 +15,10 @@
|
||||
#include <cm/type_traits>
|
||||
#include <cmext/string_view>
|
||||
|
||||
#if !defined(_WIN32)
|
||||
# include <langinfo.h>
|
||||
#endif
|
||||
|
||||
#include "cmsys/FStream.hxx"
|
||||
#include "cmsys/Glob.hxx"
|
||||
#include "cmsys/String.h"
|
||||
@@ -74,6 +78,22 @@ cm::optional<std::string> GetValue(cmsys::SystemInformation& info,
|
||||
if (key == "FQDN"_s) {
|
||||
return ValueToString(info.GetFullyQualifiedDomainName());
|
||||
}
|
||||
if (key == "LOCALE_CHARSET"_s) {
|
||||
#if defined(_WIN32)
|
||||
// On Windows we always use UTF-8.
|
||||
return ValueToString("UTF-8");
|
||||
#else
|
||||
// On non-Windows platforms we use the locale's encoding.
|
||||
if (char const* charset = nl_langinfo(CODESET)) {
|
||||
if (cmsysString_strcasecmp(charset, "utf-8") == 0 ||
|
||||
cmsysString_strcasecmp(charset, "utf8") == 0) {
|
||||
charset = "UTF-8";
|
||||
}
|
||||
return ValueToString(charset);
|
||||
}
|
||||
return ValueToString("");
|
||||
#endif
|
||||
}
|
||||
if (key == "TOTAL_VIRTUAL_MEMORY"_s) {
|
||||
return ValueToString(info.GetTotalVirtualMemory());
|
||||
}
|
||||
|
||||
@@ -685,6 +685,9 @@ if(WIN32)
|
||||
endif()
|
||||
add_RunCMake_test(execute_process)
|
||||
add_RunCMake_test(export)
|
||||
if(DEFINED CMake_TEST_LOCALE_CHARSET)
|
||||
list(APPEND cmake_host_system_information_ARGS -DCMake_TEST_LOCALE_CHARSET=${CMake_TEST_LOCALE_CHARSET})
|
||||
endif()
|
||||
if(CMake_TEST_MSYSTEM_PREFIX)
|
||||
list(APPEND cmake_host_system_information_ARGS -DCMake_TEST_MSYSTEM_PREFIX=${CMake_TEST_MSYSTEM_PREFIX})
|
||||
endif()
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
^-- LOCALE_CHARSET='ISO-8859-1'$
|
||||
@@ -0,0 +1 @@
|
||||
^-- LOCALE_CHARSET='UTF-8'$
|
||||
@@ -0,0 +1 @@
|
||||
^-- LOCALE_CHARSET='[^']+'$
|
||||
@@ -0,0 +1,2 @@
|
||||
cmake_host_system_information(RESULT charset QUERY LOCALE_CHARSET)
|
||||
message(STATUS "LOCALE_CHARSET='${charset}'")
|
||||
@@ -23,6 +23,7 @@
|
||||
-- PROCESSOR_SERIAL_NUMBER=`.*`
|
||||
-- PROCESSOR_NAME=`.*`
|
||||
-- PROCESSOR_DESCRIPTION=`.*`
|
||||
-- LOCALE_CHARSET=`[^`]+`
|
||||
-- OS_NAME=`.*`
|
||||
-- OS_RELEASE=`.*`
|
||||
-- OS_VERSION=`.*`
|
||||
|
||||
@@ -28,6 +28,7 @@ try_and_print(HAS_L1_CACHE)
|
||||
try_and_print(PROCESSOR_SERIAL_NUMBER)
|
||||
try_and_print(PROCESSOR_NAME)
|
||||
try_and_print(PROCESSOR_DESCRIPTION)
|
||||
try_and_print(LOCALE_CHARSET)
|
||||
try_and_print(OS_NAME)
|
||||
try_and_print(OS_RELEASE)
|
||||
try_and_print(OS_VERSION)
|
||||
|
||||
@@ -7,6 +7,14 @@ run_cmake(BadArg3)
|
||||
run_cmake(QueryList)
|
||||
run_cmake(QueryKeys)
|
||||
|
||||
if(CMake_TEST_LOCALE_CHARSET STREQUAL "UTF-8" OR CMAKE_HOST_WIN32)
|
||||
set(RunCMake-stdout-file Locale-stdout-utf-8.txt)
|
||||
elseif(CMake_TEST_LOCALE_CHARSET STREQUAL "ISO-8859-1")
|
||||
set(RunCMake-stdout-file Locale-stdout-iso-8859-1.txt)
|
||||
endif()
|
||||
run_cmake_script(Locale)
|
||||
unset(RunCMake-stdout-file)
|
||||
|
||||
run_cmake(UnitTest)
|
||||
run_cmake(Exherbo)
|
||||
run_cmake(Ubuntu)
|
||||
|
||||
Reference in New Issue
Block a user