> On HP-UX 11, a testdir built with --with-c++-tests produces a number of > errors
On HP-UX 11/ia64, in 32-bit mode, there is another set of errors: source='../../gltests/test-stdio-c++.cc' object='test-stdio-c++.o' libtool=no \ DEPDIR=.deps depmode=hp2 /bin/sh ../../build-aux/depcomp \ aCC -O -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 -DHAVE_CONFIG_H -DEXEEXT=\"\" -I. -I../../gltests -I.. -DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I../../gltests -I.. -I../../gltests/.. -I../gllib -I../../gltests/../gllib -I/home/haible/prefix-hpux113ia64-32-cc/include -c -o test-stdio-c++.o ../../gltests/test-stdio-c++.cc "../gllib/stdio.h", line 1020: error #2282: the global scope has no "fseeko" _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); ^ "../gllib/stdio.h", line 1081: error #2282: the global scope has no "ftello" _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); ^ 2 errors detected in the compilation of "../../gltests/test-stdio-c++.cc". gmake[2]: *** [test-stdio-c++.o] Error 2 The cause is that on this system, <stdio.h> declares fseeko and ftello in C++ mode only if _LARGEFILE_SOURCE is defined. Therefore, the use of gnulib module 'fseeko' or 'ftello' ought to ensure that _LARGEFILE_SOURCE is defined. But the logic in AC_SYS_LARGEFILE does not do this (it sets only _FILE_OFFSET_BITS and _LARGE_FILES), and AC_FUNC_FSEEKO which is meant to set _LARGEFILE_SOURCE does not do it because it uses a test program for the C compiler, not for the C++ compiler. This patch fixes it. 2019-12-08 Bruno Haible <br...@clisp.org> Fix compilation errors in 32-bit C++ mode on HP-UX 11/ia64. * m4/largefile.m4 (gl_SET_LARGEFILE_SOURCE): New macro. * modules/fseeko (configure.ac-early): Require it instead of AC_FUNC_FSEEKO. * modules/ftello (configure.ac-early): Likewise. * modules/fflush (configure.ac-early): Likewise. diff --git a/m4/largefile.m4 b/m4/largefile.m4 index c6dd9a1..65d5a15 100644 --- a/m4/largefile.m4 +++ b/m4/largefile.m4 @@ -5,6 +5,22 @@ # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# The following macro works around a problem in Autoconf's AC_FUNC_FSEEKO: +# It does not set _LARGEFILE_SOURCE=1 on HP-UX/ia64 32-bit, although this +# setting of _LARGEFILE_SOURCE is needed so that <stdio.h> declares fseeko +# and ftello in C++ mode as well. +AC_DEFUN([gl_SET_LARGEFILE_SOURCE], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_FUNC_FSEEKO + case "$host_os" in + hpux*) + AC_DEFINE([_LARGEFILE_SOURCE], [1], + [Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2).]) + ;; + esac +]) + # The following implementation works around a problem in autoconf <= 2.69; # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, # or configures them incorrectly in some cases. diff --git a/modules/fflush b/modules/fflush index 03b2f1d..858a25a 100644 --- a/modules/fflush +++ b/modules/fflush @@ -17,7 +17,7 @@ unistd [test $REPLACE_FFLUSH = 1] fseeko [test $REPLACE_FFLUSH = 1] configure.ac-early: -AC_REQUIRE([AC_FUNC_FSEEKO]) +AC_REQUIRE([gl_SET_LARGEFILE_SOURCE]) configure.ac: gl_FUNC_FFLUSH diff --git a/modules/fseeko b/modules/fseeko index d4cc162..83db09c 100644 --- a/modules/fseeko +++ b/modules/fseeko @@ -16,7 +16,7 @@ sys_types fseek configure.ac-early: -AC_REQUIRE([AC_FUNC_FSEEKO]) +AC_REQUIRE([gl_SET_LARGEFILE_SOURCE]) configure.ac: gl_FUNC_FSEEKO diff --git a/modules/ftello b/modules/ftello index 1680f2d..6de0859 100644 --- a/modules/ftello +++ b/modules/ftello @@ -17,7 +17,7 @@ lseek [test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1] ftell configure.ac-early: -AC_REQUIRE([AC_FUNC_FSEEKO]) +AC_REQUIRE([gl_SET_LARGEFILE_SOURCE]) configure.ac: gl_FUNC_FTELLO