Fix #ifdef guards around METIS usage in EigenSparse backend and tests

Change-Id: Idd1e0b7b1b2df2d402431b107dee0fa8e0fd58f5
diff --git a/internal/ceres/dynamic_sparsity_test.cc b/internal/ceres/dynamic_sparsity_test.cc
index 694a343..9173098 100644
--- a/internal/ceres/dynamic_sparsity_test.cc
+++ b/internal/ceres/dynamic_sparsity_test.cc
@@ -366,7 +366,8 @@
 };
 
 TEST(DynamicSparsity, StaticAndDynamicSparsityProduceSameSolution) {
-  // Skip test if there is no sparse linear algebra library.
+  // Skip test if there is no sparse linear algebra library that
+  // supports dynamic sparsity.
   if (!IsSparseLinearAlgebraLibraryTypeAvailable(SUITE_SPARSE) &&
       !IsSparseLinearAlgebraLibraryTypeAvailable(EIGEN_SPARSE)) {
     return;
@@ -426,6 +427,13 @@
   Solver::Options options;
   options.max_num_iterations = 100;
   options.linear_solver_type = SPARSE_NORMAL_CHOLESKY;
+  // Only SuiteSparse & EigenSparse currently support dynamic sparsity.
+  options.sparse_linear_algebra_library_type =
+#if !defined(CERES_NO_SUITESPARSE)
+      ceres::SUITE_SPARSE;
+#elif defined(CERES_USE_EIGEN_SPARSE)
+      ceres::EIGEN_SPARSE;
+#endif
 
   // First, solve `X` and `t` jointly with dynamic_sparsity = true.
   Matrix X0 = X;
diff --git a/internal/ceres/eigensparse.cc b/internal/ceres/eigensparse.cc
index 982608a..a2407c0 100644
--- a/internal/ceres/eigensparse.cc
+++ b/internal/ceres/eigensparse.cc
@@ -157,23 +157,19 @@
 
   if (ordering_type == OrderingType::AMD) {
     return std::make_unique<EigenSparseCholeskyTemplate<WithAMDOrdering>>();
-#ifndef CERES_NO_EIGEN_METIS
   } else if (ordering_type == OrderingType::NESDIS) {
+#ifndef CERES_NO_EIGEN_METIS
     using WithMetisOrdering = Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>,
                                                     Eigen::Upper,
                                                     Eigen::MetisOrdering<int>>;
-
     return std::make_unique<EigenSparseCholeskyTemplate<WithMetisOrdering>>();
-  }
 #else
-  } else {
     LOG(FATAL)
         << "Congratulations you have found a bug in Ceres Solver. Please "
            "report it to the Ceres Solver developers.";
     return nullptr;
+#endif  // CERES_NO_EIGEN_METIS
   }
-#endif
-
   return std::make_unique<EigenSparseCholeskyTemplate<WithNaturalOrdering>>();
 }
 
@@ -190,23 +186,19 @@
                             Eigen::NaturalOrdering<int>>;
   if (ordering_type == OrderingType::AMD) {
     return std::make_unique<EigenSparseCholeskyTemplate<WithAMDOrdering>>();
-#ifndef CERES_NO_EIGEN_METIS
   } else if (ordering_type == OrderingType::NESDIS) {
+#ifndef CERES_NO_EIGEN_METIS
     using WithMetisOrdering = Eigen::SimplicialLDLT<Eigen::SparseMatrix<float>,
                                                     Eigen::Upper,
                                                     Eigen::MetisOrdering<int>>;
-
     return std::make_unique<EigenSparseCholeskyTemplate<WithMetisOrdering>>();
-  }
 #else
-  } else {
     LOG(FATAL)
         << "Congratulations you have found a bug in Ceres Solver. Please "
-           "report it to the Ceres Solver developers.";
+        "report it to the Ceres Solver developers.";
     return nullptr;
+#endif  // CERES_NO_EIGEN_METIS
   }
-#endif
-
   return std::make_unique<EigenSparseCholeskyTemplate<WithNaturalOrdering>>();
 }
 
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc
index 47a370d..9503843 100644
--- a/internal/ceres/solver.cc
+++ b/internal/ceres/solver.cc
@@ -213,6 +213,10 @@
           *error = StringPrintf(
               "Can't use NESDIS with SUITE_SPARSE because SuiteSparse was "
               "compiled without support for Metis.");
+        } else if (options.sparse_linear_algebra_library_type == EIGEN_SPARSE) {
+          *error = StringPrintf(
+              "Can't use NESDIS with EIGEN_SPARSE because Ceres was "
+              "compiled without support for Metis.");
         } else {
           *error = StringPrintf(
               "Can't use NESDIS with "
diff --git a/internal/ceres/sparse_cholesky_test.cc b/internal/ceres/sparse_cholesky_test.cc
index 785f2e9..147711e 100644
--- a/internal/ceres/sparse_cholesky_test.cc
+++ b/internal/ceres/sparse_cholesky_test.cc
@@ -230,7 +230,9 @@
     SparseCholeskyTest,
     ::testing::Combine(::testing::Values(EIGEN_SPARSE),
                        ::testing::Values(OrderingType::AMD,
+#ifndef CERES_NO_EIGEN_METIS
                                          OrderingType::NESDIS,
+#endif  // CERES_NO_EIGEN_METIS
                                          OrderingType::NATURAL),
                        ::testing::Values(true, false)),
     ParamInfoToString);
@@ -240,7 +242,9 @@
     SparseCholeskyTest,
     ::testing::Combine(::testing::Values(EIGEN_SPARSE),
                        ::testing::Values(OrderingType::AMD,
+#ifndef CERES_NO_EIGEN_METIS
                                          OrderingType::NESDIS,
+#endif  // CERES_NO_EIGEN_METIS
                                          OrderingType::NATURAL),
                        ::testing::Values(true, false)),
     ParamInfoToString);