Index: subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
===================================================================
--- subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h	(revision 1468311)
+++ subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h	(working copy)
@@ -108,8 +108,8 @@
 
 svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, SV *source);
 
-/* thunked log receiver function.  */
-svn_error_t * svn_swig_pl_thunk_log_receiver(void *py_receiver,
+/* thunked log_message receiver function.  */
+svn_error_t * svn_swig_pl_thunk_log_receiver(void *baton,
                                              apr_hash_t *changed_paths,
                                              svn_revnum_t rev,
                                              const char *author,
@@ -117,6 +117,11 @@
                                              const char *msg,
                                              apr_pool_t *pool);
 
+/* thunked log_entry receiver function.  */
+svn_error_t * svn_swig_pl_thunk_log_entry_receiver(void *baton,
+                                                   svn_log_entry_t *log_entry,
+                                                   apr_pool_t *pool);
+
 /* thunked diff summarize callback.  */
 svn_error_t * svn_swig_pl_thunk_client_diff_summarize_func(
                      const svn_client_diff_summarize_t *diff,
Index: subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
===================================================================
--- subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c	(revision 1468311)
+++ subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c	(working copy)
@@ -911,6 +911,24 @@
     return SVN_NO_ERROR;
 }
 
+svn_error_t *svn_swig_pl_thunk_log_entry_receiver(void *baton,
+                                                  svn_log_entry_t *log_entry,
+                                                  apr_pool_t *pool)
+{
+    SV *receiver = baton;
+
+    if (!SvOK(receiver))
+	return SVN_NO_ERROR;
+
+    svn_swig_pl_callback_thunk(CALL_SV,
+                               receiver, NULL,
+                               "SS", 
+                               log_entry, _SWIG_TYPE("svn_log_entry_t *"),
+                               pool, POOLINFO);
+
+    return SVN_NO_ERROR;
+}
+
 svn_error_t * svn_swig_pl_thunk_client_diff_summarize_func(
                      const svn_client_diff_summarize_t *diff,
                      void *baton,
Index: subversion/bindings/swig/include/svn_types.swg
===================================================================
--- subversion/bindings/swig/include/svn_types.swg	(revision 1468311)
+++ subversion/bindings/swig/include/svn_types.swg	(working copy)
@@ -708,29 +708,11 @@
    svn_repos_get_logs()
 */
 
-#ifdef SWIGPYTHON
-%typemap(in) (svn_log_message_receiver_t receiver,
-                      void *receiver_baton) {
-    $1 = svn_swig_py_log_receiver;
-    $2 = (void *)$input;
-}
-#endif
-#ifdef SWIGPERL
-%typemap(in) (svn_log_message_receiver_t receiver,
-                     void *receiver_baton) {
-    $1 = svn_swig_pl_thunk_log_receiver;
-    $2 = (void *)$input;
-}
-#endif
+%callback_typemap(svn_log_message_receiver_t receiver, void *receiver_baton,
+                  svn_swig_py_log_receiver,
+                  svn_swig_pl_thunk_log_receiver,
+                  svn_swig_rb_log_receiver)
 
-#ifdef SWIGRUBY
-%typemap(in) (svn_log_message_receiver_t receiver,
-                    void *receiver_baton) {
-    $1 = svn_swig_rb_log_receiver;
-    $2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
-}
-#endif
-
 /* -----------------------------------------------------------------------
    Callback: svn_log_entry_receiver_t
    svn_client_log4()
@@ -738,22 +720,11 @@
    svn_repos_get_logs4()
 */
 
-#ifdef SWIGPYTHON
-%typemap(in) (svn_log_entry_receiver_t receiver,
-                      void *receiver_baton) {
-    $1 = svn_swig_py_log_entry_receiver;
-    $2 = (void *)$input;
-}
-#endif
+%callback_typemap(svn_log_entry_receiver_t receiver, void *receiver_baton,
+                  svn_swig_py_log_entry_receiver,
+                  svn_swig_pl_thunk_log_entry_receiver,
+                  svn_swig_rb_log_entry_receiver)
 
-#ifdef SWIGRUBY
-%typemap(in) (svn_log_entry_receiver_t receiver, void *receiver_baton)
-{
-  $1 = svn_swig_rb_log_entry_receiver;
-  $2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
-}
-#endif
-
 /* -----------------------------------------------------------------------
    Callback: svn_commit_callback_t
    svn_ra get_commit_editor()
