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
158
159
160
161
162
|
# guile.m4 serial 1
dnl This file is part of Gint
dnl Copyright (C) 2010,2016 Sergey Poznyakoff
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 3, or (at your option)
dnl any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
m4_define([_gint_eval_version],
[m4_if([$2],,[m4_errprint([Version number without dots: $1
])],[m4_eval([$1] * 1000 + [$2] * 100[]m4_if([$3],,,[ + $3]))])])
m4_define([_gint_mangle_version],[_gint_eval_version(m4_bpatsubst($1,\.,[,]))])
m4_define([_gint_site_dir],[`guile -c '(display (%site-dir)) (newline)'`])
dnl GINT_CHECK_GUILE(minversion, [act-if-found], [act-if-not-found])
dnl $1 $2 $3
AC_DEFUN([GINT_CHECK_GUILE],
[
AC_SUBST(GUILE_INCLUDES)
AC_SUBST(GUILE_LIBS)
AC_SUBST(GUILE_VERSION)
AC_SUBST(GUILE_VERSION_NUMBER)
gint_guile_status=no
_GINT_OPTION_SWITCH(
[with-guile],
[AC_ARG_WITH([guile],
[AS_HELP_STRING([--with-guile],
[compile with Guile support (default)])],
[gint_enable_guile=$withval],
[gint_enable_guile=yes])],
[without-guile],
[AC_ARG_WITH([guile],
[AS_HELP_STRING([--with-guile],
[compile with Guile support])],
[gint_enable_guile=$withval],
[gint_enable_guile=no])],
[enable-guile],
[AC_ARG_ENABLE([guile],
[AS_HELP_STRING([--enable-guile],
[enable Guile support (default)])],
[gint_enable_guile=$enableval],
[gint_enable_guile=yes])],
[disable-guile],
[AC_ARG_ENABLE([guile],
[AS_HELP_STRING([--enable-guile],
[enable Guile support])],
[gint_enable_guile=$enableval],
[gint_enable_guile=no])],
[gint_enable_guile=yes])
if test "$gint_enable_guile" = yes; then
AC_PATH_PROG(GUILE_CONFIG, guile-config, no, $PATH)
if test "$GUILE_CONFIG" = no; then
m4_if([$3],,[AC_MSG_ERROR(cannot find Guile)], [$3])
else
AC_PATH_PROG(GUILE_SNARF, guile-snarf)
AC_PATH_PROG(GUILE_TOOLS, guile-tools)
GUILE_INCLUDES=`$GUILE_CONFIG compile`
GUILE_LIBS=`$GUILE_CONFIG link`
GUILE_VERSION=`($GUILE_CONFIG --version 2>&1; echo '')|sed 's/guile-config [[^0-9]]* \([[0-9]][[0-9.]]*\)$/\1/'`
VEX=`echo $GUILE_VERSION | sed 's/\./ \\\\* 1000 + /;s/\./ \\\\* 100 + /'`
GUILE_VERSION_NUMBER=`eval expr "$VEX"`
gint_guile_status=ok
m4_if([$1],,,[
if test $GUILE_VERSION_NUMBER -lt _gint_mangle_version($1); then
m4_if([$3],,
[AC_MSG_ERROR([Guile version too old; required at least ]$1)],
[gint_guile_status=badversion])
fi])
if test $gint_guile_status = ok; then
save_LIBS=$LIBS
save_CFLAGS=$CFLAGS
LIBS="$LIBS $GUILE_LIBS"
CFLAGS="$CFLAGS $GUILE_INCLUDES"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([#include <libguile.h>],
[scm_shell(0, NULL);])],
[],
[gint_guile_status=cantlink])
LIBS=$save_LIBS
CFLAGS=$save_CFLAGS
fi
fi
if test $gint_guile_status != ok; then
GUILE_INCLUDES=
GUILE_LIBS=
GUILE_VERSION=
GUILE_VERSION_NUMBER=
m4_if([$3],,[AC_MSG_ERROR(required library libguile not found)], [$3])
else
save_LIBS=$LIBS
save_CFLAGS=$CFLAGS
LIBS="$LIBS $GUILE_LIBS"
CFLAGS="$CFLAGS $GUILE_INCLUDES"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libguile.h>]],
[SCM_DEVAL_P = 1;
SCM_BACKTRACE_P = 1;
SCM_RECORD_POSITIONS_P = 1;
SCM_RESET_DEBUG_MODE;])],
[gint_guile_debug=yes],
[gint_guile_debug=no])
if test $gint_guile_debug = yes; then
AC_DEFINE_UNQUOTED(GUILE_DEBUG_MACROS, 1,
[Define to 1 if SCM_DEVAL_P, SCM_BACKTRACE_P, SCM_RECORD_POSITIONS_P and SCM_RESET_DEBUG_MODE are defined])
fi
AC_CHECK_TYPES([scm_t_off],[],[],[#include <libguile.h>])
LIBS=$save_LIBS
CFLAGS=$save_CFLAGS
AC_SUBST(GUILE_SITE)
_GINT_IF_OPTION_SET([std-site-dir],
[GUILE_SITE=_gint_site_dir],
[AC_ARG_WITH([guile-site-dir],
[AS_HELP_STRING([--with-guile-site-dir=DIR],
[specify directory to install guile modules to])],
[case $withval in
/*) GUILE_SITE=$withval;;
yes) GUILE_SITE=_gint_site_dir;;
*) AC_MSG_ERROR([Argument to --with-guile-site-dir must be an absolute directory name]);;
esac],
[GUILE_SITE=_gint_site_dir
pfx=$prefix
test "x$pfx" = xNONE && pfx=$ac_default_prefix
case $GUILE_SITE in
$pfx/*) ;; # OK
*) AC_MSG_WARN([guile site directory $GUILE_SITE lies outside your current prefix ($pfx).])
GUILE_SITE='$(datadir)/guile/site'
AC_MSG_WARN([Falling back to ${GUILE_SITE} instead. Use --with-guile-site-dir to force using site directory.])
;;
esac])])
AC_DEFINE_UNQUOTED(GUILE_VERSION, "$GUILE_VERSION",
[Guile version number])
AC_DEFINE_UNQUOTED(GUILE_VERSION_NUMBER, $GUILE_VERSION_NUMBER,
[Guile version number: MAX*10 + MIN])
m4_if([$2],,,[$2])
fi
m4_if([$3],,,[else
$3])
fi
AM_CONDITIONAL([GINT_COND_GUILE_OK],[test $gint_guile_status = ok])
])
|