---
 cmake/modules/Finduuid.cmake | 48 +++++++++++++++++-------------------
 1 file changed, 22 insertions(+), 26 deletions(-)

diff --git a/cmake/modules/Finduuid.cmake b/cmake/modules/Finduuid.cmake
index 2f97a1f..e2c7d13 100644
--- a/cmake/modules/Finduuid.cmake
+++ b/cmake/modules/Finduuid.cmake
@@ -1,32 +1,28 @@
-# Try to find uuid
-# Once done, this will define
-#
-# UUID_FOUND        - system has uuid
-# UUID_INCLUDE_DIRS - uuid include directories
-# UUID_LIBRARIES    - libraries needed to use uuid
-
+include(CheckCXXSymbolExists)
+include(CheckLibraryExists)
 include(FindPackageHandleStandardArgs)
 
-if(UUID_INCLUDE_DIRS AND UUID_LIBRARIES)
-  set(UUID_FIND_QUIETLY TRUE)
-else()
-  find_path(
-    UUID_INCLUDE_DIR
-    NAMES uuid.h
-    HINTS ${UUID_ROOT_DIR}
-    PATH_SUFFIXES include uuid)
-
-  find_library(
-    UUID_LIBRARY
-    NAMES uuid
-    HINTS ${UUID_ROOT_DIR}
-    PATH_SUFFIXES ${LIBRARY_PATH_PREFIX})
+if(NOT UUID_INCLUDE_DIR)
+  find_path(UUID_INCLUDE_DIR uuid/uuid.h)
+endif()
 
+if(EXISTS UUID_INCLUDE_DIR)
   set(UUID_INCLUDE_DIRS ${UUID_INCLUDE_DIR})
-  set(UUID_LIBRARIES ${UUID_LIBRARY})
-
-  find_package_handle_standard_args(
-    uuid DEFAULT_MSG UUID_LIBRARY UUID_INCLUDE_DIR)
+  set(CMAKE_REQUIRED_INCLUDES ${UUID_INCLUDE_DIRS})
+  check_cxx_symbol_exists("uuid_generate_random" "uuid/uuid.h" _uuid_header_only)
+endif()
 
-  mark_as_advanced(UUID_INCLUDE_DIR UUID_LIBRARY)
+if(NOT _uuid_header_only AND NOT UUID_LIBRARY)
+  check_library_exists("uuid" "uuid_generate_random" "" _have_libuuid)
+  if(_have_libuuid)
+    set(UUID_LIBRARY "uuid")
+    set(UUID_LIBRARIES ${UUID_LIBRARY})
+  endif()
 endif()
+
+unset(CMAKE_REQUIRED_INCLUDES)
+unset(_uuid_header_only)
+unset(_have_libuuid)
+
+find_package_handle_standard_args(uuid DEFAULT_MSG UUID_INCLUDE_DIR)
+mark_as_advanced(UUID_INCLUDE_DIR UUID_LIBRARY)
-- 
2.17.0

