+include(CheckCSourceCompiles)
+include(CheckCXXCompilerFlag)
+include(CheckCXXSourceCompiles)
+include(CMakePushCheckState)
+include(memaccess)
+
+find_package(PkgConfig)
+
+if(CMAKE_VERSION VERSION_EQUAL "3.8.0" OR CMAKE_VERSION VERSION_GREATER "3.8.0")
+ check_cxx_compiler_flag("-std=c++17" HAVE_STD_CXX_17)
+ check_cxx_compiler_flag("-std=c++14" HAVE_STD_CXX_14)
+ check_cxx_compiler_flag("-std=c++11" HAVE_STD_CXX_11)
+ if(HAVE_STD_CXX_17)
+ message(STATUS "Using C++17 for the application build")
+ set(CMAKE_CXX_STANDARD 17)
+ set(REQUIRED_STD_CXX_FLAGS "-std=c++17")
+ elseif(HAVE_STD_CXX_14)
+ message(STATUS "Using C++14 for the application build")
+ set(CMAKE_CXX_STANDARD 14)
+ set(REQUIRED_STD_CXX_FLAGS "-std=c++14")
+ elseif(HAVE_STD_CXX_11)
+ message(STATUS "Using C++11 for the application build")
+ set(CMAKE_CXX_STANDARD 11)
+ set(REQUIRED_STD_CXX_FLAGS "-std=c++11")
+ else()
+ message(FATAL_ERROR "Need modern C++, at least language standard 11")
+ endif()
+else()
+ check_cxx_compiler_flag("-std=c++14" HAVE_STD_CXX_14)
+ check_cxx_compiler_flag("-std=c++11" HAVE_STD_CXX_11)
+ if(HAVE_STD_CXX_14)
+ message(STATUS "Using C++14 for the application build")
+ set(CMAKE_CXX_STANDARD 14)
+ set(REQUIRED_STD_CXX_FLAGS "-std=c++14")
+ elseif(HAVE_STD_CXX_11)
+ message(STATUS "Using C++11 for the application build")
+ set(CMAKE_CXX_STANDARD 11)
+ set(REQUIRED_STD_CXX_FLAGS "-std=c++11")
+ else()
+ message(FATAL_ERROR "Need modern C++, at least language standard 11")
+ endif()
+endif()
+
+list(APPEND PKGDEPS glib-2.0>=2.28.0)
+
+# Try to find the prefered glibmm-2.4. If not found then add glibmm-2.68
+# to the dependency list.
+pkg_check_modules(GLIBMM_2_4 glibmm-2.4>=2.28.0)
+if(GLIBMM_2_4_FOUND)
+ list(APPEND PKGDEPS glibmm-2.4>=2.28.0)
+else()
+ list(APPEND PKGDEPS glibmm-2.68>=2.68.0)
+endif()
+
+if(ENABLE_FLOW)
+ list(APPEND PKGDEPS gstreamermm-1.0>=1.8.0)
+ list(APPEND PKGDEPS libsigrokflow>=0.1.0)
+endif()
+
+set(LIBSR_CXX_BINDING "libsigrokcxx>=0.5.2")
+list(APPEND PKGDEPS "${LIBSR_CXX_BINDING}")