diff options
-rw-r--r-- | Help/manual/cmake-generator-expressions.7.rst | 26 | ||||
-rw-r--r-- | Help/release/3.27.rst | 6 | ||||
-rw-r--r-- | Source/cmGeneratorExpressionNode.cxx | 4 | ||||
-rw-r--r-- | Source/cmWorkerPool.cxx | 2 | ||||
-rw-r--r-- | Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake | 6 | ||||
-rw-r--r-- | Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake | 3 | ||||
-rw-r--r-- | Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake | 1 |
7 files changed, 34 insertions, 14 deletions
diff --git a/Help/manual/cmake-generator-expressions.7.rst b/Help/manual/cmake-generator-expressions.7.rst index 473e8d7..981bd90 100644 --- a/Help/manual/cmake-generator-expressions.7.rst +++ b/Help/manual/cmake-generator-expressions.7.rst @@ -1789,20 +1789,20 @@ In the following, the phrase "the ``tgt`` filename" means the name of the .. versionadded:: 3.27 Full path to the linker import file. On DLL platforms, it would be the - ``.lib`` file. On AIX, for the executables, and on macOS, for the shared - libraries, it could be, respectively, the ``.imp`` or ``.tbd`` import file, - depending of the value of :prop_tgt:`ENABLE_EXPORTS` property. + ``.lib`` file. For executables on AIX, and for shared libraries on macOS, + it could be, respectively, the ``.imp`` or ``.tbd`` import file, + depending on the value of the :prop_tgt:`ENABLE_EXPORTS` property. - An empty string is returned when there is no import file associated with the - target. + This expands to an empty string when there is no import file associated + with the target. .. genex:: $<TARGET_IMPORT_FILE_BASE_NAME:tgt> .. versionadded:: 3.27 - Base name of file linker import file of the target ``tgt`` without prefix and - suffix. For example, if target file name is ``libbase.tbd``, the base name is - ``base``. + Base name of the linker import file of the target ``tgt`` without prefix or + suffix. For example, if the target file name is ``libbase.tbd``, the base + name is ``base``. See also the :prop_tgt:`OUTPUT_NAME` and :prop_tgt:`ARCHIVE_OUTPUT_NAME` target properties and their configuration specific variants @@ -1831,7 +1831,7 @@ In the following, the phrase "the ``tgt`` filename" means the name of the Suffix of the import file of the target ``tgt``. - The suffix corresponds to the file extension (such as ".lib" or ".tbd"). + The suffix corresponds to the file extension (such as ``.lib`` or ``.tbd``). See also the :prop_tgt:`IMPORT_SUFFIX` target property. @@ -1842,13 +1842,15 @@ In the following, the phrase "the ``tgt`` filename" means the name of the .. versionadded:: 3.27 - Name of the import file of the target target ``tgt``. + Name of the import file of the target ``tgt``. Note that ``tgt`` is not added as a dependency of the target this expression is evaluated on. .. genex:: $<TARGET_IMPORT_FILE_DIR:tgt> + .. versionadded:: 3.27 + Directory of the import file of the target ``tgt``. Note that ``tgt`` is not added as a dependency of the target this @@ -1863,11 +1865,11 @@ In the following, the phrase "the ``tgt`` filename" means the name of the .. versionadded:: 3.27 On macOS, it could be the ``.tbd`` import file associated with the shared - library, depending of the value of :prop_tgt:`ENABLE_EXPORTS` property. + library, depending on the value of the :prop_tgt:`ENABLE_EXPORTS` property. This generator expression is equivalent to :genex:`$<TARGET_LINKER_LIBRARY_FILE>` or - :genex:`$<TARGET_LINKER_IMPORT_FILE>` generator expressions, depending of the + :genex:`$<TARGET_LINKER_IMPORT_FILE>` generator expressions, depending on the characteristics of the target and the platform. .. genex:: $<TARGET_LINKER_FILE_BASE_NAME:tgt> diff --git a/Help/release/3.27.rst b/Help/release/3.27.rst index 930a0dc..52768d1 100644 --- a/Help/release/3.27.rst +++ b/Help/release/3.27.rst @@ -157,6 +157,12 @@ Generator Expressions :ref:`transformation <GenEx Path Transformations>` operations learned to process :ref:`lists <CMake Language Lists>` of paths element-wise. +* The :genex:`TARGET_IMPORT_FILE`, :genex:`TARGET_IMPORT_FILE_BASE_NAME`, + :genex:`TARGET_IMPORT_FILE_PREFIX`, :genex:`TARGET_IMPORT_FILE_SUFFIX`, + :genex:`TARGET_IMPORT_FILE_NAME`, and :genex:`TARGET_IMPORT_FILE_DIR` + generator expressions were added. These expand to details about the + linker import file for a target. + * The :genex:`TARGET_RUNTIME_DLL_DIRS` generator expression was added. It expands to a list of the directories containing DLLs in :genex:`TARGET_RUNTIME_DLLS`. diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index bb4fc7e..7fe814a 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -384,7 +384,9 @@ static const struct RemoveDuplicatesNode : public cmGeneratorExpressionNode "$<REMOVE_DUPLICATES:...> expression requires one parameter"); } - return cmList{ parameters.front() }.remove_duplicates().to_string(); + return cmList{ parameters.front(), cmList::EmptyElements::Yes } + .remove_duplicates() + .to_string(); } } removeDuplicatesNode; diff --git a/Source/cmWorkerPool.cxx b/Source/cmWorkerPool.cxx index 1d15c27..27cdbba 100644 --- a/Source/cmWorkerPool.cxx +++ b/Source/cmWorkerPool.cxx @@ -309,7 +309,7 @@ void cmUVReadOnlyProcess::UVExit(uv_process_t* handle, int64_t exitStatus, // Set error message on demand proc.Result()->ExitStatus = exitStatus; proc.Result()->TermSignal = termSignal; - if (!proc.Result()->error()) { + if (proc.Result()->ErrorMessage.empty()) { if (termSignal != 0) { proc.Result()->ErrorMessage = cmStrCat( "Process was terminated by signal ", proc.Result()->TermSignal); diff --git a/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake b/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake new file mode 100644 index 0000000..a996e53 --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element-check.cmake @@ -0,0 +1,6 @@ +file(READ "${RunCMake_TEST_BINARY_DIR}/REMOVE_DUPLICATES-generated.txt" content) + +set(expected "1;;2;3") +if(NOT content STREQUAL expected) + set(RunCMake_TEST_FAILED "actual content:\n [[${content}]]\nbut expected:\n [[${expected}]]") +endif() diff --git a/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake b/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake new file mode 100644 index 0000000..9d5944f --- /dev/null +++ b/Tests/RunCMake/GeneratorExpression/REMOVE_DUPLICATES-empty-element.cmake @@ -0,0 +1,3 @@ +cmake_policy(VERSION 3.11) + +file(GENERATE OUTPUT "REMOVE_DUPLICATES-generated.txt" CONTENT "$<REMOVE_DUPLICATES:1$<SEMICOLON>$<SEMICOLON>2$<SEMICOLON>$<SEMICOLON>3>") diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake index 3fd9947..2a0c893 100644 --- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake +++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake @@ -36,6 +36,7 @@ run_cmake(TARGET_NAME_IF_EXISTS-alias-target) run_cmake(TARGET_NAME_IF_EXISTS-imported-target) run_cmake(TARGET_NAME_IF_EXISTS-imported-global-target) run_cmake(REMOVE_DUPLICATES-empty) +run_cmake(REMOVE_DUPLICATES-empty-element) run_cmake(REMOVE_DUPLICATES-1) run_cmake(REMOVE_DUPLICATES-2) run_cmake(REMOVE_DUPLICATES-3) |