# HG changeset patch # User Alpar Juttner # Date 1369457971 -7200 # Node ID fc3854d936f7ffcac2129e96360a014663499d4e # Parent 1782aa72495ad552b05d3dbabb1c6110d3d0c09f Enable/disable options for LP/MIP backends (#465) diff -r 1782aa72495a -r fc3854d936f7 CMakeLists.txt --- a/CMakeLists.txt Fri Jul 20 17:09:01 2012 +0200 +++ b/CMakeLists.txt Sat May 25 06:59:31 2013 +0200 @@ -61,9 +61,64 @@ FIND_PACKAGE(Doxygen) FIND_PACKAGE(Ghostscript) -FIND_PACKAGE(GLPK 4.33) -FIND_PACKAGE(ILOG) -FIND_PACKAGE(COIN) + +SET(LEMON_ENABLE_GLPK YES CACHE STRING "Enable GLPK solver backend.") +SET(LEMON_ENABLE_ILOG YES CACHE STRING "Enable ILOG (CPLEX) solver backend.") +SET(LEMON_ENABLE_COIN YES CACHE STRING "Enable COIN solver backend.") + +IF(LEMON_ENABLE_GLPK) + FIND_PACKAGE(GLPK 4.33) +ENDIF(LEMON_ENABLE_GLPK) +IF(LEMON_ENABLE_ILOG) + FIND_PACKAGE(ILOG) +ENDIF(LEMON_ENABLE_ILOG) +IF(LEMON_ENABLE_COIN) + FIND_PACKAGE(COIN) +ENDIF(LEMON_ENABLE_COIN) + +IF(GLPK_FOUND) + SET(LEMON_HAVE_LP TRUE) + SET(LEMON_HAVE_MIP TRUE) + SET(LEMON_HAVE_GLPK TRUE) +ENDIF(GLPK_FOUND) +IF(ILOG_FOUND) + SET(LEMON_HAVE_LP TRUE) + SET(LEMON_HAVE_MIP TRUE) + SET(LEMON_HAVE_ILOG TRUE) +ENDIF(ILOG_FOUND) +IF(COIN_FOUND) + SET(LEMON_HAVE_LP TRUE) + SET(LEMON_HAVE_MIP TRUE) + SET(LEMON_HAVE_CLP TRUE) + SET(LEMON_HAVE_CBC TRUE) +ENDIF(COIN_FOUND) + +IF(ILOG_FOUND) + SET(DEFAULT_LP "CPLEX") + SET(DEFAULT_MIP "CPLEX") +ELSEIF(COIN_FOUND) + SET(DEFAULT_LP "CLP") + SET(DEFAULT_MIP "CBC") +ELSEIF(GLPK_FOUND) + SET(DEFAULT_LP "GLPK") + SET(DEFAULT_MIP "GLPK") +ENDIF() + +IF(NOT LEMON_DEFAULT_LP OR + (NOT ILOG_FOUND AND (LEMON_DEFAULT_LP STREQUAL "CPLEX")) OR + (NOT COIN_FOUND AND (LEMON_DEFAULT_LP STREQUAL "CLP")) OR + (NOT GLPK_FOUND AND (LEMON_DEFAULT_LP STREQUAL "GLPK"))) + SET(LEMON_DEFAULT_LP ${DEFAULT_LP} CACHE STRING + "Default LP solver backend (GLPK, CPLEX or CLP)" FORCE) +ENDIF() +IF(NOT LEMON_DEFAULT_MIP OR + (NOT ILOG_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "CPLEX")) OR + (NOT COIN_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "CBC")) OR + (NOT GLPK_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "GLPK"))) + SET(LEMON_DEFAULT_MIP ${DEFAULT_MIP} CACHE STRING + "Default MIP solver backend (GLPK, CPLEX or CBC)" FORCE) +ENDIF() + IF(DEFINED ENV{LEMON_CXX_WARNING}) SET(CXX_WARNING $ENV{LEMON_CXX_WARNING}) diff -r 1782aa72495a -r fc3854d936f7 INSTALL --- a/INSTALL Fri Jul 20 17:09:01 2012 +0200 +++ b/INSTALL Sat May 25 06:59:31 2013 +0200 @@ -106,11 +106,57 @@ Build shared library instead of static one. Think twice if you really want to use this option. +-DLEMON_DOC_SOURCE_BROWSER=YES + + Include the browsable cross referenced LEMON source code into the + doc. It makes the doc quite bloated, but may be useful for + developing LEMON itself. + +-DLEMON_DOC_USE_MATHJAX=YES + + Use MathJax (http://mathjax.org) for rendering the math formulae in + the doc. It of much higher quality compared to the default LaTeX + generated static images and it allows copy&paste of the formulae to + LaTeX, Open Office, MS Word etc. documents. + + On the other hand, it needs either Internet access or a locally + installed version of MathJax to properly render the doc. + +-DLEMON_DOC_MATHJAX_RELPATH=DIRECTORY + + The location of the MathJax library. It defaults to + http://www.mathjax.org/mathjax, which necessitates Internet access + for proper rendering. The easiest way to make it usable offline is + to set this parameter to 'mathjax' and copy all files of the MathJax + library into the 'doc/html/mathjax' subdirectory of the build + location. + + See http://docs.mathjax.org/en/latest/installation.html for more details. + + +-DLEMON_ENABLE_GLPK=NO +-DLEMON_ENABLE_COIN=NO +-DLEMON_ENABLE_ILOG=NO + + Enable optional third party libraries. They are all enabled by default. + +-DLEMON_DEFAULT_LP=GLPK + + Sets the default LP solver backend. The supported values are + CPLEX, CLP and GLPK. By default, it is set to the first one which + is enabled and succesfully discovered. + +-DLEMON_DEFAULT_MIP=GLPK + + Sets the default MIP solver backend. The supported values are + CPLEX, CBC and GLPK. By default, it is set to the first one which + is enabled and succesfully discovered. + -DGLPK_ROOT_DIR=DIRECTORY -DCOIN_ROOT_DIR=DIRECTORY -DILOG_ROOT_DIR=DIRECTORY - Install root directory prefixes of optional third party libraries. + Root directory prefixes of optional third party libraries. Makefile Variables ================== diff -r 1782aa72495a -r fc3854d936f7 cmake/FindCOIN.cmake --- a/cmake/FindCOIN.cmake Fri Jul 20 17:09:01 2012 +0200 +++ b/cmake/FindCOIN.cmake Sat May 25 06:59:31 2013 +0200 @@ -108,10 +108,3 @@ COIN_ZLIB_LIBRARY COIN_BZ2_LIBRARY ) - -IF(COIN_FOUND) - SET(LEMON_HAVE_LP TRUE) - SET(LEMON_HAVE_MIP TRUE) - SET(LEMON_HAVE_CLP TRUE) - SET(LEMON_HAVE_CBC TRUE) -ENDIF(COIN_FOUND) diff -r 1782aa72495a -r fc3854d936f7 cmake/FindGLPK.cmake --- a/cmake/FindGLPK.cmake Fri Jul 20 17:09:01 2012 +0200 +++ b/cmake/FindGLPK.cmake Sat May 25 06:59:31 2013 +0200 @@ -53,10 +53,3 @@ ENDIF(GLPK_FOUND) MARK_AS_ADVANCED(GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_BIN_DIR) - -IF(GLPK_FOUND) - SET(LEMON_HAVE_LP TRUE) - SET(LEMON_HAVE_MIP TRUE) - SET(LEMON_HAVE_GLPK TRUE) -ENDIF(GLPK_FOUND) - diff -r 1782aa72495a -r fc3854d936f7 cmake/FindILOG.cmake --- a/cmake/FindILOG.cmake Fri Jul 20 17:09:01 2012 +0200 +++ b/cmake/FindILOG.cmake Sat May 25 06:59:31 2013 +0200 @@ -100,9 +100,3 @@ ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR ILOG_CPLEX_DLL ILOG_CONCERT_LIBRARY ILOG_CONCERT_INCLUDE_DIR ILOG_CONCERT_DLL ) - -IF(ILOG_FOUND) - SET(LEMON_HAVE_LP TRUE) - SET(LEMON_HAVE_MIP TRUE) - SET(LEMON_HAVE_CPLEX TRUE) -ENDIF(ILOG_FOUND) diff -r 1782aa72495a -r fc3854d936f7 lemon/cbc.h --- a/lemon/cbc.h Fri Jul 20 17:09:01 2012 +0200 +++ b/lemon/cbc.h Sat May 25 06:59:31 2013 +0200 @@ -16,7 +16,6 @@ * */ -// -*- C++ -*- #ifndef LEMON_CBC_H #define LEMON_CBC_H diff -r 1782aa72495a -r fc3854d936f7 lemon/config.h.in --- a/lemon/config.h.in Fri Jul 20 17:09:01 2012 +0200 +++ b/lemon/config.h.in Sat May 25 06:59:31 2013 +0200 @@ -6,5 +6,7 @@ #cmakedefine LEMON_HAVE_CPLEX 1 #cmakedefine LEMON_HAVE_CLP 1 #cmakedefine LEMON_HAVE_CBC 1 +#cmakedefine LEMON_DEFAULT_LP @LEMON_DEFAULT_LP@ +#cmakedefine LEMON_DEFAULT_MIP @LEMON_DEFAULT_MIP@ #cmakedefine LEMON_USE_PTHREAD 1 #cmakedefine LEMON_USE_WIN32_THREADS 1 diff -r 1782aa72495a -r fc3854d936f7 lemon/lp.h --- a/lemon/lp.h Fri Jul 20 17:09:01 2012 +0200 +++ b/lemon/lp.h Sat May 25 06:59:31 2013 +0200 @@ -59,32 +59,31 @@ ///The default MIP solver identifier. ///\ingroup lp_group /// - ///Currently, the possible values are \c GLPK or \c CPLEX + ///Currently, the possible values are \c GLPK, \c CPLEX or \c CBC #define LEMON_DEFAULT_MIP SOLVER ///The default MIP solver. ///The default MIP solver. ///\ingroup lp_group /// - ///Currently, it is either \c GlpkMip or \c CplexMip + ///Currently, it is either \c GlpkMip, \c CplexMip , \c CbcMip typedef GlpkMip Mip; #else -#ifdef LEMON_HAVE_GLPK -# define LEMON_DEFAULT_LP GLPK +#if LEMON_DEFAULT_LP == GLPK typedef GlpkLp Lp; -# define LEMON_DEFAULT_MIP GLPK - typedef GlpkMip Mip; -#elif LEMON_HAVE_CPLEX -# define LEMON_DEFAULT_LP CPLEX +#elif LEMON_DEFAULT_LP == CPLEX typedef CplexLp Lp; -# define LEMON_DEFAULT_MIP CPLEX +#elif LEMON_DEFAULT_LP == SOPLEX + typedef SoplexLp Lp; +#elif LEMON_DEFAULT_LP == CLP + typedef ClpLp Lp; +#endif +#if LEMON_DEFAULT_MIP == GLPK + typedef GlpkLp Mip; +#elif LEMON_DEFAULT_MIP == CPLEX typedef CplexMip Mip; -#elif LEMON_HAVE_SOPLEX -# define DEFAULT_LP SOPLEX - typedef SoplexLp Lp; -#elif LEMON_HAVE_CLP -# define DEFAULT_LP CLP - typedef ClpLp Lp; +#elif LEMON_DEFAULT_MIP == CBC + typedef CbcMip Mip; #endif #endif diff -r 1782aa72495a -r fc3854d936f7 test/lp_test.cc --- a/test/lp_test.cc Fri Jul 20 17:09:01 2012 +0200 +++ b/test/lp_test.cc Sat May 25 06:59:31 2013 +0200 @@ -240,8 +240,7 @@ { LP::DualExpr e,f,g; - LP::Row p1 = INVALID, p2 = INVALID, p3 = INVALID, - p4 = INVALID, p5 = INVALID; + LP::Row p1 = INVALID, p2 = INVALID; e[p1]=2; e[p1]+=2;