From 7564cbae12ee0fcd29d61fe55e009855135ad2b0 Mon Sep 17 00:00:00 2001 From: Marc Chevrier Date: Mon, 13 Oct 2025 15:13:24 +0200 Subject: [PATCH] GenEx: add new expressions for string comparisons --- Help/manual/cmake-generator-expressions.7.rst | 69 ++++++++++++---- Help/release/dev/GenEx-string-comparisons.rst | 5 ++ Source/cmGeneratorExpressionNode.cxx | 82 ++++++++++++++++++- .../BadStrGreater-result.txt | 1 + .../BadStrGreater-stderr.txt | 40 +++++++++ .../GeneratorExpression/BadStrGreater.cmake | 6 ++ .../BadStrGreaterEqual-result.txt | 1 + .../BadStrGreaterEqual-stderr.txt | 40 +++++++++ .../BadStrGreaterEqual.cmake | 6 ++ .../GeneratorExpression/BadStrLess-result.txt | 1 + .../GeneratorExpression/BadStrLess-stderr.txt | 40 +++++++++ .../GeneratorExpression/BadStrLess.cmake | 6 ++ .../BadStrLessEqual-result.txt | 1 + .../BadStrLessEqual-stderr.txt | 40 +++++++++ .../GeneratorExpression/BadStrLessEqual.cmake | 6 ++ .../GeneratorExpression/RunCMakeTest.cmake | 9 ++ .../GeneratorExpression/STREQUAL-check.cmake | 6 ++ .../GeneratorExpression/STREQUAL.cmake | 3 + .../STRGREATER-check.cmake | 6 ++ .../GeneratorExpression/STRGREATER.cmake | 3 + .../STRGREATER_EQUAL-check.cmake | 6 ++ .../STRGREATER_EQUAL.cmake | 4 + .../GeneratorExpression/STRLESS-check.cmake | 6 ++ .../GeneratorExpression/STRLESS.cmake | 3 + .../STRLESS_EQUAL-check.cmake | 6 ++ .../GeneratorExpression/STRLESS_EQUAL.cmake | 4 + 26 files changed, 382 insertions(+), 18 deletions(-) create mode 100644 Help/release/dev/GenEx-string-comparisons.rst create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrGreater-result.txt create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrGreater-stderr.txt create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrGreater.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual-result.txt create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual-stderr.txt create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrLess-result.txt create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrLess-stderr.txt create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrLess.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrLessEqual-result.txt create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrLessEqual-stderr.txt create mode 100644 Tests/RunCMake/GeneratorExpression/BadStrLessEqual.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STREQUAL-check.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STREQUAL.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STRGREATER-check.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STRGREATER.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STRGREATER_EQUAL-check.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STRGREATER_EQUAL.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STRLESS-check.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STRLESS.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STRLESS_EQUAL-check.cmake create mode 100644 Tests/RunCMake/GeneratorExpression/STRLESS_EQUAL.cmake diff --git a/Help/manual/cmake-generator-expressions.7.rst b/Help/manual/cmake-generator-expressions.7.rst index b92816d7f6..95ff025dda 100644 --- a/Help/manual/cmake-generator-expressions.7.rst +++ b/Help/manual/cmake-generator-expressions.7.rst @@ -284,20 +284,8 @@ This section covers the primary and most widely used comparison types. Other more specific comparison types are documented in their own separate sections further below. -String Comparisons -^^^^^^^^^^^^^^^^^^ - -.. genex:: $ - - ``1`` if ``string1`` and ``string2`` are equal, else ``0``. - The comparison is case-sensitive. For a case-insensitive comparison, - combine with a :ref:`string transforming generator expression - `. For example, the following - evaluates to ``1`` if ``${foo}`` is any of ``BAR``, ``Bar``, ``bar``, etc. - - .. code-block:: cmake - - $,BAR> +Numeric Comparisons +^^^^^^^^^^^^^^^^^^^ .. genex:: $ @@ -330,10 +318,57 @@ Version Comparisons ``1`` if ``v1`` is a version greater than or equal to ``v2``, else ``0``. -.. _`String Transforming Generator Expressions`: +String Expressions +------------------ + +.. _`String Comparisons Generator Expressions`: + +String Comparisons +^^^^^^^^^^^^^^^^^^ + +The comparisons are case-sensitive. For a case-insensitive comparison, +combine with a :ref:`string transforming generator expression +`. For example, the following +evaluates to ``1`` if ``${foo}`` is any of ``BAR``, ``Bar``, ``bar``, etc. + + .. code-block:: cmake + + $,BAR> + +.. genex:: $ + + ``1`` if ``string1`` and ``string2`` are lexicographically equal, else ``0``. + +.. genex:: $ + + .. versionadded:: 4.3 + + ``1`` if ``string1`` is lexicographically less than ``string2``, else ``0``. + +.. genex:: $ + + .. versionadded:: 4.3 + + ``1`` if ``string1`` is lexicographically greater than ``string2``, else + ``0``. + +.. genex:: $ + + .. versionadded:: 4.3 + + ``1`` if ``string1`` is lexicographically less than or equal to ``string2``, + else ``0``. + +.. genex:: $ + + .. versionadded:: 4.3 + + ``1`` if ``string1`` is lexicographically greater than or equal to + ``string2``, else ``0``. + String Transformations ----------------------- +^^^^^^^^^^^^^^^^^^^^^^ .. genex:: $ @@ -343,7 +378,7 @@ String Transformations Content of ``string`` converted to upper case. -.. genex:: $ +.. genex:: $ Content of ``...`` converted to a C identifier. The conversion follows the same behavior as :command:`string(MAKE_C_IDENTIFIER)`. diff --git a/Help/release/dev/GenEx-string-comparisons.rst b/Help/release/dev/GenEx-string-comparisons.rst new file mode 100644 index 0000000000..8c00711339 --- /dev/null +++ b/Help/release/dev/GenEx-string-comparisons.rst @@ -0,0 +1,5 @@ +GenEx-string-comparisons +------------------------ + +* CMake gains new :ref:`generator expressions + ` for string comparisons. diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index 9f75f5c5b1..e71935be81 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -26,6 +26,7 @@ #include "cmsys/String.h" #include "cmCMakePath.h" +#include "cmCMakeString.hxx" #include "cmComputeLinkInformation.h" #include "cmGenExContext.h" #include "cmGenExEvaluation.h" @@ -265,9 +266,84 @@ static const struct StrEqualNode : public cmGeneratorExpressionNode GeneratorExpressionContent const* /*content*/, cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override { - return parameters.front() == parameters[1] ? "1" : "0"; + return cm::CMakeString{ parameters.front() }.Compare( + cm::CMakeString::CompOperator::EQUAL, parameters[1]) + ? "1" + : "0"; } } strEqualNode; +static const struct StrLessNode : public cmGeneratorExpressionNode +{ + StrLessNode() {} // NOLINT(modernize-use-equals-default) + + int NumExpectedParameters() const override { return 2; } + + std::string Evaluate( + std::vector const& parameters, + cm::GenEx::Evaluation* /*eval*/, + GeneratorExpressionContent const* /*content*/, + cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override + { + return cm::CMakeString{ parameters.front() }.Compare( + cm::CMakeString::CompOperator::LESS, parameters[1]) + ? "1" + : "0"; + } +} strLessNode; +static const struct StrLessEqualNode : public cmGeneratorExpressionNode +{ + StrLessEqualNode() {} // NOLINT(modernize-use-equals-default) + + int NumExpectedParameters() const override { return 2; } + + std::string Evaluate( + std::vector const& parameters, + cm::GenEx::Evaluation* /*eval*/, + GeneratorExpressionContent const* /*content*/, + cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override + { + return cm::CMakeString{ parameters.front() }.Compare( + cm::CMakeString::CompOperator::LESS_EQUAL, parameters[1]) + ? "1" + : "0"; + } +} strLessEqualNode; +static const struct StrGreaterNode : public cmGeneratorExpressionNode +{ + StrGreaterNode() {} // NOLINT(modernize-use-equals-default) + + int NumExpectedParameters() const override { return 2; } + + std::string Evaluate( + std::vector const& parameters, + cm::GenEx::Evaluation* /*eval*/, + GeneratorExpressionContent const* /*content*/, + cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override + { + return cm::CMakeString{ parameters.front() }.Compare( + cm::CMakeString::CompOperator::GREATER, parameters[1]) + ? "1" + : "0"; + } +} strGreaterNode; +static const struct StrGreaterEqualNode : public cmGeneratorExpressionNode +{ + StrGreaterEqualNode() {} // NOLINT(modernize-use-equals-default) + + int NumExpectedParameters() const override { return 2; } + + std::string Evaluate( + std::vector const& parameters, + cm::GenEx::Evaluation* /*eval*/, + GeneratorExpressionContent const* /*content*/, + cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override + { + return cm::CMakeString{ parameters.front() }.Compare( + cm::CMakeString::CompOperator::GREATER_EQUAL, parameters[1]) + ? "1" + : "0"; + } +} strGreaterEqualNode; static const struct EqualNode : public cmGeneratorExpressionNode { @@ -4872,6 +4948,10 @@ cmGeneratorExpressionNode const* cmGeneratorExpressionNode::GetNode( { "TARGET_BUNDLE_DIR_NAME", &targetBundleDirNameNode }, { "TARGET_BUNDLE_CONTENT_DIR", &targetBundleContentDirNode }, { "STREQUAL", &strEqualNode }, + { "STRLESS", &strLessNode }, + { "STRLESS_EQUAL", &strLessEqualNode }, + { "STRGREATER", &strGreaterNode }, + { "STRGREATER_EQUAL", &strGreaterEqualNode }, { "EQUAL", &equalNode }, { "IN_LIST", &inListNode }, { "FILTER", &filterNode }, diff --git a/Tests/RunCMake/GeneratorExpression/BadStrGreater-result.txt b/Tests/RunCMake/GeneratorExpression/BadStrGreater-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrGreater-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/GeneratorExpression/BadStrGreater-stderr.txt b/Tests/RunCMake/GeneratorExpression/BadStrGreater-stderr.txt new file mode 100644 index 0000000000..b6e15135ce --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrGreater-stderr.txt @@ -0,0 +1,40 @@ +CMake Error at BadStrGreater.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got 0 + instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++CMake Error at BadStrGreater.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got 1 + instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at BadStrGreater.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got 3 + instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at BadStrGreater.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got 3 + instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Generate step failed\. Build files cannot be regenerated correctly\.$ diff --git a/Tests/RunCMake/GeneratorExpression/BadStrGreater.cmake b/Tests/RunCMake/GeneratorExpression/BadStrGreater.cmake new file mode 100644 index 0000000000..ea8324ba39 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrGreater.cmake @@ -0,0 +1,6 @@ +add_custom_target(check ALL COMMAND check + $ + $ + $ + $ + VERBATIM) diff --git a/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual-result.txt b/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual-stderr.txt b/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual-stderr.txt new file mode 100644 index 0000000000..04d1e760cd --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual-stderr.txt @@ -0,0 +1,40 @@ +CMake Error at BadStrGreaterEqual.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but + got 0 instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++CMake Error at BadStrGreaterEqual.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but + got 1 instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at BadStrGreaterEqual.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but + got 3 instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at BadStrGreaterEqual.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but + got 3 instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Generate step failed\. Build files cannot be regenerated correctly\.$ diff --git a/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual.cmake b/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual.cmake new file mode 100644 index 0000000000..53af1e1a68 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrGreaterEqual.cmake @@ -0,0 +1,6 @@ +add_custom_target(check ALL COMMAND check + $ + $ + $ + $ + VERBATIM) diff --git a/Tests/RunCMake/GeneratorExpression/BadStrLess-result.txt b/Tests/RunCMake/GeneratorExpression/BadStrLess-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrLess-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/GeneratorExpression/BadStrLess-stderr.txt b/Tests/RunCMake/GeneratorExpression/BadStrLess-stderr.txt new file mode 100644 index 0000000000..321423bbc3 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrLess-stderr.txt @@ -0,0 +1,40 @@ +CMake Error at BadStrLess.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got 0 + instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++CMake Error at BadStrLess.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got 1 + instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at BadStrLess.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got 3 + instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at BadStrLess.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got 3 + instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Generate step failed\. Build files cannot be regenerated correctly\.$ diff --git a/Tests/RunCMake/GeneratorExpression/BadStrLess.cmake b/Tests/RunCMake/GeneratorExpression/BadStrLess.cmake new file mode 100644 index 0000000000..06cd86808e --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrLess.cmake @@ -0,0 +1,6 @@ +add_custom_target(check ALL COMMAND check + $ + $ + $ + $ + VERBATIM) diff --git a/Tests/RunCMake/GeneratorExpression/BadStrLessEqual-result.txt b/Tests/RunCMake/GeneratorExpression/BadStrLessEqual-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrLessEqual-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/GeneratorExpression/BadStrLessEqual-stderr.txt b/Tests/RunCMake/GeneratorExpression/BadStrLessEqual-stderr.txt new file mode 100644 index 0000000000..7fbbf38432 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrLessEqual-stderr.txt @@ -0,0 +1,40 @@ +CMake Error at BadStrLessEqual.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got + 0 instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++CMake Error at BadStrLessEqual.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got + 1 instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at BadStrLessEqual.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got + 3 instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Error at BadStrLessEqual.cmake:1 \(add_custom_target\): + Error evaluating generator expression: + + \$ + + \$ expression requires 2 comma separated parameters, but got + 3 instead. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) ++ +CMake Generate step failed\. Build files cannot be regenerated correctly\.$ diff --git a/Tests/RunCMake/GeneratorExpression/BadStrLessEqual.cmake b/Tests/RunCMake/GeneratorExpression/BadStrLessEqual.cmake new file mode 100644 index 0000000000..10b6edd192 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/BadStrLessEqual.cmake @@ -0,0 +1,6 @@ +add_custom_target(check ALL COMMAND check + $ + $ + $ + $ + VERBATIM) diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake index 9c968c6d8d..a53cf87a9f 100644 --- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake +++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake @@ -7,6 +7,15 @@ run_cmake(BadOR) run_cmake(BadAND) run_cmake(BadNOT) run_cmake(BadStrEqual) +run_cmake(BadStrLess) +run_cmake(BadStrLessEqual) +run_cmake(BadStrGreater) +run_cmake(BadStrGreaterEqual) +run_cmake(STREQUAL) +run_cmake(STRLESS) +run_cmake(STRLESS_EQUAL) +run_cmake(STRGREATER) +run_cmake(STRGREATER_EQUAL) run_cmake(BadZero) run_cmake(BadTargetName) run_cmake(BadTargetTypeInterface) diff --git a/Tests/RunCMake/GeneratorExpression/STREQUAL-check.cmake b/Tests/RunCMake/GeneratorExpression/STREQUAL-check.cmake new file mode 100644 index 0000000000..13b5aba612 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STREQUAL-check.cmake @@ -0,0 +1,6 @@ +file(READ "${RunCMake_TEST_BINARY_DIR}/STREQUAL-generated.txt" content) + +set(expected "1:0") +if(NOT content STREQUAL expected) + set(RunCMake_TEST_FAILED "$: actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]") +endif() diff --git a/Tests/RunCMake/GeneratorExpression/STREQUAL.cmake b/Tests/RunCMake/GeneratorExpression/STREQUAL.cmake new file mode 100644 index 0000000000..e1f86699e4 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STREQUAL.cmake @@ -0,0 +1,3 @@ +cmake_policy(VERSION 4.2) + +file(GENERATE OUTPUT "STREQUAL-generated.txt" CONTENT "$:$") diff --git a/Tests/RunCMake/GeneratorExpression/STRGREATER-check.cmake b/Tests/RunCMake/GeneratorExpression/STRGREATER-check.cmake new file mode 100644 index 0000000000..a361b4057d --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STRGREATER-check.cmake @@ -0,0 +1,6 @@ +file(READ "${RunCMake_TEST_BINARY_DIR}/STRGREATER-generated.txt" content) + +set(expected "0:0:0:1") +if(NOT content STREQUAL expected) + set(RunCMake_TEST_FAILED "$: actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]") +endif() diff --git a/Tests/RunCMake/GeneratorExpression/STRGREATER.cmake b/Tests/RunCMake/GeneratorExpression/STRGREATER.cmake new file mode 100644 index 0000000000..8a82a54c80 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STRGREATER.cmake @@ -0,0 +1,3 @@ +cmake_policy(VERSION 4.2) + +file(GENERATE OUTPUT "STRGREATER-generated.txt" CONTENT "$:$:$:$") diff --git a/Tests/RunCMake/GeneratorExpression/STRGREATER_EQUAL-check.cmake b/Tests/RunCMake/GeneratorExpression/STRGREATER_EQUAL-check.cmake new file mode 100644 index 0000000000..d866228885 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STRGREATER_EQUAL-check.cmake @@ -0,0 +1,6 @@ +file(READ "${RunCMake_TEST_BINARY_DIR}/STRGREATER_EQUAL-generated.txt" content) + +set(expected "0:0:1:1") +if(NOT content STREQUAL expected) + set(RunCMake_TEST_FAILED "$: actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]") +endif() diff --git a/Tests/RunCMake/GeneratorExpression/STRGREATER_EQUAL.cmake b/Tests/RunCMake/GeneratorExpression/STRGREATER_EQUAL.cmake new file mode 100644 index 0000000000..50e604b509 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STRGREATER_EQUAL.cmake @@ -0,0 +1,4 @@ +cmake_policy(VERSION 4.2) + +file(GENERATE OUTPUT "STRGREATER_EQUAL-generated.txt" + CONTENT "$:$:$:$") diff --git a/Tests/RunCMake/GeneratorExpression/STRLESS-check.cmake b/Tests/RunCMake/GeneratorExpression/STRLESS-check.cmake new file mode 100644 index 0000000000..08d5206403 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STRLESS-check.cmake @@ -0,0 +1,6 @@ +file(READ "${RunCMake_TEST_BINARY_DIR}/STRLESS-generated.txt" content) + +set(expected "1:1:0:0") +if(NOT content STREQUAL expected) + set(RunCMake_TEST_FAILED "$: actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]") +endif() diff --git a/Tests/RunCMake/GeneratorExpression/STRLESS.cmake b/Tests/RunCMake/GeneratorExpression/STRLESS.cmake new file mode 100644 index 0000000000..59a27990f1 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STRLESS.cmake @@ -0,0 +1,3 @@ +cmake_policy(VERSION 4.2) + +file(GENERATE OUTPUT "STRLESS-generated.txt" CONTENT "$:$:$:$") diff --git a/Tests/RunCMake/GeneratorExpression/STRLESS_EQUAL-check.cmake b/Tests/RunCMake/GeneratorExpression/STRLESS_EQUAL-check.cmake new file mode 100644 index 0000000000..3ad56e4ae5 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STRLESS_EQUAL-check.cmake @@ -0,0 +1,6 @@ +file(READ "${RunCMake_TEST_BINARY_DIR}/STRLESS_EQUAL-generated.txt" content) + +set(expected "1:1:1:0") +if(NOT content STREQUAL expected) + set(RunCMake_TEST_FAILED "$: actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]") +endif() diff --git a/Tests/RunCMake/GeneratorExpression/STRLESS_EQUAL.cmake b/Tests/RunCMake/GeneratorExpression/STRLESS_EQUAL.cmake new file mode 100644 index 0000000000..3e3fd36f3c --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/STRLESS_EQUAL.cmake @@ -0,0 +1,4 @@ +cmake_policy(VERSION 4.2) + +file(GENERATE OUTPUT "STRLESS_EQUAL-generated.txt" + CONTENT "$:$:$:$")