| # testNoSuchFile should only be found if the file absolute path is | |
| # incorrectly prepended with the search path. | |
| function(strip_windows_path_prefix p outvar) | |
| if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") | |
| string(REGEX REPLACE "^.:" "" p "${p}") | |
| endif() | |
| set(${outvar} "${p}" PARENT_SCOPE) | |
| endfunction() | |
| strip_windows_path_prefix("${CMAKE_CURRENT_SOURCE_DIR}" srcdir) | |
| configure_file(testCWD "tmp${srcdir}/testNoSuchFile" COPYONLY) | |
| find_program(PROG_ABS | |
| NAMES "${srcdir}/testNoSuchFile" | |
| PATHS "${CMAKE_CURRENT_BINARY_DIR}/tmp" | |
| NO_DEFAULT_PATH | |
| ) | |
| message(STATUS "PROG_ABS='${PROG_ABS}'") | |
| find_program(PROG_ABS_NPD | |
| NAMES "${srcdir}/testNoSuchFile" | |
| PATHS "${CMAKE_CURRENT_BINARY_DIR}/tmp" | |
| NAMES_PER_DIR | |
| NO_DEFAULT_PATH | |
| ) | |
| message(STATUS "PROG_ABS_NPD='${PROG_ABS_NPD}'") | |
| # ./testCWD should not be found without '.' being in the path list. | |
| configure_file(testCWD testCWD COPYONLY) | |
| find_program(PROG_CWD | |
| NAMES testCWD | |
| NO_DEFAULT_PATH | |
| ) | |
| message(STATUS "PROG_CWD='${PROG_CWD}'") | |
| set(CMAKE_PREFIX_PATH ".") | |
| # On some platforms / dashboards the current working | |
| # directory can be in PATH or other search locations | |
| # so disable all searching to make sure this fails | |
| set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH OFF) | |
| set(CMAKE_FIND_USE_CMAKE_PATH OFF) | |
| set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH OFF) | |
| set(CMAKE_FIND_USE_PACKAGE_ROOT_PATH OFF) | |
| set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF) | |
| find_program(PROG_CWD | |
| NAMES testCWD | |
| ) | |
| message(STATUS "PROG_CWD='${PROG_CWD}'") | |
| set(CMAKE_PREFIX_PATH ".") | |
| set(CMAKE_FIND_USE_CMAKE_PATH ON) | |
| find_program(PROG_CWD | |
| NAMES testCWD | |
| ) | |
| message(STATUS "PROG_CWD='${PROG_CWD}'") | |
| find_program(PROG_CWD_NPD | |
| NAMES testCWD | |
| NAMES_PER_DIR | |
| NO_DEFAULT_PATH | |
| ) | |
| message(STATUS "PROG_CWD_NPD='${PROG_CWD_NPD}'") | |
| # Confirm that adding '.' to path does locate ./testCWD. | |
| find_program(PROG_CWD_DOT | |
| NAMES testCWD | |
| PATHS . | |
| NO_DEFAULT_PATH | |
| ) | |
| message(STATUS "PROG_CWD_DOT='${PROG_CWD_DOT}'") | |
| find_program(PROG_CWD_DOT_NPD | |
| NAMES testCWD | |
| PATHS . | |
| NAMES_PER_DIR | |
| NO_DEFAULT_PATH | |
| ) | |
| message(STATUS "PROG_CWD_DOT_NPD='${PROG_CWD_DOT_NPD}'") |