m4/lx_check_coin.m4
author Peter Kovacs <kpeter@inf.elte.hu>
Tue, 15 Mar 2011 19:32:21 +0100
changeset 936 ddd3c0d3d9bf
parent 627 20dac2104519
permissions -rw-r--r--
Implement the scaling Price Refinement heuristic in CostScaling (#417)
instead of Early Termination.

These two heuristics are similar, but the newer one is faster
and not only makes it possible to skip some epsilon phases, but
it can improve the performance of the other phases, as well.
     1 AC_DEFUN([LX_CHECK_COIN],
     2 [
     3   AC_ARG_WITH([coin],
     4 AS_HELP_STRING([--with-coin@<:@=PREFIX@:>@], [search for CLP under PREFIX or under the default search paths if PREFIX is not given @<:@default@:>@])
     5 AS_HELP_STRING([--without-coin], [disable checking for CLP]),
     6               [], [with_coin=yes])
     7 
     8   AC_ARG_WITH([coin-includedir],
     9 AS_HELP_STRING([--with-coin-includedir=DIR], [search for CLP headers in DIR]),
    10               [], [with_coin_includedir=no])
    11 
    12   AC_ARG_WITH([coin-libdir],
    13 AS_HELP_STRING([--with-coin-libdir=DIR], [search for CLP libraries in DIR]),
    14               [], [with_coin_libdir=no])
    15 
    16   lx_clp_found=no
    17   if test x"$with_coin" != x"no"; then
    18     AC_MSG_CHECKING([for CLP])
    19 
    20     if test x"$with_coin_includedir" != x"no"; then
    21       CLP_CXXFLAGS="-I$with_coin_includedir"
    22     elif test x"$with_coin" != x"yes"; then
    23       CLP_CXXFLAGS="-I$with_coin/include"
    24     fi
    25 
    26     if test x"$with_coin_libdir" != x"no"; then
    27       CLP_LDFLAGS="-L$with_coin_libdir"
    28     elif test x"$with_coin" != x"yes"; then
    29       CLP_LDFLAGS="-L$with_coin/lib"
    30     fi
    31     CLP_LIBS="-lClp -lCoinUtils -lm"
    32 
    33     lx_save_cxxflags="$CXXFLAGS"
    34     lx_save_ldflags="$LDFLAGS"
    35     lx_save_libs="$LIBS"
    36     CXXFLAGS="$CLP_CXXFLAGS"
    37     LDFLAGS="$CLP_LDFLAGS"
    38     LIBS="$CLP_LIBS"
    39 
    40     lx_clp_test_prog='
    41       #include <coin/ClpModel.hpp>
    42 
    43       int main(int argc, char** argv)
    44       {
    45         ClpModel clp;
    46         return 0;
    47       }'
    48 
    49     AC_LANG_PUSH(C++)
    50     AC_LINK_IFELSE([$lx_clp_test_prog], [lx_clp_found=yes], [lx_clp_found=no])
    51     AC_LANG_POP(C++)
    52 
    53     CXXFLAGS="$lx_save_cxxflags"
    54     LDFLAGS="$lx_save_ldflags"
    55     LIBS="$lx_save_libs"
    56 
    57     if test x"$lx_clp_found" = x"yes"; then
    58       AC_DEFINE([LEMON_HAVE_CLP], [1], [Define to 1 if you have CLP.])
    59       lx_lp_found=yes
    60       AC_DEFINE([LEMON_HAVE_LP], [1], [Define to 1 if you have any LP solver.])
    61       AC_MSG_RESULT([yes])
    62     else
    63       CLP_CXXFLAGS=""
    64       CLP_LDFLAGS=""
    65       CLP_LIBS=""
    66       AC_MSG_RESULT([no])
    67     fi
    68   fi
    69   CLP_LIBS="$CLP_LDFLAGS $CLP_LIBS"
    70   AC_SUBST(CLP_CXXFLAGS)
    71   AC_SUBST(CLP_LIBS)
    72   AM_CONDITIONAL([HAVE_CLP], [test x"$lx_clp_found" = x"yes"])
    73 
    74 
    75   lx_cbc_found=no
    76   if test x"$lx_clp_found" = x"yes"; then
    77     if test x"$with_coin" != x"no"; then
    78       AC_MSG_CHECKING([for CBC])
    79 
    80       if test x"$with_coin_includedir" != x"no"; then
    81         CBC_CXXFLAGS="-I$with_coin_includedir"
    82       elif test x"$with_coin" != x"yes"; then
    83         CBC_CXXFLAGS="-I$with_coin/include"
    84       fi
    85 
    86       if test x"$with_coin_libdir" != x"no"; then
    87         CBC_LDFLAGS="-L$with_coin_libdir"
    88       elif test x"$with_coin" != x"yes"; then
    89         CBC_LDFLAGS="-L$with_coin/lib"
    90       fi
    91       CBC_LIBS="-lOsi -lCbc -lCbcSolver -lClp -lOsiClp -lCoinUtils -lVol -lOsiVol -lCgl -lm -llapack -lblas"
    92 
    93       lx_save_cxxflags="$CXXFLAGS"
    94       lx_save_ldflags="$LDFLAGS"
    95       lx_save_libs="$LIBS"
    96       CXXFLAGS="$CBC_CXXFLAGS"
    97       LDFLAGS="$CBC_LDFLAGS"
    98       LIBS="$CBC_LIBS"
    99 
   100       lx_cbc_test_prog='
   101         #include <coin/CbcModel.hpp>
   102 
   103         int main(int argc, char** argv)
   104         {
   105           CbcModel cbc;
   106           return 0;
   107         }'
   108 
   109       AC_LANG_PUSH(C++)
   110       AC_LINK_IFELSE([$lx_cbc_test_prog], [lx_cbc_found=yes], [lx_cbc_found=no])
   111       AC_LANG_POP(C++)
   112 
   113       CXXFLAGS="$lx_save_cxxflags"
   114       LDFLAGS="$lx_save_ldflags"
   115       LIBS="$lx_save_libs"
   116 
   117       if test x"$lx_cbc_found" = x"yes"; then
   118         AC_DEFINE([LEMON_HAVE_CBC], [1], [Define to 1 if you have CBC.])
   119         lx_lp_found=yes
   120         AC_DEFINE([LEMON_HAVE_LP], [1], [Define to 1 if you have any LP solver.])
   121         lx_mip_found=yes
   122         AC_DEFINE([LEMON_HAVE_MIP], [1], [Define to 1 if you have any MIP solver.])
   123         AC_MSG_RESULT([yes])
   124       else
   125         CBC_CXXFLAGS=""
   126         CBC_LDFLAGS=""
   127         CBC_LIBS=""
   128         AC_MSG_RESULT([no])
   129       fi
   130     fi
   131   fi
   132   CBC_LIBS="$CBC_LDFLAGS $CBC_LIBS"
   133   AC_SUBST(CBC_CXXFLAGS)
   134   AC_SUBST(CBC_LIBS)
   135   AM_CONDITIONAL([HAVE_CBC], [test x"$lx_cbc_found" = x"yes"])
   136 ])