summaryrefslogtreecommitdiff
path: root/config/glpk.m4
blob: 8d16fceee7518c34302319c06096636f9e4e9375 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# CVC4_CHECK_FOR_GLPK
# -------------------
# Look for glpk and link it in, but only if user requested.
AC_DEFUN([CVC4_CHECK_FOR_GLPK], [
AC_MSG_CHECKING([whether user requested glpk support])
LIBGLPK=
have_libglpk=0
GLPK_LIBS=
GLPK_LDFLAGS=
if test "$with_glpk" = no; then
  AC_MSG_RESULT([no, glpk disabled by user])
elif test -n "$with_glpk"; then
  AC_MSG_RESULT([yes, glpk requested by user])

  # Get the location of all the GLPK stuff
  AC_ARG_VAR(GLPK_HOME, [path to top level of glpk installation])
  AC_ARG_WITH(
    [glpk-dir],
    AS_HELP_STRING(
      [--with-glpk-dir=PATH],
      [path to top level of glpk installation]
    ),
    [GLPK_HOME="$withval"],
    [ if test -z "$GLPK_HOME"; then
        AC_MSG_FAILURE([must give --with-glpk-dir=PATH or define environment variable GLPK_HOME!])
      fi
    ]
  )

  if test -n "$GLPK_HOME"; then
    CVC4CPPFLAGS="${CVC4CPPFLAGS:+$CVC4CPPFLAGS }-I$GLPK_HOME/include"
    GLPK_LDFLAGS="-L$GLPK_HOME/lib"
  fi

  dnl Try a bunch of combinations until something works :-/
  GLPK_LIBS=
  AC_LANG_PUSH([C++])
  cvc4_save_CPPFLAGS="$CPPFLAGS"
  CPPFLAGS="$CVC4CPPFLAGS $CPPFLAGS"
  AC_CHECK_HEADER([glpk.h], [], [AC_MSG_FAILURE([cannot find glpk.h, the GLPK header!])])
  CPPFLAGS="$cvc4_save_CPPFLAGS"
  AC_LANG_POP([C++])

  AC_MSG_CHECKING([how to link glpk])
  CVC4_TRY_GLPK_WITH([])
  CVC4_TRY_GLPK_WITH([-lgmp])
  CVC4_TRY_GLPK_WITH([-lz])
  CVC4_TRY_GLPK_WITH([-ldl])
  CVC4_TRY_GLPK_WITH([-lltdl])
  CVC4_TRY_GLPK_WITH([-lltdl -ldl])
  CVC4_TRY_GLPK_WITH([-lz -ldl])
  CVC4_TRY_GLPK_WITH([-lz -lltdl])
  CVC4_TRY_GLPK_WITH([-lz -lltdl -ldl])
  CVC4_TRY_GLPK_WITH([-lgmp -lz])
  CVC4_TRY_GLPK_WITH([-lgmp -ldl])
  CVC4_TRY_GLPK_WITH([-lgmp -lltdl])
  CVC4_TRY_GLPK_WITH([-lgmp -lltdl -ldl])
  CVC4_TRY_GLPK_WITH([-lgmp -lz -ldl])
  CVC4_TRY_GLPK_WITH([-lgmp -lz -lltdl])
  CVC4_TRY_GLPK_WITH([-lgmp -lz -lltdl -ldl])
  if test -z "$GLPK_LIBS"; then
    AC_MSG_FAILURE([cannot link against libglpk! (perhaps you have not switched to glpk-cut-log? see /INSTALL)])
  else
    AC_MSG_RESULT([$GLPK_LIBS])
    # make sure it works in static builds, too
    if test "$enable_static_binary" = yes; then
      GLPK_LIBS=
      AC_MSG_CHECKING([whether statically-linked glpk is functional])
      CVC4_TRY_STATIC_GLPK_WITH([])
      CVC4_TRY_STATIC_GLPK_WITH([-lgmp])
      CVC4_TRY_STATIC_GLPK_WITH([-lz])
      CVC4_TRY_STATIC_GLPK_WITH([-ldl])
      CVC4_TRY_STATIC_GLPK_WITH([-lltdl])
      CVC4_TRY_STATIC_GLPK_WITH([-lltdl -ldl])
      CVC4_TRY_STATIC_GLPK_WITH([-lz -ldl])
      CVC4_TRY_STATIC_GLPK_WITH([-lz -lltdl])
      CVC4_TRY_STATIC_GLPK_WITH([-lz -lltdl -ldl])
      CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz])
      CVC4_TRY_STATIC_GLPK_WITH([-lgmp -ldl])
      CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lltdl])
      CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lltdl -ldl])
      CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -ldl])
      CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -lltdl])
      CVC4_TRY_STATIC_GLPK_WITH([-lgmp -lz -lltdl -ldl])
      if test -n "$GLPK_LIBS"; then
        AC_MSG_RESULT([yes, it works])
        with_glpk=yes
      else
        AC_MSG_RESULT([no])
        AC_MSG_FAILURE([glpk installation appears incompatible with static-binary])
      fi
    else
      with_glpk=yes
    fi
  fi
  if test "$with_glpk" = yes; then
    have_libglpk=1
  else
    with_glpk=no
    have_libreadline=0
    GLPK_LIBS=
  fi
else
  AC_MSG_RESULT([no, user didn't request glpk])
  with_glpk=no
fi
])# CVC4_CHECK_FOR_GLPK

# CVC4_TRY_GLPK_WITH(LIBS)
# ------------------------
# Try AC_CHECK_LIB(glpk) with the given linking libraries
AC_DEFUN([CVC4_TRY_GLPK_WITH], [
if test -z "$GLPK_LIBS"; then
  AC_LANG_PUSH([C++])
  cvc4_save_LIBS="$LIBS"
  cvc4_save_CPPFLAGS="$CPPFLAGS"
  cvc4_save_LDFLAGS="$LDFLAGS"
  CPPFLAGS="$CVC4CPPFLAGS $CPPFLAGS"
  LDFLAGS="$GLPK_LDFLAGS $LDFLAGS"
  LIBS="-lglpk $1"
  AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
                                  [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],
    [GLPK_LIBS="-lglpk $1"],
    [])
  LIBS="$cvc4_save_LIBS"
  CPPFLAGS="$cvc4_save_CPPFLAGS"
  LDFLAGS="$cvc4_save_LDFLAGS"
  AC_LANG_POP([C++])
fi
])# CVC4_TRY_GLPK_WITH

# CVC4_TRY_STATIC_GLPK_WITH(LIBS)
# -------------------------------
# Try AC_CHECK_LIB(glpk) with the given linking libraries
AC_DEFUN([CVC4_TRY_STATIC_GLPK_WITH], [
if test -z "$GLPK_LIBS"; then
  AC_LANG_PUSH([C++])
  cvc4_save_LIBS="$LIBS"
  cvc4_save_CPPFLAGS="$CPPFLAGS"
  cvc4_save_LDFLAGS="$LDFLAGS"
  CPPFLAGS="$CVC4CPPFLAGS $CPPFLAGS"
  LDFLAGS="-static $GLPK_LDFLAGS $LDFLAGS"
  LIBS="-lglpk-static $1"
  AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
                                  [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],
    [GLPK_LIBS="-lglpk-static $1"],
    [ LIBS="-lglpk $1"
      AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <glpk.h>],
                                      [int i = glp_ios_get_cut(NULL, 0, NULL, NULL, NULL, NULL, NULL)])],

        [GLPK_LIBS="-lglpk $1"]) ])
  LIBS="$cvc4_save_LIBS"
  CPPFLAGS="$cvc4_save_CPPFLAGS"
  LDFLAGS="$cvc4_save_LDFLAGS"
  AC_LANG_POP([C++])
fi
])# CVC4_TRY_STATIC_GLPK_WITH
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback