cm_c11_thread_local.cmake 1.4 KB

123456789101112131415161718192021222324252627282930313233
  1. set(CMake_C11_THREAD_LOCAL_BROKEN 0)
  2. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_C11_STANDARD_COMPILE_OPTION)
  3. if(NOT DEFINED CMake_C11_THREAD_LOCAL_WORKS)
  4. message(STATUS "Checking if compiler supports C11 _Thread_local")
  5. try_compile(CMake_C11_THREAD_LOCAL_WORKS
  6. ${CMAKE_CURRENT_BINARY_DIR}
  7. ${CMAKE_CURRENT_LIST_DIR}/cm_c11_thread_local.c
  8. CMAKE_FLAGS -DCMAKE_C_STANDARD=11
  9. OUTPUT_VARIABLE OUTPUT
  10. )
  11. if(CMake_C11_THREAD_LOCAL_WORKS AND "${OUTPUT}" MATCHES "error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'")
  12. set_property(CACHE CMake_C11_THREAD_LOCAL_WORKS PROPERTY VALUE 0)
  13. endif()
  14. if(CMake_C11_THREAD_LOCAL_WORKS)
  15. message(STATUS "Checking if compiler supports C11 _Thread_local - yes")
  16. file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
  17. "Determining if compiler supports C11 _Thread_local passed with the following output:\n"
  18. "${OUTPUT}\n"
  19. "\n"
  20. )
  21. else()
  22. message(STATUS "Checking if compiler supports C11 _Thread_local - no")
  23. file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  24. "Determining if compiler supports C11 _Thread_local failed with the following output:\n"
  25. "${OUTPUT}\n"
  26. "\n"
  27. )
  28. endif()
  29. endif()
  30. if(NOT CMake_C11_THREAD_LOCAL_WORKS)
  31. set(CMake_C11_THREAD_LOCAL_BROKEN 1)
  32. endif()
  33. endif()