m4/lx_check_coin.m4
author Balazs Dezso <deba@inf.elte.hu>
Thu, 24 Jun 2010 09:27:53 +0200
changeset 732 bb70ad62c95f
parent 622 20dac2104519
permissions -rw-r--r--
Fix critical bug in preflow (#372)

The wrong transition between the bound decrease and highest active
heuristics caused the bug. The last node chosen in bound decrease mode
is used in the first iteration in highest active mode.
     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 ])