Fix the build on Eigen version 3.2.1 and older. Change-Id: I18f5cb5d42113737d7b8f78a67acee28bd5b3e08
diff --git a/internal/ceres/schur_complement_solver.h b/internal/ceres/schur_complement_solver.h index d1efd28..1b431dc 100644 --- a/internal/ceres/schur_complement_solver.h +++ b/internal/ceres/schur_complement_solver.h
@@ -191,16 +191,16 @@ #ifdef CERES_USE_EIGEN_SPARSE - // For Eigen versions less than 3.2.2, we cannot pre-order the - // Jacobian, so we must use an AMD ordering. + // The preprocessor gymnastics here are dealing with the fact that + // before version 3.2.2, Eigen did not support a third template + // parameter to specify the ordering. #if EIGEN_VERSION_AT_LEAST(3,2,2) - typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, - Eigen::Lower, - Eigen::NaturalOrdering<int> > SimplicialLDLT; + typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, Eigen::Lower, + Eigen::NaturalOrdering<int> > + SimplicialLDLT; #else - typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, - Eigen::Lower, - Eigen::AMDOrdering<int> > SimplicialLDLT; + typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, Eigen::Lower> + SimplicialLDLT; #endif scoped_ptr<SimplicialLDLT> simplicial_ldlt_;
diff --git a/internal/ceres/sparse_normal_cholesky_solver.cc b/internal/ceres/sparse_normal_cholesky_solver.cc index e7da6a8..94f7e58 100644 --- a/internal/ceres/sparse_normal_cholesky_solver.cc +++ b/internal/ceres/sparse_normal_cholesky_solver.cc
@@ -252,6 +252,7 @@ &event_logger); } +#if EIGEN_VERSION_AT_LEAST(3,2,2) // The common case if (natural_ldlt_.get() == NULL) { natural_ldlt_.reset(new SimplicialLDLTWithNaturalOrdering); @@ -263,6 +264,7 @@ natural_ldlt_.get(), rhs_and_solution, &event_logger); +#endif #endif // EIGEN_USE_EIGEN_SPARSE }
diff --git a/internal/ceres/sparse_normal_cholesky_solver.h b/internal/ceres/sparse_normal_cholesky_solver.h index d1efe00..12c0524 100644 --- a/internal/ceres/sparse_normal_cholesky_solver.h +++ b/internal/ceres/sparse_normal_cholesky_solver.h
@@ -95,17 +95,28 @@ cs_dis* cxsparse_factor_; #ifdef CERES_USE_EIGEN_SPARSE - typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, - Eigen::Upper, + + // The preprocessor gymnastics here are dealing with the fact that + // before version 3.2.2, Eigen did not support a third template + // parameter to specify the ordering. +#if EIGEN_VERSION_AT_LEAST(3,2,2) + typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, Eigen::Upper, Eigen::NaturalOrdering<int> > SimplicialLDLTWithNaturalOrdering; - typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, - Eigen::Upper, + scoped_ptr<SimplicialLDLTWithNaturalOrdering> natural_ldlt_; + + typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, Eigen::Upper, Eigen::AMDOrdering<int> > SimplicialLDLTWithAMDOrdering; - - scoped_ptr<SimplicialLDLTWithNaturalOrdering> natural_ldlt_; scoped_ptr<SimplicialLDLTWithAMDOrdering> amd_ldlt_; + +#else + typedef Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>, Eigen::Upper> + SimplicialLDLTWithAMDOrdering; + + scoped_ptr<SimplicialLDLTWithAMDOrdering> amd_ldlt_; +#endif + #endif scoped_ptr<CompressedRowSparseMatrix> outer_product_;