--- /dev/null
+function(CHECK_TBB)
+ check_header(execution)
+ # TBBConfig only sets TBB_FOUND to FALSE
+ if(HAVE_EXECUTION)
+ check_dependency(LIBTBB tbb tbb/task.h)
+ if(HAVE_LIBTBB)
+ cmake_push_check_state(RESET)
+ get_property(LIBTBB_INCLUDEDIR TARGET LIBTBB PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
+ get_property(LIBTBB_LIBRARIES TARGET LIBTBB PROPERTY INTERFACE_LINK_LIBRARIES)
+ set(CMAKE_REQUIRED_INCLUDES "${LIBTBB_INCLUDEDIR}")
+ set(CMAKE_REQUIRED_LIBRARIES "${LIBTBB_LIBRARIES}")
+ set(CMAKE_REQUIRED_FLAGS -std=c++17)
+ check_compiles(HAVE_TBB "std::vector<char> a={1,2,3}; std::all_of(std::execution::par,a.begin(),a.end(),[](char i){return i>0;});" vector algorithm execution)
+ cmake_pop_check_state(RESET)
+ if(HAVE_TBB)
+ set(HAVE_LIBTBB 1 PARENT_SCOPE)
+ endif()
+ endif()
+ endif()
+endfunction()