find_program: Consider CWD only for paths with separator
find_program() incorrectly prepended search path components to absolute file paths, and incorrectly searched the current working directory for files that contained no directory separators.
- Replace calls cmFindProgramHelper::CheckDirectory(std::string()) with call of new method cmFindProgramHelper::CheckCompoundNames() that checks for the presence of a directory separator in the file name.
- Use cmSystemTools::CollapseCombinedPath rather than string concatenation to properly combine absolute file names with search path components.
- Add unit tests to verify corrections.
Fixes: #18044 (closed)
Topic-rename: find_program-conditional-cwd