From 412ce907a2099b8e65052edcc1f6dbc031b57cdd Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 6 Nov 2020 08:33:03 -0500 Subject: Tests: Prepare RunCMake.ABI cases to run more checks --- Tests/RunCMake/ABI/C.cmake | 5 ++++- Tests/RunCMake/ABI/CUDA.cmake | 5 ++++- Tests/RunCMake/ABI/CXX.cmake | 5 ++++- Tests/RunCMake/ABI/OBJC.cmake | 5 ++++- Tests/RunCMake/ABI/OBJCXX.cmake | 5 ++++- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Tests/RunCMake/ABI/C.cmake b/Tests/RunCMake/ABI/C.cmake index 51f5a34..a90c766 100644 --- a/Tests/RunCMake/ABI/C.cmake +++ b/Tests/RunCMake/ABI/C.cmake @@ -1,4 +1,7 @@ enable_language(C) -if(NOT CMAKE_C_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$" AND NOT CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") +if(NOT CMAKE_C_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$") + if(CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") + return() + endif() message(FATAL_ERROR "CMAKE_C_BYTE_ORDER has unexpected value '${CMAKE_C_BYTE_ORDER}'") endif() diff --git a/Tests/RunCMake/ABI/CUDA.cmake b/Tests/RunCMake/ABI/CUDA.cmake index 1a40843..d1e06f7 100644 --- a/Tests/RunCMake/ABI/CUDA.cmake +++ b/Tests/RunCMake/ABI/CUDA.cmake @@ -1,4 +1,7 @@ enable_language(CUDA) -if(NOT CMAKE_CUDA_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$" AND NOT CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") +if(NOT CMAKE_CUDA_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$") + if(CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") + return() + endif() message(FATAL_ERROR "CMAKE_CUDA_BYTE_ORDER has unexpected value '${CMAKE_CUDA_BYTE_ORDER}'") endif() diff --git a/Tests/RunCMake/ABI/CXX.cmake b/Tests/RunCMake/ABI/CXX.cmake index 7dc6f4a..4fd9a0d 100644 --- a/Tests/RunCMake/ABI/CXX.cmake +++ b/Tests/RunCMake/ABI/CXX.cmake @@ -1,4 +1,7 @@ enable_language(CXX) -if(NOT CMAKE_CXX_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$" AND NOT CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") +if(NOT CMAKE_CXX_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$") + if(CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") + return() + endif() message(FATAL_ERROR "CMAKE_CXX_BYTE_ORDER has unexpected value '${CMAKE_CXX_BYTE_ORDER}'") endif() diff --git a/Tests/RunCMake/ABI/OBJC.cmake b/Tests/RunCMake/ABI/OBJC.cmake index 9caccee..623b12e 100644 --- a/Tests/RunCMake/ABI/OBJC.cmake +++ b/Tests/RunCMake/ABI/OBJC.cmake @@ -1,4 +1,7 @@ enable_language(OBJC) -if(NOT CMAKE_OBJC_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$" AND NOT CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") +if(NOT CMAKE_OBJC_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$") + if(CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") + return() + endif() message(FATAL_ERROR "CMAKE_OBJC_BYTE_ORDER has unexpected value '${CMAKE_OBJC_BYTE_ORDER}'") endif() diff --git a/Tests/RunCMake/ABI/OBJCXX.cmake b/Tests/RunCMake/ABI/OBJCXX.cmake index 8ddefc0..de09a6a 100644 --- a/Tests/RunCMake/ABI/OBJCXX.cmake +++ b/Tests/RunCMake/ABI/OBJCXX.cmake @@ -1,4 +1,7 @@ enable_language(OBJCXX) -if(NOT CMAKE_OBJCXX_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$" AND NOT CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") +if(NOT CMAKE_OBJCXX_BYTE_ORDER MATCHES "^(BIG_ENDIAN|LITTLE_ENDIAN)$") + if(CMAKE_OSX_ARCHITECTURES MATCHES ";ppc|ppc;") + return() + endif() message(FATAL_ERROR "CMAKE_OBJCXX_BYTE_ORDER has unexpected value '${CMAKE_OBJCXX_BYTE_ORDER}'") endif() -- cgit v0.12 From fcc89bda1d726e59e2f021f8d094ab6159b48e57 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 6 Nov 2020 08:48:34 -0500 Subject: TestBigEndian: Re-implement using byte order detected from ABI check Document the module as deprecated in favor of the ABI check results. --- Help/release/dev/TestBigEndian-use-abi-result.rst | 5 +++ Modules/TestBigEndian.cmake | 36 +++++++++++++++++----- Tests/RunCMake/ABI/C-stdout.txt | 1 + Tests/RunCMake/ABI/C.cmake | 15 +++++++++ Tests/RunCMake/ABI/CUDA.cmake | 6 ++++ Tests/RunCMake/ABI/CXX-stdout.txt | 1 + Tests/RunCMake/ABI/CXX.cmake | 15 +++++++++ Tests/RunCMake/ABI/OBJC.cmake | 6 ++++ Tests/RunCMake/ABI/OBJCXX.cmake | 6 ++++ Tests/RunCMake/ABI/RunCMakeTest.cmake | 2 ++ Tests/RunCMake/ABI/TestBigEndian-NoLang-result.txt | 1 + Tests/RunCMake/ABI/TestBigEndian-NoLang-stderr.txt | 8 +++++ Tests/RunCMake/ABI/TestBigEndian-NoLang.cmake | 2 ++ 13 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 Help/release/dev/TestBigEndian-use-abi-result.rst create mode 100644 Tests/RunCMake/ABI/C-stdout.txt create mode 100644 Tests/RunCMake/ABI/CXX-stdout.txt create mode 100644 Tests/RunCMake/ABI/TestBigEndian-NoLang-result.txt create mode 100644 Tests/RunCMake/ABI/TestBigEndian-NoLang-stderr.txt create mode 100644 Tests/RunCMake/ABI/TestBigEndian-NoLang.cmake diff --git a/Help/release/dev/TestBigEndian-use-abi-result.rst b/Help/release/dev/TestBigEndian-use-abi-result.rst new file mode 100644 index 0000000..1a5bf7f --- /dev/null +++ b/Help/release/dev/TestBigEndian-use-abi-result.rst @@ -0,0 +1,5 @@ +TestBigEndian-use-abi-result +---------------------------- + +* The :module:`TestBigEndian` module has been deprecated in favor + of the :variable:`CMAKE__BYTE_ORDER` variable. diff --git a/Modules/TestBigEndian.cmake b/Modules/TestBigEndian.cmake index 8a769b7..ea8ca73 100644 --- a/Modules/TestBigEndian.cmake +++ b/Modules/TestBigEndian.cmake @@ -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__BYTE_ORDER` variable. -:: +Check if the target architecture is big endian or little endian. + +.. command:: test_big_endian + + .. code-block:: cmake + + test_big_endian() + + Stores in variable ```` 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() - - diff --git a/Tests/RunCMake/ABI/C-stdout.txt b/Tests/RunCMake/ABI/C-stdout.txt new file mode 100644 index 0000000..5b67b84 --- /dev/null +++ b/Tests/RunCMake/ABI/C-stdout.txt @@ -0,0 +1 @@ +-- Check if the system is big endian diff --git a/Tests/RunCMake/ABI/C.cmake b/Tests/RunCMake/ABI/C.cmake index a90c766..92f5da4 100644 --- a/Tests/RunCMake/ABI/C.cmake +++ b/Tests/RunCMake/ABI/C.cmake @@ -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() diff --git a/Tests/RunCMake/ABI/CUDA.cmake b/Tests/RunCMake/ABI/CUDA.cmake index d1e06f7..8ede3a9 100644 --- a/Tests/RunCMake/ABI/CUDA.cmake +++ b/Tests/RunCMake/ABI/CUDA.cmake @@ -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() diff --git a/Tests/RunCMake/ABI/CXX-stdout.txt b/Tests/RunCMake/ABI/CXX-stdout.txt new file mode 100644 index 0000000..5b67b84 --- /dev/null +++ b/Tests/RunCMake/ABI/CXX-stdout.txt @@ -0,0 +1 @@ +-- Check if the system is big endian diff --git a/Tests/RunCMake/ABI/CXX.cmake b/Tests/RunCMake/ABI/CXX.cmake index 4fd9a0d..2310002 100644 --- a/Tests/RunCMake/ABI/CXX.cmake +++ b/Tests/RunCMake/ABI/CXX.cmake @@ -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() diff --git a/Tests/RunCMake/ABI/OBJC.cmake b/Tests/RunCMake/ABI/OBJC.cmake index 623b12e..ab67459 100644 --- a/Tests/RunCMake/ABI/OBJC.cmake +++ b/Tests/RunCMake/ABI/OBJC.cmake @@ -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() diff --git a/Tests/RunCMake/ABI/OBJCXX.cmake b/Tests/RunCMake/ABI/OBJCXX.cmake index de09a6a..41a719e 100644 --- a/Tests/RunCMake/ABI/OBJCXX.cmake +++ b/Tests/RunCMake/ABI/OBJCXX.cmake @@ -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() diff --git a/Tests/RunCMake/ABI/RunCMakeTest.cmake b/Tests/RunCMake/ABI/RunCMakeTest.cmake index 883b849..d9eabb7 100644 --- a/Tests/RunCMake/ABI/RunCMakeTest.cmake +++ b/Tests/RunCMake/ABI/RunCMakeTest.cmake @@ -11,3 +11,5 @@ endif() if(CMake_TEST_CUDA) run_cmake(CUDA) endif() + +run_cmake(TestBigEndian-NoLang) diff --git a/Tests/RunCMake/ABI/TestBigEndian-NoLang-result.txt b/Tests/RunCMake/ABI/TestBigEndian-NoLang-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/ABI/TestBigEndian-NoLang-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/ABI/TestBigEndian-NoLang-stderr.txt b/Tests/RunCMake/ABI/TestBigEndian-NoLang-stderr.txt new file mode 100644 index 0000000..d0aa899 --- /dev/null +++ b/Tests/RunCMake/ABI/TestBigEndian-NoLang-stderr.txt @@ -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\)$ diff --git a/Tests/RunCMake/ABI/TestBigEndian-NoLang.cmake b/Tests/RunCMake/ABI/TestBigEndian-NoLang.cmake new file mode 100644 index 0000000..8c10201 --- /dev/null +++ b/Tests/RunCMake/ABI/TestBigEndian-NoLang.cmake @@ -0,0 +1,2 @@ +include(TestBigEndian) +test_big_endian(var) -- cgit v0.12