Merge pull request #38 from mdeters/uf-kinds
[cvc5.git] / config / glpk.m4
1 # CVC4_CHECK_FOR_GLPK
2 # -------------------
3 # Look for glpk and link it in, but only if user requested.
4 AC_DEFUN([CVC4_CHECK_FOR_GLPK], [
5 AC_MSG_CHECKING([whether user requested glpk support])
6 LIBGLPK=
7 have_libglpk=0
8 GLPK_LIBS=
9 GLPK_LDFLAGS=
10 if test "$with_glpk" = no; then
11 AC_MSG_RESULT([no, glpk disabled by user])
12 elif test "$with_glpk" = yes; then
13 AC_MSG_RESULT([yes, glpk requested by user])
14
15 # Get the location of all the GLPK stuff
16 AC_ARG_VAR(GLPK_HOME, [path to top level of glpk installation])
17 AC_ARG_WITH(
18 [glpk-dir],
19 AS_HELP_STRING(
20 [--with-glpk-dir=PATH],
21 [path to top level of glpk installation]
22 ),
23 [GLPK_HOME="$withval"],
24 [ if test -z "$GLPK_HOME"; then
25 AC_MSG_FAILURE([must give --with-glpk-dir=PATH or define environment variable GLPK_HOME!])
26 fi
27 ]
28 )
29
30 if test -n "$GLPK_HOME"; then
31 CVC4CPPFLAGS="${CVC4CPPFLAGS:+$CVC4CPPFLAGS }-I$GLPK_HOME/include"
32 GLPK_LDFLAGS="-L$GLPK_HOME/lib"
33 fi
34
35 dnl Try a bunch of combinations until something works :-/
36 GLPK_LIBS=
37 AC_LANG_PUSH([C++])
38 cvc4_save_CPPFLAGS="$CPPFLAGS"
39 CPPFLAGS="$CVC4CPPFLAGS $CPPFLAGS"
40 AC_CHECK_HEADER([glpk.h], [], [AC_MSG_FAILURE([cannot find glpk.h, the GLPK header!])])
41 CPPFLAGS="$cvc4_save_CPPFLAGS"
42 AC_LANG_POP([C++])
43
44 AC_MSG_CHECKING([how to link glpk])
45 CVC4_TRY_GLPK_WITH([])
46 CVC4_TRY_GLPK_WITH([-lgmp])
47 CVC4_TRY_GLPK_WITH([-lz])
48 CVC4_TRY_GLPK_WITH([-ldl])
49 CVC4_TRY_GLPK_WITH([-lltdl])
50 CVC4_TRY_GLPK_WITH([-lltdl -ldl])
51 CVC4_TRY_GLPK_WITH([-lz -ldl])
52 CVC4_TRY_GLPK_WITH([-lz -lltdl])
53 CVC4_TRY_GLPK_WITH([-lz -lltdl -ldl])
54 CVC4_TRY_GLPK_WITH([-lgmp -lz])
55 CVC4_TRY_GLPK_WITH([-lgmp -ldl])
56 CVC4_TRY_GLPK_WITH([-lgmp -lltdl])
57 CVC4_TRY_GLPK_WITH([-lgmp -lltdl -ldl])
58 CVC4_TRY_GLPK_WITH([-lgmp -lz -ldl])
59 CVC4_TRY_GLPK_WITH([-lgmp -lz -lltdl])
60 CVC4_TRY_GLPK_WITH([-lgmp -lz -lltdl -ldl])
61 if test -z "$GLPK_LIBS"; then
62 AC_MSG_FAILURE([cannot link against libglpk! (perhaps you have not switched to glpk-cut-log? see /INSTALL)])
63 else
64 AC_MSG_RESULT([$GLPK_LIBS])
65 # make sure it works in static builds, too
66 if test "$enable_static_binary" = yes; then
67 GLPK_LIBS=
68 AC_MSG_CHECKING([whether statically-linked glpk is functional])
69 CVC4_TRY_STATIC_GLPK_WITH([])
70 CVC4_TRY_STATIC_GLPK_WITH([-lgmp])
71 CVC4_TRY_STATIC_GLPK_WITH([-lz])
72 CVC4_TRY_STATIC_GLPK_WITH([-ldl])
73 CVC4_TRY_STATIC_GLPK_WITH([-lltdl])
74 CVC4_TRY_STATIC_GLPK_WITH([-lltdl -ldl])
75 CVC4_TRY_STATIC_GLPK_WITH([-lz -ldl])
76 CVC4_TRY_STATIC_GLPK_WITH([-lz -lltdl])
77 CVC4_TRY_STATIC_GLPK_WITH([-lz -lltdl -ldl])
78 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz])
79 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -ldl])
80 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lltdl])
81 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lltdl -ldl])
82 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -ldl])
83 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -lltdl])
84 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -lltdl -ldl])
85 if test -n "$GLPK_LIBS"; then
86 AC_MSG_RESULT([yes, it works])
87 with_glpk=yes
88 else
89 AC_MSG_RESULT([no])
90 AC_MSG_FAILURE([glpk installation appears incompatible with static-binary])
91 fi
92 else
93 with_glpk=yes
94 fi
95 fi
96 if test "$with_glpk" = yes; then
97 have_libglpk=1
98 else
99 with_glpk=no
100 have_libreadline=0
101 GLPK_LIBS=
102 fi
103 else
104 AC_MSG_RESULT([no, user didn't request glpk])
105 with_glpk=no
106 fi
107 ])# CVC4_CHECK_FOR_GLPK
108
109 # CVC4_TRY_GLPK_WITH(LIBS)
110 # ------------------------
111 # Try AC_CHECK_LIB(glpk) with the given linking libraries
112 AC_DEFUN([CVC4_TRY_GLPK_WITH], [
113 if test -z "$GLPK_LIBS"; then
114 AC_LANG_PUSH([C++])
115 cvc4_save_LIBS="$LIBS"
116 cvc4_save_CPPFLAGS="$CPPFLAGS"
117 cvc4_save_LDFLAGS="$LDFLAGS"
118 CPPFLAGS="$CVC4CPPFLAGS $CPPFLAGS"
119 LDFLAGS="$GLPK_LDFLAGS $LDFLAGS"
120 LIBS="-lglpk $1"
121 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
122 [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],
123 [GLPK_LIBS="-lglpk $1"],
124 [])
125 LIBS="$cvc4_save_LIBS"
126 CPPFLAGS="$cvc4_save_CPPFLAGS"
127 LDFLAGS="$cvc4_save_LDFLAGS"
128 AC_LANG_POP([C++])
129 fi
130 ])# CVC4_TRY_GLPK_WITH
131
132 # CVC4_TRY_STATIC_GLPK_WITH(LIBS)
133 # -------------------------------
134 # Try AC_CHECK_LIB(glpk) with the given linking libraries
135 AC_DEFUN([CVC4_TRY_STATIC_GLPK_WITH], [
136 if test -z "$GLPK_LIBS"; then
137 AC_LANG_PUSH([C++])
138 cvc4_save_LIBS="$LIBS"
139 cvc4_save_CPPFLAGS="$CPPFLAGS"
140 cvc4_save_LDFLAGS="$LDFLAGS"
141 CPPFLAGS="$CVC4CPPFLAGS $CPPFLAGS"
142 LDFLAGS="-static $GLPK_LDFLAGS $LDFLAGS"
143 LIBS="-lglpk-static $1"
144 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
145 [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],
146 [GLPK_LIBS="-lglpk-static $1"],
147 [ LIBS="-lglpk $1"
148 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
149 [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],
150
151 [GLPK_LIBS="-lglpk $1"]) ])
152 LIBS="$cvc4_save_LIBS"
153 CPPFLAGS="$cvc4_save_CPPFLAGS"
154 LDFLAGS="$cvc4_save_LDFLAGS"
155 AC_LANG_POP([C++])
156 fi
157 ])# CVC4_TRY_STATIC_GLPK_WITH