source: trunk/Cbc/configure.ac @ 2398

Last change on this file since 2398 was 2392, checked in by lou, 11 months ago

Add a check for Mumps to configure.ac so that COIN_HAS_MUMPS is defined when
CbcOrClpParam?.cpp is pulled into CbcCbcParam?.cpp.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.3 KB
Line 
1# Copyright (C) 2006, 2007 International Business Machines.
2# All Rights Reserved.
3# This file is distributed under the Eclipse Public License.
4
5## $Id: configure.ac 2392 2018-10-15 22:47:50Z tkr $
6
7# Author:  Andreas Waechter            IBM    2006-04-13
8
9#############################################################################
10#                       Names and other basic things                        #
11#############################################################################
12
13AC_PREREQ(2.59)
14
15AC_INIT([Cbc],[trunk],[cbc@lists.coin-or.org])
16
17AC_COPYRIGHT([
18Copyright 2006 International Business Machines and others.
19All Rights Reserved.
20This file is part of the open source package Coin which is distributed
21under the Eclipse Public License.])
22
23# List one file in the package so that the configure script can test
24# whether the package is actually there
25AC_CONFIG_SRCDIR(src/CbcTree.hpp)
26
27# Where should everything be installed by default?  Here, we want it
28# to be installed directly in 'bin', 'lib', 'include' subdirectories
29# of the directory where configure is run.  The default would be
30# /usr/local.
31AC_PREFIX_DEFAULT([`pwd`])
32
33#############################################################################
34#                         Standard build tool stuff                         #
35#############################################################################
36
37# Get the system type
38AC_CANONICAL_BUILD
39
40# If this project depends on external projects, the Externals file in
41# the source root directory contains definition of where to find those
42# externals.  The following macro ensures that those externals are
43# retrieved by svn if they are not there yet.
44AC_COIN_PROJECTDIR_INIT(Cbc)
45
46# Check if user wants to produce debugging code
47AC_COIN_DEBUG_COMPILE(Cbc)
48
49# Get the name of the C++ compiler and appropriate compiler options
50AC_COIN_PROG_CXX
51
52# Initialize automake and libtool
53AC_COIN_INIT_AUTO_TOOLS
54
55#############################################################################
56#                            COIN-OR components                             #
57#############################################################################
58
59AC_COIN_CHECK_PACKAGE(CoinDepend, [cgl osi coinutils], [CbcLib CbcGeneric])
60if test $coin_has_coindepend != yes ; then
61  AC_MSG_ERROR([One or more required packages CoinUtils, Osi, and Cgl are not available.])
62fi
63
64# Clp and OsiClp are inseparable here.
65
66AC_COIN_CHECK_PACKAGE(Clp, [osi-clp], [CbcLib CbcGeneric])
67if test $coin_has_clp != yes ; then
68  AC_MSG_ERROR("Required package Clp unavailable.")
69fi
70
71# The rest are not required for linking against Cbc
72
73AC_COIN_CHECK_PACKAGE(OsiTests, [osi-unittests])
74AC_COIN_CHECK_PACKAGE(Sample,   [coindatasample])
75AC_COIN_CHECK_PACKAGE(Netlib,   [coindatanetlib])
76AC_COIN_CHECK_PACKAGE(Miplib3,  [coindatamiplib3])
77
78# Cbc really should make these tests; right now it assumes far too much about
79# its environment. Needed for cbc-generic.
80
81AC_COIN_CHECK_CXX_CHEADER(math)
82AC_COIN_CHECK_CXX_CHEADER(float)
83AC_COIN_CHECK_CXX_CHEADER(ieeefp)
84
85AC_COIN_CHECK_GNU_READLINE(CbcLib CbcGeneric)
86
87#############################################################################
88#                    LP solvers other than CLP                              #
89#############################################################################
90
91# Check which other LP solvers are available, some of them become a dependency of CbcGeneric
92AC_COIN_CHECK_PACKAGE(DyLP, [osi-dylp],   [CbcGeneric])
93AC_COIN_CHECK_PACKAGE(Vol,  [osi-vol])
94AC_COIN_CHECK_PACKAGE(Cpx,  [osi-cplex],  [CbcLib CbcGeneric])
95AC_COIN_CHECK_PACKAGE(Glpk, [osi-glpk],   [CbcGeneric])
96AC_COIN_CHECK_PACKAGE(Grb,  [osi-gurobi])
97AC_COIN_CHECK_PACKAGE(Msk,  [osi-mosek],  [CbcGeneric])
98AC_COIN_CHECK_PACKAGE(Spx,  [osi-soplex], [CbcGeneric])
99AC_COIN_CHECK_PACKAGE(Xpr,  [osi-xpress])
100
101#############################################################################
102#                       Other third party software                          #
103#############################################################################
104
105# Ampl Solver library
106AC_COIN_CHECK_PACKAGE(ASL, [coinasl], [CbcLib CbcGeneric])
107
108# MUMPS
109AC_COIN_CHECK_PACKAGE(Mumps, [coinmumps])
110
111# Nauty library (for symmetry detection)
112AC_LANG_PUSH(C)
113AC_COIN_CHECK_USER_LIBRARY([Nauty],[NTY],[nauty.h],[nauty],,[CbcLib CbcGeneric])
114AC_LANG_POP(C)
115
116#############################################################################
117#                       CbcGeneric configuration                            #
118#############################################################################
119
120# Are we building cbc-generic? Default is no (false).
121
122AC_ARG_WITH([cbc-generic],
123  AS_HELP_STRING([--with-cbc-generic],
124                 [specify whether to build cbc-generic (default: no)]),
125  [case $withval in
126    yes) cbc_with_cbc_generic=true ;;
127      *) cbc_with_cbc_generic=false ;;
128   esac],
129  [cbc_with_cbc_generic=false])
130if test x"$cbc_with_cbc_generic" = xyes ; then
131  AC_MSG_NOTICE([building cbc-generic])
132fi
133AM_CONDITIONAL(CBC_BUILD_CBC_GENERIC,
134               test x"$cbc_with_cbc_generic" = xtrue)
135
136# Set the default solver for cbc-generic. In theory, any OsiXXX should work.
137# In practice, only the three listed below have had any testing.
138
139AC_MSG_CHECKING(for cbc-generic default solver)
140AC_ARG_WITH([cbc-generic-solver],
141            AC_HELP_STRING([--with-cbc-generic-solver],
142                           [specify default solver for cbc-generic in lower
143                            case letters (if not given, clp is assumed)]),
144            [cbc_default_solver=$withval],
145            [cbc_default_solver=clp])
146AC_MSG_RESULT($cbc_default_solver)
147
148# FIXME what about cplex and mosek here?
149case $cbc_default_solver in
150    clp)
151      ;;
152   dylp)
153      ;;
154   glpk)
155      ;;
156 soplex)
157      ;;
158      *)
159      AC_MSG_WARN([Unrecognised solver $cbc_default_solver chosen as cbc-generic default solver.])
160      ;;
161esac
162AC_DEFINE_UNQUOTED([CBC_DEFAULT_SOLVER],"$cbc_default_solver",
163  [Define to the name of the default solver to be used in cbc-generic in small letters])
164
165
166#############################################################################
167#                       Cbc parallel configuration                          #
168#############################################################################
169
170# First we define a new option, --enable-cbc-parallel
171
172AC_ARG_ENABLE([cbc-parallel],
173[AC_HELP_STRING([--enable-cbc-parallel],
174                [enables compilation of the SMP version of Cbc])])
175
176if test "$enable_cbc_parallel" = yes; then
177  # Define the preprocessor macro
178  AC_DEFINE([CBC_THREAD],[1],[Define to 1 if the SMP version of Cbc should be compiled])
179  if test $coin_cxx_is_cl = true ;
180  then
181    # TODO we should check whether the library works and pthread.h is indeed there
182    AC_ARG_WITH(pthreadsw32-lib,
183                AC_HELP_STRING([--with-pthreadsw32-lib],
184                               [specify the name of the pthreads win32 library (for cl/icl builds only)]),
185                [CBCLIB_LIBS="$withval $CBCLIB_LIBS"
186                 CBCLIB_PCLIBS="$withval $CBCLIB_PCLIBS"],
187                [AC_MSG_WARN([--enable-cbc-parallel selected, but --with-pthreadsw32-lib not given])
188                 CBCLIB_LIBS="pthreadVCE2.lib $CBCLIB_LIBS"])
189   
190    AC_ARG_WITH(pthreadsw32-incdir,
191                AC_HELP_STRING([--with-pthreadsw32-incdir],
192                               [specify the path of the pthreads win32 header file (for cl/icl builds only)]),
193                [CXXFLAGS="$CXXFLAGS -I$withval"],
194                [AC_MSG_WARN([--enable-cbc-parallel selected, but --with-pthreadsw32-incdir not given])])
195  else
196    AC_CHECK_LIB([rt],[clock_gettime],
197                 [CBCLIB_LIBS="-lrt $CBCLIB_LIBS"
198                  CBCLIB_PCLIBS="-lrt $CBCLIB_PCLIBS"
199                  AC_DEFINE([HAVE_CLOCK_GETTIME],[1],[Define if clock_gettime and rt library is available])
200                 ],
201                 [AC_MSG_WARN([--enable-cbc-parallel selected, but -lrt unavailable; using gettimeofday instead of clock_gettime])])
202    AC_CHECK_LIB([pthread],[pthread_create],
203                 [CBCLIB_LIBS="-lpthread $CBCLIB_LIBS"
204                  CBCLIB_PCLIBS="-lpthread $CBCLIB_PCLIBS"
205                 ],
206                 [AC_MSG_ERROR([--enable-cbc-parallel selected, but -lpthreads unavailable])])
207  fi
208  AC_MSG_NOTICE([Cbc multithreading enabled]);
209fi
210
211##############################################################################
212#                            OsiCbc configuration                            #
213##############################################################################
214
215# Handles configuration of the underlying default solver in OsiCbc. The issue
216# is that OsiCbc defines a default solver, used when the client does not     
217# specify a solver in the constructor. The default solver must, therefore,   
218# be present in the build. This macro checks that this is true, and sets the
219# compile-time symbols OSICBC_DFLT_SOLVER, OSICBC_CLP_DFLT_SOLVER, and
220# OSICBC_DFLT_SOLVER_HPP that control the build. The parameter default_solver
221# should normally be clp, unless you're working on some other solver.
222
223# Ideally, this macro would not require enumeration of solvers, but the
224# effort required to avoid it is just not justified at present. One enumeration
225# is hidden in AC_OSI_CANONICAL. The other is visible, the AM_CONDITIONAL
226# list at the end.                                                             
227
228# In an ideal world this macro would do absolutely nothing if Cbc is not
229# present, but autotools is not an ideal world and we have to satisfy its
230# requirements. In particular, the AM_CONDITIONAL macros need to execute or
231# automake will complain. Really the only thing we need to suppress is the
232# check that the default solver exists. All the rest is irrelevant when Cbc
233# isn't present (hence OsiCbc will be configured but not actually compiled).
234
235# Process the with-osicbc-default-solver option.
236
237AC_ARG_WITH([osicbc-default-solver],
238  AS_HELP_STRING([--with-osicbc-default-solver],
239     [specify underlying solver for OsiCbc (default clp)]),
240     [osicbc_with_solver=$withval],
241     [osicbc_with_solver=clp])
242
243case "${osicbc_with_solver}" in
244  @<:@Cc@:>@@<:@Ll@:>@@<:@Pp@:>@*)
245    osi_lc_solver=clp ;           
246    osi_mc_solver=Clp ;           
247    osi_uc_solver=CLP ;           
248    osi_exists_solver=${coin_has_clp-"unavailable"}
249    ;;                                             
250  @<:@Dd@:>@@<:@Yy@:>@@<:@Ll@:>@@<:@Pp@:>@*)       
251    osi_lc_solver=dylp ;                           
252    osi_mc_solver=Dylp                             
253    osi_uc_solver=DYLP                             
254    osi_exists_solver=${coin_has_dylp-"unavailable"}
255    ;;                                             
256  @<:@Cc@:>@@<:@Pp@:>@@<:@Xx@:>@*)                 
257    osi_lc_solver=cpx ;                             
258    osi_mc_solver=Cpx                               
259    osi_uc_solver=CPX                               
260    osi_exists_solver=${coin_has_cpx-"unavailable"}
261    ;;
262  @<:@Gg@:>@@<:@Ll@:>@@<:@Pp@:>@@<:@Kk@:>@*)       
263    osi_lc_solver=glpk ;                           
264    osi_mc_solver=Glpk                             
265    osi_uc_solver=GLPK                             
266    osi_exists_solver=${coin_has_glpk-"unavailable"}
267    ;;
268  @<:@Gg@:>@@<:@Rr@:>@@<:@Bb@:>@*)
269    osi_lc_solver=grb ;
270    osi_mc_solver=Grb ;           
271    osi_uc_solver=GRB ;           
272    osi_exists_solver=${coin_has_grb-"unavailable"}
273    ;;                                             
274  @<:@Mm@:>@@<:@Ss@:>@@<:@Kk@:>@*)
275    osi_lc_solver=msk ;
276    osi_mc_solver=Msk
277    osi_uc_solver=MSK
278    osi_exists_solver=${coin_has_msk-"unavailable"}
279    ;;
280  @<:@Ss@:>@@<:@Pp@:>@@<:@Xx@:>@*)
281    osi_lc_solver=spx ;
282    osi_mc_solver=Spx
283    osi_uc_solver=SPX
284    osi_exists_solver=${coin_has_spx-"unavailable"}
285    ;;
286  @<:@Ss@:>@@<:@Yy@:>@@<:@Mm@:>@*)
287    osi_lc_solver=sym ;
288    osi_mc_solver=Sym
289    osi_uc_solver=SYM
290    osi_exists_solver=${coin_has_sym-"unavailable"}
291    ;;
292  @<:@Vv@:>@@<:@Oo@:>@@<:@Ll@:>@*)
293    osi_lc_solver=vol ;
294    osi_mc_solver=Vol
295    osi_uc_solver=VOL
296    osi_exists_solver=${coin_has_vol-"unavailable"}
297    ;;
298  @<:@Xx@:>@@<:@Pp@:>@@<:@Rr@:>@*)
299    osi_lc_solver=xpr ;
300    osi_mc_solver=Xpr
301    osi_uc_solver=XPR
302    osi_exists_solver=${coin_has_xpr-"unavailable"}
303    ;;
304  *)
305    osi_lc_solver=clp ;
306    osi_mc_solver=Clp ;
307    osi_uc_solver=CLP ;
308    osi_exists_solver=${coin_has_clp-"unavailable"}
309    AC_MSG_WARN([Unrecognised solver $1; defaulting to $osi_lc_solver.])
310    ;;
311esac
312
313# Check that the requested solver is available.
314if test $osi_exists_solver = no; then
315  AC_MSG_ERROR([selected default solver $osicbc_with_solver is unavailable.
316  Please select an available solver using the --with-osicbc-default-solver option.])
317fi
318
319# State the result.
320AC_MSG_NOTICE([OsiCbc default solver is $osi_lc_solver])
321
322# And set the configuration variables.
323AC_DEFINE_UNQUOTED([OSICBC_DFLT_SOLVER],
324  [Osi${osi_mc_solver}SolverInterface],
325  [define to the name of the default solver interface class, e.g., OsiClpSolverInterface])
326AC_DEFINE_UNQUOTED([OSICBC_DFLT_SOLVER_HPP],
327  ["Osi${osi_mc_solver}SolverInterface.hpp"],
328  [define to the name of the .hpp file for the default solver interface class, e.g., "OsiClpSolverInterface.hpp" (include quotes)])
329if test $osi_mc_solver = "Clp"; then
330  AC_DEFINE([OSICBC_DFLT_SOLVER_CLP],[1],[define this symbol if clp is the default solver])
331fi
332
333# Last but not least, we need automake conditionals.
334AM_CONDITIONAL([OSICBC_DFLT_SOLVER_CLP],[test $osi_mc_solver = Clp])
335AM_CONDITIONAL([OSICBC_DFLT_SOLVER_CPX],[test $osi_mc_solver = Cpx])
336AM_CONDITIONAL([OSICBC_DFLT_SOLVER_DYLP],[test $osi_mc_solver = Dylp])
337AM_CONDITIONAL([OSICBC_DFLT_SOLVER_GLPK],[test $osi_mc_solver = Glpk])
338AM_CONDITIONAL([OSICBC_DFLT_SOLVER_GRB],[test $osi_mc_solver = Grb])
339AM_CONDITIONAL([OSICBC_DFLT_SOLVER_MSK],[test $osi_mc_solver = Msk])
340AM_CONDITIONAL([OSICBC_DFLT_SOLVER_SPX],[test $osi_mc_solver = Spx])
341AM_CONDITIONAL([OSICBC_DFLT_SOLVER_SYM],[test $osi_mc_solver = Sym])
342AM_CONDITIONAL([OSICBC_DFLT_SOLVER_VOL],[test $osi_mc_solver = Vol])
343AM_CONDITIONAL([OSICBC_DFLT_SOLVER_XPR],[test $osi_mc_solver = Xpr])
344
345##############################################################################
346#                   VPATH links for example input files                      #
347##############################################################################
348
349# In case this is a VPATH configuration we need to make sure that the
350# input files for the examples are available in the VPATH directory.
351
352AC_COIN_VPATH_LINK(examples/sudoku_sample.csv)
353AC_COIN_VPATH_LINK(examples/quad.mps)
354AC_COIN_VPATH_LINK(examples/quad2.mps)
355
356#############################################################################
357#                  Check for doxygen                                        #
358#############################################################################
359
360AC_COIN_DOXYGEN(CoinUtils Osi Clp DyLP Cgl Vol)
361
362##############################################################################
363#                   Finishing up by writing all the output                   #
364##############################################################################
365
366# Here list all the files that configure should create (except for the
367# configuration header file)
368AC_CONFIG_FILES([Makefile
369                 examples/Makefile
370                 src/Makefile
371                 src/OsiCbc/Makefile
372                 test/Makefile
373                 cbc.pc cbc-uninstalled.pc
374                 osi-cbc.pc osi-cbc-uninstalled.pc])
375AC_CONFIG_FILES([doxydoc/doxygen.conf])
376
377# Here put the location and name of the configuration header file
378AC_CONFIG_HEADER([src/config.h src/config_cbc.h])
379
380# Finally, we let configure write all the output...
381AC_COIN_FINALIZE
Note: See TracBrowser for help on using the repository browser.