Hi Bruno,

At 2026-09-03T14:07:09+0200, Bruno Haible wrote:
> G. Branden Robinson wrote:
> > > Is there a recipe for reproducing the problem that you ran into?
> > 
> > Sure.  Grab the groff 1.25.0.rc2 release candidate archive.
> > 
> > https://alpha.gnu.org/gnu/groff/
> > 
> > Run the attached script.  It assumes GCC but you can make it use Clang.
> > 
> > $ env CORES=10 ~/bin/make-groff-fast-from-archive-reducer
> > $ env CORES=10 CC="clang -std=c99" CXX="clang++ -std=c++98" \
> >     ~/bin/make-groff-fast-from-archive-reducer
> 
> I reproduce the compilation error with
>   - an unmodified groff-1.25.0-rc2.tar.gz,
>   - on Debian 11 (which went end-of-life 3 days ago),
>   - CC="clang -std=gnu99" CXX="clang++ -std=gnu++98"
>   - $ ./configure; make
> 
> And when I apply Lasse Collin's patch to lib/verify.h (commit
> a4aa733b3651ed437d37fe51f14b8f5986e7ef8e), "make" succeeds.

Not for me under the procedure described.  I already applied that patch
to my working copy.

$ (cd gnulib && git log --author=Lasse | head -n 25)
commit 35a0794570013e589754450a04e14dd50a53f235
Author: Lasse Collin <[email protected]>
Date:   Fri Jul 31 18:33:35 2026 +0300

    string-h: Fix inconsistent nonnull attributes in strncpy

    * lib/string.in.h: The first strncpy prototype (with _GL_EXTERN_C)
    correctly had _GL_ATTRIBUTE_NONNULL_IF_NONZERO, but the second
    prototype (with _GL_FUNCDECL_RPL) used pre-N3322 _GL_ARG_NONNULL.
    This triggered a sanitizer failure in test-strncpy when configured
    with gl_cv_func_strncpy_works=no.

commit de0e0b699ac8a434e346b046e8b13e9612fc4b7b
Author: Lasse Collin <[email protected]>
Date:   Sat Aug 8 13:30:08 2026 +0300

    verify: Fix single-argument static_assert with glibc in C89 & C99 modes

    * lib/verify.h: glibc's <sys/cdefs.h> may define _Static_assert
    with two arguments when the compiler is in C89 or C99 mode.
    Undefine it so that Gnulib's own version is used instead.
    Reported by G. Branden Robinson in
    <https://lists.gnu.org/archive/html/bug-gnulib/2026-08/msg00125.html>.

    Copyright-paperwork-exempt: Yes

> So, you have nothing to complain about.

Second time I've heard that in 4 weeks!

> Just make a new groff prerelease with either the newest Gnulib
> ('master') or the stable-202607 branch, and it will work on that
> platform.

It doesn't.  But, I concede, I can't expect anyone to believe me until I
either push my working copy to Savannah Git, and/or roll an RC3.

I was trying to get this problem resolved _before_ that, but I reckon it
now that it ain't in the cards.

> Stamp files should only be used when plain dependencies are not
> sufficient.  Have you tried adding libgnu.a as a dependency (in
> Makefile.am) of your programss?

Yes, if Automake _LDADD variables imply a dependency.  See attachment.

If they don't, guess I have yet another problem.  But this has been
working since 2014.[1]  False sense of security?

Regards,
Branden

[1]  Though I can only attest first-hand since 2017.
src/devices/grodvi/grodvi.am-grodvi_LDADD = \
src/devices/grodvi/grodvi.am-  libdriver.a \
src/devices/grodvi/grodvi.am-  libgroff.a \
src/devices/grodvi/grodvi.am:  lib/libgnu.a $(LIBM)
src/devices/grodvi/grodvi.am-
src/devices/grodvi/grodvi.am-GRODVITMACFILES = tmac/dvi.tmac
src/devices/grodvi/grodvi.am-grodvitmacdir = $(tmacdir)
--
src/devices/grohtml/grohtml.am-post_grohtml_LDADD = $(LIBM) \
src/devices/grohtml/grohtml.am-  libdriver.a \
src/devices/grohtml/grohtml.am-  libgroff.a \
src/devices/grohtml/grohtml.am:  lib/libgnu.a
src/devices/grohtml/grohtml.am-
src/devices/grohtml/grohtml.am-POSTGROHTMLTMACFILES = \
src/devices/grohtml/grohtml.am-  tmac/html.tmac \
--
src/devices/grolbp/grolbp.am-grolbp_LDADD = $(LIBM) \
src/devices/grolbp/grolbp.am-  libdriver.a \
src/devices/grolbp/grolbp.am-  libgroff.a \
src/devices/grolbp/grolbp.am:  lib/libgnu.a
src/devices/grolbp/grolbp.am-
src/devices/grolbp/grolbp.am-GROLBPTMACFILES = tmac/lbp.tmac
src/devices/grolbp/grolbp.am-grolbptmacdir = $(tmacdir)
--
src/devices/grolj4/grolj4.am-grolj4_LDADD = $(LIBM) \
src/devices/grolj4/grolj4.am-  libdriver.a \
src/devices/grolj4/grolj4.am-  libgroff.a \
src/devices/grolj4/grolj4.am:  lib/libgnu.a
src/devices/grolj4/grolj4.am-
src/devices/grolj4/grolj4.am-GROLJ4TMACFILES = tmac/lj4.tmac
src/devices/grolj4/grolj4.am-grolj4tmacdir = $(tmacdir)
--
src/devices/grops/grops.am-grops_LDADD = $(LIBM) \
src/devices/grops/grops.am-  libdriver.a \
src/devices/grops/grops.am-  libgroff.a \
src/devices/grops/grops.am:  lib/libgnu.a
src/devices/grops/grops.am-
src/devices/grops/grops.am-GROPSTMACFILES = \
src/devices/grops/grops.am-  tmac/europs.tmac \
--
src/devices/grotty/grotty.am-grotty_LDADD = $(LIBM) \
src/devices/grotty/grotty.am-  libdriver.a \
src/devices/grotty/grotty.am-  libgroff.a \
src/devices/grotty/grotty.am:  lib/libgnu.a
src/devices/grotty/grotty.am-
src/devices/grotty/grotty.am-GROTTYTMACFILES = \
src/devices/grotty/grotty.am-  tmac/tty.tmac \
--
src/devices/xditview/xditview.am-gxditview_CPPFLAGS = $(AM_CPPFLAGS) 
$(X_CFLAGS) -Dlint \
src/devices/xditview/xditview.am-  -I$(top_builddir)/src/devices/xditview
src/devices/xditview/xditview.am-gxditview_LDADD = $(X_LIBS) $(X_PRE_LIBS) 
-lXaw -lXmu $(X_AW_DEPS) \
src/devices/xditview/xditview.am:  -lXt -lX11 $(X_EXTRA_LIBS) $(LIBM) 
libxutil.a lib/libgnu.a
src/devices/xditview/xditview.am-XDITVIEW_GENHDRS = \
src/devices/xditview/xditview.am- src/devices/xditview/GXditview-ad.h \
src/devices/xditview/xditview.am- $(GXDITVIEW_GROFF_VERSION_H)
--
src/preproc/eqn/eqn.am-  $(AM_CPPFLAGS) \
src/preproc/eqn/eqn.am-  -I $(top_srcdir)/src/preproc/eqn \
src/preproc/eqn/eqn.am-  -I $(top_builddir)/src/preproc/eqn
src/preproc/eqn/eqn.am:eqn_LDADD = $(LIBM) libgroff.a lib/libgnu.a
src/preproc/eqn/eqn.am-eqn_SOURCES = \
src/preproc/eqn/eqn.am-  src/preproc/eqn/main.cpp \
src/preproc/eqn/eqn.am-  src/preproc/eqn/lex.cpp \
--
src/preproc/grn/grn.am-  src/preproc/grn/hgraph.cpp \
src/preproc/grn/grn.am-  src/preproc/grn/main.cpp
src/preproc/grn/grn.am-src/preproc/grn/main.$(OBJEXT): defs.h
src/preproc/grn/grn.am:grn_LDADD = libgroff.a lib/libgnu.a $(LIBM)
src/preproc/grn/grn.am-PREFIXMAN1 += src/preproc/grn/grn.1
src/preproc/grn/grn.am-EXTRA_DIST += src/preproc/grn/README 
src/preproc/grn/grn.1.man
src/preproc/grn/grn.am-
--
src/preproc/html/html.am-# along with this program.  If not, see 
<http://www.gnu.org/licenses/>.
src/preproc/html/html.am-
src/preproc/html/html.am-bin_PROGRAMS += pre-grohtml
src/preproc/html/html.am:pre_grohtml_LDADD = libgroff.a lib/libgnu.a $(LIBM)
src/preproc/html/html.am-pre_grohtml_SOURCES = \
src/preproc/html/html.am-  src/preproc/html/pre-html.cpp \
src/preproc/html/html.am-  src/preproc/html/pushback.cpp \
--
src/preproc/pic/pic.am-pic_CPPFLAGS = $(AM_CPPFLAGS) \
src/preproc/pic/pic.am-  -I $(top_srcdir)/src/preproc/pic \
src/preproc/pic/pic.am-  -I $(top_builddir)/src/preproc/pic
src/preproc/pic/pic.am:pic_LDADD = libgroff.a $(LIBM) lib/libgnu.a
src/preproc/pic/pic.am-pic_SOURCES = \
src/preproc/pic/pic.am-  src/preproc/pic/pic.ypp \
src/preproc/pic/pic.am-  src/preproc/pic/lex.cpp \
--
src/preproc/preconv/preconv.am-
src/preproc/preconv/preconv.am-bin_PROGRAMS += preconv
src/preproc/preconv/preconv.am-preconv_LDADD = libgroff.a $(LIBM) $(LIBICONV) 
$(UCHARDET_LIBS) \
src/preproc/preconv/preconv.am:  lib/libgnu.a
src/preproc/preconv/preconv.am-preconv_SOURCES = src/preproc/preconv/preconv.cpp
src/preproc/preconv/preconv.am-preconv_CPPFLAGS = $(AM_CPPFLAGS) 
$(UCHARDET_CFLAGS)
src/preproc/preconv/preconv.am-man1_MANS += src/preproc/preconv/preconv.1
--
src/preproc/refer/refer.am-
src/preproc/refer/refer.am-prefixexecbin_PROGRAMS += refer
src/preproc/refer/refer.am-refer_CPPFLAGS = $(AM_CPPFLAGS) -I 
$(top_srcdir)/src/preproc/refer
src/preproc/refer/refer.am:refer_LDADD = libbib.a libgroff.a $(LIBM) 
lib/libgnu.a
src/preproc/refer/refer.am-refer_SOURCES =  \
src/preproc/refer/refer.am-  src/preproc/refer/command.cpp \
src/preproc/refer/refer.am-  src/preproc/refer/ref.cpp \
--
src/preproc/soelim/soelim.am-# along with this program.  If not, see 
<http://www.gnu.org/licenses/>.
src/preproc/soelim/soelim.am-
src/preproc/soelim/soelim.am-prefixexecbin_PROGRAMS += soelim
src/preproc/soelim/soelim.am:soelim_LDADD = libgroff.a $(LIBM) lib/libgnu.a
src/preproc/soelim/soelim.am-soelim_SOURCES = src/preproc/soelim/soelim.cpp
src/preproc/soelim/soelim.am-PREFIXMAN1 += src/preproc/soelim/soelim.1
src/preproc/soelim/soelim.am-EXTRA_DIST += \
--
src/preproc/tbl/tbl.am-# along with this program.  If not, see 
<http://www.gnu.org/licenses/>.
src/preproc/tbl/tbl.am-
src/preproc/tbl/tbl.am-prefixexecbin_PROGRAMS += tbl
src/preproc/tbl/tbl.am:tbl_LDADD = libgroff.a $(LIBM) lib/libgnu.a
src/preproc/tbl/tbl.am-tbl_SOURCES = \
src/preproc/tbl/tbl.am-  src/preproc/tbl/main.cpp \
src/preproc/tbl/tbl.am-  src/preproc/tbl/table.cpp \
--
src/roff/groff/groff.am-bin_PROGRAMS += groff
src/roff/groff/groff.am-groff_LDADD = \
src/roff/groff/groff.am-  libgroff.a \
src/roff/groff/groff.am:  lib/libgnu.a \
src/roff/groff/groff.am-  $(LIBM)
src/roff/groff/groff.am-groff_SOURCES = \
src/roff/groff/groff.am-  src/roff/groff/groff.cpp \
--
src/roff/troff/troff.am-  src/roff/troff/column.cpp \
src/roff/troff/troff.am-  src/roff/troff/troff.1.man \
src/roff/troff/troff.am-  src/roff/troff/TODO
src/roff/troff/troff.am:troff_LDADD = libgroff.a lib/libgnu.a $(LIBM)
src/roff/troff/troff.am-troff_SOURCES = \
src/roff/troff/troff.am-  src/roff/troff/dictionary.cpp \
src/roff/troff/troff.am-  src/roff/troff/div.cpp \
--
src/utils/addftinfo/addftinfo.am-bin_PROGRAMS += addftinfo
src/utils/addftinfo/addftinfo.am-man1_MANS += src/utils/addftinfo/addftinfo.1
src/utils/addftinfo/addftinfo.am-EXTRA_DIST += 
src/utils/addftinfo/addftinfo.1.man
src/utils/addftinfo/addftinfo.am:addftinfo_LDADD = libgroff.a lib/libgnu.a
src/utils/addftinfo/addftinfo.am-addftinfo_SOURCES = \
src/utils/addftinfo/addftinfo.am-  src/utils/addftinfo/addftinfo.cpp \
src/utils/addftinfo/addftinfo.am-  src/utils/addftinfo/guess.cpp \
--
src/utils/hpftodit/hpftodit.am-bin_PROGRAMS += hpftodit
src/utils/hpftodit/hpftodit.am-man1_MANS += src/utils/hpftodit/hpftodit.1
src/utils/hpftodit/hpftodit.am-EXTRA_DIST += src/utils/hpftodit/hpftodit.1.man
src/utils/hpftodit/hpftodit.am:hpftodit_LDADD = libgroff.a $(LIBM) lib/libgnu.a
src/utils/hpftodit/hpftodit.am-hpftodit_SOURCES = \
src/utils/hpftodit/hpftodit.am-  src/utils/hpftodit/hpftodit.cpp \
src/utils/hpftodit/hpftodit.am-  src/utils/hpftodit/hpftodit.h \
--
src/utils/indxbib/indxbib.am-  src/utils/indxbib/indxbib.cpp \
src/utils/indxbib/indxbib.am-  src/utils/indxbib/signal.c
src/utils/indxbib/indxbib.am-src/utils/indxbib/indxbib.$(OBJEXT): defs.h
src/utils/indxbib/indxbib.am:indxbib_LDADD = libbib.a libgroff.a $(LIBM) 
lib/libgnu.a
src/utils/indxbib/indxbib.am-PREFIXMAN1 += src/utils/indxbib/indxbib.1
src/utils/indxbib/indxbib.am-EXTRA_DIST += \
src/utils/indxbib/indxbib.am-  src/utils/indxbib/indxbib.1.man \
--
src/utils/lkbib/lkbib.am-bin_PROGRAMS += lkbib
src/utils/lkbib/lkbib.am-man1_MANS += src/utils/lkbib/lkbib.1
src/utils/lkbib/lkbib.am-EXTRA_DIST += src/utils/lkbib/lkbib.1.man
src/utils/lkbib/lkbib.am:lkbib_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
src/utils/lkbib/lkbib.am-lkbib_SOURCES = src/utils/lkbib/lkbib.cpp
src/utils/lkbib/lkbib.am-src/utils/lkbib/lkbib.$(OBJEXT): defs.h
src/utils/lkbib/lkbib.am-
--
src/utils/lookbib/lookbib.am-prefixexecbin_PROGRAMS += lookbib
src/utils/lookbib/lookbib.am-PREFIXMAN1 += src/utils/lookbib/lookbib.1
src/utils/lookbib/lookbib.am-EXTRA_DIST += src/utils/lookbib/lookbib.1.man
src/utils/lookbib/lookbib.am:lookbib_LDADD = libbib.a libgroff.a $(LIBM) 
lib/libgnu.a
src/utils/lookbib/lookbib.am-lookbib_SOURCES = src/utils/lookbib/lookbib.cpp
src/utils/lookbib/lookbib.am-
src/utils/lookbib/lookbib.am-
--
src/utils/pfbtops/pfbtops.am-man1_MANS += src/utils/pfbtops/pfbtops.1
src/utils/pfbtops/pfbtops.am-EXTRA_DIST += src/utils/pfbtops/pfbtops.1.man
src/utils/pfbtops/pfbtops.am-pfbtops_SOURCES = src/utils/pfbtops/pfbtops.c
src/utils/pfbtops/pfbtops.am:pfbtops_LDADD = libgroff.a $(LIBM) lib/libgnu.a
src/utils/pfbtops/pfbtops.am-
src/utils/pfbtops/pfbtops.am-pfbtops_TESTS = \
src/utils/pfbtops/pfbtops.am-  src/utils/pfbtops/tests/smoke-test.sh
--
src/utils/tfmtodit/tfmtodit.am-man1_MANS += src/utils/tfmtodit/tfmtodit.1
src/utils/tfmtodit/tfmtodit.am-EXTRA_DIST += src/utils/tfmtodit/tfmtodit.1.man
src/utils/tfmtodit/tfmtodit.am-tfmtodit_SOURCES = 
src/utils/tfmtodit/tfmtodit.cpp
src/utils/tfmtodit/tfmtodit.am:tfmtodit_LDADD = libgroff.a $(LIBM) lib/libgnu.a
src/utils/tfmtodit/tfmtodit.am-
src/utils/tfmtodit/tfmtodit.am-# Local Variables:
src/utils/tfmtodit/tfmtodit.am-# fill-column: 72
--
src/utils/xtotroff/xtotroff.am-xtotroff_SOURCES = src/utils/xtotroff/xtotroff.c
src/utils/xtotroff/xtotroff.am-XLIBS=$(LIBXUTIL) $(LIBGROFF)
src/utils/xtotroff/xtotroff.am-xtotroff_LDADD = libxutil.a libgroff.a $(X_LIBS) 
$(X_PRE_LIBS) \
src/utils/xtotroff/xtotroff.am:  -lXaw -lXt -lX11 $(X_EXTRA_LIBS) $(LIBM) 
lib/libgnu.a
src/utils/xtotroff/xtotroff.am-xtotroff_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS)
src/utils/xtotroff/xtotroff.am-endif
src/utils/xtotroff/xtotroff.am-EXTRA_DIST += src/utils/xtotroff/xtotroff.1.man

Attachment: signature.asc
Description: PGP signature

Reply via email to