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
|
# guile.m4 serial 1
dnl This file is part of Gint
dnl Copyright (C) 2010 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 '(write (%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],
[AC_HELP_STRING([--with-guile],
[compile with Guile support (default)])],
[gint_enable_guile=$withval],
[gint_enable_guile=yes])],
[without-guile],
[AC_ARG_WITH([guile],
[AC_HELP_STRING([--with-guile],
[compile with Guile support])],
[gint_enable_guile=$withval],
[gint_enable_guile=no])],
[enable-guile],
[AC_ARG_ENABLE([guile],
[AC_HELP_STRING([--enable-guile],
[enable Guile support (default)])],
[gint_enable_guile=$enableval],
[gint_enable_guile=yes])],
[disable-guile],
[AC_ARG_ENABLE([guile],
[AC_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],
[AC_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
])
|