FindSUITESPARSE.cmake 14.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
###
#
# @copyright (c) 2009-2014 The University of Tennessee and The University
#                          of Tennessee Research Foundation.
#                          All rights reserved.
# @copyright (c) 2012-2016 Inria. All rights reserved.
# @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
#
###
#
# - Find SUITESPARSE include dirs and libraries
# Use this module by invoking find_package with the form:
#  find_package(SUITESPARSE
#               [REQUIRED] # Fail with error if suitesparse is not found
#              )
#
#  SUITESPARSE depends on the following libraries:
#   - BLAS
#   - LAPACK
#   - METIS
##
# This module finds headers and suitesparse library.
# Results are reported in variables:
#  SUITESPARSE_FOUND            - True if headers and requested libraries were found
#  SUITESPARSE_LINKER_FLAGS     - list of required linker flags (excluding -l and -L)
#  SUITESPARSE_INCLUDE_DIRS     - suitesparse include directories
#  SUITESPARSE_LIBRARY_DIRS     - Link directories for suitesparse libraries
#  SUITESPARSE_LIBRARIES        - suitesparse libraries
#  SUITESPARSE_INCLUDE_DIRS_DEP - suitesparse + dependencies include directories
#  SUITESPARSE_LIBRARY_DIRS_DEP - suitesparse + dependencies link directories
#  SUITESPARSE_LIBRARIES_DEP    - suitesparse libraries + dependencies
#
# The user can give specific paths where to find the libraries adding cmake
# options at configure (ex: cmake path/to/project -DSUITESPARSE_DIR=path/to/suitesparse):
#  SUITESPARSE_DIR              - Where to find the base directory of suitesparse
# The module can also look for the following environment variables if paths
# are not given as cmake variable: SUITESPARSE_DIR

#=============================================================================
# Copyright 2012-2016 Inria
# Copyright 2012-2013 Emmanuel Agullo
# Copyright 2012-2013 Mathieu Faverge
# Copyright 2012      Cedric Castagnede
# Copyright 2016      Florent Pruvost
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file MORSE-Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of Morse, substitute the full
#  License text for the above reference.)


if (NOT SUITESPARSE_FOUND)
PRUVOST Florent's avatar
PRUVOST Florent committed
58 59 60 61
  set(SUITESPARSE_DIR "" CACHE PATH "Installation directory of SUITESPARSE library")
  if (NOT SUITESPARSE_FIND_QUIETLY)
    message(STATUS "A cache variable, namely SUITESPARSE_DIR, has been set to specify the install directory of SUITESPARSE")
  endif()
62 63 64
endif()

if (NOT SUITESPARSE_FIND_QUIETLY)
PRUVOST Florent's avatar
PRUVOST Florent committed
65
  message(STATUS "Looking for SUITESPARSE")
66 67 68
endif()

if (NOT SUITESPARSE_FIND_QUIETLY)
PRUVOST Florent's avatar
PRUVOST Florent committed
69
  message(STATUS "Looking for SUITESPARSE - PkgConfig not used")
70 71 72 73 74 75
endif()

# Required dependencies
# ---------------------

if (NOT SUITESPARSE_FIND_QUIETLY)
PRUVOST Florent's avatar
PRUVOST Florent committed
76
  message(STATUS "Looking for SUITESPARSE - Try to detect metis")
77 78
endif()
if (NOT METIS_FOUND)
PRUVOST Florent's avatar
PRUVOST Florent committed
79 80 81 82 83
  if (SUITESPARSE_FIND_REQUIRED)
    find_package(METIS REQUIRED)
  else()
    find_package(METIS)
  endif()
84 85 86 87 88
endif()

# SUITESPARSE depends on BLAS
#----------------------------
if (NOT SUITESPARSE_FIND_QUIETLY)
PRUVOST Florent's avatar
PRUVOST Florent committed
89
  message(STATUS "Looking for SUITESPARSE - Try to detect BLAS")
90 91
endif()
if (NOT BLASEXT_FOUND)
PRUVOST Florent's avatar
PRUVOST Florent committed
92 93 94 95 96
  if (SUITESPARSE_FIND_REQUIRED)
    find_package(BLASEXT REQUIRED)
  else()
    find_package(BLASEXT)
  endif()
97 98 99 100 101
endif()

# SUITESPARSE depends on LAPACK
#------------------------------
if (NOT SUITESPARSE_FIND_QUIETLY)
PRUVOST Florent's avatar
PRUVOST Florent committed
102
  message(STATUS "Looking for SUITESPARSE - Try to detect LAPACK")
103 104
endif()
if (NOT LAPACKEXT_FOUND)
PRUVOST Florent's avatar
PRUVOST Florent committed
105 106 107 108 109
  if (SUITESPARSE_FIND_REQUIRED)
    find_package(LAPACKEXT REQUIRED)
  else()
    find_package(LAPACKEXT)
  endif()
110 111 112 113 114 115 116 117 118 119 120
endif()

# Looking for SUITESPARSE
# -----------------

# Add system include paths to search include
# ------------------------------------------
unset(_inc_env)
set(ENV_SUITESPARSE_DIR "$ENV{SUITESPARSE_DIR}")
set(ENV_SUITESPARSE_INCDIR "$ENV{SUITESPARSE_INCDIR}")
if(ENV_SUITESPARSE_INCDIR)
PRUVOST Florent's avatar
PRUVOST Florent committed
121
  list(APPEND _inc_env "${ENV_SUITESPARSE_INCDIR}")
122
elseif(ENV_SUITESPARSE_DIR)
PRUVOST Florent's avatar
PRUVOST Florent committed
123 124 125
  list(APPEND _inc_env "${ENV_SUITESPARSE_DIR}")
  list(APPEND _inc_env "${ENV_SUITESPARSE_DIR}/include")
  list(APPEND _inc_env "${ENV_SUITESPARSE_DIR}/include/suitesparse")
126
else()
PRUVOST Florent's avatar
PRUVOST Florent committed
127 128 129 130 131 132 133 134 135 136 137 138
  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()
139 140 141 142 143 144 145 146 147 148
endif()
list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
list(REMOVE_DUPLICATES _inc_env)

# Add system library paths to search lib
# --------------------------------------
unset(_lib_env)
set(ENV_SUITESPARSE_LIBDIR "$ENV{SUITESPARSE_LIBDIR}")
if(ENV_SUITESPARSE_LIBDIR)
PRUVOST Florent's avatar
PRUVOST Florent committed
149
  list(APPEND _lib_env "${ENV_SUITESPARSE_LIBDIR}")
150
elseif(ENV_SUITESPARSE_DIR)
PRUVOST Florent's avatar
PRUVOST Florent committed
151 152
  list(APPEND _lib_env "${ENV_SUITESPARSE_DIR}")
  list(APPEND _lib_env "${ENV_SUITESPARSE_DIR}/lib")
153
else()
PRUVOST Florent's avatar
PRUVOST Florent committed
154 155 156 157 158
  if(WIN32)
    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
  else()
    if(APPLE)
      string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
159
    else()
PRUVOST Florent's avatar
PRUVOST Florent committed
160
      string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
161
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
162 163 164
    list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
    list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
  endif()
165 166 167 168 169 170 171 172 173 174
endif()
list(REMOVE_DUPLICATES _lib_env)

# Looking for include
# -------------------

# Try to find the suitesparse header in the given path
# ----------------------------------------------

# create list of headers to find
PRUVOST Florent's avatar
PRUVOST Florent committed
175 176 177 178 179 180 181 182
list(APPEND SUITESPARSE_hdrs_to_find
  "amd.h"
  "btf.h"
  "ccolamd.h"
  "colamd.h"
  "cs.h"
  "klu.h"
  "ldl.h"
183
  #"RBio.h"
PRUVOST Florent's avatar
PRUVOST Florent committed
184 185 186
  "spqr.hpp"
  "SuiteSparse_config.h"
  "umfpack.h")
187 188 189

# call cmake macro to find the header path
if(SUITESPARSE_INCDIR)
PRUVOST Florent's avatar
PRUVOST Florent committed
190 191 192 193 194 195 196 197 198 199
  foreach(suitesparse_hdr ${SUITESPARSE_hdrs_to_find})
    set(SUITESPARSE_${suitesparse_hdr}_DIRS "SUITESPARSE_${suitesparse_hdr}_INCLUDE_DIRS-NOTFOUND")
    find_path(SUITESPARSE_${suitesparse_hdr}_DIRS
      NAMES ${suitesparse_hdr}
      HINTS ${SUITESPARSE_INCDIR})
    mark_as_advanced(SUITESPARSE_${suitesparse_hdr}_DIRS)
  endforeach()
else()
  if(SUITESPARSE_DIR)
    set(SUITESPARSE_${suitesparse_hdr}_DIRS "SUITESPARSE_${suitesparse_hdr}_INCLUDE_DIRS-NOTFOUND")
200
    foreach(suitesparse_hdr ${SUITESPARSE_hdrs_to_find})
PRUVOST Florent's avatar
PRUVOST Florent committed
201
      find_path(SUITESPARSE_${suitesparse_hdr}_DIRS
202 203 204
        NAMES ${suitesparse_hdr}
        HINTS ${SUITESPARSE_DIR}
        PATH_SUFFIXES "include")
PRUVOST Florent's avatar
PRUVOST Florent committed
205
      mark_as_advanced(SUITESPARSE_${suitesparse_hdr}_DIRS)
206
    endforeach()
PRUVOST Florent's avatar
PRUVOST Florent committed
207 208 209 210
  else()
    foreach(suitesparse_hdr ${SUITESPARSE_hdrs_to_find})
      set(SUITESPARSE_${suitesparse_hdr}_DIRS "SUITESPARSE_${suitesparse_hdr}_INCLUDE_DIRS-NOTFOUND")
      find_path(SUITESPARSE_${suitesparse_hdr}_DIRS
211 212
        NAMES ${suitesparse_hdr}
        HINTS ${_inc_env} ${_inc_env}/suitesparse)
PRUVOST Florent's avatar
PRUVOST Florent committed
213 214 215
      mark_as_advanced(SUITESPARSE_${suitesparse_hdr}_DIRS)
    endforeach()
  endif()
216 217 218 219 220 221
endif()

# If found, add path to cmake variable
# ------------------------------------
# detect which precisions are available
foreach(suitesparse_hdr ${SUITESPARSE_hdrs_to_find})
PRUVOST Florent's avatar
PRUVOST Florent committed
222 223 224 225 226 227
  if (SUITESPARSE_${suitesparse_hdr}_DIRS)
    list(APPEND SUITESPARSE_INCLUDE_DIRS "${SUITESPARSE_${suitesparse_hdr}_DIRS}")
  else ()
    # SuiteSparse_config.h is the minimum to find, consider others as optional?
    if (NOT SUITESPARSE_${SuiteSparse_config.h}_DIRS )
      set(SUITESPARSE_INCLUDE_DIRS "SUITESPARSE_INCLUDE_DIRS-NOTFOUND")
228
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
229 230 231 232
    if (NOT SUITESPARSE_FIND_QUIETLY)
      message(STATUS "Looking for suitesparse -- ${suitesparse_hdr} not found")
    endif()
  endif()
233 234 235 236 237 238 239 240
endforeach()


# Looking for lib
# ---------------

# create list of libs to find
set(SUITESPARSE_libs_to_find
PRUVOST Florent's avatar
PRUVOST Florent committed
241 242 243 244 245 246 247 248 249 250 251
  "cholmod"
  "cxsparse"
  "klu"
  "ldl"
  "spqr"
  "umfpack"
  "amd"
  "btf"
  "camd"
  "ccolamd"
  "colamd"
252
  #"rbio"
PRUVOST Florent's avatar
PRUVOST Florent committed
253 254
  "suitesparseconfig"
  )
255 256 257

# call cmake macro to find the lib path
if(SUITESPARSE_LIBDIR)
PRUVOST Florent's avatar
PRUVOST Florent committed
258 259 260 261 262 263 264 265 266
  foreach(suitesparse_lib ${SUITESPARSE_libs_to_find})
    set(SUITESPARSE_${suitesparse_lib}_LIBRARY "SUITESPARSE_${suitesparse_lib}_LIBRARY-NOTFOUND")
    find_library(SUITESPARSE_${suitesparse_lib}_LIBRARY
      NAMES ${suitesparse_lib}
      HINTS ${SUITESPARSE_LIBDIR})
    mark_as_advanced(SUITESPARSE_${suitesparse_lib}_LIBRARY)
  endforeach()
else()
  if(SUITESPARSE_DIR)
267
    foreach(suitesparse_lib ${SUITESPARSE_libs_to_find})
PRUVOST Florent's avatar
PRUVOST Florent committed
268 269
      set(SUITESPARSE_${suitesparse_lib}_LIBRARY "SUITESPARSE_${suitesparse_lib}_LIBRARY-NOTFOUND")
      find_library(SUITESPARSE_${suitesparse_lib}_LIBRARY
270 271 272
        NAMES ${suitesparse_lib}
        HINTS ${SUITESPARSE_DIR}
        PATH_SUFFIXES lib lib32 lib64)
PRUVOST Florent's avatar
PRUVOST Florent committed
273
      mark_as_advanced(SUITESPARSE_${suitesparse_lib}_LIBRARY)
274
    endforeach()
PRUVOST Florent's avatar
PRUVOST Florent committed
275 276 277 278
  else()
    foreach(suitesparse_lib ${SUITESPARSE_libs_to_find})
      set(SUITESPARSE_${suitesparse_lib}_LIBRARY "SUITESPARSE_${suitesparse_lib}_LIBRARY-NOTFOUND")
      find_library(SUITESPARSE_${suitesparse_lib}_LIBRARY
279 280
        NAMES ${suitesparse_lib}
        HINTS ${_lib_env})
PRUVOST Florent's avatar
PRUVOST Florent committed
281 282 283
      mark_as_advanced(SUITESPARSE_${suitesparse_lib}_LIBRARY)
    endforeach()
  endif()
284 285 286 287 288 289 290
endif()

# If found, add path to cmake variable
# ------------------------------------
set(SUITESPARSE_LIBRARIES "")
set(SUITESPARSE_LIBRARY_DIRS "")
foreach(suitesparse_lib ${SUITESPARSE_libs_to_find})
PRUVOST Florent's avatar
PRUVOST Florent committed
291 292 293 294 295 296 297 298
  if (SUITESPARSE_${suitesparse_lib}_LIBRARY)
    list(APPEND SUITESPARSE_LIBRARIES "${SUITESPARSE_${suitesparse_lib}_LIBRARY}")
    get_filename_component(${suitesparse_lib}_lib_path ${SUITESPARSE_${suitesparse_lib}_LIBRARY} PATH)
    list(APPEND SUITESPARSE_LIBRARY_DIRS "${${suitesparse_lib}_lib_path}")
  else ()
    # libsuitesparseconfig is the minimum to find, consider others as optional?
    if (NOT SUITESPARSE_suitesparseconfig_LIBRARY)
      list(APPEND SUITESPARSE_LIBRARIES "${SUITESPARSE_LIBRARIES-NOTFOUND}")
299
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
300 301 302 303
    if(NOT SUITESPARSE_FIND_QUIETLY)
      message(STATUS "Looking for suitesparse -- lib${suitesparse_lib}.a/so not found")
    endif()
  endif()
304 305 306 307 308 309 310
endforeach()
list(REMOVE_DUPLICATES SUITESPARSE_LIBRARY_DIRS)
list(REMOVE_DUPLICATES SUITESPARSE_INCLUDE_DIRS)

# check a function to validate the find
if(SUITESPARSE_LIBRARIES)

PRUVOST Florent's avatar
PRUVOST Florent committed
311 312 313 314
  set(REQUIRED_LDFLAGS)
  set(REQUIRED_INCDIRS)
  set(REQUIRED_LIBDIRS)
  set(REQUIRED_LIBS)
315

PRUVOST Florent's avatar
PRUVOST Florent committed
316 317 318 319 320 321 322 323 324 325 326 327 328 329
  # SUITESPARSE
  if (SUITESPARSE_INCLUDE_DIRS)
    set(REQUIRED_INCDIRS "${SUITESPARSE_INCLUDE_DIRS}")
  endif()
  foreach(libdir ${SUITESPARSE_LIBRARY_DIRS})
    if (libdir)
      list(APPEND REQUIRED_LIBDIRS "${libdir}")
    endif()
  endforeach()
  set(REQUIRED_LIBS "${SUITESPARSE_LIBRARIES}")
  # METIS
  if (METIS_FOUND)
    if (METIS_INCLUDE_DIRS)
      list(APPEND REQUIRED_INCDIRS "${METIS_INCLUDE_DIRS}")
330
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
331 332
    foreach(libdir ${METIS_LIBRARY_DIRS})
      if (libdir)
333
        list(APPEND REQUIRED_LIBDIRS "${libdir}")
PRUVOST Florent's avatar
PRUVOST Florent committed
334
      endif()
335
    endforeach()
PRUVOST Florent's avatar
PRUVOST Florent committed
336 337 338 339 340 341
    list(APPEND REQUIRED_LIBS "${METIS_LIBRARIES}")
  endif()
  # LAPACK
  if (LAPACK_FOUND)
    if (LAPACK_INCLUDE_DIRS)
      list(APPEND REQUIRED_INCDIRS "${LAPACK_INCLUDE_DIRS}")
342
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
343 344
    foreach(libdir ${LAPACK_LIBRARY_DIRS})
      if (libdir)
345
        list(APPEND REQUIRED_LIBDIRS "${libdir}")
PRUVOST Florent's avatar
PRUVOST Florent committed
346 347 348 349 350
      endif()
    endforeach()
    list(APPEND REQUIRED_LIBS "${LAPACK_LIBRARIES}")
    if (LAPACK_LINKER_FLAGS)
      list(APPEND REQUIRED_LDFLAGS "${LAPACK_LINKER_FLAGS}")
351
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
352 353 354 355 356
  endif()
  # BLAS
  if (BLAS_FOUND)
    if (BLAS_INCLUDE_DIRS)
      list(APPEND REQUIRED_INCDIRS "${BLAS_INCLUDE_DIRS}")
357
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
358 359
    foreach(libdir ${BLAS_LIBRARY_DIRS})
      if (libdir)
360
        list(APPEND REQUIRED_LIBDIRS "${libdir}")
PRUVOST Florent's avatar
PRUVOST Florent committed
361 362 363 364 365
      endif()
    endforeach()
    list(APPEND REQUIRED_LIBS "${BLAS_LIBRARIES}")
    if (BLAS_LINKER_FLAGS)
      list(APPEND REQUIRED_LDFLAGS "${BLAS_LINKER_FLAGS}")
366
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
367 368 369 370 371 372 373 374
  endif()
  # others
  set(M_LIBRARY "M_LIBRARY-NOTFOUND")
  find_library(M_LIBRARY NAMES m)
  mark_as_advanced(M_LIBRARY)
  if(M_LIBRARY)
    list(APPEND REQUIRED_LIBS "-lm")
  endif()
375

PRUVOST Florent's avatar
PRUVOST Florent committed
376 377 378 379 380 381 382 383 384
  # 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}")
  string(REGEX REPLACE "^ -" "-" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
385

PRUVOST Florent's avatar
PRUVOST Florent committed
386 387 388 389 390
  # test link
  include(CheckFortranFunctionExists)
  unset(SUITESPARSE_WORKS CACHE)
  check_function_exists(SuiteSparse_start SUITESPARSE_WORKS)
  mark_as_advanced(SUITESPARSE_WORKS)
391

PRUVOST Florent's avatar
PRUVOST Florent committed
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407
  if(SUITESPARSE_WORKS)
    # save link with dependencies
    set(SUITESPARSE_LIBRARIES_DEP "${REQUIRED_LIBS}")
    set(SUITESPARSE_LIBRARY_DIRS_DEP "${REQUIRED_LIBDIRS}")
    set(SUITESPARSE_INCLUDE_DIRS_DEP "${REQUIRED_INCDIRS}")
    set(SUITESPARSE_LINKER_FLAGS "${REQUIRED_LDFLAGS}")
    list(REMOVE_DUPLICATES SUITESPARSE_LIBRARY_DIRS_DEP)
    list(REMOVE_DUPLICATES SUITESPARSE_INCLUDE_DIRS_DEP)
    list(REMOVE_DUPLICATES SUITESPARSE_LINKER_FLAGS)
  else()
    if(NOT SUITESPARSE_FIND_QUIETLY)
      message(STATUS "Looking for SUITESPARSE : test of symbol SuiteSparse_start fails")
      message(STATUS "CMAKE_REQUIRED_LIBRARIES: ${CMAKE_REQUIRED_LIBRARIES}")
      message(STATUS "CMAKE_REQUIRED_INCLUDES: ${CMAKE_REQUIRED_INCLUDES}")
      message(STATUS "Check in CMakeFiles/CMakeError.log to figure out why it fails")
      message(STATUS "Maybe SUITESPARSE is linked with specific libraries. ")
408
    endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
409 410 411 412
  endif()
  set(CMAKE_REQUIRED_INCLUDES)
  set(CMAKE_REQUIRED_FLAGS)
  set(CMAKE_REQUIRED_LIBRARIES)
413 414 415
endif(SUITESPARSE_LIBRARIES)

if (SUITESPARSE_LIBRARIES)
PRUVOST Florent's avatar
PRUVOST Florent committed
416 417
  list(GET SUITESPARSE_LIBRARIES 0 first_lib)
  get_filename_component(first_lib_path "${first_lib}" PATH)
418 419 420
  if (NOT SUITESPARSE_LIBRARY_DIRS)
    set(SUITESPARSE_LIBRARY_DIRS "${first_lib_path}")
  endif()
PRUVOST Florent's avatar
PRUVOST Florent committed
421 422 423 424 425 426
  if (${first_lib_path} MATCHES "/lib(32|64)?$")
    string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
    set(SUITESPARSE_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of SUITESPARSE library" FORCE)
  else()
    set(SUITESPARSE_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of SUITESPARSE library" FORCE)
  endif()
427 428 429 430 431 432 433 434
endif()
mark_as_advanced(SUITESPARSE_DIR)
mark_as_advanced(SUITESPARSE_DIR_FOUND)

# check that SUITESPARSE has been found
# -------------------------------
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SUITESPARSE DEFAULT_MSG
PRUVOST Florent's avatar
PRUVOST Florent committed
435 436
  SUITESPARSE_LIBRARIES
  SUITESPARSE_WORKS)