mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
TestBigEndian: Re-implement using byte order detected from ABI check
Document the module as deprecated in favor of the ABI check results.
This commit is contained in:
5
Help/release/dev/TestBigEndian-use-abi-result.rst
Normal file
5
Help/release/dev/TestBigEndian-use-abi-result.rst
Normal file
@@ -0,0 +1,5 @@
|
||||
TestBigEndian-use-abi-result
|
||||
----------------------------
|
||||
|
||||
* The :module:`TestBigEndian` module has been deprecated in favor
|
||||
of the :variable:`CMAKE_<LANG>_BYTE_ORDER` variable.
|
@@ -5,19 +5,41 @@
|
||||
TestBigEndian
|
||||
-------------
|
||||
|
||||
Define macro to determine endian type
|
||||
.. deprecated:: 3.20
|
||||
|
||||
Check if the system is big endian or little endian
|
||||
Supserseded by the :variable:`CMAKE_<LANG>_BYTE_ORDER` variable.
|
||||
|
||||
::
|
||||
Check if the target architecture is big endian or little endian.
|
||||
|
||||
.. command:: test_big_endian
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
test_big_endian(<var>)
|
||||
|
||||
Stores in variable ``<var>`` either 1 or 0 indicating whether the
|
||||
target architecture is big or little endian.
|
||||
|
||||
TEST_BIG_ENDIAN(VARIABLE)
|
||||
VARIABLE - variable to store the result to
|
||||
#]=======================================================================]
|
||||
include_guard()
|
||||
|
||||
include(CheckTypeSize)
|
||||
|
||||
macro(TEST_BIG_ENDIAN VARIABLE)
|
||||
function(TEST_BIG_ENDIAN VARIABLE)
|
||||
if(";${CMAKE_C_BYTE_ORDER};${CMAKE_CXX_BYTE_ORDER};${CMAKE_CUDA_BYTE_ORDER};${CMAKE_OBJC_BYTE_ORDER};${CMAKE_OBJCXX_BYTE_ORDER};" MATCHES ";(BIG_ENDIAN|LITTLE_ENDIAN);")
|
||||
set(order "${CMAKE_MATCH_1}")
|
||||
if(order STREQUAL "BIG_ENDIAN")
|
||||
set("${VARIABLE}" 1 PARENT_SCOPE)
|
||||
else()
|
||||
set("${VARIABLE}" 0 PARENT_SCOPE)
|
||||
endif()
|
||||
else()
|
||||
__TEST_BIG_ENDIAN_LEGACY_IMPL(is_big)
|
||||
set("${VARIABLE}" "${is_big}" PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
macro(__TEST_BIG_ENDIAN_LEGACY_IMPL VARIABLE)
|
||||
if(NOT DEFINED HAVE_${VARIABLE})
|
||||
message(CHECK_START "Check if the system is big endian")
|
||||
message(CHECK_START "Searching 16 bit integer")
|
||||
@@ -119,5 +141,3 @@ macro(TEST_BIG_ENDIAN VARIABLE)
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
|
1
Tests/RunCMake/ABI/C-stdout.txt
Normal file
1
Tests/RunCMake/ABI/C-stdout.txt
Normal file
@@ -0,0 +1 @@
|
||||
-- Check if the system is big endian
|
@@ -5,3 +5,18 @@ if(NOT CMAKE_C_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$")
|
||||
endif()
|
||||
message(FATAL_ERROR "CMAKE_C_BYTE_ORDER has unexpected value '${CMAKE_C_BYTE_ORDER}'")
|
||||
endif()
|
||||
|
||||
include(TestBigEndian)
|
||||
test_big_endian(IS_BIG_ENDIAN)
|
||||
if(IS_BIG_ENDIAN AND NOT CMAKE_C_BYTE_ORDER STREQUAL "BIG_ENDIAN")
|
||||
message(FATAL_ERROR "test_big_endian result does not match ABI result")
|
||||
endif()
|
||||
|
||||
# Test legacy check.
|
||||
set(byte_order "${CMAKE_C_BYTE_ORDER}")
|
||||
unset(CMAKE_C_BYTE_ORDER)
|
||||
include(TestBigEndian)
|
||||
test_big_endian(IS_BIG)
|
||||
if(IS_BIG AND NOT byte_order STREQUAL "BIG_ENDIAN")
|
||||
message(FATAL_ERROR "test_big_endian result does not match ABI result")
|
||||
endif()
|
||||
|
@@ -5,3 +5,9 @@ if(NOT CMAKE_CUDA_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$")
|
||||
endif()
|
||||
message(FATAL_ERROR "CMAKE_CUDA_BYTE_ORDER has unexpected value '${CMAKE_CUDA_BYTE_ORDER}'")
|
||||
endif()
|
||||
|
||||
include(TestBigEndian)
|
||||
test_big_endian(IS_BIG_ENDIAN)
|
||||
if(IS_BIG_ENDIAN AND NOT CMAKE_CUDA_BYTE_ORDER STREQUAL "BIG_ENDIAN")
|
||||
message(FATAL_ERROR "test_big_endian result does not match ABI result")
|
||||
endif()
|
||||
|
1
Tests/RunCMake/ABI/CXX-stdout.txt
Normal file
1
Tests/RunCMake/ABI/CXX-stdout.txt
Normal file
@@ -0,0 +1 @@
|
||||
-- Check if the system is big endian
|
@@ -5,3 +5,18 @@ if(NOT CMAKE_CXX_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$")
|
||||
endif()
|
||||
message(FATAL_ERROR "CMAKE_CXX_BYTE_ORDER has unexpected value '${CMAKE_CXX_BYTE_ORDER}'")
|
||||
endif()
|
||||
|
||||
include(TestBigEndian)
|
||||
test_big_endian(IS_BIG_ENDIAN)
|
||||
if(IS_BIG_ENDIAN AND NOT CMAKE_CXX_BYTE_ORDER STREQUAL "BIG_ENDIAN")
|
||||
message(FATAL_ERROR "test_big_endian result does not match ABI result")
|
||||
endif()
|
||||
|
||||
# Test legacy check.
|
||||
set(byte_order "${CMAKE_CXX_BYTE_ORDER}")
|
||||
unset(CMAKE_CXX_BYTE_ORDER)
|
||||
include(TestBigEndian)
|
||||
test_big_endian(IS_BIG)
|
||||
if(IS_BIG AND NOT byte_order STREQUAL "BIG_ENDIAN")
|
||||
message(FATAL_ERROR "test_big_endian result does not match ABI result")
|
||||
endif()
|
||||
|
@@ -5,3 +5,9 @@ if(NOT CMAKE_OBJC_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$")
|
||||
endif()
|
||||
message(FATAL_ERROR "CMAKE_OBJC_BYTE_ORDER has unexpected value '${CMAKE_OBJC_BYTE_ORDER}'")
|
||||
endif()
|
||||
|
||||
include(TestBigEndian)
|
||||
test_big_endian(IS_BIG_ENDIAN)
|
||||
if(IS_BIG_ENDIAN AND NOT CMAKE_OBJC_BYTE_ORDER STREQUAL "BIG_ENDIAN")
|
||||
message(FATAL_ERROR "test_big_endian result does not match ABI result")
|
||||
endif()
|
||||
|
@@ -5,3 +5,9 @@ if(NOT CMAKE_OBJCXX_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$")
|
||||
endif()
|
||||
message(FATAL_ERROR "CMAKE_OBJCXX_BYTE_ORDER has unexpected value '${CMAKE_OBJCXX_BYTE_ORDER}'")
|
||||
endif()
|
||||
|
||||
include(TestBigEndian)
|
||||
test_big_endian(IS_BIG_ENDIAN)
|
||||
if(IS_BIG_ENDIAN AND NOT CMAKE_OBJCXX_BYTE_ORDER STREQUAL "BIG_ENDIAN")
|
||||
message(FATAL_ERROR "test_big_endian result does not match ABI result")
|
||||
endif()
|
||||
|
@@ -11,3 +11,5 @@ endif()
|
||||
if(CMake_TEST_CUDA)
|
||||
run_cmake(CUDA)
|
||||
endif()
|
||||
|
||||
run_cmake(TestBigEndian-NoLang)
|
||||
|
1
Tests/RunCMake/ABI/TestBigEndian-NoLang-result.txt
Normal file
1
Tests/RunCMake/ABI/TestBigEndian-NoLang-result.txt
Normal file
@@ -0,0 +1 @@
|
||||
1
|
8
Tests/RunCMake/ABI/TestBigEndian-NoLang-stderr.txt
Normal file
8
Tests/RunCMake/ABI/TestBigEndian-NoLang-stderr.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
^CMake Error at [^
|
||||
]*/Modules/TestBigEndian.cmake:[0-9]+ \(message\):
|
||||
TEST_BIG_ENDIAN needs either C or CXX language enabled
|
||||
Call Stack \(most recent call first\):
|
||||
[^
|
||||
]*/Modules/TestBigEndian.cmake:[0-9]+ \(__TEST_BIG_ENDIAN_LEGACY_IMPL\)
|
||||
TestBigEndian-NoLang.cmake:[0-9]+ \(test_big_endian\)
|
||||
CMakeLists.txt:3 \(include\)$
|
2
Tests/RunCMake/ABI/TestBigEndian-NoLang.cmake
Normal file
2
Tests/RunCMake/ABI/TestBigEndian-NoLang.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
include(TestBigEndian)
|
||||
test_big_endian(var)
|
Reference in New Issue
Block a user