diff --git a/cmake_modules/morse/find/FindCHAMELEON.cmake b/cmake_modules/morse/find/FindCHAMELEON.cmake
index e627f8f25e74a021e41cc5e7987188fbad3279f4..86f11b5728768ae2b895a8698681061480003047 100644
--- a/cmake_modules/morse/find/FindCHAMELEON.cmake
+++ b/cmake_modules/morse/find/FindCHAMELEON.cmake
@@ -115,11 +115,19 @@ if( CHAMELEON_FIND_COMPONENTS )
     endforeach()
 endif()
 
+set(ENV_CHAMELEON_DIR "$ENV{CHAMELEON_DIR}")
+set(ENV_CHAMELEON_INCDIR "$ENV{CHAMELEON_INCDIR}")
+set(ENV_CHAMELEON_LIBDIR "$ENV{CHAMELEON_LIBDIR}")
+set(CHAMELEON_GIVEN_BY_USER "FALSE")
+if ( CHAMELEON_DIR OR ( CHAMELEON_INCDIR AND CHAMELEON_LIBDIR) OR ENV_CHAMELEON_DIR OR (ENV_CHAMELEON_INCDIR AND ENV_CHAMELEON_LIBDIR) )
+    set(CHAMELEON_GIVEN_BY_USER "TRUE")
+endif()
+
 # Optionally use pkg-config to detect include/library dirs (if pkg-config is available)
 # -------------------------------------------------------------------------------------
 include(FindPkgConfig)
 find_package(PkgConfig QUIET)
-if(PKG_CONFIG_EXECUTABLE)
+if(PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_GIVEN_BY_USER)
 
     pkg_search_module(CHAMELEON chameleon)
     if (NOT CHAMELEON_FIND_QUIETLY)
@@ -162,9 +170,9 @@ if(PKG_CONFIG_EXECUTABLE)
     set(CHAMELEON_LIBRARY_DIRS_DEP "${CHAMELEON_LIBRARY_DIRS}")
     set(CHAMELEON_LIBRARIES_DEP "${CHAMELEON_LIBRARIES}")
 
-endif()
+endif(PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_GIVEN_BY_USER)
 
-if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR (CHAMELEON_DIR) )
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR (CHAMELEON_GIVEN_BY_USER) )
 
     if (NOT CHAMELEON_FIND_QUIETLY)
         message(STATUS "Looking for CHAMELEON - PkgConfig not used")
@@ -755,7 +763,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUN
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(CHAMELEON_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR (CHAMELEON_DIR) )
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR (CHAMELEON_GIVEN_BY_USER) )
 
 if (CHAMELEON_LIBRARIES)
     if (CHAMELEON_LIBRARY_DIRS)
diff --git a/cmake_modules/morse/find/FindFXT.cmake b/cmake_modules/morse/find/FindFXT.cmake
index 7aa0ef4e930648bb46119184b4b23d4d70acce1e..bfb4c8f79afe49809e2d570d0bfdad5e99cb882f 100644
--- a/cmake_modules/morse/find/FindFXT.cmake
+++ b/cmake_modules/morse/find/FindFXT.cmake
@@ -52,11 +52,19 @@ if (NOT FXT_FOUND)
     endif()
 endif()
 
+set(ENV_FXT_DIR "$ENV{FXT_DIR}")
+set(ENV_FXT_INCDIR "$ENV{FXT_INCDIR}")
+set(ENV_FXT_LIBDIR "$ENV{FXT_LIBDIR}")
+set(FXT_GIVEN_BY_USER "FALSE")
+if ( FXT_DIR OR ( FXT_INCDIR AND FXT_LIBDIR) OR ENV_FXT_DIR OR (ENV_FXT_INCDIR AND ENV_FXT_LIBDIR) )
+    set(FXT_GIVEN_BY_USER "TRUE")
+endif()
+
 # Optionally use pkg-config to detect include/library dirs (if pkg-config is available)
 # -------------------------------------------------------------------------------------
 include(FindPkgConfig)
 find_package(PkgConfig QUIET)
-if(PKG_CONFIG_EXECUTABLE)
+if(PKG_CONFIG_EXECUTABLE AND NOT FXT_GIVEN_BY_USER)
 
     pkg_search_module(FXT fxt)
     if (NOT FXT_FIND_QUIETLY)
@@ -74,9 +82,9 @@ if(PKG_CONFIG_EXECUTABLE)
         endif()
     endif()
 
-endif()
+endif(PKG_CONFIG_EXECUTABLE AND NOT FXT_GIVEN_BY_USER)
 
-if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR (FXT_DIR) )
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR (FXT_GIVEN_BY_USER) )
 
     if (NOT FXT_FIND_QUIETLY)
         message(STATUS "Looking for FXT - PkgConfig not used")
@@ -269,7 +277,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(FXT_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR (FXT_DIR) )
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR (FXT_GIVEN_BY_USER) )
 
 if (FXT_LIBRARIES)
     if (FXT_LIBRARY_DIRS)
diff --git a/cmake_modules/morse/find/FindHWLOC.cmake b/cmake_modules/morse/find/FindHWLOC.cmake
index fd69aa4c9881f8f0431aeed186422de62f1b2603..213be5cb173534d1e1f99e21f3d439b694972017 100644
--- a/cmake_modules/morse/find/FindHWLOC.cmake
+++ b/cmake_modules/morse/find/FindHWLOC.cmake
@@ -45,6 +45,8 @@
 # (To distribute this file outside of Morse, substitute the full
 #  License text for the above reference.)
 
+include(CheckStructHasMember)
+include(CheckCSourceCompiles)
 
 if (NOT HWLOC_FOUND)
     set(HWLOC_DIR "" CACHE PATH "Installation directory of HWLOC library")
@@ -53,11 +55,19 @@ if (NOT HWLOC_FOUND)
     endif()
 endif()
 
+set(ENV_HWLOC_DIR "$ENV{HWLOC_DIR}")
+set(ENV_HWLOC_INCDIR "$ENV{HWLOC_INCDIR}")
+set(ENV_HWLOC_LIBDIR "$ENV{HWLOC_LIBDIR}")
+set(HWLOC_GIVEN_BY_USER "FALSE")
+if ( HWLOC_DIR OR ( HWLOC_INCDIR AND HWLOC_LIBDIR) OR ENV_HWLOC_DIR OR (ENV_HWLOC_INCDIR AND ENV_HWLOC_LIBDIR) )
+    set(HWLOC_GIVEN_BY_USER "TRUE")
+endif()
+
 # Optionally use pkg-config to detect include/library dirs (if pkg-config is available)
 # -------------------------------------------------------------------------------------
 include(FindPkgConfig)
 find_package(PkgConfig QUIET)
-if(PKG_CONFIG_EXECUTABLE)
+if( PKG_CONFIG_EXECUTABLE AND NOT HWLOC_GIVEN_BY_USER )
 
     pkg_search_module(HWLOC hwloc)
     if (NOT HWLOC_FIND_QUIETLY)
@@ -75,9 +85,9 @@ if(PKG_CONFIG_EXECUTABLE)
         endif()
     endif()
 
-endif()
+endif( PKG_CONFIG_EXECUTABLE AND NOT HWLOC_GIVEN_BY_USER )
 
-if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR (HWLOC_DIR) )
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR (HWLOC_GIVEN_BY_USER) )
 
     if (NOT HWLOC_FIND_QUIETLY)
         message(STATUS "Looking for HWLOC - PkgConfig not used")
@@ -89,8 +99,6 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) O
     # Add system include paths to search include
     # ------------------------------------------
     unset(_inc_env)
-    set(ENV_HWLOC_DIR "$ENV{HWLOC_DIR}")
-    set(ENV_HWLOC_INCDIR "$ENV{HWLOC_INCDIR}")
     if(ENV_HWLOC_INCDIR)
         list(APPEND _inc_env "${ENV_HWLOC_INCDIR}")
     elseif(ENV_HWLOC_DIR)
@@ -164,7 +172,6 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) O
     # Add system library paths to search lib
     # --------------------------------------
     unset(_lib_env)
-    set(ENV_HWLOC_LIBDIR "$ENV{HWLOC_LIBDIR}")
     if(ENV_HWLOC_LIBDIR)
         list(APPEND _lib_env "${ENV_HWLOC_LIBDIR}")
     elseif(ENV_HWLOC_DIR)
@@ -263,6 +270,13 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) O
         check_function_exists(hwloc_topology_init HWLOC_WORKS)
         mark_as_advanced(HWLOC_WORKS)
 
+        # test headers to guess the version
+        check_struct_has_member( "struct hwloc_obj" parent hwloc.h HAVE_HWLOC_PARENT_MEMBER )
+        check_struct_has_member( "struct hwloc_cache_attr_s" size hwloc.h HAVE_HWLOC_CACHE_ATTR )
+        check_c_source_compiles( "#include <hwloc.h>
+            int main(void) { hwloc_obj_t o; o->type = HWLOC_OBJ_PU; return 0;}" HAVE_HWLOC_OBJ_PU)
+        check_library_exists(${HWLOC_LIBRARIES} hwloc_bitmap_free "" HAVE_HWLOC_BITMAP)
+
         if(NOT HWLOC_WORKS)
             if(NOT HWLOC_FIND_QUIETLY)
                 message(STATUS "Looking for hwloc : test of hwloc_topology_init with hwloc library fails")
@@ -276,7 +290,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) O
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(HWLOC_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR (HWLOC_DIR) )
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR (HWLOC_GIVEN_BY_USER) )
 
 if (HWLOC_LIBRARIES)
     if (HWLOC_LIBRARY_DIRS)
diff --git a/cmake_modules/morse/find/FindMAGMA.cmake b/cmake_modules/morse/find/FindMAGMA.cmake
index 0302ce5c0d1c7d6b8349e17be763527e5074d3d4..e8bdd072ddf18c8ccf7cd0d2282efe3919278218 100644
--- a/cmake_modules/morse/find/FindMAGMA.cmake
+++ b/cmake_modules/morse/find/FindMAGMA.cmake
@@ -100,11 +100,19 @@ if (NOT CBLAS_FOUND)
     endif()
 endif()
 
+set(ENV_MAGMA_DIR "$ENV{MAGMA_DIR}")
+set(ENV_MAGMA_INCDIR "$ENV{MAGMA_INCDIR}")
+set(ENV_MAGMA_LIBDIR "$ENV{MAGMA_LIBDIR}")
+set(MAGMA_GIVEN_BY_USER "FALSE")
+if ( MAGMA_DIR OR ( MAGMA_INCDIR AND MAGMA_LIBDIR) OR ENV_MAGMA_DIR OR (ENV_MAGMA_INCDIR AND ENV_MAGMA_LIBDIR) )
+    set(MAGMA_GIVEN_BY_USER "TRUE")
+endif()
+
 # Optionally use pkg-config to detect include/library dirs (if pkg-config is available)
 # -------------------------------------------------------------------------------------
 include(FindPkgConfig)
 find_package(PkgConfig QUIET)
-if(PKG_CONFIG_EXECUTABLE)
+if(PKG_CONFIG_EXECUTABLE AND NOT MAGMA_GIVEN_BY_USER)
 
     pkg_search_module(MAGMA magma)
     if (NOT MAGMA_FIND_QUIETLY)
@@ -155,10 +163,10 @@ if(PKG_CONFIG_EXECUTABLE)
     set(MAGMA_LIBRARY_DIRS_DEP "${MAGMA_LIBRARY_DIRS}")
     set(MAGMA_LIBRARIES_DEP "${MAGMA_LIBRARIES}")
 
-endif()
+endif(PKG_CONFIG_EXECUTABLE AND NOT MAGMA_GIVEN_BY_USER)
 
 # if MAGMA is not found using pkg-config
-if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR (MAGMA_DIR) )
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR (MAGMA_GIVEN_BY_USER) )
 
     if (NOT MAGMA_FIND_QUIETLY)
         message(STATUS "Looking for MAGMA - PkgConfig not used")
@@ -394,7 +402,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) O
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(MAGMA_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR (MAGMA_DIR) )
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR (MAGMA_GIVEN_BY_USER) )
 
 if (MAGMA_LIBRARIES)
     if (MAGMA_LIBRARY_DIRS)
diff --git a/cmake_modules/morse/find/FindSTARPU.cmake b/cmake_modules/morse/find/FindSTARPU.cmake
index 11f39abc0e0048e2b563faef4e4a39aa9d139cd2..170fbf4fbe077bd91157f04a5a432e625dcccd56 100644
--- a/cmake_modules/morse/find/FindSTARPU.cmake
+++ b/cmake_modules/morse/find/FindSTARPU.cmake
@@ -165,12 +165,20 @@ if (NOT FXT_FOUND AND STARPU_LOOK_FOR_FXT)
     endif()
 endif()
 
+set(ENV_STARPU_DIR "$ENV{STARPU_DIR}")
+set(ENV_STARPU_INCDIR "$ENV{STARPU_INCDIR}")
+set(ENV_STARPU_LIBDIR "$ENV{STARPU_LIBDIR}")
+set(STARPU_GIVEN_BY_USER "FALSE")
+if ( STARPU_DIR OR ( STARPU_INCDIR AND STARPU_LIBDIR) OR ENV_STARPU_DIR OR (ENV_STARPU_INCDIR AND ENV_STARPU_LIBDIR) )
+    set(STARPU_GIVEN_BY_USER "TRUE")
+endif()
+
 # Optionally use pkg-config to detect include/library dirs (if pkg-config is available)
 # -------------------------------------------------------------------------------------
 include(FindPkgConfig)
 find_package(PkgConfig QUIET)
 
-if(PKG_CONFIG_EXECUTABLE)
+if(PKG_CONFIG_EXECUTABLE AND NOT STARPU_GIVEN_BY_USER)
 
     pkg_search_module(STARPU_SHM libstarpu)
     set(STARPU_INCLUDE_DIRS "${STARPU_SHM_INCLUDE_DIRS}")
@@ -241,10 +249,10 @@ if(PKG_CONFIG_EXECUTABLE)
     if (STARPU_LOOK_FOR_MPI AND NOT STARPU_MPI_FOUND)
         set(STARPU_FOUND "FALSE")
     endif()
-endif()
+endif(PKG_CONFIG_EXECUTABLE AND NOT STARPU_GIVEN_BY_USER)
 
 
-if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR (STARPU_DIR) )
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR (STARPU_GIVEN_BY_USER) )
 
     # Looking for include
     # -------------------
@@ -793,7 +801,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND)
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(STARPU_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR (STARPU_DIR) )
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR (STARPU_GIVEN_BY_USER) )
 
 if (STARPU_LIBRARIES)
     if (STARPU_LIBRARY_DIRS)