+
+#ifndef GUILE_MAJOR_VERSION
+#ifdef SCM_MAJOR_VERSION
+#define GUILE_MAJOR_VERSION SCM_MAJOR_VERSION
+#define GUILE_MINOR_VERSION SCM_MINOR_VERSION
+#define GUILE_PATCH_LEVEL SCM_MICRO_VERSION
+#else
+#include "config.h"
+#endif
+#endif
+
+#include "drul-array.hh"
+
+/* Guile 1.4.x compatibility */
+#if GUILE_MINOR_VERSION < 5
+
+#define scm_t_bits scm_bits_t
+
+#define fix_guile_1_4_gh_scm2newstr(str, lenp) gh_scm2newstr (str, (int*)lenp)
+#define gh_scm2newstr(str, lenp) fix_guile_1_4_gh_scm2newstr (str, lenp)
+
+#define fix_guile_1_4_scm_primitive_eval(form) scm_eval_3 (form, 1, SCM_EOL)
+#define scm_primitive_eval(form) fix_guile_1_4_scm_primitive_eval (form)
+
+#define scm_int2num(x) scm_long2num (x)
+#define scm_current_module() (SCM)0
+#define scm_set_current_module(x) (void)x
+#define scm_c_resolve_module(x) (SCM)0
+
+inline SCM scm_c_make_vector (int k, SCM val) {
+ return scm_make_vector (SCM_MAKINUM (k), val);
+}
+#define scm_c_define_gsubr scm_make_gsubr
+#define scm_c_eval_string(str) gh_eval_str ((char*)str)
+#define scm_remember_upto_here_1(s) scm_remember (&s)
+#define scm_gc_protect_object scm_protect_object
+#define scm_gc_unprotect_object scm_unprotect_object
+#define scm_list_n scm_listify
+#define SCM_STRING_CHARS SCM_CHARS
+#define SCM_STRING_LENGTH SCM_LENGTH
+#define SCM_SYMBOL_CHARS SCM_CHARS
+#define SCM_SYMBOL_LENGTH SCM_LENGTH
+#define SCM_VECTOR_LENGTH SCM_LENGTH
+
+#define SMOB_FREE_RETURN_VAL(CL) sizeof(CL)
+#define scm_done_free(x)
+#endif
+
+#ifndef SMOB_FREE_RETURN_VAL
+#define SMOB_FREE_RETURN_VAL(CL) 0
+#endif
+
+
+#if GUILE_MINOR_VERSION < 7
+#define scm_gc_unregister_collectable_memory(a,b,c) scm_done_free(b)
+#define scm_gc_register_collectable_memory(a,b,c) scm_done_malloc(b)
+#endif
+