Clean up glpk detection a little, fix a detection bug.
[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_CHECK_HEADER([glpk.h], [], [AC_MSG_FAILURE([cannot find glpk.h, the GLPK header!])])
38 AC_MSG_CHECKING([how to link glpk])
39 CVC4_TRY_GLPK_WITH([])
40 CVC4_TRY_GLPK_WITH([-lgmp])
41 CVC4_TRY_GLPK_WITH([-lz])
42 CVC4_TRY_GLPK_WITH([-ldl])
43 CVC4_TRY_GLPK_WITH([-lltdl])
44 CVC4_TRY_GLPK_WITH([-lltdl -ldl])
45 CVC4_TRY_GLPK_WITH([-lz -ldl])
46 CVC4_TRY_GLPK_WITH([-lz -lltdl])
47 CVC4_TRY_GLPK_WITH([-lz -lltdl -ldl])
48 CVC4_TRY_GLPK_WITH([-lgmp -lz])
49 CVC4_TRY_GLPK_WITH([-lgmp -ldl])
50 CVC4_TRY_GLPK_WITH([-lgmp -lltdl])
51 CVC4_TRY_GLPK_WITH([-lgmp -lltdl -ldl])
52 CVC4_TRY_GLPK_WITH([-lgmp -lz -ldl])
53 CVC4_TRY_GLPK_WITH([-lgmp -lz -lltdl])
54 CVC4_TRY_GLPK_WITH([-lgmp -lz -lltdl -ldl])
55 if test -z "$GLPK_LIBS"; then
56 AC_MSG_FAILURE([cannot link against libglpk! (perhaps you have not switched to glpk-cut-log? see /INSTALL)])
57 else
58 AC_MSG_RESULT([$GLPK_LIBS])
59 # make sure it works in static builds, too
60 if test "$enable_static_binary" = yes; then
61 GLPK_LIBS=
62 AC_MSG_CHECKING([whether statically-linked glpk is functional])
63 CVC4_TRY_STATIC_GLPK_WITH([])
64 CVC4_TRY_STATIC_GLPK_WITH([-lgmp])
65 CVC4_TRY_STATIC_GLPK_WITH([-lz])
66 CVC4_TRY_STATIC_GLPK_WITH([-ldl])
67 CVC4_TRY_STATIC_GLPK_WITH([-lltdl])
68 CVC4_TRY_STATIC_GLPK_WITH([-lltdl -ldl])
69 CVC4_TRY_STATIC_GLPK_WITH([-lz -ldl])
70 CVC4_TRY_STATIC_GLPK_WITH([-lz -lltdl])
71 CVC4_TRY_STATIC_GLPK_WITH([-lz -lltdl -ldl])
72 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz])
73 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -ldl])
74 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lltdl])
75 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lltdl -ldl])
76 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -ldl])
77 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -lltdl])
78 CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -lltdl -ldl])
79 if test -n "$GLPK_LIBS"; then
80 AC_MSG_RESULT([yes, it works])
81 with_glpk=yes
82 else
83 AC_MSG_RESULT([no])
84 AC_MSG_FAILURE([glpk installation appears incompatible with static-binary])
85 fi
86 else
87 with_glpk=yes
88 fi
89 fi
90 if test "$with_glpk" = yes; then
91 have_libglpk=1
92 else
93 with_glpk=no
94 have_libreadline=0
95 GLPK_LIBS=
96 fi
97 else
98 AC_MSG_RESULT([no, user didn't request glpk])
99 with_glpk=no
100 fi
101 ])# CVC4_CHECK_FOR_GLPK
102
103 # CVC4_TRY_GLPK_WITH(LIBS)
104 # ------------------------
105 # Try AC_CHECK_LIB(glpk) with the given linking libraries
106 AC_DEFUN([CVC4_TRY_GLPK_WITH], [
107 if test -z "$GLPK_LIBS"; then
108 AC_LANG_PUSH([C++])
109 cvc4_save_LIBS="$LIBS"
110 cvc4_save_CPPFLAGS="$LDFLAGS"
111 cvc4_save_LDFLAGS="$LDFLAGS"
112 CPPFLAGS="$CVC4CPPFLAGS $CPPFLAGS"
113 LDFLAGS="$GLPK_LDFLAGS $LDFLAGS"
114 LIBS="-lglpk $1"
115 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
116 [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],
117 [GLPK_LIBS="-lglpk $1"],
118 [])
119 LIBS="$cvc4_save_LIBS"
120 CPPFLAGS="$cvc4_save_CPPFLAGS"
121 LDFLAGS="$cvc4_save_LDFLAGS"
122 AC_LANG_POP([C++])
123 fi
124 ])# CVC4_TRY_GLPK_WITH
125
126 # CVC4_TRY_STATIC_GLPK_WITH(LIBS)
127 # -------------------------------
128 # Try AC_CHECK_LIB(glpk) with the given linking libraries
129 AC_DEFUN([CVC4_TRY_STATIC_GLPK_WITH], [
130 if test -z "$GLPK_LIBS"; then
131 AC_LANG_PUSH([C++])
132 cvc4_save_LIBS="$LIBS"
133 cvc4_save_CPPFLAGS="$CPPFLAGS"
134 cvc4_save_LDFLAGS="$LDFLAGS"
135 CPPFLAGS="$CVC4CPPFLAGS $CPPFLAGS"
136 LDFLAGS="-static $GLPK_LDFLAGS $LDFLAGS"
137 LIBS="-lglpk-static $1"
138 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
139 [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],
140 [GLPK_LIBS="-lglpk-static $1"],
141 [ LIBS="-lglpk $1"
142 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
143 [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],
144
145 [GLPK_LIBS="-lglpk $1"]) ])
146 LIBS="$cvc4_save_LIBS"
147 CPPFLAGS="$cvc4_save_CPPFLAGS"
148 LDFLAGS="$cvc4_save_LDFLAGS"
149 AC_LANG_POP([C++])
150 fi
151 ])# CVC4_TRY_STATIC_GLPK_WITH