|  | @@ -35,14 +35,25 @@
 | 
	
		
			
				|  |  |  #
 | 
	
		
			
				|  |  |  # EIGEN_FOUND: TRUE iff Eigen is found.
 | 
	
		
			
				|  |  |  # EIGEN_INCLUDE_DIRS: Include directories for Eigen.
 | 
	
		
			
				|  |  | -#
 | 
	
		
			
				|  |  |  # EIGEN_VERSION: Extracted from Eigen/src/Core/util/Macros.h
 | 
	
		
			
				|  |  |  # EIGEN_WORLD_VERSION: Equal to 3 if EIGEN_VERSION = 3.2.0
 | 
	
		
			
				|  |  |  # EIGEN_MAJOR_VERSION: Equal to 2 if EIGEN_VERSION = 3.2.0
 | 
	
		
			
				|  |  |  # EIGEN_MINOR_VERSION: Equal to 0 if EIGEN_VERSION = 3.2.0
 | 
	
		
			
				|  |  | +# FOUND_INSTALLED_EIGEN_CMAKE_CONFIGURATION: True iff the version of Eigen
 | 
	
		
			
				|  |  | +#                                            found was built & installed /
 | 
	
		
			
				|  |  | +#                                            exported as a CMake package.
 | 
	
		
			
				|  |  |  #
 | 
	
		
			
				|  |  |  # The following variables control the behaviour of this module:
 | 
	
		
			
				|  |  |  #
 | 
	
		
			
				|  |  | +# EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION: TRUE/FALSE, iff TRUE then
 | 
	
		
			
				|  |  | +#                           then prefer using an exported CMake configuration
 | 
	
		
			
				|  |  | +#                           generated by Eigen over searching for the
 | 
	
		
			
				|  |  | +#                           Eigen components manually.  Otherwise (FALSE)
 | 
	
		
			
				|  |  | +#                           ignore any exported Eigen CMake configurations and
 | 
	
		
			
				|  |  | +#                           always perform a manual search for the components.
 | 
	
		
			
				|  |  | +#                           Default: TRUE iff user does not define this variable
 | 
	
		
			
				|  |  | +#                           before we are called, and does NOT specify
 | 
	
		
			
				|  |  | +#                           EIGEN_INCLUDE_DIR_HINTS, otherwise FALSE.
 | 
	
		
			
				|  |  |  # EIGEN_INCLUDE_DIR_HINTS: List of additional directories in which to
 | 
	
		
			
				|  |  |  #                          search for eigen includes, e.g: /timbuktu/eigen3.
 | 
	
		
			
				|  |  |  #
 | 
	
	
		
			
				|  | @@ -66,6 +77,7 @@
 | 
	
		
			
				|  |  |  macro(EIGEN_REPORT_NOT_FOUND REASON_MSG)
 | 
	
		
			
				|  |  |    unset(EIGEN_FOUND)
 | 
	
		
			
				|  |  |    unset(EIGEN_INCLUDE_DIRS)
 | 
	
		
			
				|  |  | +  unset(FOUND_INSTALLED_EIGEN_CMAKE_CONFIGURATION)
 | 
	
		
			
				|  |  |    # Make results of search visible in the CMake GUI if Eigen has not
 | 
	
		
			
				|  |  |    # been found so that user does not have to toggle to advanced view.
 | 
	
		
			
				|  |  |    mark_as_advanced(CLEAR EIGEN_INCLUDE_DIR)
 | 
	
	
		
			
				|  | @@ -89,38 +101,68 @@ endmacro(EIGEN_REPORT_NOT_FOUND)
 | 
	
		
			
				|  |  |  # here to fail.
 | 
	
		
			
				|  |  |  unset(EIGEN_FOUND)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -# Search user-installed locations first, so that we prefer user installs
 | 
	
		
			
				|  |  | -# to system installs where both exist.
 | 
	
		
			
				|  |  | -list(APPEND EIGEN_CHECK_INCLUDE_DIRS
 | 
	
		
			
				|  |  | -  /usr/local/include
 | 
	
		
			
				|  |  | -  /usr/local/homebrew/include # Mac OS X
 | 
	
		
			
				|  |  | -  /opt/local/var/macports/software # Mac OS X.
 | 
	
		
			
				|  |  | -  /opt/local/include
 | 
	
		
			
				|  |  | -  /usr/include)
 | 
	
		
			
				|  |  | -# Additional suffixes to try appending to each search path.
 | 
	
		
			
				|  |  | -list(APPEND EIGEN_CHECK_PATH_SUFFIXES
 | 
	
		
			
				|  |  | -  eigen3 # Default root directory for Eigen.
 | 
	
		
			
				|  |  | -  Eigen/include/eigen3 # Windows (for C:/Program Files prefix) < 3.3
 | 
	
		
			
				|  |  | -  Eigen3/include/eigen3 ) # Windows (for C:/Program Files prefix) >= 3.3
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Search supplied hint directories first if supplied.
 | 
	
		
			
				|  |  | -find_path(EIGEN_INCLUDE_DIR
 | 
	
		
			
				|  |  | -  NAMES Eigen/Core
 | 
	
		
			
				|  |  | -  PATHS ${EIGEN_INCLUDE_DIR_HINTS}
 | 
	
		
			
				|  |  | -  ${EIGEN_CHECK_INCLUDE_DIRS}
 | 
	
		
			
				|  |  | -  PATH_SUFFIXES ${EIGEN_CHECK_PATH_SUFFIXES})
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -if (NOT EIGEN_INCLUDE_DIR OR
 | 
	
		
			
				|  |  | +# -----------------------------------------------------------------
 | 
	
		
			
				|  |  | +# By default, if the user has expressed no preference for using an exported
 | 
	
		
			
				|  |  | +# Eigen CMake configuration over performing a search for the installed
 | 
	
		
			
				|  |  | +# components, and has not specified any hints for the search locations, then
 | 
	
		
			
				|  |  | +# prefer an exported configuration if available.
 | 
	
		
			
				|  |  | +if (NOT DEFINED EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION
 | 
	
		
			
				|  |  | +    AND NOT EIGEN_INCLUDE_DIR_HINTS)
 | 
	
		
			
				|  |  | +  message(STATUS "No preference for use of exported Eigen CMake configuration "
 | 
	
		
			
				|  |  | +    "set, and no hints for include directory provided. "
 | 
	
		
			
				|  |  | +    "Defaulting to preferring an installed/exported Eigen CMake configuration "
 | 
	
		
			
				|  |  | +    "if available.")
 | 
	
		
			
				|  |  | +  set(EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION TRUE)
 | 
	
		
			
				|  |  | +endif()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +if (EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION)
 | 
	
		
			
				|  |  | +  find_package(Eigen3 QUIET)
 | 
	
		
			
				|  |  | +  if (EIGEN3_FOUND)
 | 
	
		
			
				|  |  | +    message(STATUS "Found installed version of Eigen: ${Eigen3_DIR}")
 | 
	
		
			
				|  |  | +    set(FOUND_INSTALLED_EIGEN_CMAKE_CONFIGURATION TRUE)
 | 
	
		
			
				|  |  | +    set(EIGEN_FOUND ${EIGEN3_FOUND})
 | 
	
		
			
				|  |  | +    set(EIGEN_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE STRING
 | 
	
		
			
				|  |  | +      "Eigen include directory" FORCE)
 | 
	
		
			
				|  |  | +  else()
 | 
	
		
			
				|  |  | +    message(STATUS "Failed to find an installed/exported CMake configuration "
 | 
	
		
			
				|  |  | +      "for Eigen, will perform search for installed Eigen components.")
 | 
	
		
			
				|  |  | +  endif()
 | 
	
		
			
				|  |  | +endif()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +if (NOT EIGEN_FOUND)
 | 
	
		
			
				|  |  | +  # Search user-installed locations first, so that we prefer user installs
 | 
	
		
			
				|  |  | +  # to system installs where both exist.
 | 
	
		
			
				|  |  | +  list(APPEND EIGEN_CHECK_INCLUDE_DIRS
 | 
	
		
			
				|  |  | +    /usr/local/include
 | 
	
		
			
				|  |  | +    /usr/local/homebrew/include # Mac OS X
 | 
	
		
			
				|  |  | +    /opt/local/var/macports/software # Mac OS X.
 | 
	
		
			
				|  |  | +    /opt/local/include
 | 
	
		
			
				|  |  | +    /usr/include)
 | 
	
		
			
				|  |  | +  # Additional suffixes to try appending to each search path.
 | 
	
		
			
				|  |  | +  list(APPEND EIGEN_CHECK_PATH_SUFFIXES
 | 
	
		
			
				|  |  | +    eigen3 # Default root directory for Eigen.
 | 
	
		
			
				|  |  | +    Eigen/include/eigen3 # Windows (for C:/Program Files prefix) < 3.3
 | 
	
		
			
				|  |  | +    Eigen3/include/eigen3 ) # Windows (for C:/Program Files prefix) >= 3.3
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  # Search supplied hint directories first if supplied.
 | 
	
		
			
				|  |  | +  find_path(EIGEN_INCLUDE_DIR
 | 
	
		
			
				|  |  | +    NAMES Eigen/Core
 | 
	
		
			
				|  |  | +    PATHS ${EIGEN_INCLUDE_DIR_HINTS}
 | 
	
		
			
				|  |  | +    ${EIGEN_CHECK_INCLUDE_DIRS}
 | 
	
		
			
				|  |  | +    PATH_SUFFIXES ${EIGEN_CHECK_PATH_SUFFIXES})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if (NOT EIGEN_INCLUDE_DIR OR
 | 
	
		
			
				|  |  | +      NOT EXISTS ${EIGEN_INCLUDE_DIR})
 | 
	
		
			
				|  |  | +    eigen_report_not_found(
 | 
	
		
			
				|  |  | +      "Could not find eigen3 include directory, set EIGEN_INCLUDE_DIR to "
 | 
	
		
			
				|  |  | +      "path to eigen3 include directory, e.g. /usr/local/include/eigen3.")
 | 
	
		
			
				|  |  | +  endif (NOT EIGEN_INCLUDE_DIR OR
 | 
	
		
			
				|  |  |      NOT EXISTS ${EIGEN_INCLUDE_DIR})
 | 
	
		
			
				|  |  | -  eigen_report_not_found(
 | 
	
		
			
				|  |  | -    "Could not find eigen3 include directory, set EIGEN_INCLUDE_DIR to "
 | 
	
		
			
				|  |  | -    "path to eigen3 include directory, e.g. /usr/local/include/eigen3.")
 | 
	
		
			
				|  |  | -endif (NOT EIGEN_INCLUDE_DIR OR
 | 
	
		
			
				|  |  | -       NOT EXISTS ${EIGEN_INCLUDE_DIR})
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Mark internally as found, then verify. EIGEN_REPORT_NOT_FOUND() unsets
 | 
	
		
			
				|  |  | -# if called.
 | 
	
		
			
				|  |  | -set(EIGEN_FOUND TRUE)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  # Mark internally as found, then verify. EIGEN_REPORT_NOT_FOUND() unsets
 | 
	
		
			
				|  |  | +  # if called.
 | 
	
		
			
				|  |  | +  set(EIGEN_FOUND TRUE)
 | 
	
		
			
				|  |  | +endif()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # Extract Eigen version from Eigen/src/Core/util/Macros.h
 | 
	
		
			
				|  |  |  if (EIGEN_INCLUDE_DIR)
 |