diff --git a/Documentation/doc/Documentation/Third_party.txt b/Documentation/doc/Documentation/Third_party.txt
index e47e66e8f6d..002e6934934 100644
--- a/Documentation/doc/Documentation/Third_party.txt
+++ b/Documentation/doc/Documentation/Third_party.txt
@@ -264,6 +264,17 @@ executables should be linked with the CMake imported target
The \opencv web site is `https://opencv.org/`.
+\subsection thirdpartySuiteSparse SuiteSparse
+Version 7.10.1 or later
+
+\suitesparse is a set of sparse-matrix-related packages written or co-authored by Tim Davis, available at https://github.com/DrTimothyAldenDavis/SuiteSparse.
+
+\suitesparse is used by the Orbifold Tutte Embedding and ARAP parametrization, i.e., in the surface parametrization package.
+
+\note SuiteSparse on Windows can easily be installed by \code
+vcpkg install suitesparse
+\endcode and it will be found automatically. When installed manually it is helpful to add the installation folder to the environment variable CMAKE_PREFIX_PATH for CMake to find the SuiteSparse libraries.
+
\subsection thirdpartyMETIS METIS
Version 5.1 or later
diff --git a/Documentation/doc/resources/1.10.0/BaseDoxyfile.in b/Documentation/doc/resources/1.10.0/BaseDoxyfile.in
index 0cc706e0f5d..787d38ca6a6 100644
--- a/Documentation/doc/resources/1.10.0/BaseDoxyfile.in
+++ b/Documentation/doc/resources/1.10.0/BaseDoxyfile.in
@@ -101,6 +101,7 @@ ALIASES = "cgal=%CGAL" \
"opencv=OpenCV" \
"tensorflow=TensorFlow" \
"metis=METIS" \
+ "suitesparse=SuiteSparse" \
"zlib=zlib" \
"ceres=Ceres" \
"glpk=GLPK" \
diff --git a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in
index 4bd2e290d30..66e25185ee8 100644
--- a/Documentation/doc/resources/1.8.13/BaseDoxyfile.in
+++ b/Documentation/doc/resources/1.8.13/BaseDoxyfile.in
@@ -92,6 +92,7 @@ ALIASES = "cgal=%CGAL" \
"opencv=OpenCV" \
"tensorflow=TensorFlow" \
"metis=METIS" \
+ "suitesparse=SuiteSparse" \
"zlib=zlib" \
"ceres=Ceres" \
"glpk=GLPK" \
diff --git a/Documentation/doc/resources/1.9.6/BaseDoxyfile.in b/Documentation/doc/resources/1.9.6/BaseDoxyfile.in
index 8570de39718..92c6dd50a0e 100644
--- a/Documentation/doc/resources/1.9.6/BaseDoxyfile.in
+++ b/Documentation/doc/resources/1.9.6/BaseDoxyfile.in
@@ -101,6 +101,7 @@ ALIASES = "cgal=%CGAL" \
"opencv=OpenCV" \
"tensorflow=TensorFlow" \
"metis=METIS" \
+ "suitesparse=SuiteSparse" \
"zlib=zlib" \
"ceres=Ceres" \
"glpk=GLPK" \
diff --git a/Installation/cmake/modules/FindSuiteSparse.cmake b/Installation/cmake/modules/FindSuiteSparse.cmake
deleted file mode 100644
index 1782083e294..00000000000
--- a/Installation/cmake/modules/FindSuiteSparse.cmake
+++ /dev/null
@@ -1,466 +0,0 @@
-## CMake file to locate SuiteSparse and its useful composite projects
-## The first development of this file was done by Windows users who
-## used:
-## https://github.com/jlblancoc/suitesparse-metis-for-windows
-## Anyway, it could work also on linux (tested on fedora 17 when you installed suitesparse from yum)
-##
-##
-## Inputs variables this file can process (variable must be given before find_package(SUITESPARES ...) command) :
-## * SuiteSparse_VERBOSE Default to OFF
-## * SuiteSparse_USE_LAPACK_BLAS Default to OFF. If ON append to SuiteSparse_LIBRARIES the blas and lapack library
-## Note: SuiteSparse lib usually requires linking to a blas and lapack library.
-##
-##
-## Help variables this file handle internally :
-## * SuiteSparse_SEARCH_LIB_POSTFIX Is set in cache (as advanced) to look into the right lib/lib64 dir for libraries (user can change)
-##
-##
-## Variables this file provide :
-## * SuiteSparse_FOUND True if SuiteSparse given COMPONENTS include and libraries were found
-## * SuiteSparse_INCLUDE_DIRS Paths containing SuiteSparse needed headers (depend on which COMPONENTS you gave)
-## * SuiteSparse_LIBRARIES Absolute paths of SuiteSparse libs found (depend on which COMPONENTS you gave)
-## If SuiteSparse_USE_LAPACK_BLAS is set to ON :
-## * SuiteSparse_LAPACK_BLAS_LIBRARIES Which contain the libblas and liblapack libraries
-## On windows:
-## * SuiteSparse_LAPACK_BLAS_DLL Which contain all required binaries for use libblas and liblapack
-##
-##
-## Detailed variables this file provide :
-## * SuiteSparse__FOUND True if the given component to look for is found (INCLUDE DIR and LIBRARY)
-## * SuiteSparse__INCLUDE_DIR The path directory where all component header files can be found
-## * SuiteSparse__LIBRARY The file path to the component library
-## Note: If a component is not found, a SuiteSparse__DIR cache variable is set to allow user set the search directory.
-##
-##
-## Possible components to find are (maybe some others can be available):
-## * AMD
-## * CAMD
-## * COLAMD
-## * CCOLAMD
-## * CHOLMOD : this lib need all previous one. According to how it was build (a single static lib or a full dynamic one), you should looking for its dependencies.
-## * metis (opt): may not be found (depend if suitesparse was build with metis or not) => required by CHOLMOD (optional)
-##
-##
-## How to use this file :
-## (opt) set(SuiteSparse_VERBOSE ON)
-## (opt) set(SuiteSparse_USE_LAPACK_BLAS ON)
-## ( 1 ) find_package(SuiteSparse) ## metis is not search by default because it's not a part of suitesparse (suitesparse can be built without metis)
-## ( 2 ) find_package(SuiteSparse COMPONENTS metis CHOLMOD) ## be careful, components are case sensitive
-## ( 3 ) find_package(SuiteSparse COMPONENTS metis suitesparse) ## valid on windows (linux have no suitesparse library)
-## ( 4 ) find_package(SuiteSparse COMPONENTS suitesparse)
-##
-## if(SuiteSparse_FOUND)
-## include_directories(${SuiteSparse_INCLUDE_DIRS})
-## target_link_library( ${SuiteSparse_LIBRARIES})
-## endif()
-##
-## Created by jesnault (jerome.esnault@inria.fr) 2014-01-15
-## Updated by jesnault (jerome.esnault@inria.fr) 2014-01-21
-
-## Copyright (c) 2012-2015, Jose Luis Blanco (Universidad de Almeria);
-## Jerome Esnault (INRIA)
-## All rights reserved.
-
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-## IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-## INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-## BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-## OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-## OF THE POSSIBILITY OF SUCH DAMAGE.
-
-## Redistribution and use in source and binary forms, with or without modification,
-## are permitted provided that the following conditions are met:
-
-## Redistributions of source code must retain the above copyright notice,
-## this list of conditions and the following disclaimer.
-
-## Redistributions in binary form must reproduce the above copyright notice,
-## this list of conditions and the following disclaimer in the documentation
-## and/or other materials provided with the distribution.
-
-## Neither the name of suitesparse-metis-for-windows nor the names of its contributors
-## may be used to endorse or promote products derived from this software
-## without specific prior written permission.
-
-
-## check if global root SuiteSparse folder is set or not and cache it in order to let user fill it
-if(NOT SuiteSparse_DIR)
- set(SuiteSparse_DIR "$ENV{SuiteSparse_DIR}" CACHE PATH "SuiteSparse root directory")
-endif()
-if(SuiteSparse_DIR)
- file(TO_CMAKE_PATH ${SuiteSparse_DIR} SuiteSparse_DIR)
-endif()
-
-## set default verbosity
-## Process the CMake automatically-generated var: SuiteSparse_FIND_QUIETLY: supersedes *_VERBOSE.
-if(NOT SuiteSparse_VERBOSE OR SuiteSparse_FIND_QUIETLY)
- set(SuiteSparse_VERBOSE OFF)
-endif()
-
-if(SuiteSparse_VERBOSE)
- message(STATUS "Start to FindSuiteSparse.cmake :")
-endif()
-
-
-## set the LIB POSTFIX to find in a right directory according to what kind of compiler we use (32/64bits)
-if(CMAKE_SIZEOF_VOID_P EQUAL 8) # Size in bytes!
- set(SuiteSparse_SEARCH_LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement")
-else() # Size in bytes!
- set(SuiteSparse_SEARCH_LIB_POSTFIX "" CACHE STRING "suffix for 32/64 dir placement")
-endif()
-if(SuiteSparse_SEARCH_LIB_POSTFIX)
- mark_as_advanced(SuiteSparse_SEARCH_LIB_POSTFIX)
- if(SuiteSparse_VERBOSE)
- message(STATUS " find_library will search inside lib${SuiteSparse_SEARCH_LIB_POSTFIX} directory (can be changed with SuiteSparse_SEARCH_LIB_POSTFIX)")
- endif()
-endif()
-
-
-## This utility macro is used to find all suitesparse projects by giving its name
-## Since the name structure is the same for lib name and include dir name,
-## we can use a generic way to find all of these with simple cmake lines of code
-macro(SuiteSparse_FIND_COMPONENTS )
-
- ## On windows : we absolutely need SuiteSparse_config.h every time for all projects
- if(WIN32)
- list(FIND SuiteSparse_FIND_COMPONENTS "suitesparseconfig" SS_config_index)
- if(${SS_config_index} MATCHES "-1")
- list(APPEND SuiteSparse_FIND_COMPONENTS suitesparseconfig)
- if(SuiteSparse_VERBOSE)
- message(STATUS " On windows, we absolutely need SuiteSparse_config.h every time for all projects : add suitesparseconfig component to look for")
- endif()
- endif()
- endif()
-
- ## special check for suitesparse component (allow to find on windows but not on linux because doesn't exist)
- list(FIND SuiteSparse_FIND_COMPONENTS "suitesparse" ss_index)
- if(${ss_index} MATCHES "-1")
- ## do nothing, the user didn't provide the suisparse component
- else()
- if(WIN32)
- ## do nothing, the user provide the suisparse component we will try to find
- else()
- list(REMOVE_AT SuiteSparse_FIND_COMPONENTS ${ss_index})
- if(SuiteSparse_VERBOSE)
- message(STATUS " On this plateform : suitesparse lib doesn't exist (only on windows), so skip this component")
- endif()
- endif()
- endif()
-
- ## Look for each component the same way :
- ## * For include dir the reference file is the .h
- ## * for library fileName the reference is the itself (cmake will prepend/append necessary prefix/suffix according to the plateform)
- foreach(suitesparseComp ${SuiteSparse_FIND_COMPONENTS})
-
- ## used to construct specific cmake variables (in upper case) according to the component, but also used for find_*()
- string(TOUPPER ${suitesparseComp} suitesparseCompUC)
- string(TOLOWER ${suitesparseComp} suitesparseCompLC)
-
- ## Special case: CXSparse library is named "libcxsparse.*" but headers are "cs.h":
- SET(suitesparseComp_ALT "${suitesparseComp}") # Alternative names
- if("${suitesparseComp}" STREQUAL "CXSPARSE")
- SET(suitesparseComp_ALT "cs") # Alternative name of CXSparse
- endif()
-
- ## try to find include dir (looking for very important header file)
- find_path(SuiteSparse_${suitesparseCompUC}_INCLUDE_DIR
- NAMES ${suitesparseComp}.h ${suitesparseCompLC}.h ${suitesparseCompUC}.h ${suitesparseComp_ALT}.h
- ${suitesparseComp}.hpp ${suitesparseCompLC}.hpp ${suitesparseCompUC}.hpp
- PATHS /opt/local/include
- /usr/include
- /usr/local/include
- /usr/include/suitesparse
- /usr/local/include/suitesparse
- /usr/include/${suitesparseComp}
- /usr/local/include/${suitesparseComp}
- ${SuiteSparse_DIR}/include
- ${SuiteSparse_DIR}/include/suitesparse
- ${SuiteSparse_DIR}/suitesparse/include
- ${SuiteSparse_DIR}/include/${suitesparseComp}
- ${SuiteSparse_DIR}/${suitesparseComp}/include
- ${${suitesparseCompUC}_DIR}/include
- ${${suitesparseCompUC}_DIR}/${suitesparseComp}/include
- ${${suitesparseCompUC}_DIR}
- )
- ## check if found
- if(NOT SuiteSparse_${suitesparseCompUC}_INCLUDE_DIR)
- if (SuiteSparse_VERBOSE)
- message(WARNING " Failed to find ${suitesparseComp} :\nSuiteSparse_${suitesparseCompUC}_INCLUDE_DIR not found.\nCheck you write correctly the component name (case sensitive),\nor set the SuiteSparse_${suitesparseCompUC}_DIR to look inside")
- endif()
- else()
- list(APPEND SuiteSparse_INCLUDE_DIRS ${SuiteSparse_${suitesparseCompUC}_INCLUDE_DIR})
- endif()
-
- ## try to find filepath lib name (looking for very important lib file)
- find_library(SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE
- NAMES lib${suitesparseComp} lib${suitesparseCompLC} lib${suitesparseCompUC}
- ${suitesparseComp} ${suitesparseCompLC} ${suitesparseCompUC}
- PATHS /opt/local/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- /usr/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- /usr/local/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${${suitesparseCompUC}_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${${suitesparseCompUC}_DIR}
- PATH_SUFFIXES Release
- )
- find_library(SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG
- NAMES ${suitesparseComp}d ${suitesparseCompLC}d ${suitesparseCompUC}d
- lib${suitesparseComp}d lib${suitesparseCompLC}d lib${suitesparseCompUC}d
- PATHS /opt/local/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- /usr/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- /usr/local/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${${suitesparseCompUC}_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${${suitesparseCompUC}_DIR}
- PATH_SUFFIXES Debug
- )
-
- ## check and auto complete release with debug if release missing and vice versa
- if(SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE)
- if(NOT SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG)
- set(SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG ${SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE} CACHE PATH "Path to a library." FORCE)
- endif()
- endif()
- if(SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG)
- if(NOT SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE)
- set(SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE ${SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG} CACHE PATH "Path to a library." FORCE)
- endif()
- endif()
-
- ## check and append the and SuiteSparse_LIBRARIES list, and warn if not found (release and debug) otherwise
- if(NOT SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE AND NOT SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG)
- if (SuiteSparse_VERBOSE)
- message(WARNING " Failed to find ${suitesparseComp} :
- Check you write correctly the component name (case sensitive),
- or set the SuiteSparse_${suitesparseCompUC}_DIR to look inside,
- or set directly SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG and SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE
- ")
- endif ()
- else()
- list(APPEND SuiteSparse_LIBRARIES optimized "${SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE}" debug "${SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG}")
- endif()
-
- ## here we allow to find at least the include OR the lib dir and just warn if one of both missing
- if(NOT SuiteSparse_${suitesparseCompUC}_INCLUDE_DIR AND NOT SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE)
- set(SuiteSparse_${suitesparseCompUC}_FOUND OFF)
- else()
- set(SuiteSparse_${suitesparseCompUC}_FOUND ON)
- endif()
-
- ## if one of both (include dir or filepath lib), then we provide a new cmake cache variable for the search. Otherwise we don't need anymore to expose all intermediates variables
- if(NOT SuiteSparse_${suitesparseCompUC}_FOUND)
- set(SuiteSparse_${suitesparseCompUC}_DIR "$ENV{SuiteSparse_${suitesparseCompUC}_DIR}" CACHE PATH "${suitesparseComp} root directory")
- else()
- mark_as_advanced(SuiteSparse_${suitesparseCompUC}_INCLUDE_DIR)
- mark_as_advanced(SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE)
- mark_as_advanced(SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG)
- if(DEFINED SuiteSparse_${suitesparseCompUC}_DIR)
- mark_as_advanced(SuiteSparse_${suitesparseCompUC}_DIR)
- endif()
- endif()
-
- if(SuiteSparse_VERBOSE)
- message(STATUS " SuiteSparse_${suitesparseCompUC}_FOUND = ${SuiteSparse_${suitesparseCompUC}_FOUND} : ")
- message(STATUS " * SuiteSparse_${suitesparseCompUC}_INCLUDE_DIR = ${SuiteSparse_${suitesparseCompUC}_INCLUDE_DIR}")
- message(STATUS " * SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG = ${SuiteSparse_${suitesparseCompUC}_LIBRARY_DEBUG}")
- message(STATUS " * SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE = ${SuiteSparse_${suitesparseCompUC}_LIBRARY_RELEASE}")
- endif()
-
- list(APPEND SuiteSparse_FOUND_LIST SuiteSparse_${suitesparseCompUC}_FOUND)
-
- ## special definition needed for metis
- if(NOT ${suitesparseComp} MATCHES "metis")
- set(SuiteSparse_${suitesparseCompUC}_DEFINITIONS "-DNPARTITION")
- add_definitions(${SuiteSparse_${suitesparseCompUC}_DEFINITIONS})
- if(SuiteSparse_VERBOSE)
- message(STATUS " * SuiteSparse_${suitesparseCompUC}_DEFINITIONS = ${SuiteSparse_${suitesparseCompUC}_DEFINITIONS}")
- endif()
- endif()
-
- endforeach()
-
-
- ## set the final SuiteSparse_FOUND based on all previous components found (status)
- foreach(componentToCheck ${SuiteSparse_FOUND_LIST})
- set(SuiteSparse_FOUND ON)
- if(SuiteSparse_VERBOSE)
- MESSAGE(STATUS "final check: ${componentToCheck}")
- endif()
- if(NOT ${componentToCheck})
- set(SuiteSparse_FOUND OFF)
- break() ## one component not found is enough to failed
- endif()
- endforeach()
-endmacro()
-
-## Default behavior if user don't use the COMPONENTS flag in find_package(SuiteSparse ...) command
-if(NOT SuiteSparse_FIND_COMPONENTS)
- list(APPEND SuiteSparse_FIND_COMPONENTS AMD CAMD CCOLAMD COLAMD CHOLMOD SPQR LDL BTF KLU CXSPARSE UMFPACK) ## suitesparse and metis are not searched by default (special case)
-endif()
-
-SuiteSparse_FIND_COMPONENTS()
-
-## check if we have to find also blas and lapack lib for SuiteSparse
-if(SuiteSparse_USE_LAPACK_BLAS)
-
- ## set additional search dirs
- set(ADDITIONAL_SEARCH_DIRS
- ${SuiteSparse_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_DIR}/lapack_windows/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_DIR}/lapack_windows/x${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_DIR}/blas_windows/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_DIR}/blas_windows/x${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}/lapack_windows
- ${SuiteSparse_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}/blas_windows
- ${SuiteSparse_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}/lapack_blas_windows
- ${SuiteSparse_DIR}/lapack_blas_windows
- ${SuiteSparse_DIR}/lapack_blas_windows/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- )
-
- ## try to find blas lib
- find_library(SuiteSparse_BLAS_LIBRARY
- NAMES blas cblas libblas
- PATHS /opt/local/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- /usr/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- /usr/local/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_BLAS_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_BLAS_DIR}
- ${ADDITIONAL_SEARCH_DIRS}
- PATH_SUFFIXES Release Debug
- )
- if(NOT SuiteSparse_BLAS_LIBRARY)
- if (SuiteSparse_VERBOSE)
- # Send all msgs as "STATUS": We'll send an error at the bottom, only if "REQUIRED" is set.
- message(STATUS " Failed to find SuiteSparse_BLAS_LIBRARY.Set it manually or set the SuiteSparse_BLAS_DIR to looking for it inside.")
- endif()
- set(SuiteSparse_BLAS_DIR "$ENV{SuiteSparse_BLAS_DIR}" CACHE PATH "blas root directory")
- else()
- if(DEFINED SuiteSparse_BLAS_DIR)
- mark_as_advanced(SuiteSparse_BLAS_DIR)
- endif()
- list(APPEND SuiteSparse_LAPACK_BLAS_LIBRARIES ${SuiteSparse_BLAS_LIBRARY})
- endif()
-
- ## try to find lapack lib
- find_library(SuiteSparse_LAPACK_LIBRARY
- NAMES lapack liblapack
- PATHS /opt/local/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- /usr/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- /usr/local/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_LAPACK_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_LAPACK_DIR}
- ${ADDITIONAL_SEARCH_DIRS}
- PATH_SUFFIXES Release Debug
- )
- if(NOT SuiteSparse_LAPACK_LIBRARY)
- if (SuiteSparse_VERBOSE)
- # Send all msgs as "STATUS": We'll send an error at the bottom, only if "REQUIRED" is set.
- message(STATUS " Failed to find SuiteSparse_LAPACK_LIBRARY.Set it manually or set the SuiteSparse_LAPACK_DIR to looking for it inside.")
- endif()
- set(SuiteSparse_LAPACK_DIR "$ENV{SuiteSparse_LAPACK_DIR}" CACHE PATH "lapack root directory")
- else()
- if(DEFINED SuiteSparse_LAPACK_DIR)
- mark_as_advanced(SuiteSparse_LAPACK_DIR)
- endif()
- list(APPEND SuiteSparse_LAPACK_BLAS_LIBRARIES ${SuiteSparse_LAPACK_LIBRARY})
- endif()
-
- ## well, now append to the SuiteSparse_LIBRARIES and print infos if VERBOSE
- if(SuiteSparse_LAPACK_BLAS_LIBRARIES)
- list(APPEND SuiteSparse_LIBRARIES ${SuiteSparse_LAPACK_BLAS_LIBRARIES})
- if(SuiteSparse_VERBOSE)
- message(STATUS " SuiteSparse_USE_LAPACK_BLAS = ${SuiteSparse_USE_LAPACK_BLAS} : ")
- message(STATUS " * SuiteSparse_LAPACK_BLAS_LIBRARIES : ")
- foreach(lib ${SuiteSparse_LAPACK_BLAS_LIBRARIES})
- message(STATUS " ${lib}")
- endforeach()
- endif()
- endif()
-
- ## Now looking for *.dll => note that this is not a safe way to get it...
- if(WIN32)
- if(${SuiteSparse_SEARCH_LIB_POSTFIX} MATCHES "64")
- set(SuiteSparse_SEARCH_BIN_POSTFIX_1 "x64")
- set(SuiteSparse_SEARCH_BIN_POSTFIX_2 "Win64")
- else()
- set(SuiteSparse_SEARCH_BIN_POSTFIX_1 "x86")
- set(SuiteSparse_SEARCH_BIN_POSTFIX_2 "Win32")
- endif()
-
- set(SuiteSparse_DLL_SEARCH_DIRS
- ${SuiteSparse_LAPACK_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_LAPACK_DIR}
- ${SuiteSparse_LAPACK_DIR}/bin
- ${SuiteSparse_LAPACK_DIR}/bin/${SuiteSparse_SEARCH_BIN_POSTFIX_1}
- ${SuiteSparse_LAPACK_DIR}/bin/${SuiteSparse_SEARCH_BIN_POSTFIX_2}
- ${SuiteSparse_LAPACK_DIR}/bin/Release/${SuiteSparse_SEARCH_BIN_POSTFIX_1}
- ${SuiteSparse_LAPACK_DIR}/bin/Debug/${SuiteSparse_SEARCH_BIN_POSTFIX_2}
- ${SuiteSparse_LAPACK_DIR}/lib${SuiteSparse_SEARCH_LIB_POSTFIX}
- ${SuiteSparse_BLAS_DIR}
- ${SuiteSparse_BLAS_DIR}/bin
- ${SuiteSparse_BLAS_DIR}/bin/${SuiteSparse_SEARCH_BIN_POSTFIX_1}
- ${SuiteSparse_BLAS_DIR}/bin/${SuiteSparse_SEARCH_BIN_POSTFIX_2}
- ${SuiteSparse_BLAS_DIR}/bin/Release/${SuiteSparse_SEARCH_BIN_POSTFIX_1}
- ${SuiteSparse_BLAS_DIR}/bin/Debug/${SuiteSparse_SEARCH_BIN_POSTFIX_2}
- ${ADDITIONAL_SEARCH_DIRS}
- "$ENV{Path}"
- )
- set(dllPatternFileList "libblas" "liblapack" "libgcc_s_" "libgfortran" "libquadmath")
- foreach(dllPattern ${dllPatternFileList})
- string(TOUPPER ${dllPattern} dllPatternUC)
- foreach(searchDir ${SuiteSparse_DLL_SEARCH_DIRS})
- file(GLOB SuiteSparse_DLL_${dllPatternUC} "${searchDir}/${dllPattern}*.dll") ## append the *.dll
- list(LENGTH SuiteSparse_DLL_${dllPatternUC} resultCount)
- if(${resultCount} GREATER "0" )
- list(APPEND SuiteSparse_LAPACK_BLAS_DLL ${SuiteSparse_DLL_${dllPatternUC}})
- break()
- endif()
- endforeach()
- endforeach()
-
- if(SuiteSparse_VERBOSE)
- message(STATUS " * SuiteSparse_LAPACK_BLAS_DLL : ")
- foreach(dll ${SuiteSparse_LAPACK_BLAS_DLL})
- message(STATUS " ${dll}")
- endforeach()
- endif()
-
- endif()
-
-endif()
-
-if(SuiteSparse_INCLUDE_DIRS)
- list(REMOVE_DUPLICATES SuiteSparse_INCLUDE_DIRS)
-endif()
-if(SuiteSparse_LIBRARIES)
- list(REMOVE_DUPLICATES SuiteSparse_LIBRARIES)
-endif()
-
-if(SuiteSparse_LAPACK_BLAS_LIBRARIES)
- list(REMOVE_DUPLICATES SuiteSparse_LAPACK_BLAS_LIBRARIES)
-endif()
-
-if(SuiteSparse_LAPACK_BLAS_DLL)
- list(REMOVE_DUPLICATES SuiteSparse_LAPACK_BLAS_DLL)
-endif()
-
-if(SuiteSparse_VERBOSE)
- message(STATUS "Finish to FindSuiteSparse.cmake => SuiteSparse_FOUND=${SuiteSparse_FOUND}")
-endif()
-
-## Show error if not found and _REQUIRED
-IF(NOT SuiteSparse_FOUND)
- # make FIND_PACKAGE friendly
- IF(NOT SuiteSparse_FIND_QUIETLY)
- IF(SuiteSparse_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR
- "SuiteSparse required but some headers or libs not found.")
- ELSE()
- MESSAGE(STATUS "ERROR: SuiteSparse was not found.")
- ENDIF()
- ENDIF()
-ENDIF()
diff --git a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/CMakeLists.txt b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/CMakeLists.txt
index 9315c25e287..59f4bcaec27 100644
--- a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/CMakeLists.txt
+++ b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/CMakeLists.txt
@@ -10,38 +10,13 @@ include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
# Executables that require Eigen 3.1
- # ------------------------------------------------------------------
- # Detect SuiteSparse libraries:
- # If not found automatically, set SuiteSparse_DIR in CMake to the
- # directory where SuiteSparse was built.
- # ------------------------------------------------------------------
+ find_package(UMFPACK QUIET NO_MODULE)
- set(SuiteSparse_USE_LAPACK_BLAS ON)
- find_package(SuiteSparse QUIET NO_MODULE)# 1st: Try to locate the *config.cmake file.
- if(NOT SuiteSparse_FOUND)
- set(SuiteSparse_VERBOSE ON)
- find_package(SuiteSparse QUIET) # 2nd: Use FindSuiteSparse.cmake module
- if(SuiteSparse_FOUND)
- include_directories(${SuiteSparse_INCLUDE_DIRS})
- endif(SuiteSparse_FOUND)
- endif(NOT SuiteSparse_FOUND)
-
- if(SuiteSparse_FOUND)
- if(SuiteSparse_UMFPACK_FOUND OR TARGET SuiteSparse::umfpack)
- message(STATUS "SuiteSparse_LIBS: ${SuiteSparse_LIBRARIES}")
- message(STATUS "Orbifold Tutte Embeddings will use UmfPackLU")
- add_definitions(-DEIGEN_DONT_ALIGN_STATICALLY)
- add_definitions(-DCGAL_SMP_USE_SUITESPARSE_SOLVERS)
- else()
- message(STATUS "NOTICE: The example `orbifold.cpp` will be compiled without the SuiteSparse library and UmfPack. Try setting SuiteSparse_UMF_INCLUDE_DIR and at least one of SuiteSparse_UMFPACK_LIBRARY_RELEASE and SuiteSparse_UMFPACK_LIBRARY_DEBUG to you UMFPACK installation.")
- endif()
- else(SuiteSparse_FOUND)
- message(STATUS "NOTICE: The example `orbifold.cpp` will not be compiled without the SuiteSparse library.")
- endif(SuiteSparse_FOUND)
-
- # ------------------------------------------------------------------
- # End of SuiteSparse detection
- # ------------------------------------------------------------------
+ if(TARGET SuiteSparse::UMFPACK)
+ message(STATUS "Orbifold Tutte Embeddings will use UmfPackLU")
+ else()
+ message(STATUS "NOTICE: Examples will be compiled without the SuiteSparse library and UmfPack. Try setting CMAKE_PREFIX_PATH to your SuiteSparse installation.")
+ endif()
create_single_source_cgal_program("ARAP_parameterization.cpp")
target_link_libraries(ARAP_parameterization PUBLIC CGAL::Eigen3_support)