# AC_OSICBC_CONFIG(default_solver)
# Handles configuration of the underlying default solver in OsiCbc. The issue
# is that OsiCbc defines a default solver, used when the client does not
# specify a solver in the constructor. The default solver must, therefore,
# be present in the build. This macro checks that this is true, and sets the
# compile-time symbols OSICBC_DFLT_SOLVER, OSICBC_CLP_DFLT_SOLVER, and
# OSICBC_DFLT_SOLVER_HPP that control the build. The parameter default_solver
# should normally be clp, unless you're working on some other solver.
# Ideally, this macro would not require enumeration of solvers, but the
# effort required to avoid it is just not justified at present. One enumeration
# is hidden in AC_OSI_CANONICAL. The other is visible, the AM_CONDITIONAL
# list at the end.
# In an ideal world this macro would do absolutely nothing if Cbc is not
# present, but autotools is not an ideal world and we have to satisfy its
# requirements. In particular, the AM_CONDITIONAL macros need to execute or
# automake will complain. Really the only thing we need to suppress is the
# check that the default solver exists. All the rest is irrelevant when Cbc
# isn't present (hence OsiCbc will be configured but not actually compiled).
AC_DEFUN([AC_OSICBC_CONFIG],
[
# Process the with-osicbc-default-solver option.
AC_ARG_WITH([osicbc-default-solver],
AS_HELP_STRING([--with-osicbc-default-solver],
[specify underlying solver for OsiCbc (default $1)]),
[osicbc_with_solver=$withval],
[osicbc_with_solver=$1])
# Get canonical forms of the solver name and an existence variable.
AC_OSI_CANONICAL($osicbc_with_solver)
# Check that the requested solver is available. If we're not actually
# building OsiCbc, skip this check to avoid spurious failures in projects
# that don't have the default solver, Clp.
if test $coin_has_cbc != unavailable &&
test $coin_has_cbc != skipping; then
if test $osi_exists_solver = no; then
AC_MSG_ERROR([selected default solver $osicbc_with_solver is unavailable.
Please select an available solver using the --with-osicbc-default-solver option.])
fi
fi
# State the result.
AC_MSG_NOTICE([OsiCbc default solver is $osi_lc_solver])
# And set the configuration variables.
AC_DEFINE_UNQUOTED([OSICBC_DFLT_SOLVER],
[Osi${osi_mc_solver}SolverInterface],
[define to the name of the default solver interface class, e.g.,
OsiClpSolverInterface])
AC_DEFINE_UNQUOTED([OSICBC_DFLT_SOLVER_HPP],
["Osi${osi_mc_solver}SolverInterface.hpp"],
[define to the name of the .hpp file for the default solver interface
class, e.g., "OsiClpSolverInterface.hpp" (include quotes)])
if test $osi_mc_solver = "Clp"; then
AC_DEFINE([OSICBC_DFLT_SOLVER_CLP],[1],
[define this symbol if clp is the default solver])
fi
# Last but not least, we need automake conditionals.
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_CLP],[test $osi_mc_solver = Clp])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_CPX],[test $osi_mc_solver = Cpx])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_DYLP],[test $osi_mc_solver = Dylp])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_FMP],[test $osi_mc_solver = Fmp])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_GLPK],[test $osi_mc_solver = Glpk])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_MSK],[test $osi_mc_solver = Msk])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_OSL],[test $osi_mc_solver = Osl])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_SPX],[test $osi_mc_solver = Spx])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_SYM],[test $osi_mc_solver = Sym])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_VOL],[test $osi_mc_solver = Vol])
AM_CONDITIONAL([OSICBC_DFLT_SOLVER_XPR],[test $osi_mc_solver = Xpr])
])