Check CUDA is available in solver.cc

Add logic for checking for availability of CUDA as the
dense linear algebra library before allowing the user
to use it.

Change-Id: I0ceafa1052632504b33685bc731366ef6933e518
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc
index 7560883..150c555 100644
--- a/internal/ceres/solver.cc
+++ b/internal/ceres/solver.cc
@@ -141,16 +141,20 @@
     return false;
   }
 
-  if (options.dense_linear_algebra_library_type == LAPACK &&
-      !IsDenseLinearAlgebraLibraryTypeAvailable(LAPACK) &&
+  if (!IsDenseLinearAlgebraLibraryTypeAvailable(
+          options.dense_linear_algebra_library_type) &&
       (options.linear_solver_type == DENSE_NORMAL_CHOLESKY ||
        options.linear_solver_type == DENSE_QR ||
        options.linear_solver_type == DENSE_SCHUR)) {
     *error = StringPrintf(
         "Can't use %s with "
-        "Solver::Options::dense_linear_algebra_library_type = LAPACK "
-        "because LAPACK was not enabled when Ceres was built.",
-        LinearSolverTypeToString(options.linear_solver_type));
+        "Solver::Options::dense_linear_algebra_library_type = %s "
+        "because %s was not enabled when Ceres was built.",
+        LinearSolverTypeToString(options.linear_solver_type),
+        DenseLinearAlgebraLibraryTypeToString(
+            options.dense_linear_algebra_library_type),
+        DenseLinearAlgebraLibraryTypeToString(
+            options.dense_linear_algebra_library_type));
     return false;
   }
 
diff --git a/internal/ceres/types.cc b/internal/ceres/types.cc
index ebd454f..8cfbc77 100644
--- a/internal/ceres/types.cc
+++ b/internal/ceres/types.cc
@@ -420,6 +420,7 @@
   if (type == EIGEN) {
     return true;
   }
+
   if (type == LAPACK) {
 #ifdef CERES_NO_LAPACK
     return false;
@@ -428,6 +429,14 @@
 #endif
   }
 
+  if (type == CUDA) {
+#ifdef CERES_NO_CUDA
+    return false;
+#else
+    return false;
+#endif
+  }
+
   LOG(WARNING) << "Unknown dense linear algebra library " << type;
   return false;
 }