I wrote:
> This #undef breaks library namespacing.
And by breaking the library namespacing, it caused build failures of
GNU gettext on several platforms. Reported through the CI.
On Alpine Linux and macOS 15:
./obstack.h:470:10: warning: 'obstack_free' macro redefined [-Wmacro-redefined]
470 | # define obstack_free(OBSTACK, OBJ)
\
| ^
./config.h:674:9: note: previous definition is here
674 | #define obstack_free libtextstyle_obstack_free
| ^
../../../libtextstyle/lib/mem-hash-map.c:81:3: error: call to undeclared
function 'obstack_free'; ISO C99 and later do not support implicit function
declarations [-Wimplicit-function-declaration]
81 | obstack_free (&htab->mem_pool, NULL);
| ^
./obstack.h:477:10: note: expanded from macro 'obstack_free'
477 | __obstack_free (__o, __obj); })
| ^
./obstack.h:245:25: note: expanded from macro '__obstack_free'
245 | # define __obstack_free obstack_free
| ^
1 warning and 1 error generated.
make[5]: *** [libtextstyle_la-mem-hash-map.lo] Error 1
On 32-bit Cygwin:
/usr/lib/gcc/i686-pc-cygwin/11/../../../../i686-pc-cygwin/bin/ld:
/cygdrive/d/a/ci-check/ci-check/gettext-2025-05-06/build/libtextstyle/lib/.libs/libtextstyle.a(libtextstyle_la-obstack.o):
in function `obstack_free':
/cygdrive/d/a/ci-check/ci-check/gettext-2025-05-06/build/libtextstyle/lib/../../../libtextstyle/lib/obstack.c:295:
multiple definition of `obstack_free';
./.libs/libgettextsrc.a(libgettextlib_la-obstack.o):/cygdrive/d/a/ci-check/ci-check/gettext-2025-05-06/build/gettext-tools/gnulib-lib/../../../gettext-tools/gnulib-lib/obstack.c:295:
first defined here
collect2: error: ld returned 1 exit status
make[5]: *** [Makefile:5313: msgmerge.exe] Error 1
On 32-bit MSVC:
textstyle.lib(libtextstyle_la-obstack.obj) : error LNK2005: _obstack_free
already defined in gettextsrc.lib(libgettextlib_la-obstack.obj)
Creating library msgmerge.lib and object msgmerge.exp
msgmerge.exe : fatal error LNK1169: one or more multiply defined symbols found
libtool: link: lt_outputfile="msgmerge.exe"
libtool: link: lt_tool_outputfile="msgmerge.exe"
libtool: link: case msgmerge.exe in *.exe|*.EXE) ;; *)
lt_outputfile=msgmerge.exe.exe lt_tool_outputfile=msgmerge.exe.exe ;; esac
libtool: link: if test : != "mt" && test -f "msgmerge.exe.manifest"; then mt
-manifest "msgmerge.exe.manifest" -outputresource:"msgmerge.exe" || exit 1; rm
-f "msgmerge.exe.manifest"; fi
make[5]: *** [Makefile:5313: msgmerge.exe] Error 2
On 64-bit MSVC:
textstyle.lib(libtextstyle_la-obstack.obj) : error LNK2005: obstack_free
already defined in gettextsrc.lib(libgettextlib_la-obstack.obj)
Creating library msgmerge.lib and object msgmerge.exp
msgmerge.exe : fatal error LNK1169: one or more multiply defined symbols found
libtool: link: lt_outputfile="msgmerge.exe"
libtool: link: lt_tool_outputfile="msgmerge.exe"
libtool: link: case msgmerge.exe in *.exe|*.EXE) ;; *)
lt_outputfile=msgmerge.exe.exe lt_tool_outputfile=msgmerge.exe.exe ;; esac
libtool: link: if test : != "mt" && test -f "msgmerge.exe.manifest"; then mt
-manifest "msgmerge.exe.manifest" -outputresource:"msgmerge.exe" || exit 1; rm
-f "msgmerge.exe.manifest"; fi
make[5]: *** [Makefile:5313: msgmerge.exe] Error 2
The fix that I committed fixes the Alpine Linux FTBFS, and probably the other
ones as well.
Bruno