// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

#ifndef EIGEN_SUPERLUSUPPORT_MODULE_H
#define EIGEN_SUPERLUSUPPORT_MODULE_H

#include "SparseCore"

#include "src/Core/util/DisableStupidWarnings.h"

#ifdef EMPTY
#define EIGEN_EMPTY_WAS_ALREADY_DEFINED
#endif

// Required by SuperLU headers, which expect int_t to be defined as a global typedef.
typedef int int_t;
#include <slu_Cnames.h>
#include <supermatrix.h>
#include <slu_util.h>

// slu_util.h defines a preprocessor token named EMPTY which is really polluting,
// so we remove it in favor of a SUPERLU_EMPTY token.
// If EMPTY was already defined then we don't undef it.

#if defined(EIGEN_EMPTY_WAS_ALREADY_DEFINED)
#undef EIGEN_EMPTY_WAS_ALREADY_DEFINED
#elif defined(EMPTY)
#undef EMPTY
#endif

#define SUPERLU_EMPTY (-1)

namespace Eigen {
struct SluMatrix;
}

/** \ingroup Support_modules
 * \defgroup SuperLUSupport_Module SuperLUSupport module
 *
 * This module provides an interface to the <a href="http://crd-legacy.lbl.gov/~xiaoye/SuperLU/">SuperLU</a> library.
 * It provides the following factorization class:
 * - class SuperLU: a supernodal sequential LU factorization.
 * - class SuperILU: a supernodal sequential incomplete LU factorization (to be used as a preconditioner for iterative
 * methods).
 *
 * \warning This wrapper requires at least versions 4.0 of SuperLU. The 3.x versions are not supported.
 *
 * \warning When including this module, you have to use SUPERLU_EMPTY instead of EMPTY which is no longer defined
 * because it is too polluting.
 *
 * \code
 * #include <Eigen/SuperLUSupport>
 * \endcode
 *
 * In order to use this module, the superlu headers must be accessible from the include paths, and your binary must be
 * linked to the superlu library and its dependencies. The dependencies depend on how superlu has been compiled. For a
 * cmake based project, you can use our FindSuperLU.cmake module to help you in this task.
 *
 */

// IWYU pragma: begin_exports
#include "src/SuperLUSupport/SuperLUSupport.h"
// IWYU pragma: end_exports

#include "src/Core/util/ReenableStupidWarnings.h"

#endif  // EIGEN_SUPERLUSUPPORT_MODULE_H
