1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-11 22:31:12 +02:00

(GUILE_PROGS, GUILE_SITE_DIR, GUILE_CHECK,

GUILE_MODULE_EXPORTS, GUILE_MODULE_REQUIRED_EXPORTS): New macros.

(GUILE_MODULE_CHECK): Renamed from AC_GUILE_MODULE_CHECK.
Rewritten to expect `description' as a present-tense verb phrase.

(GUILE_MODULE_AVAILABLE, GUILE_MODULE_REQUIRED): Renamed likewise.
This commit is contained in:
Thien-Thi Nguyen 2001-12-29 03:55:52 +00:00
parent 68c807838e
commit b6aaeeac17

View file

@ -1,77 +1,106 @@
dnl Autoconf macros for working with Guile.
dnl
dnl Copyright (C) 1998,2001 Free Software Foundation, Inc.
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 2, 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 software; see the file COPYING. If not, write to
dnl the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
dnl Boston, MA 02111-1307 USA
dnl
dnl As a special exception, the Free Software Foundation gives permission
dnl for additional uses of the text contained in its release of GUILE.
dnl
dnl The exception is that, if you link the GUILE library with other files
dnl to produce an executable, this does not by itself cause the
dnl resulting executable to be covered by the GNU General Public License.
dnl Your use of that executable is in no way restricted on account of
dnl linking the GUILE library code into it.
dnl
dnl This exception does not however invalidate any other reasons why
dnl the executable file might be covered by the GNU General Public License.
dnl
dnl This exception applies only to the code released by the
dnl Free Software Foundation under the name GUILE. If you copy
dnl code from other Free Software Foundation releases into a copy of
dnl GUILE, as the General Public License permits, the exception does
dnl not apply to the code that you add in this way. To avoid misleading
dnl anyone as to the status of such modified files, you must delete
dnl this exception notice from them.
dnl
dnl If you write modifications of your own for GUILE, it is your choice
dnl whether to permit this exception to apply to your modifications.
dnl If you do not wish that, delete this exception notice.
## Autoconf macros for working with Guile.
##
## Copyright (C) 1998,2001 Free Software Foundation, Inc.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2, or (at your option)
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this software; see the file COPYING. If not, write to
## the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
## Boston, MA 02111-1307 USA
##
## As a special exception, the Free Software Foundation gives permission
## for additional uses of the text contained in its release of GUILE.
##
## The exception is that, if you link the GUILE library with other files
## to produce an executable, this does not by itself cause the
## resulting executable to be covered by the GNU General Public License.
## Your use of that executable is in no way restricted on account of
## linking the GUILE library code into it.
##
## This exception does not however invalidate any other reasons why
## the executable file might be covered by the GNU General Public License.
##
## This exception applies only to the code released by the
## Free Software Foundation under the name GUILE. If you copy
## code from other Free Software Foundation releases into a copy of
## GUILE, as the General Public License permits, the exception does
## not apply to the code that you add in this way. To avoid misleading
## anyone as to the status of such modified files, you must delete
## this exception notice from them.
##
## If you write modifications of your own for GUILE, it is your choice
## whether to permit this exception to apply to your modifications.
## If you do not wish that, delete this exception notice.
## Index
## -----
##
## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs
## GUILE_FLAGS -- set flags for compiling and linking with Guile
## GUILE_SITE_DIR -- find path to Guile "site" directory
## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value
## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module
## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module
## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable
## GUILE_MODULE_EXPORTS -- check if a module exports a variable
## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable
dnl INDEX
dnl -----
## Code
## ----
dnl GUILE_FLAGS --- set flags for compiling and linking with Guile
dnl AC_GUILE_MODULE_CHECK --- check feature of a Guile Scheme module
dnl AC_GUILE_MODULE_AVAILABLE --- check availability of a Guile Scheme module
dnl AC_GUILE_MODULE_REQUIRED --- fail if a Guile Scheme module is unavailable
dnl Code
dnl ----
dnl GUILE_FLAGS --- set flags for compiling and linking with Guile
dnl
dnl This macro runs the `guile-config' script, installed with Guile,
dnl to find out where Guile's header files and libraries are
dnl installed. It sets two variables, marked for substitution, as
dnl by AC_SUBST.
dnl
dnl GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
dnl code that uses Guile header files. This is almost
dnl always just a -I flag.
dnl
dnl GUILE_LDFLAGS --- flags to pass to the linker to link a
dnl program against Guile. This includes `-lguile' for
dnl the Guile library itself, any libraries that Guile
dnl itself requires (like -lqthreads), and so on. It may
dnl also include a -L flag to tell the compiler where to
dnl find the libraries.
# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs
#
# Usage: GUILE_PROGS
#
# This macro looks for programs `guile', `guile-config' and `guile-tools',
# and sets variables GUILE, GUILE_CONFIG and GUILE_TOOLS, to their paths,
# respectively. If either of the first two are not found, signal error.
#
# The variables are marked for substitution, as by AC_SUBST.
#
AC_DEFUN([GUILE_PROGS],
[AC_PATH_PROG(GUILE,guile)
if test "$GUILE" = "" ; then
AC_MSG_ERROR([guile required but not found])
fi
AC_SUBST(GUILE)
AC_PATH_PROG(GUILE_CONFIG,guile-config)
if test "$GUILE_CONFIG" = "" ; then
AC_MSG_ERROR([guile-config required but not found])
fi
AC_SUBST(GUILE_CONFIG)
AC_PATH_PROG(GUILE_TOOLS,guile-tools)
AC_SUBST(GUILE_TOOLS)
])
# GUILE_FLAGS -- set flags for compiling and linking with Guile
#
# Usage: GUILE_FLAGS
#
# This macro runs the `guile-config' script, installed with Guile,
# to find out where Guile's header files and libraries are
# installed. It sets two variables, GUILE_CFLAGS and GUILE_LDFLAGS.
#
# GUILE_CFLAGS: flags to pass to a C or C++ compiler to build code that
# uses Guile header files. This is almost always just a -I flag.
#
# GUILE_LDFLAGS: flags to pass to the linker to link a program against
# Guile. This includes `-lguile' for the Guile library itself, any
# libraries that Guile itself requires (like -lqthreads), and so on. It
# may also include a -L flag to tell the compiler where to find the
# libraries.
#
# The variables are marked for substitution, as by AC_SUBST.
#
AC_DEFUN([GUILE_FLAGS],[
## The GUILE_FLAGS macro.
## First, let's just see if we can find Guile at all.
@ -87,46 +116,104 @@ AC_DEFUN([GUILE_FLAGS],[
AC_MSG_RESULT(yes)
])
# GUILE_SITE_DIR -- find path to Guile "site" directory
#
# Usage: GUILE_SITE_DIR
#
# This looks for Guile's "site" directory, usually something like
# PREFIX/share/guile/site, and sets var GUILE_SITE to the path.
# Note that the var name is different from the macro name.
#
# The variable is marked for substitution, as by AC_SUBST.
#
AC_DEFUN([GUILE_SITE_DIR],
[AC_REQUIRE([GUILE_PROGS])dnl
AC_MSG_CHECKING(for Guile site directory)
GUILE_SITE=`[$GUILE_CONFIG] info pkgdatadir`/site
AC_MSG_RESULT($GUILE_SITE)
AC_SUBST(GUILE_SITE)
])
dnl AC_GUILE_MODULE_CHECK --- check feature of a Guile Scheme module
dnl
dnl AC_GUILE_MODULE_CHECK(var,module,featuretest,description)
dnl $1 is a shell variable name to be set to "yes" or "no"
dnl $2 is a list of symbols, like: (ice-9 common-list)
dnl $3 is a thunk, like: (lambda () BODY ...)
dnl which returns either 0 or #t to indicate the check passed.
dnl avoid using the character "#" since that confuses autoconf.
dnl $4 is a noun phrase passed to AC_MSG_CHECKING
# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value
#
# Usage: GUILE_CHECK_RETVAL(var,check)
#
# $1 is a shell variable name to be set to the return value
# $2 is a Guile Scheme expression, evaluated with "$GUILE -c", and
# returning either 0 or non-#f to indicate the check passed.
# Non-0 number or #f indicates failure.
# Avoid using the character "#" since that confuses autoconf.
#
AC_DEFUN([GUILE_CHECK],
[AC_REQUIRE([GUILE_PROGS])
$GUILE -c "$2" > /dev/null 2>&1
$1=$?
])
AC_DEFUN([AC_GUILE_MODULE_CHECK],
[AC_MSG_CHECKING([$2 $4])
$1=no
echo '(use-modules $2) (exit ($3))' > conftest
guile -s conftest > /dev/null 2>&1 && $1=yes
rm -f conftest
AC_MSG_RESULT($[$1])
# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module
#
# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description)
#
# $1 is a shell variable name to be set to "yes" or "no"
# $2 is a list of symbols, like: (ice-9 common-list)
# $3 is an expression acceptable to GUILE_CHECK, q.v.
# $4 is a present-tense verb phrase (passed to AC_MSG_CHECKING)
#
AC_DEFUN([GUILE_MODULE_CHECK],
[AC_MSG_CHECKING([if $2 $4])
GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3))))
if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi
AC_MSG_RESULT($$1)
])
dnl AC_GUILE_MODULE_AVAILABLE --- check availability of a Guile Scheme module
dnl
dnl AC_GUILE_MODULE_AVAILABLE(var,module)
dnl $1 is a shell variable name to be set to "yes" or "no"
dnl $2 is a list of symbols, like: (ice-9 common-list)
AC_DEFUN([AC_GUILE_MODULE_AVAILABLE],
[AC_GUILE_MODULE_CHECK($1,$2,(lambda () 0),availability)
# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module
#
# Usage: GUILE_MODULE_AVAILABLE(var,module)
#
# $1 is a shell variable name to be set to "yes" or "no"
# $2 is a list of symbols, like: (ice-9 common-list)
#
AC_DEFUN([GUILE_MODULE_AVAILABLE],
[GUILE_MODULE_CHECK($1,$2,0,is available)
])
dnl AC_GUILE_MODULE_REQUIRED --- fail if a Guile Scheme module is unavailable
dnl
dnl $1 is a list of symbols, WITHOUT the surrounding parens
AC_DEFUN([AC_GUILE_MODULE_REQUIRED],
[AC_GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1))
# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable
#
# Usage: GUILE_MODULE_REQUIRED(symlist)
#
# $1 is a list of symbols, WITHOUT surrounding parens, like: ice-9 common-list
#
AC_DEFUN([GUILE_MODULE_REQUIRED],
[GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1))
if test "$ac_guile_module_required" = "no" ; then
AC_MSG_ERROR([required guile module not found: ($1)])
fi
])
# GUILE_MODULE_EXPORTS -- check if a module exports a variable
#
# Usage: GUILE_MODULE_EXPORTS(var,module,modvar)
#
# $1 is a shell variable to be set to "yes" or "no"
# $2 is a list of symbols, like: (ice-9 common-list)
# $3 is the Guile Scheme variable to check
#
AC_DEFUN([GUILE_MODULE_EXPORTS],
[GUILE_MODULE_CHECK($1,$2,$3,exports `$3')
])
dnl guile.m4 ends here
# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable
#
# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar)
#
# $1 is a list of symbols, like: (ice-9 common-list)
# $2 is the Guile Scheme variable to check
#
AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT],
[GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2)
if test "$guile_module_required_export" = "no" ; then
AC_MSG_ERROR([module $1 does not export $2; required])
fi
])
## guile.m4 ends here