From 412720a57e44116a337f5189e1430b362d448d1d Mon Sep 17 00:00:00 2001
From: Justin Carpentier <jcarpent@laas.fr>
Date: Thu, 11 Jan 2018 13:57:11 +0100
Subject: [PATCH] Fix compatibility with Eigen 3.0.5

---
 src/details.hpp                 |  2 ++
 src/eigenpy.hpp                 |  8 ++++++++
 src/solvers/preconditioners.cpp | 10 +++++++++-
 src/solvers/solvers.cpp         |  9 ++++++++-
 unittest/CMakeLists.txt         |  4 +++-
 5 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/src/details.hpp b/src/details.hpp
index 6fe8295d..f99467fc 100644
--- a/src/details.hpp
+++ b/src/details.hpp
@@ -85,6 +85,7 @@ namespace eigenpy
     }
   };
   
+#if EIGEN_VERSION_AT_LEAST(3,2,0)
   template<typename MatType>
   struct EigenObjectAllocator< eigenpy::Ref<MatType> >
   {
@@ -101,6 +102,7 @@ namespace eigenpy
       MapNumpy<MatType>::map(pyArray) = mat;
     }
   };
+#endif
 
   /* --- TO PYTHON -------------------------------------------------------------- */
   template<typename MatType>
diff --git a/src/eigenpy.hpp b/src/eigenpy.hpp
index 9fcecc7c..8ecf798f 100644
--- a/src/eigenpy.hpp
+++ b/src/eigenpy.hpp
@@ -19,12 +19,20 @@
 
 #include "eigenpy/fwd.hpp"
 #include "eigenpy/deprecated.hh"
+#if EIGEN_VERSION_AT_LEAST(3,2,0)
 #include "eigenpy/ref.hpp"
 
 #define ENABLE_SPECIFIC_MATRIX_TYPE(TYPE) \
   enableEigenPySpecific<TYPE>(); \
   enableEigenPySpecific< eigenpy::Ref<TYPE> >();
 
+#else
+
+#define ENABLE_SPECIFIC_MATRIX_TYPE(TYPE) \
+  enableEigenPySpecific<TYPE>();
+
+#endif
+
 namespace eigenpy
 {
   /* Enable Eigen-Numpy serialization for a set of standard MatrixBase instance. */
diff --git a/src/solvers/preconditioners.cpp b/src/solvers/preconditioners.cpp
index fb2f2e35..1854170f 100644
--- a/src/solvers/preconditioners.cpp
+++ b/src/solvers/preconditioners.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017, Justin Carpentier, LAAS-CNRS
+ * Copyright 2017-2018, Justin Carpentier, LAAS-CNRS
  *
  * This file is part of eigenpy.
  * eigenpy is free software: you can redistribute it and/or
@@ -14,12 +14,16 @@
  * with eigenpy.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <Eigen/Core>
+
+#if EIGEN_VERSION_AT_LEAST(3,2,0)
 #include "eigenpy/solvers/preconditioners.hpp"
 #include "eigenpy/solvers/BasicPreconditioners.hpp"
 //#include "eigenpy/solvers/BFGSPreconditioners.hpp"
 
 namespace eigenpy
 {
+
   void exposePreconditioners()
   {
     using namespace Eigen;
@@ -32,4 +36,8 @@ namespace eigenpy
 //      LimitedBFGSPreconditionerBaseVisitor< LimitedBFGSPreconditioner<double,Eigen::Dynamic,Eigen::Upper|Eigen::Lower> >::expose("LimitedBFGSPreconditioner");
    
   }
+
 } // namespace eigenpy
+
+#endif
+
diff --git a/src/solvers/solvers.cpp b/src/solvers/solvers.cpp
index d0d7103f..8a30217d 100644
--- a/src/solvers/solvers.cpp
+++ b/src/solvers/solvers.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017, Justin Carpentier, LAAS-CNRS
+ * Copyright 2017-2018, Justin Carpentier, LAAS-CNRS
  *
  * This file is part of eigenpy.
  * eigenpy is free software: you can redistribute it and/or
@@ -14,6 +14,10 @@
  * with eigenpy.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <Eigen/Core>
+
+#if EIGEN_VERSION_AT_LEAST(3,2,0)
+
 #include "eigenpy/solvers/solvers.hpp"
 #include "eigenpy/solvers/ConjugateGradient.hpp"
 
@@ -43,3 +47,6 @@ namespace eigenpy
     ;
   }
 } // namespace eigenpy
+
+#endif
+
diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt
index 8b0a15c8..76a817fd 100644
--- a/unittest/CMakeLists.txt
+++ b/unittest/CMakeLists.txt
@@ -40,5 +40,7 @@ ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND})
 
 ADD_LIB_UNIT_TEST(matrix "eigen3")
 ADD_LIB_UNIT_TEST(geometry "eigen3")
-ADD_LIB_UNIT_TEST(ref "eigen3")
+IF(NOT ${EIGEN3_VERSION} VERSION_LESS "3.2.0")
+  ADD_LIB_UNIT_TEST(ref "eigen3")
+ENDIF()
 
-- 
GitLab