Package: wnpp
Severity: wishlist
X-Debbugs-Cc: Marcos Fouces <[email protected]>, "Dr. Tobias Quathamer" 
<[email protected]>

* Package name    : manpages-utils
  Version         : 6.16
  Upstream Contact: Alejandro Colomar <[email protected]>
* URL             : <https://www.kernel.org/doc/man-pages/>
* License         : GPL-3.0-or-later
  Programming Lang: sh(1), bash(1)
  Description     : Various scripts provided by the Linux man-pages project

These scripts are useful for anyone maintaining manual pages.  For
example, they would help projects that have one or a few manual pages
for their program, but also helps maintainers of large documentation
projects.

Other scripts are more related to programming in general, rather than
just documentation.

At the moment, there are the following scripts:

        diffman-git (1)      - compare changes to manual pages line by line
        grepc (1)            - find declarations, definitions, and uses in 
source code
        grepc_c (1)          - print PCRE patterns for searching C code
        mansect (1)          - print the source code of sections of manual pages
        pdfman (1)           - render a manual page in PDF
        sortman (1)          - sort manual-page path names

        (And there's also grepc_mk, which is yet undocumented, an is
         an experimental driver for grepc(1).)

 why is this package useful/relevant?

        diffman-git(1) is very useful for verifying patches to manual
        pages.

        mansect(1) is useful to read specific sections of one or more
        manual pages.  I find it especially useful when unifying the
        language of a section in a large number of manual pages, so I
        can see the same section of the different pages together.

        pdfman(1) opens a manual page in a PDF viewer, for those who
        prefer to read it as a PDF (or for maintainers of manual pages,
        to make sure their pages look good as a PDF).

        sortman(1) is similar to sort(1), but it sorts manual page file
        names in the order that they should appear in the manual.  That
        is, the intro(x) manual page is the first manual page in
        section x, and then the rest of the pages of a section are
        sorted alphabetically.

        grepc(1) is similar to grep(1) --actually, more similar to
        pcre2grep(1)--, but finds source code.  For example:

                alx@devuan:/usr/include$ grepc -n strcpy .
                ./string.h:141:extern char *strcpy (char *__restrict __dest, 
const char *__restrict __src)
                     __THROW __nonnull ((1, 2));
                ./mes/string.h:45:char *strcpy (char *dest, char const *src);

        grepc_c(1) produces the PCRE2 patterns that grepc(1) uses for
        finding C code.  For example:

                $ grepc_c -tfp strcpy
                
(?s)^[\w[](?:[\w\s\(,\)[\]*]|::)+[\w\s\)*\]]\s+\**\(?strcpy\)?\s*(?<params>\((?:[\w\s,;[\]*\?:+-]|(?&params))*(?:\.\.\.)?\))(?:[\w\s\(,\)[\]]|::)*;

        It's necessary to implement grepc(1).  (And it's useful to debug
        grepc(1) when there's a bug in a regex.)

                alx@devuan:/usr/include$ find . -type f \
                        | xargs pcre2grep -nM "$(grepc_c -tfp strcpy)";
                ./string.h:141:extern char *strcpy (char *__restrict __dest, 
const char *__restrict __src)
                     __THROW __nonnull ((1, 2));
                ./mes/string.h:45:char *strcpy (char *dest, char const *src);

 is it a dependency for another package?

        No.

 do you use it?

        Every day.

 if there are other packages providing similar functionality, how does
 it compare?

        The only program that has something comparable is grepc(1).
        ctags is something similar to it.  However, grepc(1) is more
        useful than ctags because it's a Unix filter.  It gets input
        from stdin or regular files, and produces output on stdout.  You
        can use it directly from the command line, in a pipeline.

        grepc(1) also doesn't need to create and update an index, which
        makes it possible to use it in a recently downloaded source code
        directory.  It can also be used in a pipeline combined with
        git(1) to find out the definition of a function some years ago,
        or even use diff(1) to compare a definition from some years ago
        with now.

                alx@devuan:~/src/shadow/shadow/master$ diff -u \
                                <(git show 3049bef9c3:lib/alloc/realloc.h | 
grepc -h REALLOC) \
                                <(cat lib/alloc/realloc.h | grepc -h REALLOC);
                --- /dev/fd/63  2025-10-31 22:20:17.098318929 +0100
                +++ /dev/fd/62  2025-10-31 22:20:17.098318929 +0100
                @@ -1,4 +1,4 @@
                -#define REALLOC(ptr, n, type)                                  
               \
                +#define REALLOC(p, n, type)                                    
               \
                 (                                                              
               \
                -       _Generic(ptr, type *:  (type *) reallocarray(ptr, n, 
sizeof(type)))   \
                +       _Generic(p, type *: (type *) reallocarray(p, (n) ?: 1, 
sizeof(type))) \
                 )

        This is something I use every now and then while understanding
        old bugs, and has proved very useful.

        Here are a few example of links to shadow-utils discussions
        where grepc(1) was helpful:
        <https://github.com/shadow-maint/shadow/pull/1266#issue-3126573666>
        <https://github.com/shadow-maint/shadow/pull/1116#issue-2649006344>

 how do you plan to maintain it? inside a packaging team
 (check list at https://wiki.debian.org/Teams)? are you
 looking for co-maintainers? do you need a sponsor?

        These scripts are part of the Linux man-pages project.  Since
        that is already packaged as src:manpages, I expect it would be
        easy to just add a binary package in the same source package,
        called manpages-utils.

        I'd help as an upstream maintainer, but not directly as a
        maintainer of the Debian package (although I want to help with
        the packaging of the Debian packages of src:manpages
        eventually), but never find the time.  We'll see.

Have a lovely day!
Alex

Reply via email to