Since initial (serial 1) posting, elisp.m4 has accrued two more
revisions:

dnl History
dnl -  1 -- initial release
dnl -  2 -- send ‘$EMACS --batch’ out and err to config.log
dnl -  3 -- new macro: ELISP_CHECK_FEATURE

Here is serial 3:
dnl elisp.m4 --- discover Emacs reality w/ Emacs Lisp
dnl serial 3

dnl Copyright (C) 2016 Thien-Thi Nguyen
dnl
dnl This file is part of EDB.
dnl
dnl EDB is free software; you can redistribute it and/or modify it under
dnl the terms of the GNU General Public License as published by the Free
dnl Software Foundation; either version 3, or (at your option) any later
dnl version.
dnl
dnl EDB is distributed in the hope that it will be useful, but WITHOUT
dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
dnl FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
dnl for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with EDB.  If not, see <http://www.gnu.org/licenses/>.

dnl Commentary:

dnl This is a simple library to check the Emacs reality by way
dnl of Emacs Lisp forms evaluated under ‘$EMACS --batch -Q’.
dnl "Exported" (user-facing) macros are named w/ prefix "ELISP_":
dnl   ELISP_CONFIG_FILE
dnl   ELISP_CHECK
dnl   ELISP_CHECK_FEATURE
dnl   ELISP_CHECK_FBOUNDP
dnl   ELISP_CHECK_BOUNDP
dnl Internal macros have prefix "_ELISP_" (for actions)
dnl or "__ELISP_" (for state, like filenames, and so on).
dnl
dnl TODO:
dnl - Add error checking (see FIXME below).
dnl - Validate m4 mumblings -- is this the right crazy?!
dnl - Add ELISP_CONFIG_VAR as alternate to ELISP_CONFIG_FILE.
dnl - Add customization of $EMACS invocation.
dnl - Contribute to Autoconf Archive.

dnl Code:


AC_DEFUN([ELISP_CONFIG_FILE],[dnl
dnl 1 -- relative filename (from ‘top_srcdir’)
m4_define([__ELISP_CONFIG_FILENAME],[$1])dnl
])dnl


AC_DEFUN([_ELISP_PREP],[dnl
AS_IF([AS_VAR_TEST_SET([EMACS])],,dnl
  [AC_MSG_ERROR([No value for EMACS])])
dnl FIXME: Check at autoconf-time that __ELISP_CONFIG_FILENAME is set.
dnl        (If not, or if the value is unsuitable, throw fatal error.)
rm -f __ELISP_CONFIG_FILENAME
touch __ELISP_CONFIG_FILENAME
])dnl


AC_DEFUN([ELISP_CHECK],[dnl
dnl 1 -- Emacs Lisp symbol to add to config file if "success"
dnl 2 -- description
dnl 3 -- Emacs Lisp body (zero or more forms)
dnl 4 -- Emacs Lisp expression for "success"
AC_REQUIRE([_ELISP_PREP])dnl
AS_VAR_PUSHDEF([CV],[edb_cv_$1])dnl
AC_CACHE_CHECK([$2],[CV],[dnl
cat >conftest.el <<__ELISP_EOF
$3
(kill-emacs (if $4 0 1))
__ELISP_EOF
AS_IF([$EMACS --batch -Q -l conftest.el 1>&5 2>&5],[CV=yes],[CV=no])])
AS_IF([test yes = $[]CV],[echo "$1" >> __ELISP_CONFIG_FILENAME])
AS_VAR_POPDEF([CV])dnl
])dnl


AC_DEFUN([ELISP_CHECK_FEATURE],[dnl
dnl 1 -- Emacs Lisp symbol (a feature name)
AC_REQUIRE([_ELISP_PREP])dnl
ELISP_CHECK([featurep-$1],[if $EMACS supports feature ‘$1’],[dnl
(require (quote $1))
],[dnl
(featurep (quote $1))
])])


AC_DEFUN([ELISP_CHECK_FBOUNDP],[dnl
dnl 1 -- Emacs Lisp symbol
dnl 2 -- (optional) space-separated list of features to ‘require’
ELISP_CHECK([$1],[if ‘$1’ is defined],[dnl
m4_foreach([FEATURE],m4_split(m4_normalize($2)),[dnl
(require 'FEATURE)
])],[(fboundp '$1)])])dnl


AC_DEFUN([ELISP_CHECK_BOUNDP],[dnl
dnl 1 -- Emacs Lisp symbol
dnl 2 -- (optional) space-separated list of features to ‘require’
ELISP_CHECK([$1],[if ‘$1’ is defined],[dnl
m4_foreach([FEATURE],m4_split(m4_normalize($2)),[dnl
(require 'FEATURE)
])],[(boundp '$1)])])dnl


dnl History
dnl -  1 -- initial release
dnl -  2 -- send ‘$EMACS --batch’ out and err to config.log
dnl -  3 -- new macro: ELISP_CHECK_FEATURE

dnl Local variables:
dnl mode: autoconf
dnl End:
dnl elisp.m4 ends here
The announcement for EDB 1.32 is stuck in the queue it seems.
Gist: Please see <http://www.gnuvola.org/software/edb/>.

-- 
Thien-Thi Nguyen -----------------------------------------------
 (defun responsep (query)
   (pcase (context query)
     (`(technical mailing-list) t)
     ...))                              748E A0E8 1CB8 A748 9BFA
--------------------------------------- 6CE4 6703 2224 4C80 7502

Attachment: signature.asc
Description: PGP signature

_______________________________________________
gnu-emacs-sources mailing list
gnu-emacs-sources@gnu.org
https://lists.gnu.org/mailman/listinfo/gnu-emacs-sources

Reply via email to