]> git.donarmstrong.com Git - lilypond.git/commitdiff
Guile compat: support scm_t_subr, a new typedef in v2.0.0
authorPatrick McCarty <pnorcks@gmail.com>
Sun, 13 Feb 2011 23:51:52 +0000 (15:51 -0800)
committerPatrick McCarty <pnorcks@gmail.com>
Mon, 21 Feb 2011 08:04:26 +0000 (00:04 -0800)
This typedef was added to Guile between versions 1.9.15 and 2.0.0.

For backward compatibility with Guile 1.9.15 and earlier, conditionally
define the typedef using a configure check.

config.hh.in
configure.in
lily/include/lily-guile-macros.hh
lily/include/ly-smobs.icc

index 4a063b57f1990d7b6a283c22847624c16102ce1d..3863a88d0df36a23a40db83b26c0b25571446ca5 100644 (file)
@@ -91,3 +91,6 @@
 
 /* define if Guile has types scm_t_hash_fold_fn and scm_t_hash_handle_fn */
 #define HAVE_GUILE_HASH_FUNC 0
+
+/* define if Guile has type scm_t_subr */
+#define HAVE_GUILE_SUBR_TYPE 0
index de37814012d5ff287628a84722890d41a045d881..7e5172ffe53be679902f7bdf6ea6d27c3dba45c5 100644 (file)
@@ -112,12 +112,15 @@ STEPMAKE_TEXMF(REQUIRED)
 STEPMAKE_TEXMF_DIRS
 STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.2)
 
-# check for 2 typedefs added in Guile 1.9
+# check for 3 typedefs added in Guile 1.9
 save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS="$GUILE_CFLAGS $CXXFLAGS"
 AC_CHECK_TYPES([scm_t_hash_fold_fn, scm_t_hash_handle_fn],
               [AC_DEFINE(HAVE_GUILE_HASH_FUNC)], [],
               [#include <libguile.h>])
+AC_CHECK_TYPES([scm_t_subr],
+              [AC_DEFINE(HAVE_GUILE_SUBR_TYPE)], [],
+              [#include <libguile.h>])
 CXXFLAGS="$save_CXXFLAGS"
 
 ## check rational bugfix.
index eaececebcb8aabb143f6d5c5172167722313cf69..ba2c9552481bd744557cc1ac1f2f98db13795061 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef LILY_GUILE_MACROS_HH
 #define LILY_GUILE_MACROS_HH
 
+#include "config.hh"
+
 #ifndef SMOB_FREE_RETURN_VAL
 #define SMOB_FREE_RETURN_VAL(CL) 0
 #endif
 #define SCM_UNPACK(x) (x)
 #endif
 
+/* For backward compatability with Guile 1.8 */
+#if !HAVE_GUILE_SUBR_TYPE
+typedef SCM (*scm_t_subr) (GUILE_ELLIPSIS);
+#endif
+
 /* Unreliable with gcc-2.x
    FIXME: should add check for x86 as well?  */
 #define CACHE_SYMBOLS
@@ -136,7 +143,7 @@ string predicate_to_typename (void *ptr);
     string id = mangle_cxx_identifier (cxx); \
     TYPE ::FUNC ## _proc = scm_c_define_gsubr (id.c_str(),                     \
                                               (ARGCOUNT-OPTIONAL_COUNT), OPTIONAL_COUNT, 0,    \
-                                              (Scheme_function_unknown) TYPE::FUNC); \
+                                              (scm_t_subr) TYPE::FUNC); \
     ly_add_function_documentation (TYPE :: FUNC ## _proc, id.c_str(), "", \
                                   DOC);                                \
     scm_c_export (id.c_str (), NULL);                                  \
@@ -174,7 +181,7 @@ void ly_check_name (string cxx, string fname);
   INITPREFIX ## init ()                                                        \
   {                                                                    \
     FNAME ## _proc = scm_c_define_gsubr (PRIMNAME, REQ, OPT, VAR,      \
-                                        (Scheme_function_unknown) FNAME); \
+                                        (scm_t_subr) FNAME); \
     ly_check_name (#FNAME, PRIMNAME);\
     ly_add_function_documentation (FNAME ## _proc, PRIMNAME, #ARGLIST, \
                                   DOCSTRING);                          \
index 96e6d9a9d2a5296b08510d0be4a2385ddfb94afc..1cb9e325905319ab220100ef1bf6605f54928843 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef LY_SMOBS_ICC
 #define LY_SMOBS_ICC
 
+#include "lily-guile-macros.hh"
 #include "smobs.hh"
 
 #define IMPLEMENT_TYPE_P(CL, FUNCNAME)                                 \
@@ -27,7 +28,7 @@
   void init_type_ ## CL ()                                             \
   {                                                                    \
     SCM subr = scm_c_define_gsubr (FUNCNAME, 1, 0, 0,                  \
-                                  (Scheme_function_unknown) CL::smob_p); \
+                                  (scm_t_subr) CL::smob_p); \
     CL ## _type_p_proc = subr;                                         \
     ly_add_function_documentation (subr, FUNCNAME, "(SCM x)",          \
                                   "Is @var{x} a @code{" #CL "} object?"); \