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)