cmake: better check for CPP17 parallelism
[m6w6/libmemcached] / CMake / CheckTbb.cmake
index 11abb4ab0928602f19da00ba1f3281e404dbc066..cd76ab3e4761980753c553917cd8d3e100951947 100644 (file)
@@ -1,20 +1,34 @@
-function(CHECK_TBB)
-    check_header(execution)
-    # TBBConfig only sets TBB_FOUND to FALSE
+
+configure_define(HAVE_TBB)
+
+# TBBConfig only sets TBB_FOUND to FALSE
+check_dependency(LIBTBB tbb)
+
+if(HAVE_LIBTBB)
+
+    cmake_push_check_state()
+    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_cxx_include(execution -std=c++17)
     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()
+        check_cxx_source_compiles("
+                #include <vector>
+                #include <algorithm>
+                #include <execution>
+                int main() {
+                    std::vector<char> a = {1,2,3};
+                    std::all_of(std::execution::par, a.begin(), a.end(), [](char i) {
+                        return i>0;
+                    });
+                }
+                "
+                HAVE_TBB
+                )
+
     endif()
-endfunction()
+    cmake_pop_check_state()
+endif()