diff --git a/dune/istl/test/solverfactorytest.cc.in b/dune/istl/test/solverfactorytest.cc.in
index c5a519ff7d0a7ac5140069bbe033d1d538a5eae8..b113e717195ee0e7dd133cf7ccfd950aa47a8f4a 100644
--- a/dune/istl/test/solverfactorytest.cc.in
+++ b/dune/istl/test/solverfactorytest.cc.in
@@ -52,6 +52,24 @@ using Matrix = Dune::BCRSMatrix<typename MatrixBlock<@BLOCK@>::type>;
 template<class Comm>
 void testSeq(const Dune::ParameterTree& config, Comm c){
   if(c.rank() == 0){
+    std::set<std::string> deactivate_solvers;
+
+#if !HAVE_SUITESPARSE_CHOLMOD
+    deactivate_solvers.insert("Cholmod");
+#endif
+#if !HAVE_SUITESPARSE_LDL
+    deactivate_solvers.insert("LDL");
+#endif
+#if !HAVE_SUITESPARSE_UMFPACK
+    deactivate_solvers.insert("UMFPack");
+#endif
+#if !HAVE_SUITESPARSE_SPQR
+    deactivate_solvers.insert("SPQR");
+#endif
+#if !HAVE_SUPERLU
+    deactivate_solvers.insert("SuperLU");
+#endif
+
     Matrix mat;
     int N = config.get("N", 10);
     setupLaplacian(mat, N);
@@ -61,6 +79,9 @@ void testSeq(const Dune::ParameterTree& config, Comm c){
     std::shared_ptr<Operator> op = std::make_shared<Operator>(mat);
 
     for(const std::string& test : config.getSubKeys()){
+      if(deactivate_solvers.find(test) != deactivate_solvers.end())
+        continue;
+
       Dune::ParameterTree solverConfig = config.sub(test);
       std::cout << " ============== " << test << " ============== " << std::endl;
       try{