Default to any other sparse libraries over Accelerate

- Accelerate currently does not support dynamic sparsity, whereas the
  other sparse linear algebra libraries do (outstanding issue to update)
- Previously we preferred Accelerate to all but SuiteSparse if it was
  available, which breaks the dynamic_sparsity_test if SuiteSparse is
  *not* available (even if others are) as Accelerate does not support
  dynamic sparsity.

Change-Id: Ibc2dd2f14f83cffbecca38097d02bb2188aaaa05
diff --git a/include/ceres/solver.h b/include/ceres/solver.h
index f0efeb4..10c2683 100644
--- a/include/ceres/solver.h
+++ b/include/ceres/solver.h
@@ -358,12 +358,12 @@
     SparseLinearAlgebraLibraryType sparse_linear_algebra_library_type =
 #if !defined(CERES_NO_SUITESPARSE)
         SUITE_SPARSE;
-#elif !defined(CERES_NO_ACCELERATE_SPARSE)
-        ACCELERATE_SPARSE;
-#elif !defined(CERES_NO_CXSPARSE)
-        CX_SPARSE;
 #elif defined(CERES_USE_EIGEN_SPARSE)
         EIGEN_SPARSE;
+#elif !defined(CERES_NO_CXSPARSE)
+        CX_SPARSE;
+#elif !defined(CERES_NO_ACCELERATE_SPARSE)
+        ACCELERATE_SPARSE;
 #else
         NO_SPARSE;
 #endif
diff --git a/internal/ceres/dynamic_sparse_normal_cholesky_solver.cc b/internal/ceres/dynamic_sparse_normal_cholesky_solver.cc
index f966083..25d5417 100644
--- a/internal/ceres/dynamic_sparse_normal_cholesky_solver.cc
+++ b/internal/ceres/dynamic_sparse_normal_cholesky_solver.cc
@@ -92,8 +92,10 @@
       summary = SolveImplUsingEigen(A, x);
       break;
     default:
-      LOG(FATAL) << "Unknown sparse linear algebra library : "
-                 << options_.sparse_linear_algebra_library_type;
+      LOG(FATAL) << "Unsupported sparse linear algebra library for "
+                 << "dynamic sparsity: "
+                 << SparseLinearAlgebraLibraryTypeToString(
+                     options_.sparse_linear_algebra_library_type);
   }
 
   if (per_solve_options.D != nullptr) {
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc
index 0627d8c..14e50f3 100644
--- a/internal/ceres/solver.cc
+++ b/internal/ceres/solver.cc
@@ -222,10 +222,16 @@
     return false;
   }
 
-  if (options.dynamic_sparsity &&
-      options.linear_solver_type != SPARSE_NORMAL_CHOLESKY) {
-    *error = "Dynamic sparsity is only supported with SPARSE_NORMAL_CHOLESKY.";
-    return false;
+  if (options.dynamic_sparsity) {
+    if (options.linear_solver_type != SPARSE_NORMAL_CHOLESKY) {
+      *error = "Dynamic sparsity is only supported with SPARSE_NORMAL_CHOLESKY.";
+      return false;
+    }
+    if (options.sparse_linear_algebra_library_type == ACCELERATE_SPARSE) {
+      *error = "ACCELERATE_SPARSE is not currently supported with dynamic "
+          "sparsity.";
+      return false;
+    }
   }
 
   return true;
diff --git a/internal/ceres/solver_test.cc b/internal/ceres/solver_test.cc
index 6acae0b..6fb5f74 100644
--- a/internal/ceres/solver_test.cc
+++ b/internal/ceres/solver_test.cc
@@ -336,6 +336,15 @@
   string message;
   EXPECT_FALSE(options.IsValid(&message));
 }
+#else
+TEST(Solver, DynamicSparseNormalCholeskyUnsupportedWithAccelerateSparse) {
+  Solver::Options options;
+  options.sparse_linear_algebra_library_type = ACCELERATE_SPARSE;
+  options.linear_solver_type = SPARSE_NORMAL_CHOLESKY;
+  options.dynamic_sparsity = true;
+  string message;
+  EXPECT_FALSE(options.IsValid(&message));
+}
 #endif
 
 #if !defined(CERES_USE_EIGEN_SPARSE)