From 17696834de42f640ae97f4982ee650eafe89c63e Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Tue, 10 Sep 2013 12:39:50 +0200
Subject: [PATCH] Download Eigen into the build dir if it is not found on the
 system.

---
 CMakeLists.txt                           |  3 ++
 scripts/cmake/ExternalProjectEigen.cmake | 35 ++++++++++++++++++++++++
 scripts/cmake/Find.cmake                 |  5 ----
 3 files changed, 38 insertions(+), 5 deletions(-)
 create mode 100644 scripts/cmake/ExternalProjectEigen.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 47c1b5dacf2..89231968eb4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -98,6 +98,9 @@ ENDIF() #OGS_PACKAGING
 OPTION(Boost_USE_STATIC_LIBS "This option has to be set from the command line (before boost gets found)!" OFF)
 INCLUDE(scripts/cmake/ExternalProjectBoost.cmake)
 INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} )
+IF(OGS_USE_EIGEN)
+	INCLUDE(scripts/cmake/ExternalProjectEigen.cmake)
+ENDIF()
 
 # Add subdirectories with the projects
 ADD_SUBDIRECTORY( ThirdParty )
diff --git a/scripts/cmake/ExternalProjectEigen.cmake b/scripts/cmake/ExternalProjectEigen.cmake
new file mode 100644
index 00000000000..6d2c0abe024
--- /dev/null
+++ b/scripts/cmake/ExternalProjectEigen.cmake
@@ -0,0 +1,35 @@
+MESSAGE(STATUS "Eigen inc: ${EIGEN3_INCLUDE_DIR}")
+
+IF(EIGEN3_FOUND)
+	RETURN()
+ENDIF()
+
+# First check for system Eigen
+IF(NOT EIGEN3_INCLUDE_DIR)
+	FIND_PACKAGE(Eigen3)
+	IF(EIGEN3_FOUND)
+		SET(EIGEN3_FOUND TRUE CACHE BOOL "Was Eigen found?" FORCE)
+		SET(EIGEN3_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE STRING "Eigen include dir" FORCE)
+		RETURN()
+	ELSE()
+		SET(EIGEN3_INCLUDE_DIR "")
+	ENDIF()
+ENDIF()
+
+ExternalProject_Add(Eigen
+	PREFIX ${CMAKE_BINARY_DIR}/External/eigen
+	URL http://bitbucket.org/eigen/eigen/get/3.2.0.tar.gz
+	URL_MD5 9559c34af203dde5f3f1d976d859c5b3
+	UPDATE_COMMAND ""
+	CONFIGURE_COMMAND ""
+	BUILD_COMMAND ""
+	BUILD_IN_SOURCE 1
+	INSTALL_COMMAND ""
+)
+ExternalProject_Get_Property( Eigen source_dir )
+
+IF(NOT EIGEN3_INCLUDE_DIR)
+	SET(EIGEN3_FOUND TRUE CACHE BOOL "Was Eigen found?" FORCE)
+	SET( EIGEN3_INCLUDE_DIR ${source_dir} CACHE INTERNAL "Eigen include dir")
+	MESSAGE(STATUS "Downloading Eigen automatically.")
+ENDIF()
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index 1295af1ffbd..e6f31ab9ace 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -165,8 +165,3 @@ ENDIF() # Shapelib_FOUND
 IF(OGS_USE_LIS)
 	FIND_PACKAGE( LIS REQUIRED )
 ENDIF()
-
-## Eigen ##
-IF(OGS_USE_EIGEN)
-	FIND_PACKAGE( Eigen3 REQUIRED )
-ENDIF()
-- 
GitLab