guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/3] Add C++ extern "C" guards to internal headers.


From: Taahir Ahmed
Subject: [PATCH 2/3] Add C++ extern "C" guards to internal headers.
Date: Tue, 14 Jul 2015 13:07:28 -0500

---
 libguile/__scm.h               |  8 ++++++++
 libguile/_scm.h                | 10 ++++++++++
 libguile/alist.h               |  8 ++++++++
 libguile/arbiters.h            |  8 ++++++++
 libguile/array-handle.h        |  7 +++++++
 libguile/array-map.h           |  8 ++++++++
 libguile/arrays.h              |  8 ++++++++
 libguile/async.h               |  8 ++++++++
 libguile/backtrace.h           |  8 ++++++++
 libguile/bdw-gc.h              |  7 +++++++
 libguile/bitvectors.h          |  8 ++++++++
 libguile/boolean.h             |  8 ++++++++
 libguile/bytevectors.h         |  7 +++++++
 libguile/chars.h               |  8 ++++++++
 libguile/continuations.h       |  9 +++++++++
 libguile/control.h             |  6 ++++++
 libguile/debug-malloc.h        |  8 ++++++++
 libguile/debug.h               |  9 +++++++++
 libguile/deprecated.h          |  8 ++++++++
 libguile/deprecation.h         |  8 ++++++++
 libguile/dynl.h                |  8 ++++++++
 libguile/dynstack.h            |  8 ++++++++
 libguile/dynwind.h             |  7 +++++++
 libguile/elf.h                 |  7 +++++++
 libguile/eq.h                  |  8 ++++++++
 libguile/error.h               |  8 ++++++++
 libguile/evalext.h             |  8 ++++++++
 libguile/expand.h              |  6 ++++++
 libguile/extensions.h          |  8 ++++++++
 libguile/feature.h             |  8 ++++++++
 libguile/filesys.h             |  8 ++++++++
 libguile/finalizers.h          |  8 ++++++++
 libguile/fluids.h              |  7 +++++++
 libguile/foreign-object.h      |  6 ++++++
 libguile/foreign.h             |  8 ++++++++
 libguile/fports.h              |  7 +++++++
 libguile/frames.h              |  8 ++++++++
 libguile/gc-inline.h           | 13 +++++++++++++
 libguile/gc.h                  |  8 ++++++++
 libguile/generalized-arrays.h  |  7 +++++++
 libguile/generalized-vectors.h |  8 ++++++++
 libguile/gettext.h             |  8 ++++++++
 libguile/goops.h               |  8 ++++++++
 libguile/gsubr.h               |  7 +++++++
 libguile/guardians.h           |  8 ++++++++
 libguile/hash.h                |  8 ++++++++
 libguile/hashtab.h             |  8 ++++++++
 libguile/hooks.h               |  8 ++++++++
 libguile/i18n.h                |  7 +++++++
 libguile/init.h                |  9 +++++++++
 libguile/inline.h              |  9 +++++++++
 libguile/instructions.h        |  8 ++++++++
 libguile/ioext.h               |  8 ++++++++
 libguile/iselect.h             |  8 ++++++++
 libguile/keywords.h            |  8 ++++++++
 libguile/libgettext.h          | 16 ++++++++++++++++
 libguile/list.h                |  8 ++++++++
 libguile/load.h                |  8 ++++++++
 libguile/loader.h              |  8 ++++++++
 libguile/macros.h              |  7 +++++++
 libguile/mallocs.h             |  9 +++++++++
 libguile/memoize.h             |  7 +++++++
 libguile/modules.h             |  8 ++++++++
 libguile/net_db.h              |  8 ++++++++
 libguile/null-threads.h        |  7 +++++++
 libguile/numbers.h             | 16 ++++++++++++++++
 libguile/objprop.h             |  8 ++++++++
 libguile/options.h             |  8 ++++++++
 libguile/pairs.h               |  9 +++++++++
 libguile/poll.h                |  8 ++++++++
 libguile/ports-internal.h      |  8 ++++++++
 libguile/ports.h               |  8 ++++++++
 libguile/posix.h               |  7 +++++++
 libguile/print.h               |  9 +++++++++
 libguile/private-options.h     |  8 ++++++++
 libguile/procprop.h            |  8 ++++++++
 libguile/procs.h               |  8 ++++++++
 libguile/programs.h            |  8 ++++++++
 libguile/promises.h            |  7 +++++++
 libguile/pthread-threads.h     |  8 ++++++++
 libguile/r6rs-ports.h          |  8 ++++++++
 libguile/random.h              |  9 +++++++++
 libguile/rdelim.h              |  8 ++++++++
 libguile/read.h                |  9 +++++++++
 libguile/regex-posix.h         |  8 ++++++++
 libguile/root.h                |  8 ++++++++
 libguile/rw.h                  |  8 ++++++++
 libguile/scmsigs.h             |  8 ++++++++
 libguile/script.h              |  9 +++++++++
 libguile/simpos.h              |  8 ++++++++
 libguile/smob.h                |  7 +++++++
 libguile/snarf.h               |  8 ++++++++
 libguile/socket.h              |  8 ++++++++
 libguile/sort.h                |  8 ++++++++
 libguile/srcprop.h             |  7 +++++++
 libguile/srfi-1.h              |  8 ++++++++
 libguile/srfi-13.h             |  8 ++++++++
 libguile/srfi-14.h             |  8 ++++++++
 libguile/srfi-4.h              |  8 ++++++++
 libguile/srfi-60.h             |  8 ++++++++
 libguile/stackchk.h            |  8 ++++++++
 libguile/stacks.h              |  8 ++++++++
 libguile/stime.h               |  8 ++++++++
 libguile/strings.h             |  8 ++++++++
 libguile/strorder.h            |  8 ++++++++
 libguile/strports.h            |  8 ++++++++
 libguile/struct.h              |  8 ++++++++
 libguile/symbols.h             |  9 +++++++++
 libguile/tags.h                |  8 ++++++++
 libguile/threads.h             |  8 ++++++++
 libguile/throw.h               |  8 ++++++++
 libguile/trees.h               |  8 ++++++++
 libguile/unicode.h             |  8 ++++++++
 libguile/uniform.h             |  7 +++++++
 libguile/validate.h            |  8 ++++++++
 libguile/values.h              |  8 ++++++++
 libguile/variable.h            |  8 ++++++++
 libguile/vectors.h             |  8 ++++++++
 libguile/vm-builtins.h         |  8 ++++++++
 libguile/vm-expand.h           |  8 ++++++++
 libguile/vm.h                  |  8 ++++++++
 libguile/vports.h              |  8 ++++++++
 libguile/weak-set.h            |  8 ++++++++
 libguile/weak-table.h          |  8 ++++++++
 libguile/weak-vector.h         |  7 +++++++
 libguile/win32-uname.h         |  8 ++++++++
 126 files changed, 1017 insertions(+)

diff --git a/libguile/__scm.h b/libguile/__scm.h
index 31e3952..1967069 100644
--- a/libguile/__scm.h
+++ b/libguile/__scm.h
@@ -53,6 +53,10 @@
 /* What did the configure script discover about the outside world?  */
 #include "libguile/scmconfig.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* {Compiler hints}
@@ -523,6 +527,10 @@ typedef long SCM_STACKITEM;
 # define SCM_THREAD_LOCAL
 #endif
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM___SCM_H */
 
 /*
diff --git a/libguile/_scm.h b/libguile/_scm.h
index 97ddaf2..183fe50 100644
--- a/libguile/_scm.h
+++ b/libguile/_scm.h
@@ -134,6 +134,12 @@
 
 
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
 #ifndef min
 #define min(A, B) ((A) <= (B) ? (A) : (B))
 #endif
@@ -278,6 +284,10 @@ void scm_ia64_longjmp (scm_i_jmp_buf *, int);
 #define SCM_OBJCODE_MACHINE_VERSION_STRING                              \
   SCM_OBJCODE_ENDIANNESS "-" SCM_OBJCODE_WORD_SIZE "-" 
SCM_OBJCODE_VERSION_STRING
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM__SCM_H */
 
 /*
diff --git a/libguile/alist.h b/libguile/alist.h
index 77c5656..0faea9f 100644
--- a/libguile/alist.h
+++ b/libguile/alist.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_acons (SCM w, SCM x, SCM y);
@@ -45,6 +49,10 @@ SCM_API SCM scm_assv_remove_x (SCM alist, SCM key);
 SCM_API SCM scm_assoc_remove_x (SCM alist, SCM key);
 SCM_INTERNAL void scm_init_alist (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_ALIST_H */
 
 /*
diff --git a/libguile/arbiters.h b/libguile/arbiters.h
index 214e92a..8e9b27c 100644
--- a/libguile/arbiters.h
+++ b/libguile/arbiters.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_make_arbiter (SCM name);
@@ -32,6 +36,10 @@ SCM_API SCM scm_try_arbiter (SCM arb);
 SCM_API SCM scm_release_arbiter (SCM arb);
 SCM_INTERNAL void scm_init_arbiters (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_ARBITERS_H */
 
 /*
diff --git a/libguile/array-handle.h b/libguile/array-handle.h
index a623b4e..c8cdb02 100644
--- a/libguile/array-handle.h
+++ b/libguile/array-handle.h
@@ -28,6 +28,10 @@
 #include "libguile/error.h"
 #include "libguile/numbers.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 typedef SCM (*scm_t_vector_ref) (SCM, size_t);
@@ -131,6 +135,9 @@ scm_array_handle_set (scm_t_array_handle *h, ssize_t p, SCM 
v)
 
 SCM_INTERNAL void scm_init_array_handle (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_ARRAY_HANDLE_H */
 
diff --git a/libguile/array-map.h b/libguile/array-map.h
index b0592d8..0a25df4 100644
--- a/libguile/array-map.h
+++ b/libguile/array-map.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API int scm_ra_matchp (SCM ra0, SCM ras);
@@ -55,6 +59,10 @@ SCM_DEPRECATED int scm_array_identity (SCM src, SCM dst);
 
 #endif  /* SCM_ENABLE_DEPRECATED == 1 */
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_ARRAY_MAP_H */
 
 /*
diff --git a/libguile/arrays.h b/libguile/arrays.h
index 5f40597..918913e 100644
--- a/libguile/arrays.h
+++ b/libguile/arrays.h
@@ -27,6 +27,10 @@
 #include "libguile/__scm.h"
 #include "libguile/print.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* Multidimensional arrays. Woo hoo!
@@ -72,6 +76,10 @@ SCM_INTERNAL int scm_i_print_array (SCM array, SCM port, 
scm_print_state *pstate
 
 SCM_INTERNAL void scm_init_arrays (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_ARRAYS_H */
 
 /*
diff --git a/libguile/async.h b/libguile/async.h
index 00b7914..8b52faf 100644
--- a/libguile/async.h
+++ b/libguile/async.h
@@ -28,6 +28,10 @@
 #include "libguile/root.h"
 #include "libguile/threads.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API void scm_async_tick (void);
@@ -104,6 +108,10 @@ SCM_API void scm_critical_section_end (void);
 
 SCM_INTERNAL void scm_init_async (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_ASYNC_H */
 
 /*
diff --git a/libguile/backtrace.h b/libguile/backtrace.h
index 42bd26f..0f081b2 100644
--- a/libguile/backtrace.h
+++ b/libguile/backtrace.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_print_exception (SCM port, SCM frame, SCM key, SCM args);
 
 SCM_API void scm_display_error_message (SCM message, SCM args, SCM port);
@@ -42,6 +46,10 @@ SCM_API SCM scm_set_print_params_x (SCM params);
 
 SCM_INTERNAL void scm_init_backtrace (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_BACKTRACE_H */
 
 /*
diff --git a/libguile/bdw-gc.h b/libguile/bdw-gc.h
index 6e2f456..5e4bbce 100644
--- a/libguile/bdw-gc.h
+++ b/libguile/bdw-gc.h
@@ -46,6 +46,10 @@
 
 #include <gc/gc.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Return true if PTR points to the heap.  */
 #define SCM_I_IS_POINTER_TO_THE_HEAP(ptr)      \
   (GC_base (ptr) != NULL)
@@ -60,5 +64,8 @@
    ? GC_GENERAL_REGISTER_DISAPPEARING_LINK ((link), (obj))     \
    : 0)
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* SCM_BDW_GC_H */
diff --git a/libguile/bitvectors.h b/libguile/bitvectors.h
index 6b2cb1e..d3c03b9 100644
--- a/libguile/bitvectors.h
+++ b/libguile/bitvectors.h
@@ -26,6 +26,10 @@
 #include "libguile/__scm.h"
 #include "libguile/array-handle.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* Bitvectors. Exciting stuff, maybe!
@@ -75,6 +79,10 @@ SCM_INTERNAL int scm_i_print_bitvector (SCM vec, SCM port, 
scm_print_state *psta
 SCM_INTERNAL SCM scm_i_bitvector_equal_p (SCM vec1, SCM vec2);
 SCM_INTERNAL void scm_init_bitvectors (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_BITVECTORS_H */
 
 /*
diff --git a/libguile/boolean.h b/libguile/boolean.h
index df72728..ff3eb41 100644
--- a/libguile/boolean.h
+++ b/libguile/boolean.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* Boolean Values. Obviously there are #t and #f, but there is also nil to deal
@@ -130,6 +134,10 @@ SCM_API SCM scm_nil_p (SCM obj);
 
 SCM_INTERNAL void scm_init_boolean (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_BOOLEAN_H */
 
 /*
diff --git a/libguile/bytevectors.h b/libguile/bytevectors.h
index a5eeaea..e77896f 100644
--- a/libguile/bytevectors.h
+++ b/libguile/bytevectors.h
@@ -23,6 +23,9 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /* R6RS bytevectors.  */
 
@@ -148,4 +151,8 @@ SCM_INTERNAL SCM scm_c_shrink_bytevector (SCM, size_t);
 SCM_INTERNAL void scm_i_bytevector_generalized_set_x (SCM, size_t, SCM);
 SCM_INTERNAL SCM scm_null_bytevector;
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_BYTEVECTORS_H */
diff --git a/libguile/chars.h b/libguile/chars.h
index 488dd25..b4d6cd9 100644
--- a/libguile/chars.h
+++ b/libguile/chars.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifndef SCM_T_WCHAR_DEFINED
 typedef scm_t_int32 scm_t_wchar;
 #define SCM_T_WCHAR_DEFINED
@@ -90,6 +94,10 @@ SCM_INTERNAL SCM scm_i_charname_to_char (const char 
*charname,
                                          size_t charname_len);
 SCM_INTERNAL void scm_init_chars (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_CHARS_H */
 
 /*
diff --git a/libguile/continuations.h b/libguile/continuations.h
index ec12b46..37a82d9 100644
--- a/libguile/continuations.h
+++ b/libguile/continuations.h
@@ -29,6 +29,11 @@
 #include <signal.h>
 #include <ucontext.h>
 #endif /* __ia64__ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 #define SCM_CONTINUATIONP(x) \
@@ -96,6 +101,10 @@ scm_i_with_continuation_barrier (scm_t_catch_body body,
 
 SCM_INTERNAL void scm_init_continuations (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_CONTINUATIONS_H */
 
 /*
diff --git a/libguile/control.h b/libguile/control.h
index 4b76591..950d71a 100644
--- a/libguile/control.h
+++ b/libguile/control.h
@@ -21,6 +21,9 @@
 
 #include "libguile/vm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 SCM_INTERNAL SCM scm_i_prompt_pop_abort_args_x (struct scm_vm *vp);
 
@@ -31,5 +34,8 @@ SCM_INTERNAL SCM scm_abort_to_prompt_star (SCM tag, SCM args) 
SCM_NORETURN;
 
 SCM_INTERNAL void scm_init_control (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* SCM_CONTROL_H */
diff --git a/libguile/debug-malloc.h b/libguile/debug-malloc.h
index 7830adb..9b1ce1e 100644
--- a/libguile/debug-malloc.h
+++ b/libguile/debug-malloc.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API void scm_malloc_register (void *obj, const char *what);
@@ -36,6 +40,10 @@ SCM_API SCM scm_malloc_stats (void);
 SCM_INTERNAL void scm_debug_malloc_prehistory (void);
 SCM_INTERNAL void scm_init_debug_malloc (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_DEBUG_MALLOC_H */
 
 /*
diff --git a/libguile/debug.h b/libguile/debug.h
index ab301a0..5dec284 100644
--- a/libguile/debug.h
+++ b/libguile/debug.h
@@ -27,6 +27,11 @@
 #include "libguile/__scm.h"
 
 #include "libguile/options.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_local_eval (SCM exp, SCM env);
@@ -40,6 +45,10 @@ SCM_INTERNAL void scm_init_debug (void);
 SCM_API SCM scm_debug_hang (SCM obj);
 #endif /*GUILE_DEBUG*/
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_DEBUG_H */
 
 /*
diff --git a/libguile/deprecated.h b/libguile/deprecated.h
index 1f13bde..6d4b410 100644
--- a/libguile/deprecated.h
+++ b/libguile/deprecated.h
@@ -29,6 +29,10 @@
 #include "libguile/throw.h"
 #include "libguile/iselect.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #if (SCM_ENABLE_DEPRECATED == 1)
 
 /* Deprecated 13-05-2011 because it's better just to scm_dynwind_begin.
@@ -223,4 +227,8 @@ void scm_i_init_deprecated (void);
 
 #endif
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_DEPRECATED_H */
diff --git a/libguile/deprecation.h b/libguile/deprecation.h
index 06027c6..50b858f 100644
--- a/libguile/deprecation.h
+++ b/libguile/deprecation.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* These functions are a possibly useful part of the API and not only used
@@ -38,6 +42,10 @@ SCM_API SCM scm_issue_deprecation_warning (SCM msgs);
 SCM_API SCM scm_include_deprecated_features (void);
 SCM_INTERNAL void scm_init_deprecation (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_DEPRECATION_H */
 
 /*
diff --git a/libguile/dynl.h b/libguile/dynl.h
index e735bcc..08562cf 100644
--- a/libguile/dynl.h
+++ b/libguile/dynl.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_dynamic_link (SCM fname);
@@ -36,6 +40,10 @@ SCM_API SCM scm_dynamic_call (SCM symb, SCM dobj);
 
 SCM_INTERNAL void scm_init_dynamic_linking (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_DYNL_H */
 
 /*
diff --git a/libguile/dynstack.h b/libguile/dynstack.h
index 7b31ace..8531041 100644
--- a/libguile/dynstack.h
+++ b/libguile/dynstack.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 typedef struct
@@ -201,6 +205,10 @@ SCM_INTERNAL void scm_dynstack_wind_prompt (scm_t_dynstack 
*, scm_t_bits *,
                                             scm_t_ptrdiff, scm_i_jmp_buf *);
 
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_DYNSTACK_H */
 
 /*
diff --git a/libguile/dynwind.h b/libguile/dynwind.h
index 9ade05c..4f1091d 100644
--- a/libguile/dynwind.h
+++ b/libguile/dynwind.h
@@ -26,6 +26,10 @@
 #include "libguile/__scm.h"
 #include "libguile/dynstack.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_dynamic_wind (SCM thunk1, SCM thunk2, SCM thunk3);
@@ -57,6 +61,9 @@ SCM_API void scm_dynwind_rewind_handler_with_scm (void 
(*func) (SCM), SCM data,
 
 SCM_API void scm_dynwind_free (void *mem);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_DYNWIND_H */
 
diff --git a/libguile/elf.h b/libguile/elf.h
index 9d53721..f30d5c0 100644
--- a/libguile/elf.h
+++ b/libguile/elf.h
@@ -25,6 +25,10 @@
 
 #include <stdint.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Type for a 16-bit quantity.  */
 typedef uint16_t Elf32_Half;
 typedef uint16_t Elf64_Half;
@@ -2790,5 +2794,8 @@ typedef Elf32_Addr Elf32_Conflict;
 #define R_M32R_GOTOFF_LO       64      /* Low 16 bit offset to GOT */
 #define R_M32R_NUM             256     /* Keep this the last entry. */
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* elf.h */
diff --git a/libguile/eq.h b/libguile/eq.h
index c09d667..55f0822 100644
--- a/libguile/eq.h
+++ b/libguile/eq.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* scm_is_eq is defined in tags.h for some reason. */
@@ -39,6 +43,10 @@ SCM_API SCM scm_eqv_p (SCM x, SCM y);
 SCM_API SCM scm_equal_p (SCM x, SCM y);
 SCM_INTERNAL void scm_init_eq (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_EQ_H */
 
 /*
diff --git a/libguile/error.h b/libguile/error.h
index 6985dbc..78326d1 100644
--- a/libguile/error.h
+++ b/libguile/error.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 SCM_API SCM scm_system_error_key;
 SCM_API SCM scm_num_overflow_key;
@@ -70,6 +74,10 @@ SCM_API void scm_misc_error (const char *subr, const char 
*message,
                             SCM args) SCM_NORETURN;
 SCM_INTERNAL void scm_init_error (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_ERROR_H */
 
 /*
diff --git a/libguile/evalext.h b/libguile/evalext.h
index 7718ec6..7c2436c 100644
--- a/libguile/evalext.h
+++ b/libguile/evalext.h
@@ -25,12 +25,20 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_defined_p (SCM sym, SCM env);
 SCM_API SCM scm_self_evaluating_p (SCM obj);
 SCM_INTERNAL void scm_init_evalext (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_EVALEXT_H */
 
 /*
diff --git a/libguile/expand.h b/libguile/expand.h
index 9c2732d..e7b72d9 100644
--- a/libguile/expand.h
+++ b/libguile/expand.h
@@ -26,6 +26,9 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
 
@@ -341,6 +344,9 @@ SCM_INTERNAL SCM scm_convert_assignment (SCM exp);
 
 SCM_INTERNAL void scm_init_expand (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_EXPAND_H */
 
diff --git a/libguile/extensions.h b/libguile/extensions.h
index 765f9be..3590647 100644
--- a/libguile/extensions.h
+++ b/libguile/extensions.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 typedef void (*scm_t_extension_init_func)(void*);
@@ -37,6 +41,10 @@ SCM_API SCM scm_load_extension (SCM lib, SCM init);
 
 SCM_INTERNAL void scm_init_extensions (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_EXTENSIONS_H */
 
 /*
diff --git a/libguile/feature.h b/libguile/feature.h
index 467f9ed..28e41cd 100644
--- a/libguile/feature.h
+++ b/libguile/feature.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API void scm_add_feature (const char* str);
 SCM_API SCM scm_program_arguments (void);
 SCM_API void scm_set_program_arguments (int argc, char **argv, char *first);
@@ -34,6 +38,10 @@ SCM_API SCM scm_set_program_arguments_scm (SCM lst);
 SCM_INTERNAL SCM scm_program_arguments_fluid;
 SCM_INTERNAL void scm_init_feature (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_FEATURE_H */
 
 /*
diff --git a/libguile/filesys.h b/libguile/filesys.h
index fc66e40..b7b8e8d 100644
--- a/libguile/filesys.h
+++ b/libguile/filesys.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API scm_t_bits scm_tc16_dir;
@@ -72,6 +76,10 @@ SCM_INTERNAL SCM scm_i_relativize_path (SCM path, SCM 
in_path);
 
 SCM_INTERNAL void scm_init_filesys (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_FILESYS_H */
 
 /*
diff --git a/libguile/finalizers.h b/libguile/finalizers.h
index d01d1b7..7707fd5 100644
--- a/libguile/finalizers.h
+++ b/libguile/finalizers.h
@@ -23,6 +23,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 typedef void (*scm_t_finalizer_proc) (void *obj, void *data);
@@ -47,4 +51,8 @@ SCM_API int scm_run_finalizers (void);
 SCM_INTERNAL void scm_init_finalizers (void);
 SCM_INTERNAL void scm_init_finalizer_thread (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_FINALIZERS_H */
diff --git a/libguile/fluids.h b/libguile/fluids.h
index a550d9a..ba0d1fb 100644
--- a/libguile/fluids.h
+++ b/libguile/fluids.h
@@ -27,6 +27,9 @@
 #include "libguile/root.h"
 #include "libguile/vectors.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /* Fluids.
 
@@ -91,6 +94,10 @@ SCM_INTERNAL void scm_i_fluid_print (SCM exp, SCM port, 
scm_print_state *pstate)
 SCM_INTERNAL void scm_i_dynamic_state_print (SCM exp, SCM port, 
scm_print_state *pstate);
 SCM_INTERNAL void scm_init_fluids (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_FLUIDS_H */
 
 /*
diff --git a/libguile/foreign-object.h b/libguile/foreign-object.h
index 806b7ed..3f5e84e 100644
--- a/libguile/foreign-object.h
+++ b/libguile/foreign-object.h
@@ -24,6 +24,9 @@
 #include "libguile/__scm.h"
 #include "libguile/print.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
 
@@ -58,5 +61,8 @@ SCM_API void scm_foreign_object_signed_set_x (SCM obj, size_t 
n,
 
 SCM_INTERNAL void scm_register_foreign_object (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_FOREIGN_OBJECT_H */
diff --git a/libguile/foreign.h b/libguile/foreign.h
index fbb9764..6546860 100644
--- a/libguile/foreign.h
+++ b/libguile/foreign.h
@@ -21,6 +21,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* A "foreign pointer" is a wrapped C pointer.  It is represented by a
    cell whose second word is a pointer.  The first word has the
    `scm_tc7_pointer' type code.
@@ -106,4 +110,8 @@ SCM_INTERNAL int scm_i_foreign_arity (SCM foreign,
 SCM_INTERNAL void scm_register_foreign (void);
 
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_FOREIGN_H */
diff --git a/libguile/fports.h b/libguile/fports.h
index 092b43e..d01bdb9 100644
--- a/libguile/fports.h
+++ b/libguile/fports.h
@@ -27,6 +27,10 @@
 
 #include "libguile/ports.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* struct allocated for each buffered FPORT.  */
@@ -75,6 +79,9 @@ SCM_INTERNAL void scm_init_fports (void);
 
 SCM_INTERNAL SCM scm_i_fdes_to_port (int fdes, long mode_bits, SCM name);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_FPORTS_H */
 
diff --git a/libguile/frames.h b/libguile/frames.h
index 31f8634..bb0fa2f 100644
--- a/libguile/frames.h
+++ b/libguile/frames.h
@@ -22,6 +22,10 @@
 #include <libguile.h>
 #include "programs.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 /* Stack frames
    ------------
@@ -177,6 +181,10 @@ SCM_INTERNAL void scm_i_frame_print (SCM frame, SCM port,
                                      scm_print_state *pstate);
 SCM_INTERNAL void scm_init_frames (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _SCM_FRAMES_H_ */
 
 /*
diff --git a/libguile/gc-inline.h b/libguile/gc-inline.h
index fcbe5a5..c32089b 100644
--- a/libguile/gc-inline.h
+++ b/libguile/gc-inline.h
@@ -47,7 +47,17 @@
 #include "libguile/bdw-gc.h"
 #include "libguile/threads.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #include <gc/gc_inline.h> /* GC_generic_malloc_many */
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
 
@@ -173,6 +183,9 @@ scm_inline_cons (scm_i_thread *thread, SCM x, SCM y)
   return scm_inline_cell (thread, SCM_UNPACK (x), SCM_UNPACK (y));
 }
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_GC_INLINE_H */
 
diff --git a/libguile/gc.h b/libguile/gc.h
index 8b3ae79..1190c46 100644
--- a/libguile/gc.h
+++ b/libguile/gc.h
@@ -29,6 +29,10 @@
 #include "libguile/hooks.h"
 #include "libguile/threads.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 typedef struct scm_t_cell
 {
@@ -331,6 +335,10 @@ SCM_INTERNAL void scm_storage_prehistory (void);
 SCM_INTERNAL void scm_init_gc_protect_object (void);
 SCM_INTERNAL void scm_init_gc (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_GC_H */
 
 /*
diff --git a/libguile/generalized-arrays.h b/libguile/generalized-arrays.h
index dfdb8bd..59908ef 100644
--- a/libguile/generalized-arrays.h
+++ b/libguile/generalized-arrays.h
@@ -26,6 +26,10 @@
 #include "libguile/__scm.h"
 #include "libguile/array-handle.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* These functions operate on all kinds of arrays that Guile knows about.
@@ -64,6 +68,9 @@ SCM_API SCM scm_array_to_list (SCM v);
 
 SCM_INTERNAL void scm_init_generalized_arrays (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_GENERALIZED_ARRAYS_H */
 
diff --git a/libguile/generalized-vectors.h b/libguile/generalized-vectors.h
index 876537a..46881bd 100644
--- a/libguile/generalized-vectors.h
+++ b/libguile/generalized-vectors.h
@@ -26,6 +26,10 @@
 #include "libguile/__scm.h"
 #include "libguile/array-handle.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* Generalized vectors */
@@ -46,6 +50,10 @@ SCM_INTERNAL void scm_i_register_vector_constructor (SCM 
type, SCM (*ctor)(SCM,
 
 SCM_INTERNAL void scm_init_generalized_vectors (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_GENERALIZED_VECTORS_H */
 
 /*
diff --git a/libguile/gettext.h b/libguile/gettext.h
index d4576bd..e0b7da2 100644
--- a/libguile/gettext.h
+++ b/libguile/gettext.h
@@ -23,6 +23,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_gettext (SCM msgid, SCM domainname, SCM category);
 SCM_API SCM scm_ngettext (SCM msgid, SCM msgid_plural, SCM n, SCM domainname, 
SCM category);
 SCM_API SCM scm_textdomain (SCM domainname);
@@ -33,6 +37,10 @@ SCM_INTERNAL int scm_i_to_lc_category (SCM category, int 
allow_lc_all);
 
 SCM_INTERNAL void scm_init_gettext (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_GETTEXT_H */
 
 /*
diff --git a/libguile/goops.h b/libguile/goops.h
index cc743a6..fcd27e1 100644
--- a/libguile/goops.h
+++ b/libguile/goops.h
@@ -34,6 +34,10 @@
 
 #include "libguile/validate.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* {Class flags}
  *
  * These are used for efficient identification of instances of a
@@ -142,6 +146,10 @@ SCM_INTERNAL SCM scm_i_define_class_for_vtable (SCM 
vtable);
 
 SCM_INTERNAL void scm_init_goops (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_GOOPS_H */
 
 /*
diff --git a/libguile/gsubr.h b/libguile/gsubr.h
index 065b947..1213e2b 100644
--- a/libguile/gsubr.h
+++ b/libguile/gsubr.h
@@ -26,6 +26,9 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
 
@@ -70,6 +73,10 @@ SCM_API SCM scm_c_define_gsubr_with_generic (const char 
*name,
 
 SCM_INTERNAL void scm_init_gsubr (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_GSUBR_H */
 
 /*
diff --git a/libguile/guardians.h b/libguile/guardians.h
index a23026d..398032a 100644
--- a/libguile/guardians.h
+++ b/libguile/guardians.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_make_guardian (void);
 
 SCM_INTERNAL void scm_i_init_guardians_for_gc (void);
@@ -33,6 +37,10 @@ SCM_INTERNAL int scm_i_mark_inaccessible_guardeds (void);
 
 SCM_INTERNAL void scm_init_guardians (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_GUARDIANS_H */
 
 /*
diff --git a/libguile/hash.h b/libguile/hash.h
index 9085bc0..d9eee3c 100644
--- a/libguile/hash.h
+++ b/libguile/hash.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_INTERNAL unsigned long scm_i_locale_string_hash (const char *str,
@@ -44,6 +48,10 @@ SCM_API unsigned long scm_ihash (SCM obj, unsigned long n);
 SCM_API SCM scm_hash (SCM obj, SCM n);
 SCM_INTERNAL void scm_init_hash (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_HASH_H */
 
 /*
diff --git a/libguile/hashtab.h b/libguile/hashtab.h
index 82ed22e..6ac2fd1 100644
--- a/libguile/hashtab.h
+++ b/libguile/hashtab.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 #define SCM_HASHTABLE_P(x) (SCM_HAS_TYP7 (x, scm_tc7_hashtable))
@@ -138,6 +142,10 @@ SCM_API SCM scm_hash_count (SCM hash, SCM pred);
 SCM_INTERNAL void scm_i_hashtable_print (SCM exp, SCM port, scm_print_state 
*pstate);
 SCM_INTERNAL void scm_init_hashtab (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_HASHTAB_H */
 
 /*
diff --git a/libguile/hooks.h b/libguile/hooks.h
index dc930cb..2c4072e 100644
--- a/libguile/hooks.h
+++ b/libguile/hooks.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*
  * C level hooks
  */
@@ -91,6 +95,10 @@ SCM_API void scm_c_run_hookn (SCM hook, SCM *argv, size_t 
nargs);
 SCM_API SCM scm_hook_to_list (SCM hook);
 SCM_INTERNAL void scm_init_hooks (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_HOOKS_H */
 
 /*
diff --git a/libguile/i18n.h b/libguile/i18n.h
index c2792ac..3dda139 100644
--- a/libguile/i18n.h
+++ b/libguile/i18n.h
@@ -23,6 +23,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_global_locale;
 SCM_API SCM scm_make_locale (SCM category_mask, SCM locale_name, SCM 
base_locale);
 SCM_API SCM scm_locale_p (SCM obj);
@@ -50,6 +54,9 @@ SCM_INTERNAL SCM scm_nl_langinfo (SCM item, SCM locale);
 SCM_INTERNAL void scm_init_i18n (void);
 SCM_INTERNAL void scm_bootstrap_i18n (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_I18N_H */
 
diff --git a/libguile/init.h b/libguile/init.h
index bc6cddf..385ffc3 100644
--- a/libguile/init.h
+++ b/libguile/init.h
@@ -26,6 +26,11 @@
 #include "libguile/__scm.h"
 #include "libguile/threads.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 
 SCM_INTERNAL scm_i_pthread_mutex_t scm_i_init_mutex;
 SCM_API int scm_initialized_p;
@@ -42,6 +47,10 @@ SCM_INTERNAL void scm_i_init_guile (void *base);
 
 SCM_API void scm_load_startup_files (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_INIT_H */
 
 /*
diff --git a/libguile/inline.h b/libguile/inline.h
index 3c9b09b..704bc9d 100644
--- a/libguile/inline.h
+++ b/libguile/inline.h
@@ -36,6 +36,10 @@
 #include "libguile/numbers.h"
 #include "libguile/error.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 SCM_INLINE int scm_is_string (SCM x);
 
@@ -54,4 +58,9 @@ scm_is_string (SCM x)
 }
 
 #endif
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/libguile/instructions.h b/libguile/instructions.h
index ad058cd..4db02af 100644
--- a/libguile/instructions.h
+++ b/libguile/instructions.h
@@ -22,6 +22,10 @@
 #include <libguile.h>
 #include <libguile/vm-operations.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef BUILDING_LIBGUILE
 
 enum scm_opcode
@@ -48,6 +52,10 @@ SCM_INTERNAL SCM scm_instruction_list (void);
 SCM_INTERNAL void scm_bootstrap_instructions (void);
 SCM_INTERNAL void scm_init_instructions (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _SCM_INSTRUCTIONS_H_ */
 
 /*
diff --git a/libguile/ioext.h b/libguile/ioext.h
index 1b7b93a..48bfa7c 100644
--- a/libguile/ioext.h
+++ b/libguile/ioext.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_ftell (SCM object);
@@ -38,6 +42,10 @@ SCM_API SCM scm_primitive_move_to_fdes (SCM port, SCM fd);
 SCM_API SCM scm_fdes_to_ports (SCM fd);
 SCM_INTERNAL void scm_init_ioext (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_IOEXT_H */
 
 /*
diff --git a/libguile/iselect.h b/libguile/iselect.h
index 945ad14..84fac21 100644
--- a/libguile/iselect.h
+++ b/libguile/iselect.h
@@ -31,6 +31,10 @@
 
 #include <sys/select.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API int scm_std_select (int fds,
                            fd_set *rfds,
                            fd_set *wfds,
@@ -39,6 +43,10 @@ SCM_API int scm_std_select (int fds,
 
 #define SELECT_TYPE fd_set
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_ISELECT_H */
 
 /*
diff --git a/libguile/keywords.h b/libguile/keywords.h
index 32311dd..bf45850 100644
--- a/libguile/keywords.h
+++ b/libguile/keywords.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_keyword_p (SCM obj);
@@ -51,6 +55,10 @@ scm_c_bind_keyword_arguments (const char *subr, SCM rest,
 
 SCM_INTERNAL void scm_init_keywords (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_KEYWORDS_H */
 
 /*
diff --git a/libguile/libgettext.h b/libguile/libgettext.h
index f54b6bf..30004ea 100644
--- a/libguile/libgettext.h
+++ b/libguile/libgettext.h
@@ -37,6 +37,10 @@
 # include <locale.h>
 #endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Disabled NLS.
    The casts to 'const char *' serve the purpose of producing warnings
    for invalid uses of the value returned from these functions.
@@ -55,6 +59,14 @@
 # define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
 # define bind_textdomain_codeset(Domainname, Codeset) ((const char *) 
(Codeset))
 
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
 #endif
 
 /* A pseudo function call that serves as a marker for the automated
@@ -66,4 +78,8 @@
    initializer for static 'char[]' or 'const char[]' variables.  */
 #define gettext_noop(String) String
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _LIBGETTEXT_H */
diff --git a/libguile/list.h b/libguile/list.h
index 238926e..3b8b1c3 100644
--- a/libguile/list.h
+++ b/libguile/list.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_list_1 (SCM e1);
@@ -76,6 +80,10 @@ SCM_API SCM scm_copy_tree (SCM obj);
 SCM_INTERNAL SCM scm_i_finite_list_copy (SCM /* a list known to be finite */);
 SCM_INTERNAL void scm_init_list (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_LIST_H */
 
 /*
diff --git a/libguile/load.h b/libguile/load.h
index 986948d..7414118 100644
--- a/libguile/load.h
+++ b/libguile/load.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 SCM_API SCM scm_parse_path (SCM path, SCM tail);
 SCM_API SCM scm_parse_path_with_ellipsis (SCM path, SCM base);
@@ -46,6 +50,10 @@ SCM_INTERNAL void scm_init_load_should_auto_compile (void);
 SCM_INTERNAL void scm_init_eval_in_scheme (void);
 SCM_INTERNAL char *scm_i_mirror_backslashes (char *path);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_LOAD_H */
 
 /*
diff --git a/libguile/loader.h b/libguile/loader.h
index 6fd9502..ff3060e 100644
--- a/libguile/loader.h
+++ b/libguile/loader.h
@@ -21,6 +21,10 @@
 
 #include <libguile.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_load_thunk_from_file (SCM filename);
 SCM_API SCM scm_load_thunk_from_memory (SCM bv);
 
@@ -30,6 +34,10 @@ scm_find_dead_slot_map_unlocked (const scm_t_uint32 *ip);
 SCM_INTERNAL void scm_bootstrap_loader (void);
 SCM_INTERNAL void scm_init_loader (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _SCM_LOADER_H_ */
 
 /*
diff --git a/libguile/macros.h b/libguile/macros.h
index de2496e..bdd3a0d 100644
--- a/libguile/macros.h
+++ b/libguile/macros.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 typedef SCM (*scm_t_macro_primitive) (SCM, SCM);
@@ -43,6 +47,9 @@ SCM_INTERNAL scm_t_macro_primitive scm_i_macro_primitive (SCM 
m);
 
 SCM_INTERNAL void scm_init_macros (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_MACROS_H */
 
diff --git a/libguile/mallocs.h b/libguile/mallocs.h
index 9c797e9..de052b7 100644
--- a/libguile/mallocs.h
+++ b/libguile/mallocs.h
@@ -25,6 +25,11 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 
 SCM_API scm_t_bits scm_tc16_malloc;
 
@@ -37,6 +42,10 @@ SCM_API scm_t_bits scm_tc16_malloc;
 SCM_API SCM scm_malloc_obj (size_t n);
 SCM_INTERNAL void scm_init_mallocs (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_MALLOCS_H */
 
 /*
diff --git a/libguile/memoize.h b/libguile/memoize.h
index 23c0306..e920260 100644
--- a/libguile/memoize.h
+++ b/libguile/memoize.h
@@ -26,6 +26,9 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
 
@@ -93,6 +96,10 @@ SCM_INTERNAL SCM scm_sys_resolve_variable (SCM loc, SCM 
module);
 SCM_INTERNAL void scm_init_memoize (void);
 
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_MEMOIZE_H */
 
 /*
diff --git a/libguile/modules.h b/libguile/modules.h
index 28df6c6..d5d8552 100644
--- a/libguile/modules.h
+++ b/libguile/modules.h
@@ -27,6 +27,10 @@
 
 #include "libguile/validate.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API int scm_module_system_booted_p;
@@ -122,6 +126,10 @@ SCM_API SCM scm_get_pre_modules_obarray (void);
 SCM_INTERNAL void scm_modules_prehistory (void);
 SCM_INTERNAL void scm_init_modules (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_MODULES_H */
 
 /*
diff --git a/libguile/net_db.h b/libguile/net_db.h
index 68b2a8b..c485414 100644
--- a/libguile/net_db.h
+++ b/libguile/net_db.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_gethost (SCM host);
@@ -39,6 +43,10 @@ SCM_API SCM scm_getaddrinfo (SCM, SCM, SCM, SCM, SCM, SCM);
 SCM_API SCM scm_gai_strerror (SCM);
 SCM_INTERNAL void scm_init_net_db (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_NET_DB_H */
 
 /*
diff --git a/libguile/null-threads.h b/libguile/null-threads.h
index 116b845..b26a937 100644
--- a/libguile/null-threads.h
+++ b/libguile/null-threads.h
@@ -36,6 +36,10 @@
 #include <stdlib.h>
 #include <errno.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Threads
 */
 #define scm_i_pthread_t                     int
@@ -102,6 +106,9 @@ SCM_API int scm_i_pthread_key_create (scm_i_pthread_key_t 
*key,
 #define scm_i_scm_pthread_cond_wait         scm_i_pthread_cond_wait
 #define scm_i_scm_pthread_cond_timedwait    scm_i_pthread_cond_timedwait
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_NULL_THREADS_H */
 
diff --git a/libguile/numbers.h b/libguile/numbers.h
index bba336b..6226bb9 100644
--- a/libguile/numbers.h
+++ b/libguile/numbers.h
@@ -29,6 +29,10 @@
 #include "libguile/__scm.h"
 #include "libguile/print.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifndef SCM_T_WCHAR_DEFINED
 typedef scm_t_int32 scm_t_wchar;
 #define SCM_T_WCHAR_DEFINED
@@ -101,6 +105,10 @@ typedef scm_t_int32 scm_t_wchar;
  * SCM_FLTMAX is less than or scm_equal the largest single precision float
  */
 
+#ifdef __cplusplus
+}
+#endif
+
 #if SCM_HAVE_STDC_HEADERS
 # ifndef GO32
 #  include <float.h>
@@ -111,6 +119,10 @@ typedef scm_t_int32 scm_t_wchar;
 # endif /* ndef GO32 */
 #endif /* def STDC_HEADERS */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef DBL_MAX_10_EXP
 # define SCM_MAXEXP DBL_MAX_10_EXP
 #else
@@ -592,6 +604,10 @@ SCM_API int scm_install_gmp_memory_functions;
 
 SCM_INTERNAL void scm_init_numbers (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_NUMBERS_H */
 
 /*
diff --git a/libguile/objprop.h b/libguile/objprop.h
index f9a2e94..11e6545 100644
--- a/libguile/objprop.h
+++ b/libguile/objprop.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_object_properties (SCM obj);
@@ -33,6 +37,10 @@ SCM_API SCM scm_object_property (SCM obj, SCM key);
 SCM_API SCM scm_set_object_property_x (SCM obj, SCM key, SCM val);
 SCM_INTERNAL void scm_init_objprop (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_OBJPROP_H */
 
 /*
diff --git a/libguile/options.h b/libguile/options.h
index 8ea960b..8e1bae2 100644
--- a/libguile/options.h
+++ b/libguile/options.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 typedef struct scm_t_option
@@ -46,6 +50,10 @@ SCM_API SCM scm_options (SCM, scm_t_option [], const char*);
 SCM_API void scm_init_opts (SCM (*) (SCM), scm_t_option []);
 SCM_INTERNAL void scm_init_options (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_OPTIONS_H */
 
 /*
diff --git a/libguile/pairs.h b/libguile/pairs.h
index 130bf28..f12b2f1 100644
--- a/libguile/pairs.h
+++ b/libguile/pairs.h
@@ -27,6 +27,10 @@
 
 #include "libguile/gc.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 #if (SCM_DEBUG_PAIR_ACCESSES == 1)
@@ -212,6 +216,11 @@ SCM_API SCM scm_caaaar (SCM x);
 
 SCM_INTERNAL void scm_init_pairs (void);
 
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_PAIRS_H */
 
 /*
diff --git a/libguile/poll.h b/libguile/poll.h
index ab31950..088aceb 100644
--- a/libguile/poll.h
+++ b/libguile/poll.h
@@ -25,10 +25,18 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_INTERNAL void scm_register_poll (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_POLL_H */
 
 /*
diff --git a/libguile/ports-internal.h b/libguile/ports-internal.h
index bff89cb..5bebb6b 100644
--- a/libguile/ports-internal.h
+++ b/libguile/ports-internal.h
@@ -25,6 +25,10 @@
 #include "libguile/_scm.h"
 #include "libguile/ports.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 enum scm_port_encoding_mode {
   SCM_PORT_ENCODING_MODE_UTF8,
   SCM_PORT_ENCODING_MODE_LATIN1,
@@ -63,4 +67,8 @@ typedef struct scm_port_internal scm_t_port_internal;
 SCM_INTERNAL scm_t_iconv_descriptors *
 scm_i_port_iconv_descriptors (SCM port, scm_t_port_rw_active mode);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/libguile/ports.h b/libguile/ports.h
index f2ab850..ceb730e 100644
--- a/libguile/ports.h
+++ b/libguile/ports.h
@@ -37,6 +37,10 @@
 #include "libguile/threads.h"
 #include "libguile/strings.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 #define SCM_INITIAL_PUTBACK_BUF_SIZE 4
@@ -461,6 +465,10 @@ scm_puts_unlocked (const char *s, SCM port)
 }
 #endif  /* SCM_CAN_INLINE || defined SCM_INLINE_C_IMPLEMENTING_INLINES */
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_PORTS_H */
 
 /*
diff --git a/libguile/posix.h b/libguile/posix.h
index 92f8b35..e729708 100644
--- a/libguile/posix.h
+++ b/libguile/posix.h
@@ -27,6 +27,9 @@
 #include "libguile/__scm.h"
 #include "libguile/threads.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
 
@@ -96,6 +99,10 @@ SCM_INTERNAL void scm_init_posix (void);
 
 SCM_INTERNAL scm_i_pthread_mutex_t scm_i_locale_mutex;
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_POSIX_H */
 
 /*
diff --git a/libguile/print.h b/libguile/print.h
index 80a9922..a8608d9 100644
--- a/libguile/print.h
+++ b/libguile/print.h
@@ -28,6 +28,11 @@
 
 #include "libguile/chars.h" 
 #include "libguile/options.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* State information passed around during printing.
@@ -103,6 +108,10 @@ SCM_INTERNAL void scm_init_print (void);
 SCM_API SCM scm_current_pstate (void);
 #endif 
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_PRINT_H */
 
 /*
diff --git a/libguile/private-options.h b/libguile/private-options.h
index a3a0c2b..af1fa6c 100644
--- a/libguile/private-options.h
+++ b/libguile/private-options.h
@@ -25,6 +25,10 @@
 #ifndef PRIVATE_OPTIONS
 #define PRIVATE_OPTIONS
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*
   debugging.
  */
@@ -73,4 +77,8 @@ SCM_INTERNAL scm_t_option scm_read_opts[];
 
 #define SCM_N_READ_OPTIONS 9
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* PRIVATE_OPTIONS */ 
diff --git a/libguile/procprop.h b/libguile/procprop.h
index 41d0753..218d10e 100644
--- a/libguile/procprop.h
+++ b/libguile/procprop.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_sym_name;
@@ -46,6 +50,10 @@ SCM_API SCM scm_procedure_name (SCM proc);
 SCM_API SCM scm_procedure_documentation (SCM proc);
 SCM_INTERNAL void scm_init_procprop (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_PROCPROP_H */
 
 /*
diff --git a/libguile/procs.h b/libguile/procs.h
index c4c78f2..64a42e0 100644
--- a/libguile/procs.h
+++ b/libguile/procs.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_procedure_p (SCM obj);
@@ -36,6 +40,10 @@ SCM_API SCM scm_procedure (SCM proc);
 SCM_API SCM scm_setter (SCM proc);
 SCM_INTERNAL void scm_init_procs (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_PROCS_H */
 
 /*
diff --git a/libguile/programs.h b/libguile/programs.h
index d170c1b..09b102e 100644
--- a/libguile/programs.h
+++ b/libguile/programs.h
@@ -21,6 +21,10 @@
 
 #include <libguile.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*
  * Programs
  */
@@ -79,6 +83,10 @@ SCM_INTERNAL void scm_i_program_print (SCM program, SCM port,
 SCM_INTERNAL void scm_bootstrap_programs (void);
 SCM_INTERNAL void scm_init_programs (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _SCM_PROGRAMS_H_ */
 
 /*
diff --git a/libguile/promises.h b/libguile/promises.h
index 66349b5..823f638 100644
--- a/libguile/promises.h
+++ b/libguile/promises.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* {Promises}
@@ -51,6 +55,9 @@ SCM_API SCM scm_promise_p (SCM x);
 
 SCM_INTERNAL void scm_init_promises (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_PROMISES_H */
 
diff --git a/libguile/pthread-threads.h b/libguile/pthread-threads.h
index b5fae4e..0b41f9d 100644
--- a/libguile/pthread-threads.h
+++ b/libguile/pthread-threads.h
@@ -29,6 +29,10 @@
 #include <pthread.h>
 #include <sched.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Threads 
 */
 #define scm_i_pthread_t                     pthread_t
@@ -97,6 +101,10 @@ extern pthread_mutexattr_t 
scm_i_pthread_mutexattr_recursive[1];
 #define scm_i_scm_pthread_cond_wait         scm_pthread_cond_wait
 #define scm_i_scm_pthread_cond_timedwait    scm_pthread_cond_timedwait
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_PTHREADS_THREADS_H */
 
 /*
diff --git a/libguile/r6rs-ports.h b/libguile/r6rs-ports.h
index 3dde4d5..2667f30 100644
--- a/libguile/r6rs-ports.h
+++ b/libguile/r6rs-ports.h
@@ -23,6 +23,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* R6RS I/O Ports.  */
 
 SCM_API SCM scm_eof_object (void);
@@ -44,4 +48,8 @@ SCM_API SCM scm_get_string_n_x (SCM, SCM, SCM, SCM);
 SCM_API void scm_init_r6rs_ports (void);
 SCM_INTERNAL void scm_register_r6rs_ports (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_R6RS_PORTS_H */
diff --git a/libguile/random.h b/libguile/random.h
index 109969e..f70b72e 100644
--- a/libguile/random.h
+++ b/libguile/random.h
@@ -25,6 +25,11 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 
 /*
  * A plugin interface for RNGs
@@ -97,6 +102,10 @@ SCM_INTERNAL void scm_init_random (void);
 
 SCM_INTERNAL void scm_i_random_bytes_from_platform (unsigned char *buf, size_t 
len);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_RANDOM_H */
 
 /*
diff --git a/libguile/rdelim.h b/libguile/rdelim.h
index 2e401e4..fd221ca 100644
--- a/libguile/rdelim.h
+++ b/libguile/rdelim.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_read_delimited_x (SCM delims, SCM buf, SCM gobble, SCM port,
                                  SCM offset, SCM length);
 SCM_API SCM scm_read_line (SCM port);
@@ -33,6 +37,10 @@ SCM_API SCM scm_init_rdelim_builtins (void);
 
 SCM_INTERNAL void scm_init_rdelim (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_RDELIM_H */
 
 /*
diff --git a/libguile/read.h b/libguile/read.h
index 3c47afd..fb3d1c9 100644
--- a/libguile/read.h
+++ b/libguile/read.h
@@ -26,6 +26,11 @@
 #include "libguile/__scm.h"
 
 #include "libguile/options.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* SCM_LINE_INCREMENTORS are the characters which cause the line count to
@@ -64,6 +69,10 @@ SCM_INTERNAL void scm_i_input_error (const char *func, SCM 
port,
 
 SCM_INTERNAL void scm_init_read (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_READ_H */
 
 /*
diff --git a/libguile/regex-posix.h b/libguile/regex-posix.h
index 8060fe3..a669194 100644
--- a/libguile/regex-posix.h
+++ b/libguile/regex-posix.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API scm_t_bits scm_tc16_regex;
 #define SCM_RGX(X)     ((regex_t *) SCM_SMOB_DATA (X))
 #define SCM_RGXP(X)    (SCM_SMOB_PREDICATE (scm_tc16_regex, (X)))
@@ -34,6 +38,10 @@ SCM_API SCM scm_regexp_p (SCM x);
 SCM_API SCM scm_regexp_exec (SCM rx, SCM str, SCM start, SCM flags);
 SCM_INTERNAL void scm_init_regex_posix (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_REGEX_POSIX_H */
 
 /*
diff --git a/libguile/root.h b/libguile/root.h
index 68ab5c7..482f3bc 100644
--- a/libguile/root.h
+++ b/libguile/root.h
@@ -27,6 +27,10 @@
 #include "libguile/debug.h"
 #include "libguile/throw.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_internal_cwdr (scm_t_catch_body body,
@@ -39,6 +43,10 @@ SCM_API SCM scm_dynamic_root (void);
 SCM_API SCM scm_apply_with_dynamic_root (SCM proc, SCM a1, SCM args, SCM 
handler);
 SCM_INTERNAL void scm_init_root (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_ROOT_H */
 
 /*
diff --git a/libguile/rw.h b/libguile/rw.h
index d54f1b3..6aba35b 100644
--- a/libguile/rw.h
+++ b/libguile/rw.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_read_string_x_partial (SCM str, SCM port_or_fdes, SCM start,
                                       SCM end);
 SCM_API SCM scm_write_string_partial (SCM str, SCM port_or_fdes, SCM start,
@@ -33,6 +37,10 @@ SCM_API SCM scm_write_string_partial (SCM str, SCM 
port_or_fdes, SCM start,
 SCM_INTERNAL SCM scm_init_rw_builtins (void);
 SCM_INTERNAL void scm_init_rw (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_RW_H */
 
 /*
diff --git a/libguile/scmsigs.h b/libguile/scmsigs.h
index fce3728..890e7eb 100644
--- a/libguile/scmsigs.h
+++ b/libguile/scmsigs.h
@@ -26,6 +26,10 @@
 #include "libguile/__scm.h"
 #include "libguile/threads.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_sigaction (SCM signum, SCM handler, SCM flags);
@@ -48,6 +52,10 @@ SCM_INTERNAL void scm_i_ensure_signal_delivery_thread (void);
 
 SCM_INTERNAL scm_i_thread *scm_i_signal_delivery_thread;
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_SCMSIGS_H */
 
 /*
diff --git a/libguile/script.h b/libguile/script.h
index cf0162a..4ae6ddb 100644
--- a/libguile/script.h
+++ b/libguile/script.h
@@ -25,6 +25,11 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 
 SCM_API char *scm_find_executable (const char *name);
 SCM_API char *scm_find_impl_file (char *exec_path,
@@ -40,6 +45,10 @@ SCM_API char *scm_usage_name;
 SCM_INTERNAL void scm_i_set_boot_program_arguments (int argc, char *argv[]);
 SCM_INTERNAL void scm_init_script (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_SCRIPT_H */
 
 /*
diff --git a/libguile/simpos.h b/libguile/simpos.h
index 1e20768..0bfb0cc 100644
--- a/libguile/simpos.h
+++ b/libguile/simpos.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_system (SCM cmd);
@@ -35,6 +39,10 @@ SCM_API SCM scm_primitive__exit (SCM status);
 SCM_INTERNAL int scm_getenv_int (const char *var, int def);
 SCM_INTERNAL void scm_init_simpos (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_SIMPOS_H */
 
 /*
diff --git a/libguile/smob.h b/libguile/smob.h
index 561a6d1..16ff9c6 100644
--- a/libguile/smob.h
+++ b/libguile/smob.h
@@ -27,6 +27,9 @@
 #include "libguile/__scm.h"
 #include "libguile/print.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
 /* This is the internal representation of a smob type */
@@ -200,6 +203,10 @@ SCM_API SCM scm_make_smob (scm_t_bits tc);
 
 SCM_API void scm_smob_prehistory (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_SMOB_H */
 
 /*
diff --git a/libguile/snarf.h b/libguile/snarf.h
index d0b6833..8f4d398 100644
--- a/libguile/snarf.h
+++ b/libguile/snarf.h
@@ -24,6 +24,10 @@
 
 
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Macros for snarfing initialization actions from C source. */
 
 /* Casting to a function that can take any number of arguments.  */
@@ -335,6 +339,10 @@ SCM_SNARF_INIT(scm_set_smob_apply((tag), (c_name), (req), 
(opt), (rest));)
 #define SCM_ASSERT(_cond, _arg, _pos, _subr) ^^ argpos _arg _pos __LINE__ ^^
 #endif /* SCM_MAGIC_SNARF_DOCS */
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_SNARF_H */
 
 /*
diff --git a/libguile/socket.h b/libguile/socket.h
index a211867..415954d 100644
--- a/libguile/socket.h
+++ b/libguile/socket.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_inet_aton (SCM address);
@@ -61,6 +65,10 @@ SCM_API struct sockaddr *scm_c_make_socket_address (SCM 
family, SCM address,
                                                    size_t *address_size);
 SCM_API SCM scm_make_socket_address (SCM family, SCM address, SCM args);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_SOCKET_H */
 
 /*
diff --git a/libguile/sort.h b/libguile/sort.h
index 3ae86c2..0263ce6 100644
--- a/libguile/sort.h
+++ b/libguile/sort.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_restricted_vector_sort_x (SCM vec,
@@ -42,6 +46,10 @@ SCM_API SCM scm_sort_list (SCM ls, SCM less);
 SCM_API SCM scm_sort_list_x (SCM ls, SCM less);
 SCM_INTERNAL void scm_init_sort (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_SORT_H */
 
 /*
diff --git a/libguile/srcprop.h b/libguile/srcprop.h
index 0252e54..b748c6f 100644
--- a/libguile/srcprop.h
+++ b/libguile/srcprop.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* {Source properties}
@@ -54,6 +58,9 @@ SCM_INTERNAL void scm_i_set_source_properties_x (SCM obj, 
long line, int col,
 SCM_API SCM scm_cons_source (SCM xorig, SCM x, SCM y);
 SCM_INTERNAL void scm_init_srcprop (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_SRCPROP_H */
 
diff --git a/libguile/srfi-1.h b/libguile/srfi-1.h
index 47607bc..ba5df77 100644
--- a/libguile/srfi-1.h
+++ b/libguile/srfi-1.h
@@ -24,6 +24,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_INTERNAL SCM scm_srfi1_append_reverse (SCM revhead, SCM tail);
 SCM_INTERNAL SCM scm_srfi1_append_reverse_x (SCM revhead, SCM tail);
 SCM_INTERNAL SCM scm_srfi1_concatenate (SCM lstlst);
@@ -47,4 +51,8 @@ SCM_INTERNAL SCM scm_srfi1_remove_x (SCM pred, SCM list);
 SCM_INTERNAL void scm_register_srfi_1 (void);
 SCM_INTERNAL void scm_init_srfi_1 (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_SRFI_1_H */
diff --git a/libguile/srfi-13.h b/libguile/srfi-13.h
index 325e222..bbe1fe0 100644
--- a/libguile/srfi-13.h
+++ b/libguile/srfi-13.h
@@ -24,6 +24,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_string_null_p (SCM s);
 SCM_API SCM scm_string_any (SCM pred, SCM s, SCM start, SCM end);
 SCM_API SCM scm_string_every (SCM pred, SCM s, SCM start, SCM end);
@@ -117,4 +121,8 @@ SCM_API SCM scm_string_delete (SCM char_pred, SCM s, SCM 
start, SCM end);
 SCM_INTERNAL void scm_init_srfi_13 (void);
 SCM_INTERNAL void scm_init_srfi_13_14 (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_SRFI_13_H */
diff --git a/libguile/srfi-14.h b/libguile/srfi-14.h
index dc9718d..b508f68 100644
--- a/libguile/srfi-14.h
+++ b/libguile/srfi-14.h
@@ -24,6 +24,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 typedef struct
 {
   scm_t_wchar lo;
@@ -122,4 +126,8 @@ SCM_API SCM scm_char_set_full;
 
 SCM_INTERNAL void scm_init_srfi_14 (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_SRFI_14_H */
diff --git a/libguile/srfi-4.h b/libguile/srfi-4.h
index f56c3f3..b662dee 100644
--- a/libguile/srfi-4.h
+++ b/libguile/srfi-4.h
@@ -23,6 +23,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_make_srfi_4_vector (SCM type, SCM len, SCM fill);
 
 
@@ -276,4 +280,8 @@ SCM_API double *scm_c64vector_writable_elements (SCM uvec,
 
 SCM_INTERNAL void scm_init_srfi_4 (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_SRFI_4_H */
diff --git a/libguile/srfi-60.h b/libguile/srfi-60.h
index 013820f..c842c27 100644
--- a/libguile/srfi-60.h
+++ b/libguile/srfi-60.h
@@ -24,6 +24,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_INTERNAL SCM scm_srfi60_log2_binary_factors (SCM n);
 SCM_INTERNAL SCM scm_srfi60_copy_bit (SCM index, SCM n, SCM bit);
 SCM_INTERNAL SCM scm_srfi60_rotate_bit_field (SCM n, SCM count, SCM start, SCM 
end);
@@ -34,4 +38,8 @@ SCM_INTERNAL SCM scm_srfi60_list_to_integer (SCM lst);
 SCM_INTERNAL void scm_register_srfi_60 (void);
 SCM_INTERNAL void scm_init_srfi_60 (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_SRFI_60_H */
diff --git a/libguile/stackchk.h b/libguile/stackchk.h
index 23dbdba..aeacf53 100644
--- a/libguile/stackchk.h
+++ b/libguile/stackchk.h
@@ -28,6 +28,10 @@
 #include "libguile/continuations.h"
 #include "libguile/debug.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* With debug options we have the possibility to disable stack checking.
@@ -62,6 +66,10 @@ SCM_API void scm_stack_report (void);
 SCM_API SCM scm_sys_get_stack_size (void);
 SCM_INTERNAL void scm_init_stackchk (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_STACKCHK_H */
 
 /*
diff --git a/libguile/stacks.h b/libguile/stacks.h
index ba97e08..9d0d571 100644
--- a/libguile/stacks.h
+++ b/libguile/stacks.h
@@ -26,6 +26,10 @@
 #include "libguile/__scm.h"
 #include "libguile/frames.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* {Frames and stacks}
  */
 
@@ -57,6 +61,10 @@ SCM_API SCM scm_stack_length (SCM stack);
 
 SCM_INTERNAL void scm_init_stacks (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_STACKS_H */
 
 /*
diff --git a/libguile/stime.h b/libguile/stime.h
index e41f797..848affb 100644
--- a/libguile/stime.h
+++ b/libguile/stime.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API long scm_c_time_units_per_second;
@@ -45,6 +49,10 @@ SCM_API SCM scm_strftime (SCM format, SCM stime);
 SCM_API SCM scm_strptime (SCM format, SCM string);
 SCM_INTERNAL void scm_init_stime (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_STIME_H */
 
 /*
diff --git a/libguile/strings.h b/libguile/strings.h
index 130c436..fc480db 100644
--- a/libguile/strings.h
+++ b/libguile/strings.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* String representation.
@@ -244,6 +248,10 @@ SCM_API SCM scm_sys_stringbuf_hist (void);
 
 SCM_INTERNAL void scm_init_strings (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_STRINGS_H */
 
 /*
diff --git a/libguile/strorder.h b/libguile/strorder.h
index 2c004e4..113ef5d 100644
--- a/libguile/strorder.h
+++ b/libguile/strorder.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_string_equal_p (SCM s1, SCM s2);
@@ -39,6 +43,10 @@ SCM_API SCM scm_string_ci_gr_p (SCM s1, SCM s2);
 SCM_API SCM scm_string_ci_geq_p (SCM s1, SCM s2);
 SCM_INTERNAL void scm_init_strorder (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_STRORDER_H */
 
 /*
diff --git a/libguile/strports.h b/libguile/strports.h
index b4bafdf..a00850c 100644
--- a/libguile/strports.h
+++ b/libguile/strports.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 
@@ -57,6 +61,10 @@ SCM_API SCM scm_eval_string (SCM string);
 SCM_API SCM scm_eval_string_in_module (SCM string, SCM module);
 SCM_INTERNAL void scm_init_strports (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_STRPORTS_H */
 
 /*
diff --git a/libguile/struct.h b/libguile/struct.h
index e8db316..45b95b7 100644
--- a/libguile/struct.h
+++ b/libguile/struct.h
@@ -26,6 +26,10 @@
 #include "libguile/__scm.h"
 #include "libguile/print.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* The relationship between a struct and its vtable is a bit complicated,
@@ -195,6 +199,10 @@ SCM_INTERNAL SCM scm_i_alloc_struct (scm_t_bits 
*vtable_data, int n_words);
 SCM_INTERNAL void scm_i_struct_inherit_vtable_magic (SCM vtable, SCM obj);
 SCM_INTERNAL void scm_init_struct (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_STRUCT_H */
 
 /*
diff --git a/libguile/symbols.h b/libguile/symbols.h
index f345e70..05e51ef 100644
--- a/libguile/symbols.h
+++ b/libguile/symbols.h
@@ -24,6 +24,11 @@
 
 
 #include "libguile/__scm.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 #define scm_is_symbol(x)            (SCM_HAS_TYP7 (x, scm_tc7_symbol))
@@ -95,6 +100,10 @@ SCM_INTERNAL unsigned long scm_i_hash_symbol (SCM obj, 
unsigned long n,
 SCM_INTERNAL void scm_symbols_prehistory (void);
 SCM_INTERNAL void scm_init_symbols (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_SYMBOLS_H */
 
 /*
diff --git a/libguile/tags.h b/libguile/tags.h
index a5082f8..65acd90 100644
--- a/libguile/tags.h
+++ b/libguile/tags.h
@@ -31,6 +31,10 @@
 /* picks up scmconfig.h too */
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* In the beginning was the Word:
@@ -664,6 +668,10 @@ enum scm_tc8_tags
 
 
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_TAGS_H */
 
 /*
diff --git a/libguile/threads.h b/libguile/threads.h
index 6b85baf..cb61bbc 100644
--- a/libguile/threads.h
+++ b/libguile/threads.h
@@ -40,6 +40,10 @@
 #include "libguile/null-threads.h"
 #endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* smob tags for the thread datatypes */
@@ -230,6 +234,10 @@ SCM_API unsigned long scm_std_usleep (unsigned long);
 SCM_API SCM scm_total_processor_count (void);
 SCM_API SCM scm_current_processor_count (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_THREADS_H */
 
 /*
diff --git a/libguile/throw.h b/libguile/throw.h
index e2da731..5b9e932 100644
--- a/libguile/throw.h
+++ b/libguile/throw.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 typedef SCM (*scm_t_catch_body) (void *data);
@@ -92,6 +96,10 @@ SCM_API void scm_report_out_of_memory (void);
 SCM_API SCM scm_throw (SCM key, SCM args);
 SCM_INTERNAL void scm_init_throw (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_THROW_H */
 
 /*
diff --git a/libguile/trees.h b/libguile/trees.h
index 70d32ad..b86ca6c 100644
--- a/libguile/trees.h
+++ b/libguile/trees.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_copy_tree (SCM obj);
@@ -36,6 +40,10 @@ SCM_API SCM scm_copy_tree (SCM obj);
 
 SCM_INTERNAL void scm_init_trees (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_TREES_H */
 
 /*
diff --git a/libguile/unicode.h b/libguile/unicode.h
index 88261c1..2c67c2e 100644
--- a/libguile/unicode.h
+++ b/libguile/unicode.h
@@ -24,10 +24,18 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_INTERNAL SCM scm_formal_name_to_char (SCM);
 SCM_INTERNAL SCM scm_char_to_formal_name (SCM);
 SCM_INTERNAL void scm_init_unicode (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_UNICODE_H */
 
 /*
diff --git a/libguile/uniform.h b/libguile/uniform.h
index ad8428f..1d3f090 100644
--- a/libguile/uniform.h
+++ b/libguile/uniform.h
@@ -26,6 +26,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /*
@@ -46,6 +50,9 @@ SCM_API void *scm_array_handle_uniform_writable_elements 
(scm_t_array_handle *h)
 
 SCM_INTERNAL void scm_init_uniform (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_UNIFORM_H */
 
diff --git a/libguile/validate.h b/libguile/validate.h
index 516a6f7..3a350d0 100644
--- a/libguile/validate.h
+++ b/libguile/validate.h
@@ -26,6 +26,10 @@
 
 
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define SCM_SYSERROR do { scm_syserror (FUNC_NAME); } while (0)
 
 #define SCM_MEMORY_ERROR do { scm_memory_error (FUNC_NAME); } while (0)
@@ -387,6 +391,10 @@
   } while (0)
 
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_VALIDATE_H */
 
 /*
diff --git a/libguile/values.h b/libguile/values.h
index 3dbd0b7..22dc483 100644
--- a/libguile/values.h
+++ b/libguile/values.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 SCM_API SCM scm_values_vtable;
 
 #define SCM_VALUESP(x) (SCM_STRUCTP (x)\
@@ -38,6 +42,10 @@ SCM_API size_t scm_c_nvalues (SCM obj);
 SCM_API SCM scm_c_value_ref (SCM obj, size_t idx);
 SCM_INTERNAL void scm_init_values (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_VALUES_H */
 
 /*
diff --git a/libguile/variable.h b/libguile/variable.h
index c024c85..5a94478 100644
--- a/libguile/variable.h
+++ b/libguile/variable.h
@@ -26,6 +26,10 @@
 #include "libguile/__scm.h"
 #include "libguile/smob.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* Variables 
@@ -49,6 +53,10 @@ SCM_INTERNAL void scm_i_variable_print (SCM var, SCM port, 
scm_print_state *psta
 
 SCM_INTERNAL void scm_init_variable (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_VARIABLE_H */
 
 /*
diff --git a/libguile/vectors.h b/libguile/vectors.h
index 995f64f..205c907 100644
--- a/libguile/vectors.h
+++ b/libguile/vectors.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_vector_p (SCM x);
@@ -73,6 +77,10 @@ SCM_INTERNAL SCM  scm_i_vector_equal_p (SCM x, SCM y);
 
 SCM_INTERNAL void scm_init_vectors (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_VECTORS_H */
 
 /*
diff --git a/libguile/vm-builtins.h b/libguile/vm-builtins.h
index 5e31a04..3807362 100644
--- a/libguile/vm-builtins.h
+++ b/libguile/vm-builtins.h
@@ -19,6 +19,10 @@
 #ifndef _SCM_VM_BUILTINS_H_
 #define _SCM_VM_BUILTINS_H_
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef BUILDING_LIBGUILE
 
 #define FOR_EACH_VM_BUILTIN(M) \
@@ -44,4 +48,8 @@ SCM_INTERNAL void scm_init_vm_builtin_properties (void);
 
 #endif /* BUILDING_LIBGUILE */
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _SCM_VM_BUILTINS_H_ */
diff --git a/libguile/vm-expand.h b/libguile/vm-expand.h
index 787223d..3bc6176 100644
--- a/libguile/vm-expand.h
+++ b/libguile/vm-expand.h
@@ -16,6 +16,10 @@
  * 02110-1301 USA
  */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifndef VM_LABEL
 #define VM_LABEL(tag) l_##tag
 #define VM_OPCODE(tag) scm_op_##tag
@@ -72,6 +76,10 @@
 #endif /* VM_INSTRUCTION_TO_LABEL */
 #endif /* VM_INSTRUCTION_TO_TABLE */
 
+#ifdef __cplusplus
+}
+#endif
+
 /*
   Local Variables:
   c-file-style: "gnu"
diff --git a/libguile/vm.h b/libguile/vm.h
index 8f88d0c..0eaff4a 100644
--- a/libguile/vm.h
+++ b/libguile/vm.h
@@ -22,6 +22,10 @@
 #include <libguile.h>
 #include <libguile/programs.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 enum {
   SCM_VM_APPLY_HOOK,
   SCM_VM_PUSH_CONTINUATION_HOOK,
@@ -107,6 +111,10 @@ SCM_INTERNAL void scm_i_vm_cont_print (SCM x, SCM port,
 SCM_INTERNAL void scm_bootstrap_vm (void);
 SCM_INTERNAL void scm_init_vm (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _SCM_VM_H_ */
 
 /*
diff --git a/libguile/vports.h b/libguile/vports.h
index ae64dd4..b333408 100644
--- a/libguile/vports.h
+++ b/libguile/vports.h
@@ -25,11 +25,19 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 SCM_API SCM scm_make_soft_port (SCM pv, SCM modes);
 SCM_INTERNAL void scm_init_vports (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_VPORTS_H */
 
 /*
diff --git a/libguile/weak-set.h b/libguile/weak-set.h
index 86781c7..c220949 100644
--- a/libguile/weak-set.h
+++ b/libguile/weak-set.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* The weak set API is currently only used internally.  We could make it
@@ -60,6 +64,10 @@ SCM_INTERNAL SCM scm_weak_set_map_to_list (SCM proc, SCM 
set);
 SCM_INTERNAL void scm_i_weak_set_print (SCM exp, SCM port, scm_print_state 
*pstate);
 SCM_INTERNAL void scm_init_weak_set (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_WEAK_SET_H */
 
 /*
diff --git a/libguile/weak-table.h b/libguile/weak-table.h
index f516c26..7801e18 100644
--- a/libguile/weak-table.h
+++ b/libguile/weak-table.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 
 /* The weak table API is currently only used internally.  We could make it
@@ -85,6 +89,10 @@ SCM_INTERNAL void scm_i_weak_table_print (SCM exp, SCM port, 
scm_print_state *ps
 SCM_INTERNAL void scm_weak_table_prehistory (void);
 SCM_INTERNAL void scm_init_weak_table (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* SCM_WEAK_TABLE_H */
 
 /*
diff --git a/libguile/weak-vector.h b/libguile/weak-vector.h
index 11395a5..3b7d94c 100644
--- a/libguile/weak-vector.h
+++ b/libguile/weak-vector.h
@@ -25,6 +25,10 @@
 
 #include "libguile/__scm.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 /* Weak vectors.  */
 
@@ -45,6 +49,9 @@ SCM_API void scm_c_weak_vector_set_x (SCM v, size_t k, SCM x);
 
 SCM_INTERNAL void scm_init_weak_vectors (void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif  /* SCM_WEAK_VECTOR_H */
 
diff --git a/libguile/win32-uname.h b/libguile/win32-uname.h
index 4b74981..53790d2 100644
--- a/libguile/win32-uname.h
+++ b/libguile/win32-uname.h
@@ -21,6 +21,10 @@
  * 02110-1301 USA
  */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define _UTSNAME_LENGTH 65
 #define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH
 #define _UTSNAME_DOMAIN_LENGTH _UTSNAME_LENGTH
@@ -49,4 +53,8 @@ struct utsname
 
 int uname (struct utsname * uts);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SCM_WIN32_UNAME_H */
-- 
2.3.6




reply via email to

[Prev in Thread] Current Thread [Next in Thread]