From a24a413d1eb9f35be5328589cb69ecddddf24854 Mon Sep 17 00:00:00 2001
From: Florent Pruvost <florent.pruvost@inria.fr>
Date: Fri, 13 Apr 2018 16:33:56 +0200
Subject: [PATCH] factorize with a more powerful macro

---
 modules/LibrariesAbsolutePath.cmake | 69 +++++++++++++++++++++++++++++
 modules/MorseInit.cmake             |  3 ++
 modules/find/FindBLAS.cmake         | 10 +----
 modules/find/FindCHAMELEON.cmake    | 27 +----------
 modules/find/FindFFTW.cmake         | 10 +----
 modules/find/FindLAPACK.cmake       | 10 +----
 modules/find/FindMAGMA.cmake        | 17 +------
 modules/find/FindMUMPS.cmake        | 10 +----
 modules/find/FindPARSEC.cmake       | 27 +----------
 modules/find/FindPASTIX.cmake       | 10 +----
 modules/find/FindPTSCOTCH.cmake     | 10 +----
 modules/find/FindQUARK.cmake        | 10 +----
 modules/find/FindSCALAPACK.cmake    | 10 +----
 modules/find/FindSCOTCH.cmake       | 10 +----
 modules/find/FindSTARPU.cmake       | 29 +-----------
 15 files changed, 88 insertions(+), 174 deletions(-)
 create mode 100644 modules/LibrariesAbsolutePath.cmake

diff --git a/modules/LibrariesAbsolutePath.cmake b/modules/LibrariesAbsolutePath.cmake
new file mode 100644
index 0000000..9a9c9a0
--- /dev/null
+++ b/modules/LibrariesAbsolutePath.cmake
@@ -0,0 +1,69 @@
+###
+#
+# @copyright (c) 2018 Inria. All rights reserved.
+#
+###
+#
+#  @file LibrariesAbsolutePath.cmake
+#
+#  @project MORSE
+#  MORSE is a software package provided by:
+#     Inria Bordeaux - Sud-Ouest,
+#     Univ. of Tennessee,
+#     King Abdullah Univesity of Science and Technology
+#     Univ. of California Berkeley,
+#     Univ. of Colorado Denver.
+#
+#  @version 1.0.0
+#  @author Florent Pruvost
+#  @date 13-04-2018
+#
+###
+
+# Transform relative path into absolute path for libraries
+# lib_list (input/output): the name of the CMake variable containing libraries, e.g. BLAS_LIBRARIES
+# hints_paths (input): additional paths to add when looking for libraries
+macro(LIBRARIES_ABSOLUTE_PATH lib_list hints_paths)
+  # collect environment paths to dig 
+  if(WIN32)
+    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+  elseif(APPLE)
+    string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+  else()
+    string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+  endif()
+  list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
+  list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
+  # copy the lib list 
+  set (${lib_list}_COPY "${${lib_list}}")
+  # reset the lib list to populate
+  set(${lib_list} "")
+  foreach(_library ${${lib_list}_COPY})
+    if(EXISTS "${_library}")
+      # if already an absolute path, nothing special to do
+      list(APPEND ${lib_list} ${_library})
+    else()
+      # replace pattern -lfoo -> foo
+      string(REGEX REPLACE "^-l" "" _library "${_library}")
+      # remove extensions if exist
+      get_filename_component(_ext "${_library}" EXT)
+      set(_lib_extensions ".so" ".a" ".dyld" ".dll")
+      list(FIND _lib_extensions "${_ext}" _index)
+      if (${_index} GREATER -1)
+        get_filename_component(_library "${_library}" NAME_WE)
+      endif()
+      # try to find the lib
+      find_library(_library_path NAMES ${_library} HINTS ${hints_paths} ${_lib_env})
+      if (_library_path)
+          list(APPEND ${lib_list} ${_library_path})
+      else()
+          message(FATAL_ERROR "Dependency of ${lib_list} '${_library}' NOT FOUND")
+      endif()
+      unset(_library_path CACHE)
+    endif()
+  endforeach()
+endmacro()
+
+##
+## @end file LibrariesAbsolutePath.cmake
+##
diff --git a/modules/MorseInit.cmake b/modules/MorseInit.cmake
index 85a5e84..9d4bf78 100644
--- a/modules/MorseInit.cmake
+++ b/modules/MorseInit.cmake
@@ -53,6 +53,9 @@ include(FindHeadersAndLibs)
 # To transform relative path from pkg-config into absolute
 include(FindPkgconfigLibrariesAbsolutePath)
 
+# To transform relative path into absolute for a list of libraries
+include(LibrariesAbsolutePath)
+
 # Some macros to print status when search for headers and libs
 # PrintFindStatus.cmake is in cmake_modules/morse/find directory
 include(PrintFindStatus)
diff --git a/modules/find/FindBLAS.cmake b/modules/find/FindBLAS.cmake
index 300683e..b6ed28f 100644
--- a/modules/find/FindBLAS.cmake
+++ b/modules/find/FindBLAS.cmake
@@ -610,15 +610,7 @@ if( (NOT BLAS_FOUND_WITH_PKGCONFIG) OR BLAS_GIVEN_BY_USER )
           find_package(Threads REQUIRED)
         endif()
         if( THREADS_FOUND )
-          string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-          set(CMAKE_THREAD_LIBS_INIT)
-          foreach(_lib ${THREAD_LIBS})
-            find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-              HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-            if (THREADS_${_lib}_LIBRARY)
-              list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-            endif()
-          endforeach()
+          libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
         endif ()
 
         set(BLAS_SEARCH_LIBS "")
diff --git a/modules/find/FindCHAMELEON.cmake b/modules/find/FindCHAMELEON.cmake
index 744026f..627c6ca 100644
--- a/modules/find/FindCHAMELEON.cmake
+++ b/modules/find/FindCHAMELEON.cmake
@@ -203,15 +203,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUN
   endif()
   set(CHAMELEON_EXTRA_LIBRARIES "")
   if( THREADS_FOUND )
-    string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-    set(CMAKE_THREAD_LIBS_INIT)
-    foreach(_lib ${THREAD_LIBS})
-      find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-        HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-      if (THREADS_${_lib}_LIBRARY)
-        list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-      endif()
-    endforeach()
+    libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
     list(APPEND CHAMELEON_EXTRA_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
   endif ()
 
@@ -312,22 +304,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUN
       mark_as_advanced(CUDA_SDK_ROOT_DIR)
       mark_as_advanced(CUDA_TOOLKIT_ROOT_DIR)
       mark_as_advanced(CUDA_VERBOSE_BUILD)
-      if(WIN32)
-        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
-      elseif(APPLE)
-        string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
-      else()
-        string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
-      endif()
-      string(REGEX REPLACE "-l" "" CUDA_LIBS "${CUDA_LIBRARIES}")
-      set(CUDA_LIBRARIES)
-      foreach(_lib ${CUDA_LIBS})
-        find_library(CUDA_${_lib}_LIBRARY NAMES ${_lib}
-          HINTS $ENV{CUDA_ROOT}/lib64 ${_lib_env} ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-        if (CUDA_${_lib}_LIBRARY)
-          list(APPEND CUDA_LIBRARIES ${CUDA_${_lib}_LIBRARY})
-        endif()
-      endforeach()
+      libraries_absolute_path(CUDA_LIBRARIES "$ENV{CUDA_ROOT}/lib64")
     endif()
   endif()
 
diff --git a/modules/find/FindFFTW.cmake b/modules/find/FindFFTW.cmake
index ab8bf9a..af307ed 100644
--- a/modules/find/FindFFTW.cmake
+++ b/modules/find/FindFFTW.cmake
@@ -224,15 +224,7 @@ endif()
 
 
 if( THREADS_FOUND )
-  string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-  set(CMAKE_THREAD_LIBS_INIT)
-  foreach(_lib ${THREAD_LIBS})
-    find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-      HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (THREADS_${_lib}_LIBRARY)
-      list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-    endif()
-  endforeach()
+  libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
 endif ()
   
 set(ENV_FFTW_DIR "$ENV{FFTW_DIR}")
diff --git a/modules/find/FindLAPACK.cmake b/modules/find/FindLAPACK.cmake
index 5f4e299..40d6f78 100644
--- a/modules/find/FindLAPACK.cmake
+++ b/modules/find/FindLAPACK.cmake
@@ -467,15 +467,7 @@ if(BLAS_FOUND)
                 find_package(Threads REQUIRED)
           endif()
           if( THREADS_FOUND )
-            string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-            set(CMAKE_THREAD_LIBS_INIT)
-            foreach(_lib ${THREAD_LIBS})
-              find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-                HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-              if (THREADS_${_lib}_LIBRARY)
-                list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-              endif()
-            endforeach()
+            libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
           endif ()
 
           set(LAPACK_SEARCH_LIBS "")
diff --git a/modules/find/FindMAGMA.cmake b/modules/find/FindMAGMA.cmake
index 96baef2..5bd013f 100644
--- a/modules/find/FindMAGMA.cmake
+++ b/modules/find/FindMAGMA.cmake
@@ -78,22 +78,7 @@ else()
   find_package(CUDA)
 endif()
 if( CUDA_FOUND )
-  if(WIN32)
-    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
-  elseif(APPLE)
-    string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
-  else()
-    string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
-  endif()
-  string(REGEX REPLACE "-l" "" CUDA_LIBS "${CUDA_LIBRARIES}")
-  set(CUDA_LIBRARIES)
-  foreach(_lib ${CUDA_LIBS})
-    find_library(CUDA_${_lib}_LIBRARY NAMES ${_lib}
-      HINTS $ENV{CUDA_ROOT}/lib64 ${_lib_env} ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (CUDA_${_lib}_LIBRARY)
-      list(APPEND CUDA_LIBRARIES ${CUDA_${_lib}_LIBRARY})
-    endif()
-  endforeach()
+  libraries_absolute_path(CUDA_LIBRARIES "$ENV{CUDA_ROOT}/lib64")
 endif ()
 # MAGMA depends on cuBLAS which should come with CUDA, if not found -> error
 if (NOT CUDA_CUBLAS_LIBRARIES)
diff --git a/modules/find/FindMUMPS.cmake b/modules/find/FindMUMPS.cmake
index 7165db1..d61339f 100644
--- a/modules/find/FindMUMPS.cmake
+++ b/modules/find/FindMUMPS.cmake
@@ -142,15 +142,7 @@ else()
   find_package(Threads)
 endif()
 if( THREADS_FOUND )
-  string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-  set(CMAKE_THREAD_LIBS_INIT)
-  foreach(_lib ${THREAD_LIBS})
-    find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-      HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (THREADS_${_lib}_LIBRARY)
-      list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-    endif()
-  endforeach()
+  libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
 endif ()
 set(MUMPS_EXTRA_LIBRARIES "")
 if( THREADS_FOUND )
diff --git a/modules/find/FindPARSEC.cmake b/modules/find/FindPARSEC.cmake
index c1e6198..8f74080 100644
--- a/modules/find/FindPARSEC.cmake
+++ b/modules/find/FindPARSEC.cmake
@@ -118,15 +118,7 @@ else()
   find_package(Threads)
 endif()
 if( THREADS_FOUND )
-  string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-  set(CMAKE_THREAD_LIBS_INIT)
-  foreach(_lib ${THREAD_LIBS})
-    find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-      HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (THREADS_${_lib}_LIBRARY)
-      list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-    endif()
-  endforeach()
+  libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
 endif ()
 set(PARSEC_EXTRA_LIBRARIES "")
 if( THREADS_FOUND )
@@ -215,22 +207,7 @@ if (PARSEC_LOOK_FOR_CUDA)
     mark_as_advanced(CUDA_SDK_ROOT_DIR)
     mark_as_advanced(CUDA_TOOLKIT_ROOT_DIR)
     mark_as_advanced(CUDA_VERBOSE_BUILD)
-    if(WIN32)
-      string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
-    elseif(APPLE)
-      string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
-    else()
-      string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
-    endif()
-    string(REGEX REPLACE "-l" "" CUDA_LIBS "${CUDA_LIBRARIES}")
-    set(CUDA_LIBRARIES)
-    foreach(_lib ${CUDA_LIBS})
-      find_library(CUDA_${_lib}_LIBRARY NAMES ${_lib}
-        HINTS $ENV{CUDA_ROOT}/lib64 ${_lib_env} ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-      if (CUDA_${_lib}_LIBRARY)
-        list(APPEND CUDA_LIBRARIES ${CUDA_${_lib}_LIBRARY})
-      endif()
-    endforeach()
+    libraries_absolute_path(CUDA_LIBRARIES "$ENV{CUDA_ROOT}/lib64")
   endif()
 endif()
 
diff --git a/modules/find/FindPASTIX.cmake b/modules/find/FindPASTIX.cmake
index 03fe63c..72248cc 100644
--- a/modules/find/FindPASTIX.cmake
+++ b/modules/find/FindPASTIX.cmake
@@ -166,15 +166,7 @@ else()
   find_package(Threads)
 endif()
 if( THREADS_FOUND )
-  string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-  set(CMAKE_THREAD_LIBS_INIT)
-  foreach(_lib ${THREAD_LIBS})
-    find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-      HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (THREADS_${_lib}_LIBRARY)
-      list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-    endif()
-  endforeach()
+  libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
 endif ()
 set(PASTIX_EXTRA_LIBRARIES "")
 if( THREADS_FOUND )
diff --git a/modules/find/FindPTSCOTCH.cmake b/modules/find/FindPTSCOTCH.cmake
index 5ac7250..b2fdb9e 100644
--- a/modules/find/FindPTSCOTCH.cmake
+++ b/modules/find/FindPTSCOTCH.cmake
@@ -88,15 +88,7 @@ else()
   find_package(Threads)
 endif()
 if( THREADS_FOUND )
-  string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-  set(CMAKE_THREAD_LIBS_INIT)
-  foreach(_lib ${THREAD_LIBS})
-    find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-      HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (THREADS_${_lib}_LIBRARY)
-      list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-    endif()
-  endforeach()
+  libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
 endif ()
 
 # PTSCOTCH depends on MPI, try to find it
diff --git a/modules/find/FindQUARK.cmake b/modules/find/FindQUARK.cmake
index 06cc6e5..8361e01 100644
--- a/modules/find/FindQUARK.cmake
+++ b/modules/find/FindQUARK.cmake
@@ -89,15 +89,7 @@ else()
   find_package(Threads)
 endif()
 if( THREADS_FOUND )
-  string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-  set(CMAKE_THREAD_LIBS_INIT)
-  foreach(_lib ${THREAD_LIBS})
-    find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-      HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (THREADS_${_lib}_LIBRARY)
-      list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-    endif()
-  endforeach()
+  libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
 endif ()
 
 # QUARK may depend on HWLOC, try to find it
diff --git a/modules/find/FindSCALAPACK.cmake b/modules/find/FindSCALAPACK.cmake
index e604649..c1f34aa 100644
--- a/modules/find/FindSCALAPACK.cmake
+++ b/modules/find/FindSCALAPACK.cmake
@@ -342,15 +342,7 @@ if(BLAS_FOUND AND LAPACK_FOUND AND MPI_FOUND)
         find_package(Threads REQUIRED)
       endif()
       if( THREADS_FOUND )
-        string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-        set(CMAKE_THREAD_LIBS_INIT)
-        foreach(_lib ${THREAD_LIBS})
-          find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-            HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-          if (THREADS_${_lib}_LIBRARY)
-            list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-          endif()
-        endforeach()
+        libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
       endif ()
       set(SCALAPACK_SEARCH_LIBS "")
 
diff --git a/modules/find/FindSCOTCH.cmake b/modules/find/FindSCOTCH.cmake
index 7b1bb7e..ea21164 100644
--- a/modules/find/FindSCOTCH.cmake
+++ b/modules/find/FindSCOTCH.cmake
@@ -77,15 +77,7 @@ else()
   find_package(Threads)
 endif()
 if( THREADS_FOUND )
-  string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-  set(CMAKE_THREAD_LIBS_INIT)
-  foreach(_lib ${THREAD_LIBS})
-    find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-      HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (THREADS_${_lib}_LIBRARY)
-      list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-    endif()
-  endforeach()
+  libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
 endif ()
 
 # Looking for include
diff --git a/modules/find/FindSTARPU.cmake b/modules/find/FindSTARPU.cmake
index 87712db..31c89ba 100644
--- a/modules/find/FindSTARPU.cmake
+++ b/modules/find/FindSTARPU.cmake
@@ -122,17 +122,7 @@ endif()
 # STARPU may depend on pthread, try to find it
 find_package(Threads)
 if( THREADS_FOUND )
-  string(REGEX REPLACE "-l" "" THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-  set(CMAKE_THREAD_LIBS_INIT)
-  foreach(_lib ${THREAD_LIBS})
-    find_library(THREADS_${_lib}_LIBRARY NAMES ${_lib} 
-      HINTS ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-    if (THREADS_${_lib}_LIBRARY)
-      list(APPEND CMAKE_THREAD_LIBS_INIT ${THREADS_${_lib}_LIBRARY})
-    endif()
-  endforeach()
-endif ()
-if( THREADS_FOUND )
+  libraries_absolute_path(CMAKE_THREAD_LIBS_INIT "")
   list(APPEND STARPU_EXTRA_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
 endif ()
 # STARPU may depend on libm, try to find it
@@ -170,22 +160,7 @@ if (STARPU_LOOK_FOR_CUDA)
     mark_as_advanced(CUDA_SDK_ROOT_DIR)
     mark_as_advanced(CUDA_TOOLKIT_ROOT_DIR)
     mark_as_advanced(CUDA_VERBOSE_BUILD)
-    if(WIN32)
-      string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
-    elseif(APPLE)
-      string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
-    else()
-      string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
-    endif()
-    string(REGEX REPLACE "-l" "" CUDA_LIBS "${CUDA_LIBRARIES}")
-    set(CUDA_LIBRARIES)
-    foreach(_lib ${CUDA_LIBS})
-      find_library(CUDA_${_lib}_LIBRARY NAMES ${_lib}
-        HINTS $ENV{CUDA_ROOT}/lib64 ${_lib_env} ${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
-      if (CUDA_${_lib}_LIBRARY)
-        list(APPEND CUDA_LIBRARIES ${CUDA_${_lib}_LIBRARY})
-      endif()
-    endforeach()
+    libraries_absolute_path(CUDA_LIBRARIES "$ENV{CUDA_ROOT}/lib64")
   endif()
 endif()
 
-- 
GitLab