Fix computing relative paths with empty components
When generating files with full path containing more than one "/" (slash) in a row in the path, it causes re-configuration of the project upon each build phase, despite the fact that the build tree/sources have not been updated.
The issue is caused by the fact that the generated file is listed in the CMAKE_MAKEFILE_PRODUCTS with the wrong path. Which is due to the fact that the relative path of the file is resolved incorrectly.
Step to reproduce:
Create a CMakeLists.txt with the following content:
set(file_path ${CMAKE_BINARY_DIR}//a_file.txt)
file(GENERATE OUTPUT ${file_path} CONTENT "
Generating file with 2 times in a row slashes to check
relative path resolution for this file when build byproducts
are generated")
Configure a build directory referring to the above created cmake list file.
> mkdir build
> cd build
> cmake _path_to/CMakeLists.txt -G "Unix Makefiles"
Now build the project:
> make
Expected result: The project should not be configured upon build, unless anything is changed in the build tree or in the sources.
Actual result: The project is configured one more time before build, as "/a_file.txt" byproduct dependency/existence is never satisfied.
Co-Authored-By: Aregnaz Harutyunyan aregnaz.harutyunyan@here.com
Fixes: #16892 (closed)
Topic-rename: relative-path-handle-empty-components