Hi, here is the third fatal build error i encountered while trying to build from git on OpenBSD, this time caused by the recent gnulib update.
I'm looking for an OK to push the patch appended below. I think it can (and should) go in before release because including "config.h" in a few additional files is unlikely to cause regressions with compilers that do not require it. Yours, Ingo ----- Forwarded message from Ingo Schwarze <invalid.nore...@gnu.org> ----- URL: <https://savannah.gnu.org/bugs/?59276> Summary: [PATCH] #include "config.h" before <stdio.h> Project: GNU troff Submitted by: schwarze Submitted on: Thu 15 Oct 2020 01:27:04 PM UTC Category: Core Severity: 3 - Normal Item Group: Build/Installation Status: None Privacy: Public Assigned to: schwarze Open/Closed: Open Discussion Lock: Any Planned Release: [1.23] _______________________________________________________ Details: Since the gnulib commit 182afcba2635cbff91240656c7fb3742dd23ab6f Author: Bruno Haible <br...@clisp.org> Date: Sat Feb 22 20:57:30 2020 +0100 gnulib/lib/stdio.in.h uses the "restrict" keyword. For example with GCC 4.2.1, this may cause the build to fail with a message like this: In file included from ../src/libs/libgroff/assert.cpp:19: ./lib/stdio.h:851: error: expected ',' or '...' before 'fp' ./lib/stdio.h:851: error: format string argument not a string type ./lib/stdio.h:851: error: nonnull argument with out-of-range operand number (argument 1, operand 2) ./lib/stdio.h: In function 'void assertion_failed(int, const char*, const char*, const char*)': ./lib/stdio.h:851: error: too many arguments to function 'int rpl_fprintf(FILE*)' ../src/libs/libgroff/assert.cpp:29: error: at this point in file ./lib/stdio.h:851: error: too many arguments to function 'int rpl_fprintf(FILE*)' ../src/libs/libgroff/assert.cpp:31: error: at this point in file *** Error 1 in . (Makefile:6874 'src/libs/libgroff/libgroff_aassert.o': @echo " CXX " src/libs/libgroff /libgroff_a-assert.o;g++ -DHAVE...) *** Error 2 in /co/groff/build (Makefile:5317 'all') The attached patch fixes the build failure by making sure "restict" is appropriately #defined (if needed) before the gnulib version of <stdio.h> is included. _______________________________________________________ commit b0ed768a3b121f75d2c018a8c85267f749251553 Author: Ingo Schwarze <schwa...@openbsd.org> Date: Thu Oct 15 15:12:20 2020 +0200 #include "config.h" before <stdio.h> Required with e.g. gcc 4.2.1 because gnulib/lib/stdio.in.h uses the "restrict" keyword since this gnulib commit: commit 182afcba2635cbff91240656c7fb3742dd23ab6f Author: Bruno Haible <br...@clisp.org> Date: Sat Feb 22 20:57:30 2020 +0100 Otherwise, the build may die from the declaration of various printf-like functions with messages like: ./lib/stdio.h:851: error: expected ',' or '...' before 'fp' * src/libs/libgroff/assert.cpp, src/libs/libgroff/errarg.cpp, src/libs/libgroff/error.cpp, src/preproc/eqn/eqn.ypp: #include "config.h". diff --git a/ChangeLog b/ChangeLog index d1887cb3..6accf43a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2020-10-15 Ingo Schwarze <schwa...@openbsd.org> + + #include "config.h" before <stdio.h> + + Required with e.g. gcc 4.2.1 because gnulib/lib/stdio.in.h + uses the "restrict" keyword since this gnulib commit: + commit 182afcba2635cbff91240656c7fb3742dd23ab6f + Author: Bruno Haible <br...@clisp.org> + Date: Sat Feb 22 20:57:30 2020 +0100 + + Otherwise, the build may die from the declaration of + various printf-like functions with messages like: + ./lib/stdio.h:851: error: expected ',' or '...' before 'fp' + + * src/libs/libgroff/assert.cpp, src/libs/libgroff/errarg.cpp, + src/libs/libgroff/error.cpp, src/preproc/eqn/eqn.ypp: + #include "config.h". + 2020-10-14 Ingo Schwarze <schwa...@openbsd.org> In groff(1), fix the combination of -v with -k, -j, and -J. diff --git a/src/libs/libgroff/assert.cpp b/src/libs/libgroff/assert.cpp index 80a99463..1f6bf59a 100644 --- a/src/libs/libgroff/assert.cpp +++ b/src/libs/libgroff/assert.cpp @@ -16,6 +16,10 @@ for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <stdio.h> #include <stdlib.h> #include "assert.h" diff --git a/src/libs/libgroff/errarg.cpp b/src/libs/libgroff/errarg.cpp index b0df24ab..ec5eae17 100644 --- a/src/libs/libgroff/errarg.cpp +++ b/src/libs/libgroff/errarg.cpp @@ -17,6 +17,10 @@ for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <stdio.h> #include "assert.h" #include "errarg.h" diff --git a/src/libs/libgroff/error.cpp b/src/libs/libgroff/error.cpp index 14949b91..912112b2 100644 --- a/src/libs/libgroff/error.cpp +++ b/src/libs/libgroff/error.cpp @@ -17,6 +17,10 @@ for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <stdio.h> #include <stdlib.h> #include <string.h> diff --git a/src/preproc/eqn/eqn.ypp b/src/preproc/eqn/eqn.ypp index fb318c3d..6825afb5 100644 --- a/src/preproc/eqn/eqn.ypp +++ b/src/preproc/eqn/eqn.ypp @@ -16,6 +16,10 @@ for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ %{ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <stdio.h> #include <string.h> #include <stdlib.h>