Ignore warnings from within Eigen/SparseQR (3.2.2).
- As reported by Chris Sweeney on the mailing list, Eigen 3.2.2
trips various warnings in Eigen/SparseQR when compiling with GCC.
- Following Petter Strandmark's suggestion, Eigen headers are now
treated as system headers, which implicitly suppresses all warnings.
Change-Id: I104e8cb3f00935cefb894089bea827771e0e9fd0
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8433688..aaf89d1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -528,8 +528,18 @@
include
internal
internal/ceres
- ${GLOG_INCLUDE_DIRS}
- ${EIGEN_INCLUDE_DIRS})
+ ${GLOG_INCLUDE_DIRS})
+# Eigen SparseQR generates various compiler warnings related to unused and
+# uninitialised local variables, which prevents Ceres compilation as we use
+# -Werror. To avoid having to individually suppress these warnings around
+# the #include statments for Eigen headers across all GCC/Clang versions, we
+# tell CMake to treat Eigen headers as system headers. This results in all
+# compiler warnings from them being suppressed.
+#
+# Note that this is *not* propagated to clients, ie CERES_INCLUDE_DIRS
+# used by clients after find_package(Ceres) does not identify Eigen as
+# as system headers.
+INCLUDE_DIRECTORIES(SYSTEM ${EIGEN_INCLUDE_DIRS})
IF (SUITESPARSE)
INCLUDE_DIRECTORIES(${SUITESPARSE_INCLUDE_DIRS})
diff --git a/internal/ceres/covariance_impl.cc b/internal/ceres/covariance_impl.cc
index cfbfb44..cbbf139 100644
--- a/internal/ceres/covariance_impl.cc
+++ b/internal/ceres/covariance_impl.cc
@@ -38,26 +38,11 @@
#include <cstdlib>
#include <utility>
#include <vector>
+
#include "Eigen/SparseCore"
-
-// Suppress unused local variable warning from Eigen Ordering.h #included by
-// SparseQR in Eigen 3.2.0. This was fixed in Eigen 3.2.1, but 3.2.0 is still
-// widely used (Ubuntu 14.04), and Ceres won't compile otherwise due to -Werror.
-#if defined(_MSC_VER)
-#pragma warning( push )
-#pragma warning( disable : 4189 )
-#else
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
-#endif
#include "Eigen/SparseQR"
-#if defined(_MSC_VER)
-#pragma warning( pop )
-#else
-#pragma GCC diagnostic pop
-#endif
-
#include "Eigen/SVD"
+
#include "ceres/compressed_col_sparse_matrix_utils.h"
#include "ceres/compressed_row_sparse_matrix.h"
#include "ceres/covariance.h"