guile: Allow compilation with Guile <= 2.0.5

Message ID 87bnujcth2.fsf@gnu.org
State Committed
Headers

Commit Message

Ludovic Courtès May 27, 2014, 12:10 p.m. UTC
  The attached patch allows compilation with Guile <= 2.0.5.  Guile 2.0.5
is 2.5 years old but is still commonly found in some distros such as the
current Debian stable.

Tested with Guile 2.1 (current master) and 2.0.5 on x86_64-linux-gnu.

OK to push?

Thanks,
Ludo’.

2014-05-27  Ludovic Courtès  <ludo@gnu.org>

	* configure.ac: When Guile is available, check for the
	availability of 'scm_new_smob'.
	* configure, config.h.in: Regenerate.
	* guile/guile-internal.h (scm_new_smob) [!HAVE_SCM_NEW_SMOB]: New
	function.
---
 gdb/config.in              |  3 +++
 gdb/configure              | 18 ++++++++++++++++++
 gdb/configure.ac           |  9 +++++++++
 gdb/guile/guile-internal.h | 12 ++++++++++++
 4 files changed, 42 insertions(+)
  

Comments

Doug Evans June 1, 2014, 8:12 p.m. UTC | #1
On Tue, May 27, 2014 at 5:10 AM, Ludovic Courtès <ludo@gnu.org> wrote:
> The attached patch allows compilation with Guile <= 2.0.5.  Guile 2.0.5
> is 2.5 years old but is still commonly found in some distros such as the
> current Debian stable.
>
> Tested with Guile 2.1 (current master) and 2.0.5 on x86_64-linux-gnu.
>
> OK to push?
>
> Thanks,
> Ludo’.
>
> 2014-05-27  Ludovic Courtès  <ludo@gnu.org>
>
>         * configure.ac: When Guile is available, check for the
>         availability of 'scm_new_smob'.
>         * configure, config.h.in: Regenerate.
>         * guile/guile-internal.h (scm_new_smob) [!HAVE_SCM_NEW_SMOB]: New
>         function.

LGTM
  
Ludovic Courtès June 1, 2014, 8:28 p.m. UTC | #2
Doug Evans <xdje42@gmail.com> skribis:

> On Tue, May 27, 2014 at 5:10 AM, Ludovic Courtès <ludo@gnu.org> wrote:
>> The attached patch allows compilation with Guile <= 2.0.5.  Guile 2.0.5
>> is 2.5 years old but is still commonly found in some distros such as the
>> current Debian stable.
>>
>> Tested with Guile 2.1 (current master) and 2.0.5 on x86_64-linux-gnu.
>>
>> OK to push?
>>
>> Thanks,
>> Ludo’.
>>
>> 2014-05-27  Ludovic Courtès  <ludo@gnu.org>
>>
>>         * configure.ac: When Guile is available, check for the
>>         availability of 'scm_new_smob'.
>>         * configure, config.h.in: Regenerate.
>>         * guile/guile-internal.h (scm_new_smob) [!HAVE_SCM_NEW_SMOB]: New
>>         function.
>
> LGTM

Pushed, thanks.

Ludo’.
  

Patch

diff --git a/gdb/config.in b/gdb/config.in
index 5c46567..cd4ce92 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -342,6 +342,9 @@ 
 /* Define to 1 if you have the `sbrk' function. */
 #undef HAVE_SBRK
 
+/* Define to 1 if you have the `scm_new_smob' function. */
+#undef HAVE_SCM_NEW_SMOB
+
 /* Define to 1 if you have the `setlocale' function. */
 #undef HAVE_SETLOCALE
 
diff --git a/gdb/configure b/gdb/configure
index d7e5cef..56c92d3 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -9076,6 +9076,24 @@  $as_echo "#define HAVE_GUILE 1" >>confdefs.h
   CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_GUILE_SRCS)"
   CONFIG_INSTALL="$CONFIG_INSTALL install-guile"
   ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_GUILE_CFLAGS)"
+
+    save_LIBS="$LIBS"
+  save_CPPFLAGS="$CPPFLAGS"
+  LIBS="$GUILE_LIBS"
+  CPPFLAGS="$GUILE_CPPFLAGS"
+  for ac_func in scm_new_smob
+do :
+  ac_fn_c_check_func "$LINENO" "scm_new_smob" "ac_cv_func_scm_new_smob"
+if test "x$ac_cv_func_scm_new_smob" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SCM_NEW_SMOB 1
+_ACEOF
+
+fi
+done
+
+  LIBS="$save_LIBS"
+  CPPFLAGS="$save_CPPFLAGS"
 else
   # Even if Guile support is not compiled in, we need to have these files
   # included.
diff --git a/gdb/configure.ac b/gdb/configure.ac
index ff84a2e..903f378 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1200,6 +1200,15 @@  if test "${have_libguile}" != no; then
   CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_GUILE_SRCS)"
   CONFIG_INSTALL="$CONFIG_INSTALL install-guile"
   ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_GUILE_CFLAGS)"
+
+  dnl The 'scm_new_smob' function appeared in Guile 2.0.6.
+  save_LIBS="$LIBS"
+  save_CPPFLAGS="$CPPFLAGS"
+  LIBS="$GUILE_LIBS"
+  CPPFLAGS="$GUILE_CPPFLAGS"
+  AC_CHECK_FUNCS([scm_new_smob])
+  LIBS="$save_LIBS"
+  CPPFLAGS="$save_CPPFLAGS"
 else
   # Even if Guile support is not compiled in, we need to have these files
   # included.
diff --git a/gdb/guile/guile-internal.h b/gdb/guile/guile-internal.h
index e2e1c01..ff891b5 100644
--- a/gdb/guile/guile-internal.h
+++ b/gdb/guile/guile-internal.h
@@ -97,6 +97,18 @@  typedef struct
 #define gdbscm_is_false(scm) scm_is_eq ((scm), SCM_BOOL_F)
 #define gdbscm_is_true(scm) (!gdbscm_is_false (scm))
 
+#ifndef HAVE_SCM_NEW_SMOB
+
+/* Guile <= 2.0.5 did not provide this function, so provide it here.  */
+
+static inline SCM
+scm_new_smob (scm_t_bits tc, scm_t_bits data)
+{
+  SCM_RETURN_NEWSMOB (tc, data);
+}
+
+#endif
+
 /* Function name that is passed around in case an error needs to be reported.
    __func is in C99, but we provide a wrapper "just in case",
    and because FUNC_NAME is the canonical value used in guile sources.