| # This function returns the messages of various POSIX error codes as they are returned by std::error_code. |
| # The purpose of this function is to supply those error messages to llvm-lit using the errc_messages config. |
| # Currently supplied and needed error codes: ENOENT, EISDIR, EINVAL and EACCES. |
| # Messages are semi colon separated. |
| # Keep amount, order and tested error codes in sync with llvm/utils/lit/lit/llvm/config.py. |
| function(get_errc_messages outvar) |
| if(CMAKE_CROSSCOMPILING AND NOT CMAKE_CROSSCOMPILING_EMULATOR AND NOT DEFINED errc_exit_code) |
| set(${outvar} "" PARENT_SCOPE) |
| message(STATUS "Can't get errc messages in cross-compilation mode") |
| set(errc_test_code ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/getErrc.cpp) |
| file(WRITE ${errc_test_code} " |
| std::string getMessageFor(int err) { |
| return std::make_error_code(static_cast<std::errc>(err)).message(); |
| std::cout << getMessageFor(ENOENT) << ';' << getMessageFor(EISDIR); |
| std::cout << ';' << getMessageFor(EINVAL) << ';' << getMessageFor(EACCES); |
| RUN_OUTPUT_VARIABLE errc_result |
| COMPILE_OUTPUT_VARIABLE errc_compile_errors) |
| if (errc_compiled AND "${errc_exit_code}" STREQUAL "0") |
| set(${outvar} ${errc_result} PARENT_SCOPE) |
| set(${outvar} "" PARENT_SCOPE) |
| message(STATUS "Failed to get errc messages") |