# 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.
 
    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} "  
        #include <cerrno>
 
        #include <iostream>
 
        #include <string>
 
        #include <system_error>
 
 
 
        std::string getMessageFor(int err) {
 
            return std::make_error_code(static_cast<std::errc>(err)).message();
 
        }
 
 
 
        int main() {
 
            std::cout << getMessageFor(ENOENT) << ';' << getMessageFor(EISDIR);
 
            std::cout << ';' << getMessageFor(EINVAL) << ';' << getMessageFor(EACCES);
 
            return 0;
 
        }
 
    ")
 
 
 
            errc_compiled
 
            ${CMAKE_BINARY_DIR}
 
            ${errc_test_code}
 
            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(NOTICE 
"${errc_compile_errors}")  
        message(STATUS "Failed to get errc messages")