execute_process( COMMAND ${CMAKE_COMMAND} -E environment OUTPUT_VARIABLE out ERROR_VARIABLE err RESULT_VARIABLE res) if (res) message(FATAL_ERROR "Failed with exit code ${res}: ${err}") endif () if (CMAKE_HOST_WIN32) set(path_sep ";") else () set(path_sep ":") endif () set(unexpect_SET_FROM_AMBIENT_unset "") set(unexpect_SET_FROM_ENVIRONMENT_PROPERTY_unset "") set(unexpect_UNSET_EXPLICIT "") set(unexpect_UNSET_VIA_RESET "") set(expect_DIRECT "new") set(expect_STRING_MANIP "prefix-pre-core-post-suffix") set(expect_PATH_MANIP "prefix${path_sep}pre${path_sep}core${path_sep}post${path_sep}suffix") set(expect_CMAKE_LIST_MANIP "prefix;pre;core;post;suffix") set(expect_STRING_DNE "prefix-prepost-suffix") set(expect_PATH_DNE "prefix${path_sep}pre${path_sep}post${path_sep}suffix") set(expect_CMAKE_LIST_DNE "prefix;pre;post;suffix") set(expect_SET_FROM_AMBIENT_replace "new") set(expect_SET_FROM_AMBIENT_string "basenew") set(expect_SET_FROM_AMBIENT_path "base${path_sep}new") set(expect_SET_FROM_AMBIENT_list "base;new") set(expect_SET_FROM_ENVIRONMENT_PROPERTY_replace "new") set(expect_SET_FROM_ENVIRONMENT_PROPERTY_string "basenew") set(expect_SET_FROM_ENVIRONMENT_PROPERTY_path "base${path_sep}new") set(expect_SET_FROM_ENVIRONMENT_PROPERTY_list "base;new") set(expected_vars SET_FROM_AMBIENT_replace SET_FROM_AMBIENT_string SET_FROM_AMBIENT_path SET_FROM_AMBIENT_list SET_FROM_ENVIRONMENT_PROPERTY_replace SET_FROM_ENVIRONMENT_PROPERTY_string SET_FROM_ENVIRONMENT_PROPERTY_path SET_FROM_ENVIRONMENT_PROPERTY_list DIRECT STRING_MANIP PATH_MANIP CMAKE_LIST_MANIP STRING_DNE PATH_DNE CMAKE_LIST_DNE) while (out) string(FIND "${out}" "\n" nl_pos) string(SUBSTRING "${out}" 0 "${nl_pos}" line) math(EXPR line_next "${nl_pos} + 1") string(SUBSTRING "${out}" "${line_next}" -1 out) string(FIND "${line}" "=" eq_pos) string(SUBSTRING "${line}" 0 "${eq_pos}" name) math(EXPR value_start "${eq_pos} + 1") string(SUBSTRING "${line}" "${value_start}" -1 value) if (DEFINED "unexpect_${name}") message(SEND_ERROR "Found `${name}=${value}` when it should have been unset") elseif (DEFINED "expect_${name}") list(REMOVE_ITEM expected_vars "${name}") if (expect_${name} STREQUAL value) message(STATUS "Found `${name}=${value}` as expected") else () message(SEND_ERROR "Found `${name}=${value}` when it should have been ${expect_${name}}") endif () endif () endwhile () if (expected_vars) message(SEND_ERROR "Did not test expected variables: ${expected_vars}") endif ()