From 1b38bbc943b896a4db315c1683b4b45abf6f1695 Mon Sep 17 00:00:00 2001
From: Florent Pruvost <florent.pruvost@inria.fr>
Date: Tue, 10 Mar 2015 15:30:26 +0000
Subject: [PATCH] improve cmake Finds modules: MKLROOT env var. is considered -
 env var. for libraries dir. are considered (ex: export
 HWLOC_DIR=/home/toto/install/hwloc)

---
 CMakeLists.txt                               |   2 +-
 cmake_modules/morse/find/FindBLAS.cmake      |  54 +-
 cmake_modules/morse/find/FindCBLAS.cmake     |  63 ++-
 cmake_modules/morse/find/FindCHAMELEON.cmake |  64 ++-
 cmake_modules/morse/find/FindFFTW.cmake      | 497 ++++++++++---------
 cmake_modules/morse/find/FindFXT.cmake       |  66 ++-
 cmake_modules/morse/find/FindHWLOC.cmake     |  66 ++-
 cmake_modules/morse/find/FindLAPACK.cmake    | 214 ++++----
 cmake_modules/morse/find/FindLAPACKE.cmake   |  62 ++-
 cmake_modules/morse/find/FindMAGMA.cmake     |  66 ++-
 cmake_modules/morse/find/FindMETIS.cmake     |  62 ++-
 cmake_modules/morse/find/FindMUMPS.cmake     |  30 +-
 cmake_modules/morse/find/FindPARMETIS.cmake  |  62 ++-
 cmake_modules/morse/find/FindPASTIX.cmake    |  60 ++-
 cmake_modules/morse/find/FindPTSCOTCH.cmake  |  62 ++-
 cmake_modules/morse/find/FindQUARK.cmake     |  63 ++-
 cmake_modules/morse/find/FindSCALAPACK.cmake |  78 ++-
 cmake_modules/morse/find/FindSCOTCH.cmake    |  62 ++-
 cmake_modules/morse/find/FindSTARPU.cmake    | 136 ++---
 cmake_modules/morse/find/FindTMG.cmake       |  31 +-
 20 files changed, 1135 insertions(+), 665 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 293f44544..705387cbc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -544,7 +544,7 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
             list(APPEND STARPU_COMPONENT_LIST "FXT")
         endif()
 
-        find_package(STARPU ${CHAMELEON_STARPU_VERSION}
+        find_package(STARPU ${CHAMELEON_STARPU_VERSION} REQUIRED
                      COMPONENTS ${STARPU_COMPONENT_LIST})
 
         # Add definition and include_dir if found
diff --git a/cmake_modules/morse/find/FindBLAS.cmake b/cmake_modules/morse/find/FindBLAS.cmake
index 82b7dd4cf..c1ff6586c 100644
--- a/cmake_modules/morse/find/FindBLAS.cmake
+++ b/cmake_modules/morse/find/FindBLAS.cmake
@@ -35,6 +35,10 @@
 #  BLAS_DIR            - Where to find the base directory of blas
 #  BLAS_INCDIR         - Where to find the header files
 #  BLAS_LIBDIR         - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: BLAS_DIR, BLAS_INCDIR, BLAS_LIBDIR
+# For MKL case and if no paths are given as hints, we will try to use the MKLROOT
+# environment variable
 ##########
 ### List of vendors (BLA_VENDOR) valid in this module
 ########## List of vendors (BLA_VENDOR) valid in this module
@@ -180,8 +184,13 @@ macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread)
     set(_libraries_work TRUE)
     set(${LIBRARIES})
     set(_combined_name)
+    set(ENV_MKLROOT "$ENV{MKLROOT}")
+    set(ENV_BLAS_DIR "$ENV{BLAS_DIR}")
+    set(ENV_BLAS_LIBDIR "$ENV{BLAS_LIBDIR}")
     if (NOT _libdir)
-        if (BLAS_DIR)
+        if (BLAS_LIBDIR)
+            list(APPEND _libdir "${BLAS_LIBDIR}")
+        elseif (BLAS_DIR)
             list(APPEND _libdir "${BLAS_DIR}")
             list(APPEND _libdir "${BLAS_DIR}/lib")
             if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
@@ -191,9 +200,28 @@ macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread)
                 list(APPEND _libdir "${BLAS_DIR}/lib32")
                 list(APPEND _libdir "${BLAS_DIR}/lib/ia32")
             endif()
-        elseif (BLAS_LIBDIR)
-            list(APPEND _libdir "${BLAS_LIBDIR}")
+        elseif(ENV_BLAS_LIBDIR)
+            list(APPEND _libdir "${ENV_BLAS_LIBDIR}")
+        elseif(ENV_BLAS_DIR)
+            list(APPEND _libdir "${ENV_BLAS_DIR}")
+            list(APPEND _libdir "${ENV_BLAS_DIR}/lib")
+            if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+                list(APPEND _libdir "${ENV_BLAS_DIR}/lib64")
+                list(APPEND _libdir "${ENV_BLAS_DIR}/lib/intel64")
+            else()
+                list(APPEND _libdir "${ENV_BLAS_DIR}/lib32")
+                list(APPEND _libdir "${ENV_BLAS_DIR}/lib/ia32")
+            endif()
         else()
+            if (ENV_MKLROOT)
+                if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+                    list(APPEND _libdir "${ENV_MKLROOT}/lib64")
+                    list(APPEND _libdir "${ENV_MKLROOT}/lib/intel64")
+                else()
+                    list(APPEND _libdir "${ENV_MKLROOT}/lib32")
+                    list(APPEND _libdir "${ENV_MKLROOT}/lib/ia32")
+                endif()
+            endif()
             if (WIN32)
                 string(REPLACE ":" ";" _libdir2 "$ENV{LIB}")
             elseif (APPLE)
@@ -370,10 +398,12 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
                     if (CMAKE_C_COMPILER_NAME STREQUAL "gcc" OR
                         CMAKE_C_COMPILER_NAME STREQUAL "cc")
                         list(APPEND BLAS_SEARCH_LIBS
-                        "mkl_blas95_lp64 mkl_intel_lp64 mkl_gnu_thread mkl_core gomp")
+                        "mkl_blas95_lp64 mkl_intel_lp64 mkl_gnu_thread mkl_core")
+                        set(OMP_LIB "-lgomp")
                     else ()
                         list(APPEND BLAS_SEARCH_LIBS
-                        "mkl_blas95_lp64 mkl_intel_lp64 mkl_intel_thread mkl_core iomp5")
+                        "mkl_blas95_lp64 mkl_intel_lp64 mkl_intel_thread mkl_core")
+                        set(OMP_LIB "-liomp5")
                     endif ()
                 endif ()
                 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
@@ -442,10 +472,12 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
                     if (CMAKE_C_COMPILER_NAME STREQUAL "gcc" OR
                         CMAKE_C_COMPILER_NAME STREQUAL "cc")
                         list(APPEND BLAS_SEARCH_LIBS
-                        "mkl_intel_lp64 mkl_gnu_thread mkl_core gomp")
+                        "mkl_intel_lp64 mkl_gnu_thread mkl_core")
+                        set(OMP_LIB "-lgomp")
                     else ()
                         list(APPEND BLAS_SEARCH_LIBS
-                        "mkl_intel_lp64 mkl_intel_thread mkl_core iomp5")
+                        "mkl_intel_lp64 mkl_intel_thread mkl_core")
+                        set(OMP_LIB "-liomp5")
                     endif ()
                 endif ()
                 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
@@ -476,7 +508,7 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
                 ${BLAS_mkl_SEARCH_SYMBOL}
                 "${additional_flags}"
                 "${SEARCH_LIBS}"
-                "${CMAKE_THREAD_LIBS_INIT};${LM}"
+                "${OMP_LIB};${CMAKE_THREAD_LIBS_INIT};${LM}"
                 )
                 if(_LIBRARIES)
                     set(BLAS_LINKER_FLAGS "${additional_flags}")
@@ -936,12 +968,14 @@ endif(BLA_F95)
 
 set(CMAKE_FIND_LIBRARY_SUFFIXES ${_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
 
-if (BLAS_FOUND AND NOT BLAS_DIR)
+if (BLAS_FOUND)
     list(GET BLAS_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
         string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
-        set(BLAS_DIR "${not_cached_dir}" CACHE PATH "Installation directory of BLAS library" FORCE)
+        set(BLAS_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of BLAS library" FORCE)
+    else()
+        set(BLAS_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of BLAS library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindCBLAS.cmake b/cmake_modules/morse/find/FindCBLAS.cmake
index 28651763d..d04995b2b 100644
--- a/cmake_modules/morse/find/FindCBLAS.cmake
+++ b/cmake_modules/morse/find/FindCBLAS.cmake
@@ -39,6 +39,8 @@
 #  CBLAS_DIR              - Where to find the base directory of cblas
 #  CBLAS_INCDIR           - Where to find the header files
 #  CBLAS_LIBDIR           - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: CBLAS_DIR, CBLAS_INCDIR, CBLAS_LIBDIR
 #
 # CBLAS could be directly embedded in BLAS library (ex: Intel MKL) so that
 # we test a cblas function with the blas libraries found and set CBLAS
@@ -148,17 +150,28 @@ if (BLAS_FOUND)
         # Add system include paths to search include
         # ------------------------------------------
         unset(_inc_env)
-        if(WIN32)
-            string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        set(ENV_CBLAS_DIR "$ENV{CBLAS_DIR}")
+        set(ENV_CBLAS_INCDIR "$ENV{CBLAS_INCDIR}")
+        if(ENV_CBLAS_INCDIR)
+            list(APPEND _inc_env "${ENV_CBLAS_INCDIR}")
+        elseif(ENV_CBLAS_DIR)
+            list(APPEND _inc_env "${ENV_CBLAS_DIR}")
+            list(APPEND _inc_env "${ENV_CBLAS_DIR}/include")
+            list(APPEND _inc_env "${ENV_CBLAS_DIR}/include/cblas")
         else()
-            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-            list(APPEND _inc_env "${_path_env}")
-            string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-            list(APPEND _inc_env "${_path_env}")
-            string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-            list(APPEND _inc_env "${_path_env}")
-            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-            list(APPEND _inc_env "${_path_env}")
+            if(WIN32)
+                string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+                list(APPEND _inc_env "${_path_env}")
+            else()
+                string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+                list(APPEND _inc_env "${_path_env}")
+                string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+                list(APPEND _inc_env "${_path_env}")
+                string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+                list(APPEND _inc_env "${_path_env}")
+                string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+                list(APPEND _inc_env "${_path_env}")
+            endif()
         endif()
         list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
         list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -179,7 +192,7 @@ if (BLAS_FOUND)
                 find_path(CBLAS_cblas.h_DIRS
                 NAMES cblas.h
                 HINTS ${CBLAS_DIR}
-                PATH_SUFFIXES include)
+                PATH_SUFFIXES "include" "include/cblas")
             else()
                 set(CBLAS_cblas.h_DIRS "CBLAS_cblas.h_DIRS-NOTFOUND")
                 find_path(CBLAS_cblas.h_DIRS
@@ -207,16 +220,24 @@ if (BLAS_FOUND)
         # Add system library paths to search lib
         # --------------------------------------
         unset(_lib_env)
-        if(WIN32)
-            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+        set(ENV_CBLAS_LIBDIR "$ENV{CBLAS_LIBDIR}")
+        if(ENV_CBLAS_LIBDIR)
+            list(APPEND _lib_env "${ENV_CBLAS_LIBDIR}")
+        elseif(ENV_CBLAS_DIR)
+            list(APPEND _lib_env "${ENV_CBLAS_DIR}")
+            list(APPEND _lib_env "${ENV_CBLAS_DIR}/lib")
         else()
-            if(APPLE)
-                string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+            if(WIN32)
+                string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
             else()
-                string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+                if(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}")
             endif()
-            list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-            list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
         endif()
         list(REMOVE_DUPLICATES _lib_env)
 
@@ -337,12 +358,14 @@ else(BLAS_FOUND)
 
 endif(BLAS_FOUND)
 
-if (CBLAS_LIBRARIES AND NOT CBLAS_DIR)
+if (CBLAS_LIBRARIES)
     list(GET CBLAS_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
         string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
-        set(CBLAS_DIR "${not_cached_dir}" CACHE PATH "Installation directory of CBLAS library" FORCE)
+        set(CBLAS_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of CBLAS library" FORCE)
+    else()
+        set(CBLAS_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of CBLAS library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindCHAMELEON.cmake b/cmake_modules/morse/find/FindCHAMELEON.cmake
index 011e3de3c..e627f8f25 100644
--- a/cmake_modules/morse/find/FindCHAMELEON.cmake
+++ b/cmake_modules/morse/find/FindCHAMELEON.cmake
@@ -48,6 +48,8 @@
 #  CHAMELEON_DIR              - Where to find the base directory of chameleon
 #  CHAMELEON_INCDIR           - Where to find the header files
 #  CHAMELEON_LIBDIR           - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: CHAMELEON_DIR, CHAMELEON_INCDIR, CHAMELEON_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -162,7 +164,7 @@ if(PKG_CONFIG_EXECUTABLE)
 
 endif()
 
-if( (NOT PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR NOT CHAMELEON_FOUND OR CHAMELEON_DIR )
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR (CHAMELEON_DIR) )
 
     if (NOT CHAMELEON_FIND_QUIETLY)
         message(STATUS "Looking for CHAMELEON - PkgConfig not used")
@@ -370,17 +372,27 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR NOT CHAMELEON_FOUND O
     # Add system include paths to search include
     # ------------------------------------------
     unset(_inc_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    set(ENV_CHAMELEON_DIR "$ENV{CHAMELEON_DIR}")
+    set(ENV_CHAMELEON_INCDIR "$ENV{CHAMELEON_INCDIR}")
+    if(ENV_CHAMELEON_INCDIR)
+        list(APPEND _inc_env "${ENV_CHAMELEON_INCDIR}")
+    elseif(ENV_CHAMELEON_DIR)
+        list(APPEND _inc_env "${ENV_CHAMELEON_DIR}")
+        list(APPEND _inc_env "${ENV_CHAMELEON_DIR}/include")
+        list(APPEND _inc_env "${ENV_CHAMELEON_DIR}/include/chameleon")
     else()
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
+        if(WIN32)
+            string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        else()
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+        endif()
     endif()
     list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
     list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -429,16 +441,24 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR NOT CHAMELEON_FOUND O
     # Add system library paths to search lib
     # --------------------------------------
     unset(_lib_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+    set(ENV_CHAMELEON_LIBDIR "$ENV{CHAMELEON_LIBDIR}")
+    if(ENV_CHAMELEON_LIBDIR)
+        list(APPEND _lib_env "${ENV_CHAMELEON_LIBDIR}")
+    elseif(ENV_CHAMELEON_DIR)
+        list(APPEND _lib_env "${ENV_CHAMELEON_DIR}")
+        list(APPEND _lib_env "${ENV_CHAMELEON_DIR}/lib")
     else()
-        if(APPLE)
-            string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+        if(WIN32)
+            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
         else()
-            string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+            if(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}")
         endif()
-        list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-        list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
     endif()
     list(REMOVE_DUPLICATES _lib_env)
 
@@ -735,9 +755,9 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR NOT CHAMELEON_FOUND O
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(CHAMELEON_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR NOT CHAMELEON_FOUND OR CHAMELEON_DIR)
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT CHAMELEON_FOUND) OR (CHAMELEON_DIR) )
 
-if (CHAMELEON_LIBRARIES AND NOT CHAMELEON_DIR)
+if (CHAMELEON_LIBRARIES)
     if (CHAMELEON_LIBRARY_DIRS)
         foreach(dir ${CHAMELEON_LIBRARY_DIRS})
             if ("${dir}" MATCHES "chameleon")
@@ -750,7 +770,9 @@ if (CHAMELEON_LIBRARIES AND NOT CHAMELEON_DIR)
     endif()
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(CHAMELEON_DIR "${not_cached_dir}" CACHE PATH "Installation directory of CHAMELEON library" FORCE)
+        set(CHAMELEON_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of CHAMELEON library" FORCE)
+    else()
+        set(CHAMELEON_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of CHAMELEON library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindFFTW.cmake b/cmake_modules/morse/find/FindFFTW.cmake
index 801c85207..bf096c03d 100644
--- a/cmake_modules/morse/find/FindFFTW.cmake
+++ b/cmake_modules/morse/find/FindFFTW.cmake
@@ -40,6 +40,10 @@
 #  FFTW_DIR             - Where to find the base directory of fftw
 #  FFTW_INCDIR          - Where to find the header files
 #  FFTW_LIBDIR          - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: FFTW_DIR, FFTW_INCDIR, FFTW_LIBDIR
+# For MKL case and if no paths are given as hints, we will try to use the MKLROOT
+# environment variable
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -60,7 +64,7 @@
 
 
 if (NOT FFTW_FOUND)
-    set(FFTW_DIR "" CACHE PATH "Installation directory of FFTW library")
+    set(FFTW_DIR "" CACHE PATH "Installation directory of FFTW library given by user")
     if (NOT FFTW_FIND_QUIETLY)
         message(STATUS "A cache variable, namely FFTW_DIR, has been set to specify the install directory of FFTW")
     endif()
@@ -136,6 +140,14 @@ if (FFTW_LOOK_FOR_THREADS)
     endif()
 endif()
 
+if (FFTW_LOOK_FOR_MKL)
+    if (FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_MKL)
+        find_package(Threads REQUIRED)
+    else()
+        find_package(Threads)
+    endif()
+endif()
+
 if (FFTW_LOOK_FOR_OMP)
     if (FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_OMP)
         find_package(OpenMP REQUIRED)
@@ -144,16 +156,29 @@ if (FFTW_LOOK_FOR_OMP)
     endif()
 endif()
 
-if( NOT FFTW_FOUND )
-
-    # Looking for include
-    # -------------------
-
-    # Add system include paths to search include
-    # ------------------------------------------
-    unset(_inc_env)
+# Looking for include
+# -------------------
+
+# Add system include paths to search include
+# ------------------------------------------
+unset(_inc_env)
+set(ENV_MKLROOT "$ENV{MKLROOT}")
+set(ENV_FFTW_DIR "$ENV{FFTW_DIR}")
+set(ENV_FFTW_INCDIR "$ENV{FFTW_INCDIR}")
+if(ENV_FFTW_INCDIR)
+    list(APPEND _inc_env "${ENV_FFTW_INCDIR}")
+elseif(ENV_FFTW_DIR)
+    list(APPEND _inc_env "${ENV_FFTW_DIR}")
+    list(APPEND _inc_env "${ENV_FFTW_DIR}/include")
+    list(APPEND _inc_env "${ENV_FFTW_DIR}/include/fftw")
+else()
+    if (ENV_MKLROOT)
+        list(APPEND _inc_env "${ENV_MKLROOT}/include/fftw")
+    endif()
+    # system variables
     if(WIN32)
-        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+        list(APPEND _inc_env "${_path_env}")
     else()
         string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
         list(APPEND _inc_env "${_path_env}")
@@ -164,271 +189,297 @@ if( NOT FFTW_FOUND )
         string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
         list(APPEND _inc_env "${_path_env}")
     endif()
-    list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
-    list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
-    list(REMOVE_DUPLICATES _inc_env)
-
-    # set paths where to look for
-    set(PATH_TO_LOOK_FOR "${_inc_env}")
-
-    # Try to find the fftw header in the given paths
-    # -------------------------------------------------
-    # call cmake macro to find the header path
-    if(FFTW_INCDIR)
+endif()
+list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
+list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
+list(REMOVE_DUPLICATES _inc_env)
+
+# set paths where to look for
+set(PATH_TO_LOOK_FOR "${_inc_env}")
+
+# Try to find the fftw header in the given paths
+# -------------------------------------------------
+# call cmake macro to find the header path
+if(FFTW_INCDIR)
+    set(FFTW_fftw3.h_DIRS "FFTW_fftw3.h_DIRS-NOTFOUND")
+    find_path(FFTW_fftw3.h_DIRS
+      NAMES fftw3.h
+      HINTS ${FFTW_INCDIR})
+else()
+    if(FFTW_DIR)
         set(FFTW_fftw3.h_DIRS "FFTW_fftw3.h_DIRS-NOTFOUND")
         find_path(FFTW_fftw3.h_DIRS
           NAMES fftw3.h
-          HINTS ${FFTW_INCDIR})
+          HINTS ${FFTW_DIR}
+          PATH_SUFFIXES "include" "include/fftw")
     else()
-        if(FFTW_DIR)
-            set(FFTW_fftw3.h_DIRS "FFTW_fftw3.h_DIRS-NOTFOUND")
-            find_path(FFTW_fftw3.h_DIRS
-              NAMES fftw3.h
-              HINTS ${FFTW_DIR}
-              PATH_SUFFIXES include)
+        set(FFTW_fftw3.h_DIRS "FFTW_fftw3.h_DIRS-NOTFOUND")
+        find_path(FFTW_fftw3.h_DIRS
+                  NAMES fftw3.h
+                  HINTS ${PATH_TO_LOOK_FOR})
+    endif()
+endif()
+mark_as_advanced(FFTW_fftw3.h_DIRS)
+
+# Add path to cmake variable
+# ------------------------------------
+if (FFTW_fftw3.h_DIRS)
+    set(FFTW_INCLUDE_DIRS "${FFTW_fftw3.h_DIRS}")
+else ()
+    set(FFTW_INCLUDE_DIRS "FFTW_INCLUDE_DIRS-NOTFOUND")
+    if(NOT FFTW_FIND_QUIETLY)
+        message(STATUS "Looking for FFTW -- fftw3.h not found")
+    endif()
+endif ()
+
+
+# Looking for lib
+# ---------------
+
+# Add system library paths to search lib
+# --------------------------------------
+unset(_lib_env)
+set(ENV_FFTW_LIBDIR "$ENV{FFTW_LIBDIR}")
+if(ENV_FFTW_LIBDIR)
+    list(APPEND _lib_env "${ENV_FFTW_LIBDIR}")
+elseif(ENV_FFTW_DIR)
+    list(APPEND _lib_env "${ENV_FFTW_DIR}")
+    list(APPEND _lib_env "${ENV_FFTW_DIR}/lib")
+    if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+        list(APPEND _lib_env "${ENV_FFTW_DIR}/lib64")
+        list(APPEND _lib_env "${ENV_FFTW_DIR}/lib/intel64")
+    else()
+        list(APPEND _lib_env "${ENV_FFTW_DIR}/lib32")
+        list(APPEND _lib_env "${ENV_FFTW_DIR}/lib/ia32")
+    endif()
+else()
+    if (ENV_MKLROOT)
+        if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+            list(APPEND _lib_env "${ENV_MKLROOT}/lib64")
+            list(APPEND _lib_env "${ENV_MKLROOT}/lib/intel64")
         else()
-            set(FFTW_fftw3.h_DIRS "FFTW_fftw3.h_DIRS-NOTFOUND")
-            find_path(FFTW_fftw3.h_DIRS
-                      NAMES fftw3.h
-                      HINTS ${PATH_TO_LOOK_FOR})
+            list(APPEND _lib_env "${ENV_MKLROOT}/lib32")
+            list(APPEND _lib_env "${ENV_MKLROOT}/lib/ia32")
         endif()
     endif()
-    mark_as_advanced(FFTW_fftw3.h_DIRS)
-
-    # Add path to cmake variable
-    # ------------------------------------
-    if (FFTW_fftw3.h_DIRS)
-        set(FFTW_INCLUDE_DIRS "${FFTW_fftw3.h_DIRS}")
-    else ()
-        set(FFTW_INCLUDE_DIRS "FFTW_INCLUDE_DIRS-NOTFOUND")
-        if(NOT FFTW_FIND_QUIETLY)
-            message(STATUS "Looking for FFTW -- fftw3.h not found")
-        endif()
-    endif ()
-
-
-    # Looking for lib
-    # ---------------
-
-    # Add system library paths to search lib
-    # --------------------------------------
-    unset(_lib_env)
     if(WIN32)
-        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+        string(REPLACE ":" ";" _lib_env2 "$ENV{LIB}")
     else()
         if(APPLE)
-            string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+            string(REPLACE ":" ";" _lib_env2 "$ENV{DYLD_LIBRARY_PATH}")
         else()
-            string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+            string(REPLACE ":" ";" _lib_env2 "$ENV{LD_LIBRARY_PATH}")
         endif()
+        list(APPEND _lib_env "${_lib_env2}")
         list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
         list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
     endif()
-    list(REMOVE_DUPLICATES _lib_env)
-
-    # set paths where to look for
-    set(PATH_TO_LOOK_FOR "${_lib_env}")
-
-    if(FFTW_LOOK_FOR_FFTW_SIMPLE)
-        set(FFTW_PREC "f")
-        set(FFTW_PREC_TESTFUNC "s")
-    elseif(FFTW_LOOK_FOR_FFTW_DOUBLE)
-        set(FFTW_PREC "")
-        set(FFTW_PREC_TESTFUNC "d")
-    elseif(FFTW_LOOK_FOR_FFTW_LONG)
-        set(FFTW_PREC "l")
-        set(FFTW_PREC_TESTFUNC "l")
-    elseif(FFTW_LOOK_FOR_FFTW_QUAD)
-        set(FFTW_PREC "q")
-        set(FFTW_PREC_TESTFUNC "q")
-    endif()
+endif()
+list(REMOVE_DUPLICATES _lib_env)
+
+# set paths where to look for
+set(PATH_TO_LOOK_FOR "${_lib_env}")
+
+if(FFTW_LOOK_FOR_FFTW_SIMPLE)
+    set(FFTW_PREC "f")
+    set(FFTW_PREC_TESTFUNC "s")
+elseif(FFTW_LOOK_FOR_FFTW_DOUBLE)
+    set(FFTW_PREC "")
+    set(FFTW_PREC_TESTFUNC "d")
+elseif(FFTW_LOOK_FOR_FFTW_LONG)
+    set(FFTW_PREC "l")
+    set(FFTW_PREC_TESTFUNC "l")
+elseif(FFTW_LOOK_FOR_FFTW_QUAD)
+    set(FFTW_PREC "q")
+    set(FFTW_PREC_TESTFUNC "q")
+endif()
 
-    if (FFTW_LOOK_FOR_MKL)
+if (FFTW_LOOK_FOR_MKL)
 
-        set(FFTW_libs_to_find "mkl_intel_lp64;mkl_sequential;mkl_core")
+    set(FFTW_libs_to_find "mkl_intel_lp64;mkl_sequential;mkl_core")
 
-        # Try to find the MKL fftw lib in the given paths
-        # -----------------------------------------------
+    # Try to find the MKL fftw lib in the given paths
+    # -----------------------------------------------
 
-        # call cmake macro to find the lib path
-        if(FFTW_LIBDIR)
+    # call cmake macro to find the lib path
+    if(FFTW_LIBDIR)
+        foreach(fftw_lib ${FFTW_libs_to_find})
+            set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
+            find_library(FFTW_${fftw_lib}_LIBRARY
+                NAMES ${fftw_lib}
+                HINTS ${FFTW_LIBDIR})
+        endforeach()
+    else()
+        if(FFTW_DIR)
             foreach(fftw_lib ${FFTW_libs_to_find})
                 set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
                 find_library(FFTW_${fftw_lib}_LIBRARY
                     NAMES ${fftw_lib}
-                    HINTS ${FFTW_LIBDIR})
+                    HINTS ${FFTW_DIR}
+                    PATH_SUFFIXES lib lib32 lib64)
             endforeach()
         else()
-            if(FFTW_DIR)
-                foreach(fftw_lib ${FFTW_libs_to_find})
-                    set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
-                    find_library(FFTW_${fftw_lib}_LIBRARY
-                        NAMES ${fftw_lib}
-                        HINTS ${FFTW_DIR}
-                        PATH_SUFFIXES lib lib32 lib64)
-                endforeach()
-            else()
-                foreach(fftw_lib ${FFTW_libs_to_find})
-                    set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
-                    find_library(FFTW_${fftw_lib}_LIBRARY
-                             NAMES ${fftw_lib}
-                             HINTS ${PATH_TO_LOOK_FOR})
-                endforeach()
-            endif()
+            foreach(fftw_lib ${FFTW_libs_to_find})
+                set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
+                find_library(FFTW_${fftw_lib}_LIBRARY
+                         NAMES ${fftw_lib}
+                         HINTS ${PATH_TO_LOOK_FOR})
+            endforeach()
         endif()
+    endif()
 
-    else(FFTW_LOOK_FOR_MKL)
+else(FFTW_LOOK_FOR_MKL)
 
-        if (FFTW_LOOK_FOR_THREADS)
-            set(FFTW_libs_to_find "fftw3${FFTW_PREC}_threads;fftw3${FFTW_PREC}")
-        elseif (FFTW_LOOK_FOR_OMP)
-            set(FFTW_libs_to_find "fftw3${FFTW_PREC}_omp;fftw3${FFTW_PREC}")
-        else()
-            set(FFTW_libs_to_find "fftw3${FFTW_PREC}")
-        endif()
+    if (FFTW_LOOK_FOR_THREADS)
+        set(FFTW_libs_to_find "fftw3${FFTW_PREC}_threads;fftw3${FFTW_PREC}")
+    elseif (FFTW_LOOK_FOR_OMP)
+        set(FFTW_libs_to_find "fftw3${FFTW_PREC}_omp;fftw3${FFTW_PREC}")
+    else()
+        set(FFTW_libs_to_find "fftw3${FFTW_PREC}")
+    endif()
 
-        # Try to find the fftw lib in the given paths
-        # ----------------------------------------------
+    # Try to find the fftw lib in the given paths
+    # ----------------------------------------------
 
-        # call cmake macro to find the lib path
-        if(FFTW_LIBDIR)
+    # call cmake macro to find the lib path
+    if(FFTW_LIBDIR)
+        foreach(fftw_lib ${FFTW_libs_to_find})
+            set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
+            find_library(FFTW_${fftw_lib}_LIBRARY
+                NAMES ${fftw_lib}
+                HINTS ${FFTW_LIBDIR})
+        endforeach()
+    else()
+        if(FFTW_DIR)
             foreach(fftw_lib ${FFTW_libs_to_find})
                 set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
                 find_library(FFTW_${fftw_lib}_LIBRARY
                     NAMES ${fftw_lib}
-                    HINTS ${FFTW_LIBDIR})
+                    HINTS ${FFTW_DIR}
+                    PATH_SUFFIXES lib lib32 lib64)
             endforeach()
         else()
-            if(FFTW_DIR)
-                foreach(fftw_lib ${FFTW_libs_to_find})
-                    set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
-                    find_library(FFTW_${fftw_lib}_LIBRARY
-                        NAMES ${fftw_lib}
-                        HINTS ${FFTW_DIR}
-                        PATH_SUFFIXES lib lib32 lib64)
-                endforeach()
-            else()
-                foreach(fftw_lib ${FFTW_libs_to_find})
-                    set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
-                    find_library(FFTW_${fftw_lib}_LIBRARY
-                             NAMES ${fftw_lib}
-                             HINTS ${PATH_TO_LOOK_FOR})
-                endforeach()
-            endif()
+            foreach(fftw_lib ${FFTW_libs_to_find})
+                set(FFTW_${fftw_lib}_LIBRARY "FFTW_${fftw_lib}_LIBRARY-NOTFOUND")
+                find_library(FFTW_${fftw_lib}_LIBRARY
+                         NAMES ${fftw_lib}
+                         HINTS ${PATH_TO_LOOK_FOR})
+            endforeach()
         endif()
+    endif()
 
-    endif(FFTW_LOOK_FOR_MKL)
-
-    # If found, add path to cmake variable
-    # ------------------------------------
-    set(FFTW_LIBRARIES "")
-    set(FFTW_LIBRARY_DIRS "")
-    foreach(fftw_lib ${FFTW_libs_to_find})
-
-        if (FFTW_${fftw_lib}_LIBRARY)
-            get_filename_component(${fftw_lib}_lib_path "${FFTW_${fftw_lib}_LIBRARY}" PATH)
-            # set cmake variables
-            list(APPEND FFTW_LIBRARIES "${FFTW_${fftw_lib}_LIBRARY}")
-            list(APPEND FFTW_LIBRARY_DIRS "${${fftw_lib}_lib_path}")
-        else ()
-            list(APPEND FFTW_LIBRARIES "${FFTW_${fftw_lib}_LIBRARY}")
-            if (NOT FFTW_FIND_QUIETLY)
-                message(STATUS "Looking for FFTW -- lib ${fftw_lib} not found")
-            endif()
-        endif ()
-        mark_as_advanced(FFTW_${fftw_lib}_LIBRARY)
+endif(FFTW_LOOK_FOR_MKL)
 
-    endforeach()
+# If found, add path to cmake variable
+# ------------------------------------
+set(FFTW_LIBRARIES "")
+set(FFTW_LIBRARY_DIRS "")
+foreach(fftw_lib ${FFTW_libs_to_find})
 
-    list(REMOVE_DUPLICATES FFTW_INCLUDE_DIRS)
-    list(REMOVE_DUPLICATES FFTW_LIBRARY_DIRS)
+    if (FFTW_${fftw_lib}_LIBRARY)
+        get_filename_component(${fftw_lib}_lib_path "${FFTW_${fftw_lib}_LIBRARY}" PATH)
+        # set cmake variables
+        list(APPEND FFTW_LIBRARIES "${FFTW_${fftw_lib}_LIBRARY}")
+        list(APPEND FFTW_LIBRARY_DIRS "${${fftw_lib}_lib_path}")
+    else ()
+        list(APPEND FFTW_LIBRARIES "${FFTW_${fftw_lib}_LIBRARY}")
+        if (NOT FFTW_FIND_QUIETLY)
+            message(STATUS "Looking for FFTW -- lib ${fftw_lib} not found")
+        endif()
+    endif ()
+    mark_as_advanced(FFTW_${fftw_lib}_LIBRARY)
 
-    # check a function to validate the find
-    if(FFTW_LIBRARIES)
+endforeach()
 
-        set(REQUIRED_FLAGS)
-        set(REQUIRED_LDFLAGS)
-        set(REQUIRED_INCDIRS)
-        set(REQUIRED_LIBDIRS)
-        set(REQUIRED_LIBS)
+list(REMOVE_DUPLICATES FFTW_INCLUDE_DIRS)
+list(REMOVE_DUPLICATES FFTW_LIBRARY_DIRS)
 
-        # FFTW
-        if (FFTW_INCLUDE_DIRS)
-            set(REQUIRED_INCDIRS "${FFTW_INCLUDE_DIRS}")
-        endif()
-        if (FFTW_LIBRARY_DIRS)
-            set(REQUIRED_LIBDIRS "${FFTW_LIBRARY_DIRS}")
-        endif()
-        set(REQUIRED_LIBS "${FFTW_LIBRARIES}")
-        # THREADS
-        if (FFTW_LOOK_FOR_THREADS)
-            list(APPEND REQUIRED_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-        endif()
-        # OMP
-        if(FFTW_LOOK_FOR_OMP)
-            if (CMAKE_C_COMPILER MATCHES ".+gcc.*")
-                set(REQUIRED_FLAGS "-fopenmp")
-            endif()
+# check a function to validate the find
+if(FFTW_LIBRARIES)
+
+    set(REQUIRED_FLAGS)
+    set(REQUIRED_LDFLAGS)
+    set(REQUIRED_INCDIRS)
+    set(REQUIRED_LIBDIRS)
+    set(REQUIRED_LIBS)
+
+    # FFTW
+    if (FFTW_INCLUDE_DIRS)
+        set(REQUIRED_INCDIRS "${FFTW_INCLUDE_DIRS}")
+    endif()
+    if (FFTW_LIBRARY_DIRS)
+        set(REQUIRED_LIBDIRS "${FFTW_LIBRARY_DIRS}")
+    endif()
+    set(REQUIRED_LIBS "${FFTW_LIBRARIES}")
+    # THREADS
+    if (FFTW_LOOK_FOR_THREADS)
+        list(APPEND REQUIRED_LIBS "${CMAKE_THREAD_LIBS_INIT}")
+    endif()
+    # OMP
+    if(FFTW_LOOK_FOR_OMP)
+        if (CMAKE_C_COMPILER MATCHES ".+gcc.*")
+            set(REQUIRED_FLAGS "-fopenmp")
         endif()
-        # MKL
-        if(FFTW_LOOK_FOR_MKL)
-            list(APPEND REQUIRED_LIBS "${CMAKE_THREAD_LIBS_INIT};-lm")
-            if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
-                list(APPEND REQUIRED_LDFLAGS "-Wl,--no-as-needed")
-            endif()
+    endif()
+    # MKL
+    if(FFTW_LOOK_FOR_MKL)
+        list(APPEND REQUIRED_LIBS "${CMAKE_THREAD_LIBS_INIT};-lm")
+        if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
+            list(APPEND REQUIRED_LDFLAGS "-Wl,--no-as-needed")
         endif()
+    endif()
 
-        # set required libraries for link
-        set(CMAKE_REQUIRED_INCLUDES "${REQUIRED_INCDIRS}")
-        set(CMAKE_REQUIRED_LIBRARIES)
-        list(APPEND CMAKE_REQUIRED_LIBRARIES "${REQUIRED_LDFLAGS}")
-        foreach(lib_dir ${REQUIRED_LIBDIRS})
-            list(APPEND CMAKE_REQUIRED_LIBRARIES "-L${lib_dir}")
-        endforeach()
-        list(APPEND CMAKE_REQUIRED_LIBRARIES "${REQUIRED_LIBS}")
-        list(APPEND CMAKE_REQUIRED_FLAGS "${REQUIRED_FLAGS}")
-        string(REGEX REPLACE "^ -" "-" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
-
-        # test link
-        unset(FFTW_WORKS CACHE)
-        include(CheckFunctionExists)
-        check_function_exists(${FFTW_PREC_TESTFUNC}fftw_execute_ FFTW_WORKS)
-        mark_as_advanced(FFTW_WORKS)
-
-        if(FFTW_WORKS)
-            # save link with dependencies
-            set(FFTW_LIBRARIES_DEP "${REQUIRED_LIBS}")
-            set(FFTW_LIBRARY_DIRS_DEP "${REQUIRED_LIBDIRS}")
-            set(FFTW_INCLUDE_DIRS_DEP "${REQUIRED_INCDIRS}")
-            set(FFTW_C_FLAGS "${REQUIRED_FLAGS}")
-            set(FFTW_LINKER_FLAGS "${REQUIRED_LDFLAGS}")
-            list(REMOVE_DUPLICATES FFTW_LIBRARY_DIRS_DEP)
-            list(REMOVE_DUPLICATES FFTW_INCLUDE_DIRS_DEP)
-            list(REMOVE_DUPLICATES FFTW_LINKER_FLAGS)
-        else()
-            if(NOT FFTW_FIND_QUIETLY)
-                message(STATUS "Looking for FFTW : test of ${FFTW_PREC_TESTFUNC}fftw_execute_ with fftw library fails")
-                message(STATUS "CMAKE_REQUIRED_LIBRARIES: ${CMAKE_REQUIRED_LIBRARIES}")
-                message(STATUS "CMAKE_REQUIRED_INCLUDES: ${CMAKE_REQUIRED_INCLUDES}")
-                message(STATUS "CMAKE_REQUIRED_FLAGS: ${CMAKE_REQUIRED_FLAGS}")
-                message(STATUS "Check in CMakeFiles/CMakeError.log to figure out why it fails")
-            endif()
-        else()
-            set(FFTW_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    # set required libraries for link
+    set(CMAKE_REQUIRED_INCLUDES "${REQUIRED_INCDIRS}")
+    set(CMAKE_REQUIRED_LIBRARIES)
+    list(APPEND CMAKE_REQUIRED_LIBRARIES "${REQUIRED_LDFLAGS}")
+    foreach(lib_dir ${REQUIRED_LIBDIRS})
+        list(APPEND CMAKE_REQUIRED_LIBRARIES "-L${lib_dir}")
+    endforeach()
+    list(APPEND CMAKE_REQUIRED_LIBRARIES "${REQUIRED_LIBS}")
+    list(APPEND CMAKE_REQUIRED_FLAGS "${REQUIRED_FLAGS}")
+    string(REGEX REPLACE "^ -" "-" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
+
+    # test link
+    unset(FFTW_WORKS CACHE)
+    include(CheckFunctionExists)
+    check_function_exists(${FFTW_PREC_TESTFUNC}fftw_execute_ FFTW_WORKS)
+    mark_as_advanced(FFTW_WORKS)
+
+    if(FFTW_WORKS)
+        # save link with dependencies
+        set(FFTW_LIBRARIES_DEP "${REQUIRED_LIBS}")
+        set(FFTW_LIBRARY_DIRS_DEP "${REQUIRED_LIBDIRS}")
+        set(FFTW_INCLUDE_DIRS_DEP "${REQUIRED_INCDIRS}")
+        set(FFTW_C_FLAGS "${REQUIRED_FLAGS}")
+        set(FFTW_LINKER_FLAGS "${REQUIRED_LDFLAGS}")
+        list(REMOVE_DUPLICATES FFTW_LIBRARY_DIRS_DEP)
+        list(REMOVE_DUPLICATES FFTW_INCLUDE_DIRS_DEP)
+        list(REMOVE_DUPLICATES FFTW_LINKER_FLAGS)
+    else()
+        if(NOT FFTW_FIND_QUIETLY)
+            message(STATUS "Looking for FFTW : test of ${FFTW_PREC_TESTFUNC}fftw_execute_ with fftw library fails")
+            message(STATUS "CMAKE_REQUIRED_LIBRARIES: ${CMAKE_REQUIRED_LIBRARIES}")
+            message(STATUS "CMAKE_REQUIRED_INCLUDES: ${CMAKE_REQUIRED_INCLUDES}")
+            message(STATUS "CMAKE_REQUIRED_FLAGS: ${CMAKE_REQUIRED_FLAGS}")
+            message(STATUS "Check in CMakeFiles/CMakeError.log to figure out why it fails")
         endif()
-        set(CMAKE_REQUIRED_INCLUDES)
-        set(CMAKE_REQUIRED_FLAGS)
-        set(CMAKE_REQUIRED_LIBRARIES)
-    endif(FFTW_LIBRARIES)
-
-endif( NOT FFTW_FOUND )
+    else()
+        set(FFTW_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    endif()
+    set(CMAKE_REQUIRED_INCLUDES)
+    set(CMAKE_REQUIRED_FLAGS)
+    set(CMAKE_REQUIRED_LIBRARIES)
+endif(FFTW_LIBRARIES)
 
-if (FFTW_LIBRARIES AND NOT FFTW_DIR)
+if (FFTW_LIBRARIES)
     list(GET FFTW_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
         string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
-        set(FFTW_DIR "${not_cached_dir}" CACHE PATH "Installation directory of FFTW library" FORCE)
+        set(FFTW_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of FFTW library" FORCE)
+    else()
+        set(FFTW_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of FFTW library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindFXT.cmake b/cmake_modules/morse/find/FindFXT.cmake
index cb664cf29..7aa0ef4e9 100644
--- a/cmake_modules/morse/find/FindFXT.cmake
+++ b/cmake_modules/morse/find/FindFXT.cmake
@@ -25,6 +25,8 @@
 #  FXT_DIR             - Where to find the base directory of fxt
 #  FXT_INCDIR          - Where to find the header files
 #  FXT_LIBDIR          - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: FXT_DIR, FXT_INCDIR, FXT_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -74,7 +76,7 @@ if(PKG_CONFIG_EXECUTABLE)
 
 endif()
 
-if( (NOT PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR NOT FXT_FOUND OR FXT_DIR)
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR (FXT_DIR) )
 
     if (NOT FXT_FIND_QUIETLY)
         message(STATUS "Looking for FXT - PkgConfig not used")
@@ -86,17 +88,27 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR NOT FXT_FOUND OR FXT_DIR)
     # Add system include paths to search include
     # ------------------------------------------
     unset(_inc_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    set(ENV_FXT_DIR "$ENV{FXT_DIR}")
+    set(ENV_FXT_INCDIR "$ENV{FXT_INCDIR}")
+    if(ENV_FXT_INCDIR)
+        list(APPEND _inc_env "${ENV_FXT_INCDIR}")
+    elseif(ENV_FXT_DIR)
+        list(APPEND _inc_env "${ENV_FXT_DIR}")
+        list(APPEND _inc_env "${ENV_FXT_DIR}/include")
+        list(APPEND _inc_env "${ENV_FXT_DIR}/include/fxt")
     else()
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
+        if(WIN32)
+            string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        else()
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+        endif()
     endif()
     list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
     list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -116,7 +128,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR NOT FXT_FOUND OR FXT_DIR)
             find_path(FXT_fxt.h_DIRS
               NAMES fxt.h
               HINTS ${FXT_DIR}
-              PATH_SUFFIXES include)
+              PATH_SUFFIXES "include" "include/fxt")
         else()
             set(FXT_fxt.h_DIRS "FXT_fxt.h_DIRS-NOTFOUND")
             find_path(FXT_fxt.h_DIRS
@@ -148,16 +160,24 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR NOT FXT_FOUND OR FXT_DIR)
     # Add system library paths to search lib
     # --------------------------------------
     unset(_lib_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+    set(ENV_FXT_LIBDIR "$ENV{FXT_LIBDIR}")
+    if(ENV_FXT_LIBDIR)
+        list(APPEND _lib_env "${ENV_FXT_LIBDIR}")
+    elseif(ENV_FXT_DIR)
+        list(APPEND _lib_env "${ENV_FXT_DIR}")
+        list(APPEND _lib_env "${ENV_FXT_DIR}/lib")
     else()
-        if(APPLE)
-            string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+        if(WIN32)
+            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
         else()
-            string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+            if(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}")
         endif()
-        list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-        list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
     endif()
     list(REMOVE_DUPLICATES _lib_env)
 
@@ -249,9 +269,9 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR NOT FXT_FOUND OR FXT_DIR)
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(FXT_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR NOT FXT_FOUND OR FXT_DIR)
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FXT_FOUND) OR (FXT_DIR) )
 
-if (FXT_LIBRARIES AND NOT FXT_DIR)
+if (FXT_LIBRARIES)
     if (FXT_LIBRARY_DIRS)
         list(GET FXT_LIBRARY_DIRS 0 first_lib_path)
     else()
@@ -260,7 +280,9 @@ if (FXT_LIBRARIES AND NOT FXT_DIR)
     endif()
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(FXT_DIR "${not_cached_dir}" CACHE PATH "Installation directory of FXT library" FORCE)
+        set(FXT_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of FXT library" FORCE)
+    else()
+        set(FXT_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of FXT library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindHWLOC.cmake b/cmake_modules/morse/find/FindHWLOC.cmake
index ebdaac407..fd69aa4c9 100644
--- a/cmake_modules/morse/find/FindHWLOC.cmake
+++ b/cmake_modules/morse/find/FindHWLOC.cmake
@@ -25,6 +25,8 @@
 #  HWLOC_DIR             - Where to find the base directory of hwloc
 #  HWLOC_INCDIR          - Where to find the header files
 #  HWLOC_LIBDIR          - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: HWLOC_DIR, HWLOC_INCDIR, HWLOC_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -75,7 +77,7 @@ if(PKG_CONFIG_EXECUTABLE)
 
 endif()
 
-if( (NOT PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR NOT HWLOC_FOUND OR HWLOC_DIR)
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR (HWLOC_DIR) )
 
     if (NOT HWLOC_FIND_QUIETLY)
         message(STATUS "Looking for HWLOC - PkgConfig not used")
@@ -87,17 +89,27 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR NOT HWLOC_FOUND OR HWLOC_
     # Add system include paths to search include
     # ------------------------------------------
     unset(_inc_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    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)
+        list(APPEND _inc_env "${ENV_HWLOC_DIR}")
+        list(APPEND _inc_env "${ENV_HWLOC_DIR}/include")
+        list(APPEND _inc_env "${ENV_HWLOC_DIR}/include/hwloc")
     else()
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
+        if(WIN32)
+            string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        else()
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+        endif()
     endif()
     list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
     list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -120,7 +132,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR NOT HWLOC_FOUND OR HWLOC_
             find_path(HWLOC_hwloc.h_DIRS
               NAMES hwloc.h
               HINTS ${HWLOC_DIR}
-              PATH_SUFFIXES include)
+              PATH_SUFFIXES "include" "include/hwloc")
         else()
             set(HWLOC_hwloc.h_DIRS "HWLOC_hwloc.h_DIRS-NOTFOUND")
             find_path(HWLOC_hwloc.h_DIRS
@@ -152,16 +164,24 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR NOT HWLOC_FOUND OR HWLOC_
     # Add system library paths to search lib
     # --------------------------------------
     unset(_lib_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+    set(ENV_HWLOC_LIBDIR "$ENV{HWLOC_LIBDIR}")
+    if(ENV_HWLOC_LIBDIR)
+        list(APPEND _lib_env "${ENV_HWLOC_LIBDIR}")
+    elseif(ENV_HWLOC_DIR)
+        list(APPEND _lib_env "${ENV_HWLOC_DIR}")
+        list(APPEND _lib_env "${ENV_HWLOC_DIR}/lib")
     else()
-        if(APPLE)
-            string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+        if(WIN32)
+            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
         else()
-            string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+            if(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}")
         endif()
-        list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-        list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
     endif()
     list(REMOVE_DUPLICATES _lib_env)
 
@@ -256,9 +276,9 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR NOT HWLOC_FOUND OR HWLOC_
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(HWLOC_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR NOT HWLOC_FOUND OR HWLOC_DIR)
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT HWLOC_FOUND) OR (HWLOC_DIR) )
 
-if (HWLOC_LIBRARIES AND NOT HWLOC_DIR)
+if (HWLOC_LIBRARIES)
     if (HWLOC_LIBRARY_DIRS)
         list(GET HWLOC_LIBRARY_DIRS 0 first_lib_path)
     else()
@@ -267,7 +287,9 @@ if (HWLOC_LIBRARIES AND NOT HWLOC_DIR)
     endif()
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(HWLOC_DIR "${not_cached_dir}" CACHE PATH "Installation directory of HWLOC library" FORCE)
+        set(HWLOC_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of HWLOC library" FORCE)
+    else()
+        set(HWLOC_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of HWLOC library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindLAPACK.cmake b/cmake_modules/morse/find/FindLAPACK.cmake
index 66070b084..fce00b506 100644
--- a/cmake_modules/morse/find/FindLAPACK.cmake
+++ b/cmake_modules/morse/find/FindLAPACK.cmake
@@ -35,6 +35,10 @@
 #  LAPACK_DIR            - Where to find the base directory of lapack
 #  LAPACK_INCDIR         - Where to find the header files
 #  LAPACK_LIBDIR         - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: LAPACK_DIR, LAPACK_INCDIR, LAPACK_LIBDIR
+# For MKL case and if no paths are given as hints, we will try to use the MKLROOT
+# environment variable
 # Note that if BLAS_DIR is set, it will also look for lapack in it
 ### List of vendors (BLA_VENDOR) valid in this module
 ##  Intel(mkl), ACML,Apple, NAS, Generic
@@ -154,21 +158,40 @@ macro(Check_Lapack_Libraries LIBRARIES _prefix _name _flags _list _blas _threads
 set(_libraries_work TRUE)
 set(${LIBRARIES})
 set(_combined_name)
+set(ENV_MKLROOT "$ENV{MKLROOT}")
+set(ENV_BLAS_DIR "$ENV{BLAS_DIR}")
+set(ENV_BLAS_LIBDIR "$ENV{BLAS_LIBDIR}")
+set(ENV_LAPACK_DIR "$ENV{LAPACK_DIR}")
+set(ENV_LAPACK_LIBDIR "$ENV{LAPACK_LIBDIR}")
 if (NOT _libdir)
-  if (BLAS_DIR)
-    list(APPEND _libdir "${BLAS_DIR}")
-    list(APPEND _libdir "${BLAS_DIR}/lib")
-    if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
-        list(APPEND _libdir "${BLAS_DIR}/lib64")
-        list(APPEND _libdir "${BLAS_DIR}/lib/intel64")
-    else()
-        list(APPEND _libdir "${BLAS_DIR}/lib32")
-        list(APPEND _libdir "${BLAS_DIR}/lib/ia32")
-    endif()
-  elseif (BLAS_LIBDIR)
-    list(APPEND _libdir "${BLAS_LIBDIR}")
-  endif ()
-  if (LAPACK_DIR)
+  if (BLAS_LIBDIR)
+      list(APPEND _libdir "${BLAS_LIBDIR}")
+  elseif (BLAS_DIR)
+      list(APPEND _libdir "${BLAS_DIR}")
+      list(APPEND _libdir "${BLAS_DIR}/lib")
+      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+          list(APPEND _libdir "${BLAS_DIR}/lib64")
+          list(APPEND _libdir "${BLAS_DIR}/lib/intel64")
+      else()
+          list(APPEND _libdir "${BLAS_DIR}/lib32")
+          list(APPEND _libdir "${BLAS_DIR}/lib/ia32")
+      endif()
+  elseif(ENV_BLAS_LIBDIR)
+      list(APPEND _libdir "${ENV_BLAS_LIBDIR}")
+  elseif(ENV_BLAS_DIR)
+      list(APPEND _libdir "${ENV_BLAS_DIR}")
+      list(APPEND _libdir "${ENV_BLAS_DIR}/lib")
+      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+          list(APPEND _libdir "${ENV_BLAS_DIR}/lib64")
+          list(APPEND _libdir "${ENV_BLAS_DIR}/lib/intel64")
+      else()
+          list(APPEND _libdir "${ENV_BLAS_DIR}/lib32")
+          list(APPEND _libdir "${ENV_BLAS_DIR}/lib/ia32")
+      endif()
+  endif()
+  if (LAPACK_LIBDIR)
+    list(APPEND _libdir "${LAPACK_LIBDIR}")
+  elseif (LAPACK_DIR)
     list(APPEND _libdir "${LAPACK_DIR}")
     list(APPEND _libdir "${LAPACK_DIR}/lib")
     if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
@@ -178,9 +201,28 @@ if (NOT _libdir)
         list(APPEND _libdir "${LAPACK_DIR}/lib32")
         list(APPEND _libdir "${LAPACK_DIR}/lib/ia32")
     endif()
-  elseif (LAPACK_LIBDIR)
-    list(APPEND _libdir "${LAPACK_LIBDIR}")
+  elseif(ENV_LAPACK_LIBDIR)
+      list(APPEND _libdir "${ENV_LAPACK_LIBDIR}")
+  elseif(ENV_LAPACK_DIR)
+      list(APPEND _libdir "${ENV_LAPACK_DIR}")
+      list(APPEND _libdir "${ENV_LAPACK_DIR}/lib")
+      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+          list(APPEND _libdir "${ENV_LAPACK_DIR}/lib64")
+          list(APPEND _libdir "${ENV_LAPACK_DIR}/lib/intel64")
+      else()
+          list(APPEND _libdir "${ENV_LAPACK_DIR}/lib32")
+          list(APPEND _libdir "${ENV_LAPACK_DIR}/lib/ia32")
+      endif()
   else()
+    if (ENV_MKLROOT)
+        if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+            list(APPEND _libdir "${ENV_MKLROOT}/lib64")
+            list(APPEND _libdir "${ENV_MKLROOT}/lib/intel64")
+        else()
+            list(APPEND _libdir "${ENV_MKLROOT}/lib32")
+            list(APPEND _libdir "${ENV_MKLROOT}/lib/ia32")
+        endif()
+    endif()
     if (WIN32)
       string(REPLACE ":" ";" _libdir2 "$ENV{LIB}")
     elseif (APPLE)
@@ -212,7 +254,7 @@ foreach(_library ${_list})
         set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
       endif (APPLE)
     else (BLA_STATIC)
-			if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+      if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
         # for ubuntu's libblas3gf and liblapack3gf packages
         set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
       endif ()
@@ -287,71 +329,6 @@ if(BLAS_FOUND)
     endif(NOT BLA_VENDOR)
   endif ($ENV{BLA_VENDOR} MATCHES ".+")
 
-if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
- if(NOT LAPACK_LIBRARIES)
-  check_lapack_libraries(
-  LAPACK_LIBRARIES
-  LAPACK
-  cheev
-  ""
-  "goto2"
-  "${BLAS_LIBRARIES}"
-  ""
-  )
- endif(NOT LAPACK_LIBRARIES)
-endif (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
-
-
-#acml lapack
- if (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All")
-   if (BLAS_LIBRARIES MATCHES ".+acml.+")
-     set (LAPACK_LIBRARIES ${BLAS_LIBRARIES})
-   endif ()
- endif ()
-
-# Apple LAPACK library?
-if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
- if(NOT LAPACK_LIBRARIES)
-  check_lapack_libraries(
-  LAPACK_LIBRARIES
-  LAPACK
-  cheev
-  ""
-  "Accelerate"
-  "${BLAS_LIBRARIES}"
-  ""
-  )
- endif(NOT LAPACK_LIBRARIES)
-endif (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
-if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
-  if ( NOT LAPACK_LIBRARIES )
-    check_lapack_libraries(
-    LAPACK_LIBRARIES
-    LAPACK
-    cheev
-    ""
-    "vecLib"
-    "${BLAS_LIBRARIES}"
-    ""
-    )
-  endif ( NOT LAPACK_LIBRARIES )
-endif (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
-# Generic LAPACK library?
-if (BLA_VENDOR STREQUAL "Generic" OR
-    BLA_VENDOR STREQUAL "ATLAS" OR
-    BLA_VENDOR STREQUAL "All")
-  if ( NOT LAPACK_LIBRARIES )
-    check_lapack_libraries(
-    LAPACK_LIBRARIES
-    LAPACK
-    cheev
-    ""
-    "lapack"
-    "${BLAS_LIBRARIES}"
-    ""
-    )
-  endif ( NOT LAPACK_LIBRARIES )
-endif ()
 #intel lapack
 if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
   if (NOT WIN32)
@@ -431,6 +408,73 @@ if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
     endforeach ()
   endif ()
 endif()
+
+#goto lapack
+if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
+ if(NOT LAPACK_LIBRARIES)
+  check_lapack_libraries(
+  LAPACK_LIBRARIES
+  LAPACK
+  cheev
+  ""
+  "goto2"
+  "${BLAS_LIBRARIES}"
+  ""
+  )
+ endif(NOT LAPACK_LIBRARIES)
+endif (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
+
+
+#acml lapack
+ if (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All")
+   if (BLAS_LIBRARIES MATCHES ".+acml.+")
+     set (LAPACK_LIBRARIES ${BLAS_LIBRARIES})
+   endif ()
+ endif ()
+
+# Apple LAPACK library?
+if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
+ if(NOT LAPACK_LIBRARIES)
+  check_lapack_libraries(
+  LAPACK_LIBRARIES
+  LAPACK
+  cheev
+  ""
+  "Accelerate"
+  "${BLAS_LIBRARIES}"
+  ""
+  )
+ endif(NOT LAPACK_LIBRARIES)
+endif (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
+if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
+  if ( NOT LAPACK_LIBRARIES )
+    check_lapack_libraries(
+    LAPACK_LIBRARIES
+    LAPACK
+    cheev
+    ""
+    "vecLib"
+    "${BLAS_LIBRARIES}"
+    ""
+    )
+  endif ( NOT LAPACK_LIBRARIES )
+endif (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
+# Generic LAPACK library?
+if (BLA_VENDOR STREQUAL "Generic" OR
+    BLA_VENDOR STREQUAL "ATLAS" OR
+    BLA_VENDOR STREQUAL "All")
+  if ( NOT LAPACK_LIBRARIES )
+    check_lapack_libraries(
+    LAPACK_LIBRARIES
+    LAPACK
+    cheev
+    ""
+    "lapack"
+    "${BLAS_LIBRARIES}"
+    ""
+    )
+  endif ( NOT LAPACK_LIBRARIES )
+endif ()
 else(BLAS_FOUND)
   message(STATUS "LAPACK requires BLAS")
 endif(BLAS_FOUND)
@@ -506,11 +550,13 @@ endif(BLA_F95)
 
 set(CMAKE_FIND_LIBRARY_SUFFIXES ${_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
 
-if (LAPACK_FOUND AND NOT LAPACK_DIR)
+if (LAPACK_FOUND)
     list(GET LAPACK_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
         string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
-        set(LAPACK_DIR "${not_cached_dir}" CACHE PATH "Installation directory of LAPACK library" FORCE)
+        set(LAPACK_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of LAPACK library" FORCE)
+    else()
+        set(LAPACK_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of LAPACK library" FORCE)
     endif()
 endif()
diff --git a/cmake_modules/morse/find/FindLAPACKE.cmake b/cmake_modules/morse/find/FindLAPACKE.cmake
index f4da7eb9f..1745f171e 100644
--- a/cmake_modules/morse/find/FindLAPACKE.cmake
+++ b/cmake_modules/morse/find/FindLAPACKE.cmake
@@ -39,6 +39,8 @@
 #  LAPACKE_DIR             - Where to find the base directory of lapacke
 #  LAPACKE_INCDIR          - Where to find the header files
 #  LAPACKE_LIBDIR          - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: LAPACKE_DIR, LAPACKE_INCDIR, LAPACKE_LIBDIR
 #
 # LAPACKE could be directly embedded in LAPACK library (ex: Intel MKL) so that
 # we test a lapacke function with the lapack libraries found and set LAPACKE
@@ -143,17 +145,27 @@ if (LAPACK_FOUND)
         # Add system include paths to search include
         # ------------------------------------------
         unset(_inc_env)
-        if(WIN32)
-            string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        set(ENV_LAPACKE_DIR "$ENV{LAPACKE_DIR}")
+        set(ENV_LAPACKE_INCDIR "$ENV{LAPACKE_INCDIR}")
+        if(ENV_LAPACKE_INCDIR)
+            list(APPEND _inc_env "${ENV_LAPACKE_INCDIR}")
+        elseif(ENV_LAPACKE_DIR)
+            list(APPEND _inc_env "${ENV_LAPACKE_DIR}")
+            list(APPEND _inc_env "${ENV_LAPACKE_DIR}/include")
+            list(APPEND _inc_env "${ENV_LAPACKE_DIR}/include/lapacke")
         else()
-            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-            list(APPEND _inc_env "${_path_env}")
-            string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-            list(APPEND _inc_env "${_path_env}")
-            string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-            list(APPEND _inc_env "${_path_env}")
-            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-            list(APPEND _inc_env "${_path_env}")
+            if(WIN32)
+                string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+            else()
+                string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+                list(APPEND _inc_env "${_path_env}")
+                string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+                list(APPEND _inc_env "${_path_env}")
+                string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+                list(APPEND _inc_env "${_path_env}")
+                string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+                list(APPEND _inc_env "${_path_env}")
+            endif()
         endif()
         list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
         list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -174,7 +186,7 @@ if (LAPACK_FOUND)
                 find_path(LAPACKE_lapacke.h_DIRS
                 NAMES lapacke.h
                 HINTS ${LAPACKE_DIR}
-                PATH_SUFFIXES include)
+                PATH_SUFFIXES "include" "include/lapacke")
             else()
                 set(LAPACKE_lapacke.h_DIRS "LAPACKE_lapacke.h_DIRS-NOTFOUND")
                 find_path(LAPACKE_lapacke.h_DIRS
@@ -202,16 +214,24 @@ if (LAPACK_FOUND)
         # Add system library paths to search lib
         # --------------------------------------
         unset(_lib_env)
-        if(WIN32)
-            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+        set(ENV_LAPACKE_LIBDIR "$ENV{LAPACKE_LIBDIR}")
+        if(ENV_LAPACKE_LIBDIR)
+            list(APPEND _lib_env "${ENV_LAPACKE_LIBDIR}")
+        elseif(ENV_LAPACKE_DIR)
+            list(APPEND _lib_env "${ENV_LAPACKE_DIR}")
+            list(APPEND _lib_env "${ENV_LAPACKE_DIR}/lib")
         else()
-            if(APPLE)
-                string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+            if(WIN32)
+                string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
             else()
-                string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+                if(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}")
             endif()
-            list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-            list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
         endif()
         list(REMOVE_DUPLICATES _lib_env)
 
@@ -340,12 +360,14 @@ else(LAPACK_FOUND)
 
 endif(LAPACK_FOUND)
 
-if (LAPACKE_LIBRARIES AND NOT LAPACKE_DIR)
+if (LAPACKE_LIBRARIES)
     list(GET LAPACKE_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
         string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
-        set(LAPACKE_DIR "${not_cached_dir}" CACHE PATH "Installation directory of LAPACKE library" FORCE)
+        set(LAPACKE_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of LAPACKE library" FORCE)
+    else()
+        set(LAPACKE_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of LAPACKE library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindMAGMA.cmake b/cmake_modules/morse/find/FindMAGMA.cmake
index 254aa75b5..0302ce5c0 100644
--- a/cmake_modules/morse/find/FindMAGMA.cmake
+++ b/cmake_modules/morse/find/FindMAGMA.cmake
@@ -40,6 +40,8 @@
 #  MAGMA_DIR              - Where to find the base directory of magma
 #  MAGMA_INCDIR           - Where to find the header files
 #  MAGMA_LIBDIR           - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: MAGMA_DIR, MAGMA_INCDIR, MAGMA_LIBDIR
 #
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -156,7 +158,7 @@ if(PKG_CONFIG_EXECUTABLE)
 endif()
 
 # if MAGMA is not found using pkg-config
-if( (NOT PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR NOT MAGMA_FOUND OR MAGMA_DIR)
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR (MAGMA_DIR) )
 
     if (NOT MAGMA_FIND_QUIETLY)
         message(STATUS "Looking for MAGMA - PkgConfig not used")
@@ -168,17 +170,27 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR NOT MAGMA_FOUND OR MAGMA_
     # Add system include paths to search include
     # ------------------------------------------
     unset(_inc_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    set(ENV_MAGMA_DIR "$ENV{MAGMA_DIR}")
+    set(ENV_MAGMA_INCDIR "$ENV{MAGMA_INCDIR}")
+    if(ENV_MAGMA_INCDIR)
+        list(APPEND _inc_env "${ENV_MAGMA_INCDIR}")
+    elseif(ENV_MAGMA_DIR)
+        list(APPEND _inc_env "${ENV_MAGMA_DIR}")
+        list(APPEND _inc_env "${ENV_MAGMA_DIR}/include")
+        list(APPEND _inc_env "${ENV_MAGMA_DIR}/include/magma")
     else()
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
+        if(WIN32)
+            string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        else()
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+        endif()
     endif()
     list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
     list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -199,7 +211,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR NOT MAGMA_FOUND OR MAGMA_
             find_path(MAGMA_magma.h_DIRS
               NAMES magma.h
               HINTS ${MAGMA_DIR}
-              PATH_SUFFIXES include)
+              PATH_SUFFIXES "include" "include/magma")
         else()
             set(MAGMA_magma.h_DIRS "MAGMA_magma.h_DIRS-NOTFOUND")
             find_path(MAGMA_magma.h_DIRS
@@ -227,16 +239,24 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR NOT MAGMA_FOUND OR MAGMA_
     # Add system library paths to search lib
     # --------------------------------------
     unset(_lib_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+    set(ENV_MAGMA_LIBDIR "$ENV{MAGMA_LIBDIR}")
+    if(ENV_MAGMA_LIBDIR)
+        list(APPEND _lib_env "${ENV_MAGMA_LIBDIR}")
+    elseif(ENV_MAGMA_DIR)
+        list(APPEND _lib_env "${ENV_MAGMA_DIR}")
+        list(APPEND _lib_env "${ENV_MAGMA_DIR}/lib")
     else()
-        if(APPLE)
-            string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+        if(WIN32)
+            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
         else()
-            string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+            if(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}")
         endif()
-        list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-        list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
     endif()
     list(REMOVE_DUPLICATES _lib_env)
 
@@ -374,9 +394,9 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR NOT MAGMA_FOUND OR MAGMA_
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(MAGMA_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR NOT MAGMA_FOUND OR MAGMA_DIR)
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT MAGMA_FOUND) OR (MAGMA_DIR) )
 
-if (MAGMA_LIBRARIES AND NOT MAGMA_DIR)
+if (MAGMA_LIBRARIES)
     if (MAGMA_LIBRARY_DIRS)
         foreach(dir ${MAGMA_LIBRARY_DIRS})
             if ("${dir}" MATCHES "magma")
@@ -389,7 +409,9 @@ if (MAGMA_LIBRARIES AND NOT MAGMA_DIR)
     endif()
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(MAGMA_DIR "${not_cached_dir}" CACHE PATH "Installation directory of MAGMA library" FORCE)
+        set(MAGMA_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of MAGMA library" FORCE)
+    else()
+        set(MAGMA_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of MAGMA library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindMETIS.cmake b/cmake_modules/morse/find/FindMETIS.cmake
index 021f92f0b..43a16e7b0 100644
--- a/cmake_modules/morse/find/FindMETIS.cmake
+++ b/cmake_modules/morse/find/FindMETIS.cmake
@@ -26,6 +26,8 @@
 #  METIS_DIR             - Where to find the base directory of metis
 #  METIS_INCDIR          - Where to find the header files
 #  METIS_LIBDIR          - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: METIS_DIR, METIS_INCDIR, METIS_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -57,17 +59,27 @@ endif()
 # Add system include paths to search include
 # ------------------------------------------
 unset(_inc_env)
-if(WIN32)
-    string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+set(ENV_METIS_DIR "$ENV{METIS_DIR}")
+set(ENV_METIS_INCDIR "$ENV{METIS_INCDIR}")
+if(ENV_METIS_INCDIR)
+    list(APPEND _inc_env "${ENV_METIS_INCDIR}")
+elseif(ENV_METIS_DIR)
+    list(APPEND _inc_env "${ENV_METIS_DIR}")
+    list(APPEND _inc_env "${ENV_METIS_DIR}/include")
+    list(APPEND _inc_env "${ENV_METIS_DIR}/include/metis")
 else()
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
+    if(WIN32)
+        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    else()
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+    endif()
 endif()
 list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
 list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -88,7 +100,7 @@ else()
         find_path(METIS_metis.h_DIRS
           NAMES metis.h
           HINTS ${METIS_DIR}
-          PATH_SUFFIXES include)
+          PATH_SUFFIXES "include" "include/metis")
     else()
         set(METIS_metis.h_DIRS "METIS_metis.h_DIRS-NOTFOUND")
         find_path(METIS_metis.h_DIRS
@@ -117,16 +129,24 @@ endif()
 # Add system library paths to search lib
 # --------------------------------------
 unset(_lib_env)
-if(WIN32)
-    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+set(ENV_METIS_LIBDIR "$ENV{METIS_LIBDIR}")
+if(ENV_METIS_LIBDIR)
+    list(APPEND _lib_env "${ENV_METIS_LIBDIR}")
+elseif(ENV_METIS_DIR)
+    list(APPEND _lib_env "${ENV_METIS_DIR}")
+    list(APPEND _lib_env "${ENV_METIS_DIR}/lib")
 else()
-    if(APPLE)
-        string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+    if(WIN32)
+        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
     else()
-        string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+        if(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}")
     endif()
-    list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-    list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
 endif()
 list(REMOVE_DUPLICATES _lib_env)
 
@@ -214,12 +234,14 @@ if(METIS_LIBRARIES)
     set(CMAKE_REQUIRED_LIBRARIES)
 endif(METIS_LIBRARIES)
 
-if (METIS_LIBRARIES AND NOT METIS_DIR)
+if (METIS_LIBRARIES)
     list(GET METIS_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(METIS_DIR "${not_cached_dir}" CACHE PATH "Installation directory of METIS library" FORCE)
+        set(METIS_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of METIS library" FORCE)
+    else()
+        set(METIS_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of METIS library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindMUMPS.cmake b/cmake_modules/morse/find/FindMUMPS.cmake
index a2f67e573..5655aab20 100644
--- a/cmake_modules/morse/find/FindMUMPS.cmake
+++ b/cmake_modules/morse/find/FindMUMPS.cmake
@@ -43,6 +43,8 @@
 # The user can give specific paths where to find the libraries adding cmake
 # options at configure (ex: cmake path/to/project -DMUMPS_DIR=path/to/mumps):
 #  MUMPS_DIR              - Where to find the base directory of mumps
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: MUMPS_DIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -225,22 +227,22 @@ if(MUMPS_DIR)
     set(MUMPS_smumps_c.h_DIRS "MUMPS_smumps_c.h_DIRS-NOTFOUND")
     find_path(MUMPS_smumps_c.h_DIRS
       NAMES smumps_c.h
-      HINTS ${MUMPS_DIR}
+      HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
       PATH_SUFFIXES "include")
     set(MUMPS_dmumps_c.h_DIRS "MUMPS_dmumps_c.h_DIRS-NOTFOUND")
     find_path(MUMPS_dmumps_c.h_DIRS
       NAMES dmumps_c.h
-      HINTS ${MUMPS_DIR}
+      HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
       PATH_SUFFIXES "include")
     set(MUMPS_cmumps_c.h_DIRS "MUMPS_cmumps_c.h_DIRS-NOTFOUND")
     find_path(MUMPS_cmumps_c.h_DIRS
       NAMES cmumps_c.h
-      HINTS ${MUMPS_DIR}
+      HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
       PATH_SUFFIXES "include")
     set(MUMPS_zmumps_c.h_DIRS "MUMPS_zmumps_c.h_DIRS-NOTFOUND")
     find_path(MUMPS_zmumps_c.h_DIRS
       NAMES zmumps_c.h
-      HINTS ${MUMPS_DIR}
+      HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
       PATH_SUFFIXES "include")
 else()
     if (MUMPS_FIND_REQUIRED)
@@ -312,37 +314,37 @@ if(MUMPS_DIR)
     set(MUMPS_smumps_LIBRARY "MUMPS_smumps_LIBRARY-NOTFOUND")
     find_library(MUMPS_smumps_LIBRARY
                  NAMES smumps
-                 HINTS ${MUMPS_DIR}
+                 HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
                  PATH_SUFFIXES lib)
     set(MUMPS_dmumps_LIBRARY "MUMPS_dmumps_LIBRARY-NOTFOUND")
     find_library(MUMPS_dmumps_LIBRARY
                  NAMES dmumps
-                 HINTS ${MUMPS_DIR}
+                 HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
                  PATH_SUFFIXES lib)
     set(MUMPS_cmumps_LIBRARY "MUMPS_cmumps_LIBRARY-NOTFOUND")
     find_library(MUMPS_cmumps_LIBRARY
                  NAMES cmumps
-                 HINTS ${MUMPS_DIR}
+                 HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
                  PATH_SUFFIXES lib)
     set(MUMPS_zmumps_LIBRARY "MUMPS_zmumps_LIBRARY-NOTFOUND")
     find_library(MUMPS_zmumps_LIBRARY
                  NAMES zmumps
-                 HINTS ${MUMPS_DIR}
+                 HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
                  PATH_SUFFIXES lib)
     set(MUMPS_mumps_common_LIBRARY "MUMPS_mumps_common_LIBRARY-NOTFOUND")
     find_library(MUMPS_mumps_common_LIBRARY
                  NAMES mumps_common
-                 HINTS ${MUMPS_DIR}
+                 HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
                  PATH_SUFFIXES lib)
     set(MUMPS_mpiseq_LIBRARY "MUMPS_mpiseq_LIBRARY-NOTFOUND")
     find_library(MUMPS_mpiseq_LIBRARY
                  NAMES mpiseq
-                 HINTS ${MUMPS_DIR}
+                 HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
                  PATH_SUFFIXES libseq)
     set(MUMPS_pord_LIBRARY "MUMPS_pord_LIBRARY-NOTFOUND")
     find_library(MUMPS_pord_LIBRARY
                  NAMES pord
-                 HINTS ${MUMPS_DIR}
+                 HINTS "${MUMPS_DIR}" "$ENV{MUMPS_DIR}"
                  PATH_SUFFIXES lib)
 else()
     if (MUMPS_FIND_REQUIRED)
@@ -620,12 +622,14 @@ if(MUMPS_LIBRARIES)
     set(CMAKE_REQUIRED_LIBRARIES)
 endif(MUMPS_LIBRARIES)
 
-if (MUMPS_LIBRARIES AND NOT MUMPS_DIR)
+if (MUMPS_LIBRARIES)
     list(GET MUMPS_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(MUMPS_DIR "${not_cached_dir}" CACHE PATH "Installation directory of MUMPS library" FORCE)
+        set(MUMPS_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of MUMPS library" FORCE)
+    else()
+        set(MUMPS_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of MUMPS library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindPARMETIS.cmake b/cmake_modules/morse/find/FindPARMETIS.cmake
index 07300069e..227c178e4 100644
--- a/cmake_modules/morse/find/FindPARMETIS.cmake
+++ b/cmake_modules/morse/find/FindPARMETIS.cmake
@@ -26,6 +26,8 @@
 #  PARMETIS_DIR             - Where to find the base directory of parmetis
 #  PARMETIS_INCDIR          - Where to find the header files
 #  PARMETIS_LIBDIR          - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: PARMETIS_DIR, PARMETIS_INCDIR, PARMETIS_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -58,17 +60,27 @@ endif()
 # Add system include paths to search include
 # ------------------------------------------
 unset(_inc_env)
-if(WIN32)
-    string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+set(ENV_PARMETIS_DIR "$ENV{PARMETIS_DIR}")
+set(ENV_PARMETIS_INCDIR "$ENV{PARMETIS_INCDIR}")
+if(ENV_PARMETIS_INCDIR)
+    list(APPEND _inc_env "${ENV_PARMETIS_INCDIR}")
+elseif(ENV_PARMETIS_DIR)
+    list(APPEND _inc_env "${ENV_PARMETIS_DIR}")
+    list(APPEND _inc_env "${ENV_PARMETIS_DIR}/include")
+    list(APPEND _inc_env "${ENV_PARMETIS_DIR}/include/parmetis")
 else()
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
+    if(WIN32)
+        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    else()
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+    endif()
 endif()
 list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
 list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -89,7 +101,7 @@ else()
         find_path(PARMETIS_parmetis.h_DIRS
           NAMES parmetis.h
           HINTS ${PARMETIS_DIR}
-          PATH_SUFFIXES include)
+          PATH_SUFFIXES "include" "include/parmetis")
     else()
         set(PARMETIS_parmetis.h_DIRS "PARMETIS_parmetis.h_DIRS-NOTFOUND")
         find_path(PARMETIS_parmetis.h_DIRS
@@ -118,16 +130,24 @@ endif()
 # Add system library paths to search lib
 # --------------------------------------
 unset(_lib_env)
-if(WIN32)
-    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+set(ENV_PARMETIS_LIBDIR "$ENV{PARMETIS_LIBDIR}")
+if(ENV_PARMETIS_LIBDIR)
+    list(APPEND _lib_env "${ENV_PARMETIS_LIBDIR}")
+elseif(ENV_PARMETIS_DIR)
+    list(APPEND _lib_env "${ENV_PARMETIS_DIR}")
+    list(APPEND _lib_env "${ENV_PARMETIS_DIR}/lib")
 else()
-    if(APPLE)
-        string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+    if(WIN32)
+        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
     else()
-        string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+        if(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}")
     endif()
-    list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-    list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
 endif()
 list(REMOVE_DUPLICATES _lib_env)
 
@@ -214,12 +234,14 @@ if(PARMETIS_LIBRARIES)
     set(CMAKE_REQUIRED_LIBRARIES)
 endif(PARMETIS_LIBRARIES)
 
-if (PARMETIS_LIBRARIES AND NOT PARMETIS_DIR)
+if (PARMETIS_LIBRARIES)
     list(GET PARMETIS_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(PARMETIS_DIR "${not_cached_dir}" CACHE PATH "Installation directory of PARMETIS library" FORCE)
+        set(PARMETIS_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of PARMETIS library" FORCE)
+    else()
+        set(PARMETIS_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of PARMETIS library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindPASTIX.cmake b/cmake_modules/morse/find/FindPASTIX.cmake
index 781fa339e..006320535 100644
--- a/cmake_modules/morse/find/FindPASTIX.cmake
+++ b/cmake_modules/morse/find/FindPASTIX.cmake
@@ -51,6 +51,8 @@
 #  PASTIX_DIR              - Where to find the base directory of pastix
 #  PASTIX_INCDIR           - Where to find the header files
 #  PASTIX_LIBDIR           - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: PASTIX_DIR, PASTIX_INCDIR, PASTIX_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -333,17 +335,27 @@ endif()
 # Add system include paths to search include
 # ------------------------------------------
 unset(_inc_env)
-if(WIN32)
-    string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+set(ENV_PASTIX_DIR "$ENV{PASTIX_DIR}")
+set(ENV_PASTIX_INCDIR "$ENV{PASTIX_INCDIR}")
+if(ENV_PASTIX_INCDIR)
+    list(APPEND _inc_env "${ENV_PASTIX_INCDIR}")
+elseif(ENV_PASTIX_DIR)
+    list(APPEND _inc_env "${ENV_PASTIX_DIR}")
+    list(APPEND _inc_env "${ENV_PASTIX_DIR}/include")
+    list(APPEND _inc_env "${ENV_PASTIX_DIR}/include/pastix")
 else()
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
+    if(WIN32)
+        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    else()
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+    endif()
 endif()
 list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
 list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -392,16 +404,24 @@ endif()
 # Add system library paths to search lib
 # --------------------------------------
 unset(_lib_env)
-if(WIN32)
-    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+set(ENV_PASTIX_LIBDIR "$ENV{PASTIX_LIBDIR}")
+if(ENV_PASTIX_LIBDIR)
+    list(APPEND _lib_env "${ENV_PASTIX_LIBDIR}")
+elseif(ENV_PASTIX_DIR)
+    list(APPEND _lib_env "${ENV_PASTIX_DIR}")
+    list(APPEND _lib_env "${ENV_PASTIX_DIR}/lib")
 else()
-    if(APPLE)
-        string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+    if(WIN32)
+        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
     else()
-        string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+        if(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}")
     endif()
-    list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-    list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
 endif()
 list(REMOVE_DUPLICATES _lib_env)
 
@@ -639,12 +659,14 @@ if(PASTIX_LIBRARIES)
     set(CMAKE_REQUIRED_LIBRARIES)
 endif(PASTIX_LIBRARIES)
 
-if (PASTIX_LIBRARIES AND NOT PASTIX_DIR)
+if (PASTIX_LIBRARIES)
     list(GET PASTIX_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(PASTIX_DIR "${not_cached_dir}" CACHE PATH "Installation directory of PASTIX library" FORCE)
+        set(PASTIX_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of PASTIX library" FORCE)
+    else()
+        set(PASTIX_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of PASTIX library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindPTSCOTCH.cmake b/cmake_modules/morse/find/FindPTSCOTCH.cmake
index 6065076b4..5fe48d1a7 100644
--- a/cmake_modules/morse/find/FindPTSCOTCH.cmake
+++ b/cmake_modules/morse/find/FindPTSCOTCH.cmake
@@ -35,6 +35,8 @@
 #  PTSCOTCH_DIR              - Where to find the base directory of ptscotch
 #  PTSCOTCH_INCDIR           - Where to find the header files
 #  PTSCOTCH_LIBDIR           - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: PTSCOTCH_DIR, PTSCOTCH_INCDIR, PTSCOTCH_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -84,17 +86,27 @@ endif()
 # Add system include paths to search include
 # ------------------------------------------
 unset(_inc_env)
-if(WIN32)
-    string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+set(ENV_PTSCOTCH_DIR "$ENV{PTSCOTCH_DIR}")
+set(ENV_PTSCOTCH_INCDIR "$ENV{PTSCOTCH_INCDIR}")
+if(ENV_PTSCOTCH_INCDIR)
+    list(APPEND _inc_env "${ENV_PTSCOTCH_INCDIR}")
+elseif(ENV_PTSCOTCH_DIR)
+    list(APPEND _inc_env "${ENV_PTSCOTCH_DIR}")
+    list(APPEND _inc_env "${ENV_PTSCOTCH_DIR}/include")
+    list(APPEND _inc_env "${ENV_PTSCOTCH_DIR}/include/ptscotch")
 else()
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
+    if(WIN32)
+        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    else()
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+    endif()
 endif()
 list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
 list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -115,7 +127,7 @@ else()
         find_path(PTSCOTCH_ptscotch.h_DIRS
           NAMES ptscotch.h
           HINTS ${PTSCOTCH_DIR}
-          PATH_SUFFIXES include)
+          PATH_SUFFIXES "include" "include/ptscotch")
     else()
         set(PTSCOTCH_ptscotch.h_DIRS "PTSCOTCH_ptscotch.h_DIRS-NOTFOUND")
         find_path(PTSCOTCH_ptscotch.h_DIRS
@@ -143,16 +155,24 @@ endif()
 # Add system library paths to search lib
 # --------------------------------------
 unset(_lib_env)
-if(WIN32)
-    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+set(ENV_PTSCOTCH_LIBDIR "$ENV{PTSCOTCH_LIBDIR}")
+if(ENV_PTSCOTCH_LIBDIR)
+    list(APPEND _lib_env "${ENV_PTSCOTCH_LIBDIR}")
+elseif(ENV_PTSCOTCH_DIR)
+    list(APPEND _lib_env "${ENV_PTSCOTCH_DIR}")
+    list(APPEND _lib_env "${ENV_PTSCOTCH_DIR}/lib")
 else()
-    if(APPLE)
-        string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+    if(WIN32)
+        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
     else()
-        string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+        if(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}")
     endif()
-    list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-    list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
 endif()
 list(REMOVE_DUPLICATES _lib_env)
 
@@ -283,12 +303,14 @@ if(PTSCOTCH_LIBRARIES)
     set(CMAKE_REQUIRED_LIBRARIES)
 endif(PTSCOTCH_LIBRARIES)
 
-if (PTSCOTCH_LIBRARIES AND NOT PTSCOTCH_DIR)
+if (PTSCOTCH_LIBRARIES)
     list(GET PTSCOTCH_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(PTSCOTCH_DIR "${not_cached_dir}" CACHE PATH "Installation directory of PTSCOTCH library" FORCE)
+        set(PTSCOTCH_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of PTSCOTCH library" FORCE)
+    else()
+        set(PTSCOTCH_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of PTSCOTCH library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindQUARK.cmake b/cmake_modules/morse/find/FindQUARK.cmake
index 507f00f71..119d00f8f 100644
--- a/cmake_modules/morse/find/FindQUARK.cmake
+++ b/cmake_modules/morse/find/FindQUARK.cmake
@@ -38,6 +38,8 @@
 #  QUARK_DIR              - Where to find the base directory of quark
 #  QUARK_INCDIR           - Where to find the header files
 #  QUARK_LIBDIR           - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: QUARK_DIR, QUARK_INCDIR, QUARK_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -100,17 +102,28 @@ endif()
 # Add system include paths to search include
 # ------------------------------------------
 unset(_inc_env)
-if(WIN32)
-    string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+set(ENV_QUARK_DIR "$ENV{QUARK_DIR}")
+set(ENV_QUARK_INCDIR "$ENV{QUARK_INCDIR}")
+if(ENV_QUARK_INCDIR)
+    list(APPEND _inc_env "${ENV_QUARK_INCDIR}")
+elseif(ENV_QUARK_DIR)
+    list(APPEND _inc_env "${ENV_QUARK_DIR}")
+    list(APPEND _inc_env "${ENV_QUARK_DIR}/include")
+    list(APPEND _inc_env "${ENV_QUARK_DIR}/include/quark")
+    list(APPEND _inc_env "${ENV_QUARK_DIR}/include/plasma")
 else()
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
+    if(WIN32)
+        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    else()
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+    endif()
 endif()
 list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
 list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -131,7 +144,7 @@ else()
         find_path(QUARK_quark.h_DIRS
           NAMES quark.h
           HINTS ${QUARK_DIR}
-          PATH_SUFFIXES include)
+          PATH_SUFFIXES "include" "include/quark" "include/plasma")
     else()
         set(QUARK_quark.h_DIRS "QUARK_quark.h_DIRS-NOTFOUND")
         find_path(QUARK_quark.h_DIRS
@@ -159,16 +172,24 @@ endif()
 # Add system library paths to search lib
 # --------------------------------------
 unset(_lib_env)
-if(WIN32)
-    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+set(ENV_QUARK_LIBDIR "$ENV{QUARK_LIBDIR}")
+if(ENV_QUARK_LIBDIR)
+    list(APPEND _lib_env "${ENV_QUARK_LIBDIR}")
+elseif(ENV_QUARK_DIR)
+    list(APPEND _lib_env "${ENV_QUARK_DIR}")
+    list(APPEND _lib_env "${ENV_QUARK_DIR}/lib")
 else()
-    if(APPLE)
-        string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+    if(WIN32)
+        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
     else()
-        string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+        if(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}")
     endif()
-    list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-    list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
 endif()
 list(REMOVE_DUPLICATES _lib_env)
 
@@ -283,12 +304,14 @@ if(QUARK_LIBRARIES)
     set(CMAKE_REQUIRED_LIBRARIES)
 endif(QUARK_LIBRARIES)
 
-if (QUARK_LIBRARIES AND NOT QUARK_DIR)
+if (QUARK_LIBRARIES)
     list(GET QUARK_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(QUARK_DIR "${not_cached_dir}" CACHE PATH "Installation directory of QUARK library" FORCE)
+        set(QUARK_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of QUARK library" FORCE)
+    else()
+        set(QUARK_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of QUARK library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindSCALAPACK.cmake b/cmake_modules/morse/find/FindSCALAPACK.cmake
index dcdcf427f..e5ab20fda 100644
--- a/cmake_modules/morse/find/FindSCALAPACK.cmake
+++ b/cmake_modules/morse/find/FindSCALAPACK.cmake
@@ -32,6 +32,8 @@
 #  SCALAPACK_DIR            - Where to find the base directory of scalapack
 #  SCALAPACK_INCDIR         - Where to find the header files
 #  SCALAPACK_LIBDIR         - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: SCALAPACK_DIR, SCALAPACK_INCDIR, SCALAPACK_LIBDIR
 # Note that if BLAS_DIR is set, it will also look for scalapack in it
 ### List of vendors (BLA_VENDOR) valid in this module
 ##  Intel(mkl), ACML, Apple, NAS, Generic
@@ -151,21 +153,40 @@ macro(Check_Scalapack_Libraries LIBRARIES _prefix _name _flags _list _blaslapack
 set(_libraries_work TRUE)
 set(${LIBRARIES})
 set(_combined_name)
+set(ENV_MKLROOT "$ENV{MKLROOT}")
+set(ENV_BLAS_DIR "$ENV{BLAS_DIR}")
+set(ENV_BLAS_LIBDIR "$ENV{BLAS_LIBDIR}")
+set(ENV_SCALAPACK_DIR "$ENV{SCALAPACK_DIR}")
+set(ENV_SCALAPACK_LIBDIR "$ENV{SCALAPACK_LIBDIR}")
 if (NOT _libdir)
-  if (BLAS_DIR)
-    list(APPEND _libdir "${BLAS_DIR}")
-    list(APPEND _libdir "${BLAS_DIR}/lib")
-    if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
-        list(APPEND _libdir "${BLAS_DIR}/lib64")
-        list(APPEND _libdir "${BLAS_DIR}/lib/intel64")
-    else()
-        list(APPEND _libdir "${BLAS_DIR}/lib32")
-        list(APPEND _libdir "${BLAS_DIR}/lib/ia32")
-    endif()
-  elseif (BLAS_LIBDIR)
-    list(APPEND _libdir "${BLAS_LIBDIR}")
-  endif ()
-  if (SCALAPACK_DIR)
+  if (BLAS_LIBDIR)
+      list(APPEND _libdir "${BLAS_LIBDIR}")
+  elseif (BLAS_DIR)
+      list(APPEND _libdir "${BLAS_DIR}")
+      list(APPEND _libdir "${BLAS_DIR}/lib")
+      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+          list(APPEND _libdir "${BLAS_DIR}/lib64")
+          list(APPEND _libdir "${BLAS_DIR}/lib/intel64")
+      else()
+          list(APPEND _libdir "${BLAS_DIR}/lib32")
+          list(APPEND _libdir "${BLAS_DIR}/lib/ia32")
+      endif()
+  elseif(ENV_BLAS_LIBDIR)
+      list(APPEND _libdir "${ENV_BLAS_LIBDIR}")
+  elseif(ENV_BLAS_DIR)
+      list(APPEND _libdir "${ENV_BLAS_DIR}")
+      list(APPEND _libdir "${ENV_BLAS_DIR}/lib")
+      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+          list(APPEND _libdir "${ENV_BLAS_DIR}/lib64")
+          list(APPEND _libdir "${ENV_BLAS_DIR}/lib/intel64")
+      else()
+          list(APPEND _libdir "${ENV_BLAS_DIR}/lib32")
+          list(APPEND _libdir "${ENV_BLAS_DIR}/lib/ia32")
+      endif()
+  endif()
+  if (SCALAPACK_LIBDIR)
+    list(APPEND _libdir "${SCALAPACK_LIBDIR}")
+  elseif (SCALAPACK_DIR)
     list(APPEND _libdir "${SCALAPACK_DIR}")
     list(APPEND _libdir "${SCALAPACK_DIR}/lib")
     if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
@@ -175,9 +196,28 @@ if (NOT _libdir)
         list(APPEND _libdir "${SCALAPACK_DIR}/lib32")
         list(APPEND _libdir "${SCALAPACK_DIR}/lib/ia32")
     endif()
-  elseif (SCALAPACK_LIBDIR)
-    list(APPEND _libdir "${SCALAPACK_LIBDIR}")
+  elseif(ENV_SCALAPACK_LIBDIR)
+      list(APPEND _libdir "${ENV_SCALAPACK_LIBDIR}")
+  elseif(ENV_SCALAPACK_DIR)
+      list(APPEND _libdir "${ENV_SCALAPACK_DIR}")
+      list(APPEND _libdir "${ENV_SCALAPACK_DIR}/lib")
+      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+          list(APPEND _libdir "${ENV_SCALAPACK_DIR}/lib64")
+          list(APPEND _libdir "${ENV_SCALAPACK_DIR}/lib/intel64")
+      else()
+          list(APPEND _libdir "${ENV_SCALAPACK_DIR}/lib32")
+          list(APPEND _libdir "${ENV_SCALAPACK_DIR}/lib/ia32")
+      endif()
   else()
+    if (ENV_MKLROOT)
+        if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+            list(APPEND _libdir "${ENV_MKLROOT}/lib64")
+            list(APPEND _libdir "${ENV_MKLROOT}/lib/intel64")
+        else()
+            list(APPEND _libdir "${ENV_MKLROOT}/lib32")
+            list(APPEND _libdir "${ENV_MKLROOT}/lib/ia32")
+        endif()
+    endif()
     if (WIN32)
       string(REPLACE ":" ";" _libdir2 "$ENV{LIB}")
     elseif (APPLE)
@@ -448,11 +488,13 @@ endif(BLA_F95)
 
 set(CMAKE_FIND_LIBRARY_SUFFIXES ${_scalapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
 
-if (SCALAPACK_LIBRARIES AND NOT SCALAPACK_DIR)
+if (SCALAPACK_LIBRARIES)
     list(GET SCALAPACK_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
         string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
-        set(SCALAPACK_DIR "${not_cached_dir}" CACHE PATH "Installation directory of SCALAPACK library" FORCE)
+        set(SCALAPACK_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of SCALAPACK library" FORCE)
+    else()
+        set(SCALAPACK_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of SCALAPACK library" FORCE)
     endif()
 endif()
diff --git a/cmake_modules/morse/find/FindSCOTCH.cmake b/cmake_modules/morse/find/FindSCOTCH.cmake
index 0a5c2898f..6b00ae4cf 100644
--- a/cmake_modules/morse/find/FindSCOTCH.cmake
+++ b/cmake_modules/morse/find/FindSCOTCH.cmake
@@ -27,6 +27,8 @@
 #  SCOTCH_DIR             - Where to find the base directory of scotch
 #  SCOTCH_INCDIR          - Where to find the header files
 #  SCOTCH_LIBDIR          - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: SCOTCH_DIR, SCOTCH_INCDIR, SCOTCH_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -67,17 +69,27 @@ endif()
 # Add system include paths to search include
 # ------------------------------------------
 unset(_inc_env)
-if(WIN32)
-    string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+set(ENV_SCOTCH_DIR "$ENV{SCOTCH_DIR}")
+set(ENV_SCOTCH_INCDIR "$ENV{SCOTCH_INCDIR}")
+if(ENV_SCOTCH_INCDIR)
+    list(APPEND _inc_env "${ENV_SCOTCH_INCDIR}")
+elseif(ENV_SCOTCH_DIR)
+    list(APPEND _inc_env "${ENV_SCOTCH_DIR}")
+    list(APPEND _inc_env "${ENV_SCOTCH_DIR}/include")
+    list(APPEND _inc_env "${ENV_SCOTCH_DIR}/include/scotch")
 else()
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-    list(APPEND _inc_env "${_path_env}")
-    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-    list(APPEND _inc_env "${_path_env}")
+    if(WIN32)
+        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    else()
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+        list(APPEND _inc_env "${_path_env}")
+        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+        list(APPEND _inc_env "${_path_env}")
+    endif()
 endif()
 list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
 list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -98,7 +110,7 @@ else()
         find_path(SCOTCH_scotch.h_DIRS
           NAMES scotch.h
           HINTS ${SCOTCH_DIR}
-          PATH_SUFFIXES include)
+          PATH_SUFFIXES "include" "include/scotch")
     else()
         set(SCOTCH_scotch.h_DIRS "SCOTCH_scotch.h_DIRS-NOTFOUND")
         find_path(SCOTCH_scotch.h_DIRS
@@ -126,16 +138,24 @@ endif()
 # Add system library paths to search lib
 # --------------------------------------
 unset(_lib_env)
-if(WIN32)
-    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+set(ENV_SCOTCH_LIBDIR "$ENV{SCOTCH_LIBDIR}")
+if(ENV_SCOTCH_LIBDIR)
+    list(APPEND _lib_env "${ENV_SCOTCH_LIBDIR}")
+elseif(ENV_SCOTCH_DIR)
+    list(APPEND _lib_env "${ENV_SCOTCH_DIR}")
+    list(APPEND _lib_env "${ENV_SCOTCH_DIR}/lib")
 else()
-    if(APPLE)
-        string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+    if(WIN32)
+        string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
     else()
-        string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+        if(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}")
     endif()
-    list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-    list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
 endif()
 list(REMOVE_DUPLICATES _lib_env)
 
@@ -244,12 +264,14 @@ if(SCOTCH_LIBRARIES)
     set(CMAKE_REQUIRED_LIBRARIES)
 endif(SCOTCH_LIBRARIES)
 
-if (SCOTCH_LIBRARIES AND NOT SCOTCH_DIR)
+if (SCOTCH_LIBRARIES)
     list(GET SCOTCH_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(SCOTCH_DIR "${not_cached_dir}" CACHE PATH "Installation directory of SCOTCH library" FORCE)
+        set(SCOTCH_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of SCOTCH library" FORCE)
+    else()
+        set(SCOTCH_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of SCOTCH library" FORCE)
     endif()
 endif()
 
diff --git a/cmake_modules/morse/find/FindSTARPU.cmake b/cmake_modules/morse/find/FindSTARPU.cmake
index 7484dbe35..b1edf5ddc 100644
--- a/cmake_modules/morse/find/FindSTARPU.cmake
+++ b/cmake_modules/morse/find/FindSTARPU.cmake
@@ -46,7 +46,8 @@
 #  STARPU_DIR                    - Where to find the base directory of starpu
 #  STARPU_INCDIR                 - Where to find the header files
 #  STARPU_LIBDIR                 - Where to find the library files
-
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: STARPU_DIR, STARPU_INCDIR, STARPU_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -232,13 +233,18 @@ if(PKG_CONFIG_EXECUTABLE)
     set(STARPU_INCLUDE_DIRS_DEP "${STARPU_INCLUDE_DIRS}")
     set(STARPU_LIBRARY_DIRS_DEP "${STARPU_LIBRARY_DIRS}")
     set(STARPU_LIBRARIES_DEP "${STARPU_LIBRARIES}")
+    if (STARPU_SHM_FOUND)
+        set(STARPU_FOUND "TRUE")
+    else()
+        set(STARPU_FOUND "FALSE")
+    endif()
+    if (STARPU_LOOK_FOR_MPI AND NOT STARPU_MPI_FOUND)
+        set(STARPU_FOUND "FALSE")
+    endif()
 endif()
 
 
-if( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
-   (NOT STARPU_SHM_FOUND OR (NOT STARPU_MPI_FOUND AND STARPU_LOOK_FOR_MPI))
-   OR STARPU_DIR
-  )
+if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR (STARPU_DIR) )
 
     # Looking for include
     # -------------------
@@ -246,17 +252,30 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
     # Add system include paths to search include
     # ------------------------------------------
     unset(_inc_env)
-    if(WIN32)
-        string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+    set(ENV_STARPU_DIR "$ENV{STARPU_DIR}")
+    set(ENV_STARPU_INCDIR "$ENV{STARPU_INCDIR}")
+    if(ENV_STARPU_INCDIR)
+        list(APPEND _inc_env "${ENV_STARPU_INCDIR}")
+    elseif(ENV_STARPU_DIR)
+        list(APPEND _inc_env "${ENV_STARPU_DIR}")
+        list(APPEND _inc_env "${ENV_STARPU_DIR}/include")
+        list(APPEND _inc_env "${ENV_STARPU_DIR}/include/starpu/1.0")
+        list(APPEND _inc_env "${ENV_STARPU_DIR}/include/starpu/1.1")
+        list(APPEND _inc_env "${ENV_STARPU_DIR}/include/starpu/1.2")
+        list(APPEND _inc_env "${ENV_STARPU_DIR}/include/starpu/1.3")
     else()
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
-        list(APPEND _inc_env "${_path_env}")
-        string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
-        list(APPEND _inc_env "${_path_env}")
+        if(WIN32)
+            string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
+        else()
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
+            list(APPEND _inc_env "${_path_env}")
+            string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
+            list(APPEND _inc_env "${_path_env}")
+        endif()
     endif()
     list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
     list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
@@ -451,16 +470,24 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
         # Add system library paths to search lib
         # --------------------------------------
         unset(_lib_env)
-        if(WIN32)
-            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+        set(ENV_STARPU_LIBDIR "$ENV{STARPU_LIBDIR}")
+        if(ENV_STARPU_LIBDIR)
+            list(APPEND _lib_env "${ENV_STARPU_LIBDIR}")
+        elseif(ENV_STARPU_DIR)
+            list(APPEND _lib_env "${ENV_STARPU_DIR}")
+            list(APPEND _lib_env "${ENV_STARPU_DIR}/lib")
         else()
-            if(APPLE)
-                string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+            if(WIN32)
+                string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
             else()
-                string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+                if(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}")
             endif()
-            list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-            list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
         endif()
         list(REMOVE_DUPLICATES _lib_env)
 
@@ -513,29 +540,17 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
 
                 foreach(starpu_shm_lib ${STARPU_SHM_libs_to_find})
                     if(starpu_shm_lib STREQUAL starpu_lib)
-                        if (STARPU_SHM_LIBRARIES)
-                            list(APPEND STARPU_SHM_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
-                        else()
-                            set(STARPU_SHM_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
-                        endif()
+                        list(APPEND STARPU_SHM_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
                     endif()
                 endforeach()
                 if (STARPU_LOOK_FOR_MPI AND MPI_FOUND)
                     foreach(starpu_mpi_lib ${STARPU_MPI_libs_to_find})
                         if(starpu_mpi_lib STREQUAL starpu_lib)
-                            if (STARPU_MPI_LIBRARIES)
-                                list(APPEND STARPU_MPI_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
-                            else()
-                                set(STARPU_MPI_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
-                            endif()
+                            list(APPEND STARPU_MPI_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
                         endif()
                     endforeach()
                 endif ()
-                if (STARPU_LIBRARY_DIRS)
-                    list(APPEND STARPU_LIBRARY_DIRS "${${starpu_lib}_lib_path}")
-                else()
-                    set(STARPU_LIBRARY_DIRS "${${starpu_lib}_lib_path}")
-                endif()
+                list(APPEND STARPU_LIBRARY_DIRS "${${starpu_lib}_lib_path}")
 
             else (STARPU_${starpu_lib}_LIBRARY)
 
@@ -552,21 +567,13 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
                     # for any other lib, add NOTFOUND in the proper list of LIBRARIES
                     foreach(starpu_shm_lib ${STARPU_SHM_libs_to_find})
                         if(starpu_shm_lib STREQUAL starpu_lib)
-                            if (STARPU_SHM_LIBRARIES)
-                                list(APPEND STARPU_SHM_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
-                            else()
-                                set(STARPU_SHM_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
-                            endif()
+                            set(STARPU_SHM_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
                         endif()
                     endforeach()
                     if (STARPU_LOOK_FOR_MPI AND MPI_FOUND)
                         foreach(starpu_mpi_lib ${STARPU_MPI_libs_to_find})
                             if(starpu_mpi_lib STREQUAL starpu_lib)
-                                if (STARPU_MPI_LIBRARIES)
-                                    list(APPEND STARPU_MPI_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
-                                else()
-                                    set(STARPU_MPI_LIBRARIES "${STARPU_${starpu_lib}_LIBRARY}")
-                                endif()
+                                list(APPEND STARPU_MPI_LIBRARIES "${STARPU_${starpu_mpi_lib}_LIBRARY}")
                             endif()
                         endforeach()
                     endif ()
@@ -578,9 +585,9 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
 
         endforeach(starpu_lib ${STARPU_libs_to_find})
 
+        list(REMOVE_DUPLICATES STARPU_SHM_LIBRARIES)
+        list(REMOVE_DUPLICATES STARPU_MPI_LIBRARIES)
         if (STARPU_LIBRARY_DIRS)
-            list(REMOVE_DUPLICATES STARPU_SHM_LIBRARIES)
-            list(REMOVE_DUPLICATES STARPU_MPI_LIBRARIES)
             list(REMOVE_DUPLICATES STARPU_LIBRARY_DIRS)
         endif ()
 
@@ -597,12 +604,20 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
         endif()
     endif(STARPU_starpu_config.h_INCLUDE_DIRS)
 
-    if(STARPU_MPI_LIBRARIES)
+    foreach(lib ${STARPU_SHM_LIBRARIES})
+        if (NOT lib)
+            set(STARPU_SHM_LIBRARIES "STARPU_SHM_LIBRARIES-NOTFOUND")
+        endif()
+    endforeach()
+    foreach(lib ${STARPU_MPI_LIBRARIES})
+        if (NOT lib)
+            set(STARPU_MPI_LIBRARIES "STARPU_MPI_LIBRARIES-NOTFOUND")
+        endif()
+    endforeach()
+    if(STARPU_LOOK_FOR_MPI)
         set(STARPU_LIBRARIES "${STARPU_MPI_LIBRARIES}")
-    elseif(STARPU_SHM_LIBRARIES)
-        set(STARPU_LIBRARIES "${STARPU_SHM_LIBRARIES}")
     else()
-        set(STARPU_LIBRARIES "STARPU_LIBRARIES-NOTFOUND")
+        set(STARPU_LIBRARIES "${STARPU_SHM_LIBRARIES}")
     endif()
 
     # check a function to validate the find
@@ -773,12 +788,9 @@ if( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
         set(CMAKE_REQUIRED_LIBRARIES)
     endif(STARPU_LIBRARIES)
 
-endif( (NOT PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR
-       (NOT STARPU_SHM_FOUND OR (NOT STARPU_MPI_FOUND AND STARPU_LOOK_FOR_MPI))
-       OR STARPU_DIR
-     )
+endif( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT STARPU_FOUND) OR (STARPU_DIR) )
 
-if (STARPU_LIBRARIES AND NOT STARPU_DIR)
+if (STARPU_LIBRARIES)
     if (STARPU_LIBRARY_DIRS)
         foreach(dir ${STARPU_LIBRARY_DIRS})
             if ("${dir}" MATCHES "starpu")
@@ -791,7 +803,9 @@ if (STARPU_LIBRARIES AND NOT STARPU_DIR)
     endif()
     if (${first_lib_path} MATCHES "/lib(32|64)?$")
         string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
-        set(STARPU_DIR "${not_cached_dir}" CACHE PATH "Installation directory of STARPU library" FORCE)
+        set(STARPU_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of STARPU library" FORCE)
+    else()
+        set(STARPU_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of STARPU library" FORCE)
     endif()
 endif()
 
@@ -801,7 +815,7 @@ include(FindPackageHandleStandardArgs)
 if(NOT STARPU_FIND_QUIETLY)
     if(STARPU_SHM_FOUND)
         message(STATUS "StarPU has been found.")
-        if(STARPU_MPI_FOUND)
+        if(STARPU_MPI_LIBRARIES)
             message(STATUS "The mpi version of StarPU has been found so that we manage"
                            "two lists of libs, one sequential and one parallel (see"
                            "STARPU_SHM_LIBRARIES and STARPU_MPI_LIBRARIES).")
@@ -818,7 +832,7 @@ else()
                                       STARPU_WORKS)
 endif()
 if(STARPU_LOOK_FOR_MPI)
-    if(NOT STARPU_FIND_QUIETLY)
+    if(STARPU_MPI_LIBRARIES AND NOT STARPU_FIND_QUIETLY)
         message(STATUS "StarPU mpi libraries stored in STARPU_MPI_LIBRARIES")
     endif()
     if (PKG_CONFIG_EXECUTABLE AND STARPU_MPI_FOUND)
diff --git a/cmake_modules/morse/find/FindTMG.cmake b/cmake_modules/morse/find/FindTMG.cmake
index fff4cccde..24e8cc9d6 100644
--- a/cmake_modules/morse/find/FindTMG.cmake
+++ b/cmake_modules/morse/find/FindTMG.cmake
@@ -30,6 +30,8 @@
 #  TMG_DIR              - Where to find the base directory of tmg
 #  TMG_INCDIR           - Where to find the header files
 #  TMG_LIBDIR           - Where to find the library files
+# The module can also look for the following environment variables if paths
+# are not given as cmake variable: TMG_DIR, TMG_INCDIR, TMG_LIBDIR
 
 #=============================================================================
 # Copyright 2012-2013 Inria
@@ -127,16 +129,25 @@ if (LAPACK_FOUND)
         # Add system library paths to search lib
         # --------------------------------------
         unset(_lib_env)
-        if(WIN32)
-            string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
+        set(ENV_TMG_DIR "$ENV{TMG_DIR}")
+        set(ENV_TMG_LIBDIR "$ENV{TMG_LIBDIR}")
+        if(ENV_TMG_LIBDIR)
+            list(APPEND _lib_env "${ENV_TMG_LIBDIR}")
+        elseif(ENV_TMG_DIR)
+            list(APPEND _lib_env "${ENV_TMG_DIR}")
+            list(APPEND _lib_env "${ENV_TMG_DIR}/lib")
         else()
-            if(APPLE)
-                string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
+            if(WIN32)
+                string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
             else()
-                string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
+                if(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}")
             endif()
-            list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
-            list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
         endif()
         list(REMOVE_DUPLICATES _lib_env)
 
@@ -274,12 +285,14 @@ else()
 
 endif()
 
-if (TMG_LIBRARIES AND NOT TMG_DIR)
+if (TMG_LIBRARIES)
     list(GET TMG_LIBRARIES 0 first_lib)
     get_filename_component(first_lib_path "${first_lib}" PATH)
     if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
         string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
-        set(TMG_DIR "${not_cached_dir}" CACHE PATH "Installation directory of TMG library" FORCE)
+        set(TMG_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of TMG library" FORCE)
+    else()
+        set(TMG_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of TMG library" FORCE)
     endif()
 endif()
 
-- 
GitLab