diff --git a/cmake/FindCXSparse.cmake b/cmake/FindCXSparse.cmake
index 718042c..798809c 100644
--- a/cmake/FindCXSparse.cmake
+++ b/cmake/FindCXSparse.cmake
@@ -143,8 +143,8 @@
 # Search supplied hint directories first if supplied.
 find_path(CXSPARSE_INCLUDE_DIR
   NAMES cs.h
-  PATHS ${CXSPARSE_INCLUDE_DIR_HINTS}
-  ${CXSPARSE_CHECK_INCLUDE_DIRS})
+  HINTS ${CXSPARSE_INCLUDE_DIR_HINTS}
+  PATHS ${CXSPARSE_CHECK_INCLUDE_DIRS})
 if (NOT CXSPARSE_INCLUDE_DIR OR
     NOT EXISTS ${CXSPARSE_INCLUDE_DIR})
   cxsparse_report_not_found(
@@ -154,8 +154,8 @@
        NOT EXISTS ${CXSPARSE_INCLUDE_DIR})
 
 find_library(CXSPARSE_LIBRARY NAMES cxsparse
-  PATHS ${CXSPARSE_LIBRARY_DIR_HINTS}
-  ${CXSPARSE_CHECK_LIBRARY_DIRS})
+  HINTS ${CXSPARSE_LIBRARY_DIR_HINTS}
+  PATHS ${CXSPARSE_CHECK_LIBRARY_DIRS})
 if (NOT CXSPARSE_LIBRARY OR
     NOT EXISTS ${CXSPARSE_LIBRARY})
   cxsparse_report_not_found(
diff --git a/cmake/FindEigen.cmake b/cmake/FindEigen.cmake
index 348f043..f6d2664 100644
--- a/cmake/FindEigen.cmake
+++ b/cmake/FindEigen.cmake
@@ -195,8 +195,8 @@
   # Search supplied hint directories first if supplied.
   find_path(EIGEN_INCLUDE_DIR
     NAMES Eigen/Core
-    PATHS ${EIGEN_INCLUDE_DIR_HINTS}
-    ${EIGEN_CHECK_INCLUDE_DIRS}
+    HINTS ${EIGEN_INCLUDE_DIR_HINTS}
+    PATHS ${EIGEN_CHECK_INCLUDE_DIRS}
     PATH_SUFFIXES ${EIGEN_CHECK_PATH_SUFFIXES})
 
   if (NOT EIGEN_INCLUDE_DIR OR
@@ -258,5 +258,6 @@
 # Only mark internal variables as advanced if we found Eigen, otherwise
 # leave it visible in the standard GUI for the user to set manually.
 if (EIGEN_FOUND)
-  mark_as_advanced(FORCE EIGEN_INCLUDE_DIR)
+  mark_as_advanced(FORCE EIGEN_INCLUDE_DIR
+    Eigen3_DIR) # Autogenerated by find_package(Eigen3)
 endif (EIGEN_FOUND)
diff --git a/cmake/FindGflags.cmake b/cmake/FindGflags.cmake
index 0bd5c56..32c04ea 100644
--- a/cmake/FindGflags.cmake
+++ b/cmake/FindGflags.cmake
@@ -456,8 +456,8 @@
   # Search supplied hint directories first if supplied.
   find_path(GFLAGS_INCLUDE_DIR
     NAMES gflags/gflags.h
-    PATHS ${GFLAGS_INCLUDE_DIR_HINTS}
-    ${GFLAGS_CHECK_INCLUDE_DIRS}
+    HINTS ${GFLAGS_INCLUDE_DIR_HINTS}
+    PATHS ${GFLAGS_CHECK_INCLUDE_DIRS}
     PATH_SUFFIXES ${GFLAGS_CHECK_PATH_SUFFIXES})
   if (NOT GFLAGS_INCLUDE_DIR OR
       NOT EXISTS ${GFLAGS_INCLUDE_DIR})
@@ -468,8 +468,8 @@
     NOT EXISTS ${GFLAGS_INCLUDE_DIR})
 
   find_library(GFLAGS_LIBRARY NAMES gflags
-    PATHS ${GFLAGS_LIBRARY_DIR_HINTS}
-    ${GFLAGS_CHECK_LIBRARY_DIRS}
+    HINTS ${GFLAGS_LIBRARY_DIR_HINTS}
+    PATHS ${GFLAGS_CHECK_LIBRARY_DIRS}
     PATH_SUFFIXES ${GFLAGS_CHECK_LIBRARY_SUFFIXES})
   if (NOT GFLAGS_LIBRARY OR
       NOT EXISTS ${GFLAGS_LIBRARY})
diff --git a/cmake/FindGlog.cmake b/cmake/FindGlog.cmake
index a11ba2c..979dced 100644
--- a/cmake/FindGlog.cmake
+++ b/cmake/FindGlog.cmake
@@ -260,8 +260,8 @@
   # Search supplied hint directories first if supplied.
   find_path(GLOG_INCLUDE_DIR
     NAMES glog/logging.h
-    PATHS ${GLOG_INCLUDE_DIR_HINTS}
-    ${GLOG_CHECK_INCLUDE_DIRS}
+    HINTS ${GLOG_INCLUDE_DIR_HINTS}
+    PATHS ${GLOG_CHECK_INCLUDE_DIRS}
     PATH_SUFFIXES ${GLOG_CHECK_PATH_SUFFIXES})
   if (NOT GLOG_INCLUDE_DIR OR
       NOT EXISTS ${GLOG_INCLUDE_DIR})
@@ -272,8 +272,8 @@
     NOT EXISTS ${GLOG_INCLUDE_DIR})
 
   find_library(GLOG_LIBRARY NAMES glog
-    PATHS ${GLOG_LIBRARY_DIR_HINTS}
-    ${GLOG_CHECK_LIBRARY_DIRS}
+    HINTS ${GLOG_LIBRARY_DIR_HINTS}
+    PATHS ${GLOG_CHECK_LIBRARY_DIRS}
     PATH_SUFFIXES ${GLOG_CHECK_LIBRARY_SUFFIXES})
   if (NOT GLOG_LIBRARY OR
       NOT EXISTS ${GLOG_LIBRARY})
diff --git a/cmake/FindSuiteSparse.cmake b/cmake/FindSuiteSparse.cmake
index af1fb1d..db4cc3b 100644
--- a/cmake/FindSuiteSparse.cmake
+++ b/cmake/FindSuiteSparse.cmake
@@ -108,7 +108,9 @@
 #
 # == Intel Thread Building Blocks (TBB)
 # TBB_FOUND
-# TBB_LIBRARIES
+# TBB_LIBRARY
+# TBB_MALLOC_FOUND
+# TBB_MALLOC_LIBRARY
 
 # Reset CALLERS_CMAKE_FIND_LIBRARY_PREFIXES to its value when
 # FindSuiteSparse was invoked.
@@ -174,7 +176,6 @@
 # directories first if supplied, and search user-installed locations first
 # so that we prefer user installs to system installs where both exist.
 list(APPEND SUITESPARSE_CHECK_INCLUDE_DIRS
-  ${SUITESPARSE_INCLUDE_DIR_HINTS}
   /opt/local/include
   /opt/local/include/ufsparse # Mac OS X
   /usr/local/homebrew/include # Mac OS X
@@ -183,7 +184,6 @@
   /usr/include/suitesparse # Ubuntu
   /usr/include)
 list(APPEND SUITESPARSE_CHECK_LIBRARY_DIRS
-  ${SUITESPARSE_LIBRARY_DIR_HINTS}
   /opt/local/lib
   /opt/local/lib/ufsparse # Mac OS X
   /usr/local/homebrew/lib # Mac OS X
@@ -192,6 +192,67 @@
   /usr/lib/suitesparse # Ubuntu
   /usr/lib)
 
+# Wrappers to find_path/library that pass the SuiteSparse search hints/paths.
+#
+# suitesparse_find_component(<component> [FILES name1 [name2 ...]]
+#                                        [LIBRARIES name1 [name2 ...]]
+#                                        [REQUIRED])
+macro(suitesparse_find_component COMPONENT)
+  include(CMakeParseArguments)
+  set(OPTIONS REQUIRED)
+  set(MULTI_VALUE_ARGS FILES LIBRARIES)
+  cmake_parse_arguments(SUITESPARSE_FIND_${COMPONENT}
+    "${OPTIONS}" "" "${MULTI_VALUE_ARGS}" ${ARGN})
+
+  if (SUITESPARSE_FIND_${COMPONENT}_REQUIRED)
+    list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS ${COMPONENT}_FOUND)
+  endif()
+
+  set(${COMPONENT}_FOUND TRUE)
+  if (SUITESPARSE_FIND_${COMPONENT}_FILES)
+    find_path(${COMPONENT}_INCLUDE_DIR
+      NAMES ${SUITESPARSE_FIND_${COMPONENT}_FILES}
+      HINTS ${SUITESPARSE_INCLUDE_DIR_HINTS}
+      PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
+    if (${COMPONENT}_INCLUDE_DIR)
+      message(STATUS "Found ${COMPONENT} headers in: "
+        "${${COMPONENT}_INCLUDE_DIR}")
+      mark_as_advanced(${COMPONENT}_INCLUDE_DIR)
+    else()
+      # Specified headers not found.
+      set(${COMPONENT}_FOUND FALSE)
+      if (SUITESPARSE_FIND_${COMPONENT}_REQUIRED)
+        suitesparse_report_not_found(
+          "Did not find ${COMPONENT} header (required SuiteSparse component).")
+      else()
+        message(STATUS "Did not find ${COMPONENT} header (optional "
+          "SuiteSparse component).")
+      endif()
+    endif()
+  endif()
+
+  if (SUITESPARSE_FIND_${COMPONENT}_LIBRARIES)
+    find_library(${COMPONENT}_LIBRARY
+      NAMES ${SUITESPARSE_FIND_${COMPONENT}_LIBRARIES}
+      HINTS ${SUITESPARSE_LIBRARY_DIR_HINTS}
+      PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
+    if (${COMPONENT}_LIBRARY)
+      message(STATUS "Found ${COMPONENT} library: ${${COMPONENT}_LIBRARY}")
+      mark_as_advanced(${COMPONENT}_LIBRARY)
+    else ()
+      # Specified libraries not found.
+      set(${COMPONENT}_FOUND FALSE)
+      if (SUITESPARSE_FIND_${COMPONENT}_REQUIRED)
+        suitesparse_report_not_found(
+          "Did not find ${COMPONENT} library (required SuiteSparse component).")
+      else()
+        message(STATUS "Did not find ${COMPONENT} library (optional SuiteSparse "
+          "dependency)")
+      endif()
+    endif()
+  endif()
+endmacro()
+
 # Given the number of components of SuiteSparse, and to ensure that the
 # automatic failure message generated by FindPackageHandleStandardArgs()
 # when not all required components are found is helpful, we maintain a list
@@ -214,258 +275,66 @@
 endif (NOT LAPACK_FOUND)
 list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS LAPACK_FOUND)
 
-# AMD.
-set(AMD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS AMD_FOUND)
-find_library(AMD_LIBRARY NAMES amd
-  PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${AMD_LIBRARY})
-  message(STATUS "Found AMD library: ${AMD_LIBRARY}")
-else (EXISTS ${AMD_LIBRARY})
-  suitesparse_report_not_found(
-    "Did not find AMD library (required SuiteSparse component).")
-  set(AMD_FOUND FALSE)
-endif (EXISTS ${AMD_LIBRARY})
-mark_as_advanced(AMD_LIBRARY)
-
-find_path(AMD_INCLUDE_DIR NAMES amd.h
-  PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${AMD_INCLUDE_DIR})
-  message(STATUS "Found AMD header in: ${AMD_INCLUDE_DIR}")
-else (EXISTS ${AMD_INCLUDE_DIR})
-  suitesparse_report_not_found(
-    "Did not find AMD header (required SuiteSparse component).")
-  set(AMD_FOUND FALSE)
-endif (EXISTS ${AMD_INCLUDE_DIR})
-mark_as_advanced(AMD_INCLUDE_DIR)
-
-# CAMD.
-set(CAMD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CAMD_FOUND)
-find_library(CAMD_LIBRARY NAMES camd
-  PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${CAMD_LIBRARY})
-  message(STATUS "Found CAMD library: ${CAMD_LIBRARY}")
-else (EXISTS ${CAMD_LIBRARY})
-  suitesparse_report_not_found(
-    "Did not find CAMD library (required SuiteSparse component).")
-  set(CAMD_FOUND FALSE)
-endif (EXISTS ${CAMD_LIBRARY})
-mark_as_advanced(CAMD_LIBRARY)
-
-find_path(CAMD_INCLUDE_DIR NAMES camd.h
-  PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${CAMD_INCLUDE_DIR})
-  message(STATUS "Found CAMD header in: ${CAMD_INCLUDE_DIR}")
-else (EXISTS ${CAMD_INCLUDE_DIR})
-  suitesparse_report_not_found(
-    "Did not find CAMD header (required SuiteSparse component).")
-  set(CAMD_FOUND FALSE)
-endif (EXISTS ${CAMD_INCLUDE_DIR})
-mark_as_advanced(CAMD_INCLUDE_DIR)
-
-# COLAMD.
-set(COLAMD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS COLAMD_FOUND)
-find_library(COLAMD_LIBRARY NAMES colamd
-  PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${COLAMD_LIBRARY})
-  message(STATUS "Found COLAMD library: ${COLAMD_LIBRARY}")
-else (EXISTS ${COLAMD_LIBRARY})
-  suitesparse_report_not_found(
-    "Did not find COLAMD library (required SuiteSparse component).")
-  set(COLAMD_FOUND FALSE)
-endif (EXISTS ${COLAMD_LIBRARY})
-mark_as_advanced(COLAMD_LIBRARY)
-
-find_path(COLAMD_INCLUDE_DIR NAMES colamd.h
-  PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${COLAMD_INCLUDE_DIR})
-  message(STATUS "Found COLAMD header in: ${COLAMD_INCLUDE_DIR}")
-else (EXISTS ${COLAMD_INCLUDE_DIR})
-  suitesparse_report_not_found(
-    "Did not find COLAMD header (required SuiteSparse component).")
-  set(COLAMD_FOUND FALSE)
-endif (EXISTS ${COLAMD_INCLUDE_DIR})
-mark_as_advanced(COLAMD_INCLUDE_DIR)
-
-# CCOLAMD.
-set(CCOLAMD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CCOLAMD_FOUND)
-find_library(CCOLAMD_LIBRARY NAMES ccolamd
-  PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${CCOLAMD_LIBRARY})
-  message(STATUS "Found CCOLAMD library: ${CCOLAMD_LIBRARY}")
-else (EXISTS ${CCOLAMD_LIBRARY})
-  suitesparse_report_not_found(
-    "Did not find CCOLAMD library (required SuiteSparse component).")
-  set(CCOLAMD_FOUND FALSE)
-endif (EXISTS ${CCOLAMD_LIBRARY})
-mark_as_advanced(CCOLAMD_LIBRARY)
-
-find_path(CCOLAMD_INCLUDE_DIR NAMES ccolamd.h
-  PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${CCOLAMD_INCLUDE_DIR})
-  message(STATUS "Found CCOLAMD header in: ${CCOLAMD_INCLUDE_DIR}")
-else (EXISTS ${CCOLAMD_INCLUDE_DIR})
-  suitesparse_report_not_found(
-    "Did not find CCOLAMD header (required SuiteSparse component).")
-  set(CCOLAMD_FOUND FALSE)
-endif (EXISTS ${CCOLAMD_INCLUDE_DIR})
-mark_as_advanced(CCOLAMD_INCLUDE_DIR)
-
-# CHOLMOD.
-set(CHOLMOD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CHOLMOD_FOUND)
-find_library(CHOLMOD_LIBRARY NAMES cholmod
-  PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${CHOLMOD_LIBRARY})
-  message(STATUS "Found CHOLMOD library: ${CHOLMOD_LIBRARY}")
-else (EXISTS ${CHOLMOD_LIBRARY})
-  suitesparse_report_not_found(
-    "Did not find CHOLMOD library (required SuiteSparse component).")
-  set(CHOLMOD_FOUND FALSE)
-endif (EXISTS ${CHOLMOD_LIBRARY})
-mark_as_advanced(CHOLMOD_LIBRARY)
-
-find_path(CHOLMOD_INCLUDE_DIR NAMES cholmod.h
-  PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${CHOLMOD_INCLUDE_DIR})
-  message(STATUS "Found CHOLMOD header in: ${CHOLMOD_INCLUDE_DIR}")
-else (EXISTS ${CHOLMOD_INCLUDE_DIR})
-  suitesparse_report_not_found(
-    "Did not find CHOLMOD header (required SuiteSparse component).")
-  set(CHOLMOD_FOUND FALSE)
-endif (EXISTS ${CHOLMOD_INCLUDE_DIR})
-mark_as_advanced(CHOLMOD_INCLUDE_DIR)
-
-# SuiteSparseQR.
-set(SUITESPARSEQR_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS SUITESPARSEQR_FOUND)
-find_library(SUITESPARSEQR_LIBRARY NAMES spqr
-  PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${SUITESPARSEQR_LIBRARY})
-  message(STATUS "Found SuiteSparseQR library: ${SUITESPARSEQR_LIBRARY}")
-else (EXISTS ${SUITESPARSEQR_LIBRARY})
-  suitesparse_report_not_found(
-    "Did not find SuiteSparseQR library (required SuiteSparse component).")
-  set(SUITESPARSEQR_FOUND FALSE)
-endif (EXISTS ${SUITESPARSEQR_LIBRARY})
-mark_as_advanced(SUITESPARSEQR_LIBRARY)
-
-find_path(SUITESPARSEQR_INCLUDE_DIR NAMES SuiteSparseQR.hpp
-  PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
-  message(STATUS "Found SuiteSparseQR header in: ${SUITESPARSEQR_INCLUDE_DIR}")
-else (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
-  suitesparse_report_not_found(
-    "Did not find SUITESPARSEQR header (required SuiteSparse component).")
-  set(SUITESPARSEQR_FOUND FALSE)
-endif (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
-mark_as_advanced(SUITESPARSEQR_INCLUDE_DIR)
-
+suitesparse_find_component(AMD REQUIRED FILES amd.h LIBRARIES amd)
+suitesparse_find_component(CAMD REQUIRED FILES camd.h LIBRARIES camd)
+suitesparse_find_component(COLAMD REQUIRED FILES colamd.h LIBRARIES colamd)
+suitesparse_find_component(COLAMD REQUIRED FILES ccolamd.h LIBRARIES ccolamd)
+suitesparse_find_component(CHOLMOD REQUIRED FILES cholmod.h LIBRARIES cholmod)
+suitesparse_find_component(
+  SUITESPARSEQR REQUIRED FILES SuiteSparseQR.hpp LIBRARIES spqr)
 if (SUITESPARSEQR_FOUND)
   # SuiteSparseQR may be compiled with Intel Threading Building Blocks,
   # we assume that if TBB is installed, SuiteSparseQR was compiled with
   # support for it, this will do no harm if it wasn't.
-  set(TBB_FOUND TRUE)
-  find_library(TBB_LIBRARIES NAMES tbb
-    PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-  if (EXISTS ${TBB_LIBRARIES})
-    message(STATUS "Found Intel Thread Building Blocks (TBB) library: "
-      "${TBB_LIBRARIES}, assuming SuiteSparseQR was compiled with TBB.")
-  else (EXISTS ${TBB_LIBRARIES})
-    message(STATUS "Did not find Intel TBB library, assuming SuiteSparseQR was "
-      "not compiled with TBB.")
-    set(TBB_FOUND FALSE)
-  endif (EXISTS ${TBB_LIBRARIES})
-  mark_as_advanced(TBB_LIBRARIES)
-
+  suitesparse_find_component(TBB LIBRARIES tbb)
   if (TBB_FOUND)
-    find_library(TBB_MALLOC_LIB NAMES tbbmalloc
-      PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-    if (EXISTS ${TBB_MALLOC_LIB})
+    message(STATUS "Found Intel Thread Building Blocks (TBB) library: "
+      "${TBB_LIBRARY}, assuming SuiteSparseQR was compiled with TBB.")
+    suitesparse_find_component(TBB_MALLOC LIBRARIES tbbmalloc)
+    if (TBB_MALLOC_FOUND)
       message(STATUS "Found Intel Thread Building Blocks (TBB) Malloc library: "
-        "${TBB_MALLOC_LIB}")
-      # Append TBB malloc library to TBB libraries list whilst retaining
-      # any CMake generated help string (cache variable).
-      list(APPEND TBB_LIBRARIES ${TBB_MALLOC_LIB})
-      get_property(HELP_STRING CACHE TBB_LIBRARIES PROPERTY HELPSTRING)
-      set(TBB_LIBRARIES "${TBB_LIBRARIES}" CACHE STRING "${HELP_STRING}")
-
+        "${TBB_MALLOC_LIBRARY}")
       # Add the TBB libraries to the SuiteSparseQR libraries (the only
       # libraries to optionally depend on TBB).
-      list(APPEND SUITESPARSEQR_LIBRARY ${TBB_LIBRARIES})
-
-    else (EXISTS ${TBB_MALLOC_LIB})
-      # If we cannot find all required TBB components do not include it as
-      # a dependency.
+      list(APPEND SUITESPARSEQR_LIBRARY ${TBB_LIBRARY} ${TBB_MALLOC_LIBRARY})
+    else()
       message(STATUS "Did not find Intel Thread Building Blocks (TBB) Malloc "
         "Library, discarding TBB as a dependency.")
-      set(TBB_FOUND FALSE)
-    endif (EXISTS ${TBB_MALLOC_LIB})
-    mark_as_advanced(TBB_MALLOC_LIB)
-  endif (TBB_FOUND)
+    endif()
+  else()
+    message(STATUS "Did not find Intel TBB library, assuming SuiteSparseQR was "
+      "not compiled with TBB.")
+  endif()
 endif(SUITESPARSEQR_FOUND)
 
 # UFconfig / SuiteSparse_config.
 #
 # If SuiteSparse version is >= 4 then SuiteSparse_config is required.
 # For SuiteSparse 3, UFconfig.h is required.
-find_library(SUITESPARSE_CONFIG_LIBRARY NAMES suitesparseconfig
-  PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${SUITESPARSE_CONFIG_LIBRARY})
-  message(STATUS "Found SuiteSparse_config library: "
-    "${SUITESPARSE_CONFIG_LIBRARY}")
-endif (EXISTS ${SUITESPARSE_CONFIG_LIBRARY})
-mark_as_advanced(SUITESPARSE_CONFIG_LIBRARY)
+suitesparse_find_component(
+  SUITESPARSE_CONFIG FILES SuiteSparse_config.h LIBRARIES suitesparseconfig)
 
-find_path(SUITESPARSE_CONFIG_INCLUDE_DIR NAMES SuiteSparse_config.h
-  PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
-  message(STATUS "Found SuiteSparse_config header in: "
-    "${SUITESPARSE_CONFIG_INCLUDE_DIR}")
-endif (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
-mark_as_advanced(SUITESPARSE_CONFIG_INCLUDE_DIR)
-
-set(SUITESPARSE_CONFIG_FOUND FALSE)
-set(UFCONFIG_FOUND FALSE)
-
-if (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
-    EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
-  set(SUITESPARSE_CONFIG_FOUND TRUE)
+if (SUITESPARSE_CONFIG_FOUND)
   # SuiteSparse_config (SuiteSparse version >= 4) requires librt library for
   # timing by default when compiled on Linux or Unix, but not on OSX (which
   # does not have librt).
   if (CMAKE_SYSTEM_NAME MATCHES "Linux" OR UNIX AND NOT APPLE)
-    find_library(LIBRT_LIBRARY NAMES rt
-      PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-    if (LIBRT_LIBRARY)
+    suitesparse_find_component(LIBRT LIBRARIES rt)
+    if (LIBRT_FOUND)
       message(STATUS "Adding librt: ${LIBRT_LIBRARY} to "
         "SuiteSparse_config libraries (required on Linux & Unix [not OSX] if "
         "SuiteSparse is compiled with timing).")
-    else (LIBRT_LIBRARY)
+      list(APPEND SUITESPARSE_CONFIG_LIBRARY ${LIBRT_LIBRARY})
+    else()
       message(STATUS "Could not find librt, but found SuiteSparse_config, "
         "assuming that SuiteSparse was compiled without timing.")
-    endif (LIBRT_LIBRARY)
-    mark_as_advanced(LIBRT_LIBRARY)
-    list(APPEND SUITESPARSE_CONFIG_LIBRARY ${LIBRT_LIBRARY})
+    endif ()
   endif (CMAKE_SYSTEM_NAME MATCHES "Linux" OR UNIX AND NOT APPLE)
-
-else (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
-      EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
+else()
   # Failed to find SuiteSparse_config (>= v4 installs), instead look for
   # UFconfig header which should be present in < v4 installs.
-  set(SUITESPARSE_CONFIG_FOUND FALSE)
-  find_path(UFCONFIG_INCLUDE_DIR NAMES UFconfig.h
-    PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-  if (EXISTS ${UFCONFIG_INCLUDE_DIR})
-    message(STATUS "Found UFconfig header in: ${UFCONFIG_INCLUDE_DIR}")
-    set(UFCONFIG_FOUND TRUE)
-  endif (EXISTS ${UFCONFIG_INCLUDE_DIR})
-  mark_as_advanced(UFCONFIG_INCLUDE_DIR)
-endif (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
-       EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
+  suitesparse_find_component(UFCONFIG FILES UFconfig.h)
+endif ()
 
 if (NOT SUITESPARSE_CONFIG_FOUND AND
     NOT UFCONFIG_FOUND)
@@ -473,8 +342,7 @@
     "Failed to find either: SuiteSparse_config header & library (should be "
     "present in all SuiteSparse >= v4 installs), or UFconfig header (should "
     "be present in all SuiteSparse < v4 installs).")
-endif (NOT SUITESPARSE_CONFIG_FOUND AND
-       NOT UFCONFIG_FOUND)
+endif()
 
 # Extract the SuiteSparse version from the appropriate header (UFconfig.h for
 # <= v3, SuiteSparse_config.h for >= v4).
@@ -548,16 +416,7 @@
 endif (SUITESPARSE_CONFIG_FOUND)
 
 # METIS (Optional dependency).
-find_library(METIS_LIBRARY NAMES metis
-  PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${METIS_LIBRARY})
-  message(STATUS "Found METIS library: ${METIS_LIBRARY}.")
-  set(METIS_FOUND TRUE)
-else (EXISTS ${METIS_LIBRARY})
-  message(STATUS "Did not find METIS library (optional SuiteSparse dependency)")
-  set(METIS_FOUND FALSE)
-endif (EXISTS ${METIS_LIBRARY})
-mark_as_advanced(METIS_LIBRARY)
+suitesparse_find_component(METIS LIBRARIES metis)
 
 # Only mark SuiteSparse as found if all required components and dependencies
 # have been found.
@@ -621,7 +480,6 @@
     # Any even moderately recent Ubuntu release (likely to be affected by
     # this bug) should have lsb_release, if it isn't present we are likely
     # on a different Linux distribution (should be fine).
-
     execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -si
       OUTPUT_VARIABLE LSB_DISTRIBUTOR_ID
       OUTPUT_STRIP_TRAILING_WHITESPACE)
