Commit fcc89bda authored by Brad King's avatar Brad King
Browse files

TestBigEndian: Re-implement using byte order detected from ABI check

Document the module as deprecated in favor of the ABI check results.
parent 412ce907
Pipeline #198822 passed with stages
in 68 minutes and 50 seconds
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()
-- 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()
-- 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)
^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\)$
include(TestBigEndian)
test_big_endian(var)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment