On 25. 5. 26 10:55, Timofei Zhakov wrote:
On Sun, May 24, 2026 at 2:52 AM <[email protected]> wrote:

    Author: brane
    Date: Sun May 24 00:52:17 2026
    New Revision: 1934546

    Log:
    Add svnbrowse to the autotools build.

    Building svnbrowse is optional and can be enabled with
    --enable-svnbrowse.
    When enabled, --with-ncurses can be used to find the ncurses
    installation.


[...]

Thank you so much for doing that!

I've tested the change and can confirm that it works perfectly on my machine.

However, I just realised that there is a crash when the program exits and executes the pool-cleanups (that is also present in cmake build but for some reason it wasn't printing the error message properly);

[[[
> where
#0  __pthread_kill_implementation
    (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44 #1  0x00007ffff749a363 in __pthread_kill_internal (threadid=<optimized out>, signo=6)
    at pthread_kill.c:89
#2  0x00007ffff743e7d0 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3  0x00007ffff7425681 in __GI_abort () at abort.c:77
#4  0x00007ffff7b3d4e0 in err_abort (data=0x555555758c50) at subversion/libsvn_subr/error.c:156 #5  0x00007ffff77cc7de in run_cleanups (cref=<optimized out>) at memory/unix/apr_pools.c:2666
#6  apr_pool_destroy (pool=0x555555758bd8) at memory/unix/apr_pools.c:991
#7  0x00007ffff77cc7bd in apr_pool_destroy (pool=0x555555560528) at memory/unix/apr_pools.c:988 #8  0x00007ffff77ccaa1 in apr_pool_terminate () at memory/unix/apr_pools.c:719
#9  apr_pool_terminate () at memory/unix/apr_pools.c:711
#10 0x00007ffff7441101 in __run_exit_handlers
    (status=0, listp=0x7ffff7613680 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:118
#11 0x00007ffff74411de in __GI_exit (status=<optimized out>) at exit.c:148
#12 0x00007ffff7427748 in __libc_start_call_main
    (main=main@entry=0x55555555a1f0 <main>, argc=argc@entry=1, argv=argv@entry=0x7fffffffe488)
    at ../sysdeps/nptl/libc_start_call_main.h:83
#13 0x00007ffff7427879 in __libc_start_main_impl
    (main=0x55555555a1f0 <main>, argc=1, argv=0x7fffffffe488, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe478) at ../csu/libc-start.c:360
#14 0x00005555555575b5 in _start ()
]]]

Which is probably caused by this line:

[[[
static svn_browse__view_t *
view_make(svn_browse__model_t *model, svn_browse__style_t *style, WINDOW *win,
          apr_pool_t *result_pool)
{
  svn_browse__view_t *view = apr_pcalloc(result_pool, sizeof(*view));
  view->model = model;
  view->style = style;
  view->screen = win;
  view_layout(view);
*  apr_pool_cleanup_register(result_pool, view, view_cleanup, NULL);*
  return view;
}
]]]

I think apr_pool_cleanup_register() doesn't like NULL for child_cleanup and in the rest of the codebase we use apr_pool_cleanup_null instead.

The following change seem to fix this issue:

[[[
Index: subversion/svnbrowse/svnbrowse.c
===================================================================
--- subversion/svnbrowse/svnbrowse.c (revision 1934577)
+++ subversion/svnbrowse/svnbrowse.c (working copy)
@@ -244,7 +244,8 @@ view_make(svn_browse__model_t *model, svn_browse__
   view->style = style;
   view->screen = win;
   view_layout(view);
-  apr_pool_cleanup_register(result_pool, view, view_cleanup, NULL);
+  apr_pool_cleanup_register(result_pool, view, view_cleanup,
+                            apr_pool_cleanup_null);
   return view;
 }
]]]

Yes. If you take a look at the list of maintainer mode warnings I attached, one of them is about this very line. APR declares the cleanup function arguments with __attribute__((nonnull)) but of course only GCC-like compilers with the right warning flags will warn about that. I didn't fix that because I only wanted to make compilation work.


Also I think it's a common practice with autoconf to enable all possible features for which there are required dependencies present on the system. Take swig, javahl, nls, etc. Is it possible to do the same for svnbrowse, i.e. enable it whenever we have curses?

Actually, neither JavaHL nor the Swig bindings nor the very neglected svnxx are enabled by default in the autotools build. But that's beside the point. I made svnbrowse disabled by default since it's a work in progress, but it's trivial to change that to enabled by default. It will be disabled anyway if ncurses aren't found.


By the way, an offtopic question: how do you use gdb with binraries produced by a configure build? The ./subversion/svn/svn files seem to be shell scripts which cannot be run with the debugger directly. What is the easiest way to do it? I figured you could 'make install' it but it's annoying to do after every change and I'm sure there is a more convenient way.

    libtool --mode=execute gdb -- ./subversion/svnbrowse/svnbrowse args...


Those are scripts created by libtool and libtool knows how to interpret them, heh. It wasn't obvious to me either, at some point. Since svnbrowse probably doesn't behave all that well with gdb in the same terminal, you can also attach the debugger to a running process.

-- Brane

Reply via email to