Move check for non-standard Eigen installs into FindEigen.cmake

- As part of adding support for detection of non-standard Homebrew
  install on OSX, an Eigen specific search directory was added to the
  search path in the main CMakeLists.  This commit moves that search
  into FindEigen.cmake.

Change-Id: Ia6142211961a0d1fdddeea77b83438e4ef94434f
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 608ce5a..49b36cc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -77,11 +77,8 @@
       OUTPUT_STRIP_TRAILING_WHITESPACE)
     MESSAGE(STATUS "Detected Homebrew with install prefix: "
       "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.")
+    LIST(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_INSTALL_PREFIX}")
   ENDIF()
-  # Note that Eigen is stored in <XXX>/include/eigen3/Eigen/XXX.h
-  # as such, the default prefix path on it's own is insufficient.
-  LIST(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_INSTALL_PREFIX}"
-    "${HOMEBREW_INSTALL_PREFIX}/include/eigen3")
 ENDIF()
 
 # Make CMake aware of the cmake folder for local FindXXX scripts,
diff --git a/cmake/FindEigen.cmake b/cmake/FindEigen.cmake
index 2cd3e12..0d8d1cd 100644
--- a/cmake/FindEigen.cmake
+++ b/cmake/FindEigen.cmake
@@ -98,6 +98,18 @@
   NAMES Eigen/Core
   PATHS ${EIGEN_INCLUDE_DIR_HINTS}
   ${EIGEN_CHECK_INCLUDE_DIRS})
+IF (NOT EIGEN_INCLUDE_DIR)
+  # Handle case where user / CMAKE_PREFIX_PATH does not specify the
+  # required eigen3 subdirectory, prepend it to search target and retry.
+  FIND_PATH(EIGEN_INCLUDE_DIR
+    NAMES eigen3/Eigen/Core
+    PATHS ${EIGEN_INCLUDE_DIR_HINTS}
+    ${EIGEN_CHECK_INCLUDE_DIRS})
+  IF (EIGEN_INCLUDE_DIR AND EXISTS ${EIGEN_INCLUDE_DIR})
+    UPDATE_CACHE_VARIABLE(EIGEN_INCLUDE_DIR "${EIGEN_INCLUDE_DIR}/eigen3")
+  ENDIF (EIGEN_INCLUDE_DIR AND EXISTS ${EIGEN_INCLUDE_DIR})
+ENDIF(NOT EIGEN_INCLUDE_DIR)
+
 IF (NOT EIGEN_INCLUDE_DIR OR
     NOT EXISTS ${EIGEN_INCLUDE_DIR})
   EIGEN_REPORT_NOT_FOUND(