From 709c9b20a3b7828f75b12aa702939d9dc619d4b2 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Tue, 14 Jul 2020 11:46:37 +0200
Subject: [PATCH] Eigen3 under Windows

---
 .github/workflows/ba-windows.yml              | 19 ++++++++++++++++++-
 Core/CMakeLists.txt                           |  2 +-
 .../cpp/CylindersAndPrisms/CMakeLists.txt     | 10 +++-------
 Tests/Functional/Core/MPI/CMakeLists.txt      |  2 +-
 cmake/modules/SearchInstalledSoftware.cmake   |  6 +++++-
 5 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/.github/workflows/ba-windows.yml b/.github/workflows/ba-windows.yml
index 613134dff0c..efd347dfa9b 100644
--- a/.github/workflows/ba-windows.yml
+++ b/.github/workflows/ba-windows.yml
@@ -67,6 +67,22 @@ jobs:
         dir deps/include
         dir deps/lib
 
+    - name: setup Eigen3
+      shell: powershell
+      run: |
+        Get-Date -Format G
+        $Env:Path += ";C:\msys64\usr\bin"
+        cd ${{github.workspace}}
+        mkdir eigen
+        Get-Date -Format G
+        wget https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.zip -O ${{runner.temp}}\eigen.zip
+        Get-Date -Format G
+        7z x ${{runner.temp}}\eigen.zip -oeigen
+        Get-Date -Format G
+        dir eigen
+        dir eigen/eigen-3.3.7
+        dir eigen/eigen-3.3.7/Eigen/src
+
     - name: Install Python packages
       run: |
         python -m pip install --upgrade pip
@@ -132,13 +148,14 @@ jobs:
       run: |
         call "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
         set OPTLIBS=${{github.workspace}}\deps
+        set EIGENDIR=${{github.workspace}}\eigen\eigen-3.3.7
         set QTDIR=${{github.workspace}}\qt5\Qt\5.14.2\msvc2017_64
         set PATH=${{github.workspace}};%OPTLIBS%\lib;%QTDIR%\bin;%PATH%
         cd ${{github.workspace}}
         dir
         mkdir build
         cd build
-        cmake -G "Visual Studio 16 2019" -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_INCLUDE_PATH=%OPTLIBS%/include -DCMAKE_LIBRARY_PATH=%OPTLIBS%/lib -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" ..
+        cmake -G "Visual Studio 16 2019" -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_INCLUDE_PATH=%OPTLIBS%/include -DCMAKE_LIBRARY_PATH=%OPTLIBS%/lib -DEIGEN3_INCLUDE_DIRS=%EIGENDIR% -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" ..
         ccache -z
         ccache -p
         cmake --build . --config Release -j4
diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt
index 13008419645..e5f7e49084d 100644
--- a/Core/CMakeLists.txt
+++ b/Core/CMakeLists.txt
@@ -153,7 +153,7 @@ target_include_directories(${library_name}
     ${tspectrum_INCLUDE_DIR}
     ${Cerf_INCLUDE_DIR}
     ${CMAKE_SOURCE_DIR}/ThirdParty/Core/cerf_wrapper # TEMPORARY
-    SYSTEM PUBLIC ${EIGEN3_INCLUDE_DIR}
+    SYSTEM PUBLIC ${EIGEN3_INCLUDE_DIRS}
     )
 target_link_libraries(${library_name} ${Boost_LIBRARIES} ${FFTW3_LIBRARIES} ${GSL_LIBRARIES}
     ${tspectrum_LIBRARY} ${Cerf_LIBRARIES})
diff --git a/Examples/cpp/CylindersAndPrisms/CMakeLists.txt b/Examples/cpp/CylindersAndPrisms/CMakeLists.txt
index 3094bc29513..9805e8f2a48 100644
--- a/Examples/cpp/CylindersAndPrisms/CMakeLists.txt
+++ b/Examples/cpp/CylindersAndPrisms/CMakeLists.txt
@@ -22,11 +22,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../modules)
 find_package(BornAgain REQUIRED)
 find_package(Eigen3 REQUIRED)
 
-include_as_system_directory("${EIGEN3_INCLUDE_DIR}")
-include_directories(
-    ${BORNAGAIN_INCLUDE_DIR}
-)
+include_as_system_directory("${EIGEN3_INCLUDE_DIRS}")
+include_directories(${BORNAGAIN_INCLUDE_DIR})
 
-target_link_libraries(CylindersAndPrisms
-    ${BORNAGAIN_LIBRARIES}
-)
+target_link_libraries(CylindersAndPrisms ${BORNAGAIN_LIBRARIES})
diff --git a/Tests/Functional/Core/MPI/CMakeLists.txt b/Tests/Functional/Core/MPI/CMakeLists.txt
index ce919177e1d..7d804db7976 100644
--- a/Tests/Functional/Core/MPI/CMakeLists.txt
+++ b/Tests/Functional/Core/MPI/CMakeLists.txt
@@ -7,7 +7,7 @@ find_package(MPI REQUIRED)
 # include dirs
 include_directories(
     ${MPI_CXX_INCLUDE_PATH}
-    ${EIGEN3_INCLUDE_DIR}
+    ${EIGEN3_INCLUDE_DIRS}
     ${BornAgainCore_INCLUDE_DIRS}
     )
 
diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake
index fad9bcf76da..8513ee8b911 100644
--- a/cmake/modules/SearchInstalledSoftware.cmake
+++ b/cmake/modules/SearchInstalledSoftware.cmake
@@ -7,7 +7,11 @@ endif()
 find_package(Threads REQUIRED)
 find_package(FFTW3 REQUIRED)
 find_package(GSL REQUIRED)
-find_package(Eigen3 3.3 REQUIRED) # no need for FindEigen3, as Eigen provides Eigen3Config.cmake
+if(WIN32)
+    message("Eigen3 include dirs hopefully given on the command line: ${EIGEN3_INCLUDE_DIRS}")
+else()
+    find_package(Eigen3 3.3 REQUIRED) # no need for FindEigen3, as Eigen provides Eigen3Config.cmake
+endif()
 
 find_package(Cerf REQUIRED)
 message(STATUS "Cerf found=${Cerf_FOUND} lib=${Cerf_LIBRARIES} inc=${Cerf_INCLUDE_DIR} version={Cerf_VERSION}")
-- 
GitLab