m4/lx_check_coin.m4
author Peter Kovacs <kpeter@inf.elte.hu>
Thu, 12 Nov 2009 23:26:13 +0100
changeset 806 fa6f37d7a25b
parent 627 20dac2104519
permissions -rw-r--r--
Entirely rework CapacityScaling (#180)

- Use the new interface similarly to NetworkSimplex.
- Rework the implementation using an efficient internal structure
for handling the residual network. This improvement made the
code much faster (up to 2-5 times faster on large graphs).
- Handle GEQ supply type (LEQ is not supported).
- Handle negative costs for arcs of finite capacity.
(Note that this algorithm cannot handle arcs of negative cost
and infinite upper bound, thus it returns UNBOUNDED if such
an arc exists.)
- Extend the documentation.
     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 ])