From ff25f0e9bc1d38a43bb9600358d2ec8f8bea3f04 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 4 Apr 2010 15:37:40 +0200 Subject: [PATCH] tmpfile: Fix C++ test error on mingw. --- ChangeLog | 14 ++++++++++++++ lib/stdio.in.h | 19 +++++++++++++++++++ m4/stdio_h.m4 | 6 ++++-- m4/tmpfile.m4 | 9 +++++---- modules/stdio | 2 ++ modules/tmpfile | 2 ++ tests/test-stdio-c++.cc | 4 ++++ 7 files changed, 50 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0bb6e2164..5fc8980ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,19 @@ 2010-04-04 Bruno Haible + tmpfile: Fix C++ test error on mingw. + * lib/stdio.in.h (tmpfile): New declaration. + * m4/tmpfile.m4 (gl_TMPFILE): Require gl_STDIO_H_DEFAULTS. Set + REPLACE_TMPFILE instead of defining tmpfile as a macro in config.h. + * modules/tmpfile (Depends-on): Add stdio. + (configure.ac): Invoke gl_STDIO_MODULE_INDICATOR. + * m4/stdio_h.m4 (gl_STDIO_H): Also check whether tmpfile is declared. + (gl_STDIO_H_DEFAULTS): Initialize GNULIB_TMPFILE and REPLACE_TMPFILE. + * modules/stdio (Makefile.am): Substitute GNULIB_TMPFILE and + REPLACE_TMPFILE. + * tests/test-stdio-c++.cc (tmpfile): Verify signature. + +2010-04-04 Bruno Haible + ioctl: Fix C++ test error on mingw. * lib/ioctl.c (ioctl): Renamed from rpl_ioctl. * lib/sys_ioctl.in.h (ioctl): When SYS_IOCTL_H_HAVE_WINSOCK2_H is 1, diff --git a/lib/stdio.in.h b/lib/stdio.in.h index 598b9d83b..717c2c441 100644 --- a/lib/stdio.in.h +++ b/lib/stdio.in.h @@ -838,6 +838,25 @@ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "POSIX compliance"); #endif +#if @GNULIB_TMPFILE@ +# if @REPLACE_TMPFILE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define tmpfile rpl_tmpfile +# endif +_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); +_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); +# else +_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); +# endif +_GL_CXXALIASWARN (tmpfile); +#elif defined GNULIB_POSIXCHECK +# undef tmpfile +# if HAVE_RAW_DECL_TMPFILE +_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " + "use gnulib module tmpfile for portability"); +# endif +#endif + #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in diff --git a/m4/stdio_h.m4 b/m4/stdio_h.m4 index 7b7e9449e..1d1d95e56 100644 --- a/m4/stdio_h.m4 +++ b/m4/stdio_h.m4 @@ -1,4 +1,4 @@ -# stdio_h.m4 serial 29 +# stdio_h.m4 serial 30 dnl Copyright (C) 2007-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -37,7 +37,7 @@ AC_DEFUN([gl_STDIO_H], dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include ]], [dprintf fpurge fseeko ftello getdelim getline popen renameat - snprintf vdprintf vsnprintf]) + snprintf tmpfile vdprintf vsnprintf]) ]) AC_DEFUN([gl_STDIO_MODULE_INDICATOR], @@ -83,6 +83,7 @@ AC_DEFUN([gl_STDIO_H_DEFAULTS], GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) + GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) @@ -127,6 +128,7 @@ AC_DEFUN([gl_STDIO_H_DEFAULTS], REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) + REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) diff --git a/m4/tmpfile.m4 b/m4/tmpfile.m4 index 8a5c145e6..cd49237da 100644 --- a/m4/tmpfile.m4 +++ b/m4/tmpfile.m4 @@ -1,5 +1,4 @@ -# Check whether to use a replacement tmpfile() function. - +# tmpfile.m4 serial 1 # Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -7,6 +6,8 @@ # Written by Ben Pfaff. +# Check whether to use a replacement tmpfile() function. + # The native Windows tmpfile function always tries to put the temporary # file in the root directory. (This behaviour is even documented in # Microsoft's documentation!) This often fails for ordinary users who @@ -18,6 +19,7 @@ # just test for a Windows platform (excluding Cygwin). AC_DEFUN([gl_TMPFILE], [ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CACHE_CHECK([whether tmpfile should be overridden], [gl_cv_func_tmpfile_unusable], [AC_EGREP_CPP([choke me], [ @@ -28,9 +30,8 @@ choke me [gl_cv_func_tmpfile_unusable=yes], [gl_cv_func_tmpfile_unusable=no])]) if test $gl_cv_func_tmpfile_unusable = yes; then + REPLACE_TMPFILE=1 AC_LIBOBJ([tmpfile]) - AC_DEFINE([tmpfile], [rpl_tmpfile], - [Define to rpl_tmpfile if the replacement function should be used.]) gl_PREREQ_TMPFILE fi ]) diff --git a/modules/stdio b/modules/stdio index faa07ccc7..c982dac97 100644 --- a/modules/stdio +++ b/modules/stdio @@ -60,6 +60,7 @@ stdio.h: stdio.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \ -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \ -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_TMPFILE''@|$(GNULIB_TMPFILE)|g' \ -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \ -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \ -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \ @@ -104,6 +105,7 @@ stdio.h: stdio.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ diff --git a/modules/tmpfile b/modules/tmpfile index 8358274e3..b2d62283e 100644 --- a/modules/tmpfile +++ b/modules/tmpfile @@ -6,12 +6,14 @@ lib/tmpfile.c m4/tmpfile.m4 Depends-on: +stdio pathmax tempname tmpdir configure.ac: gl_TMPFILE +gl_STDIO_MODULE_INDICATOR([tmpfile]) Makefile.am: diff --git a/tests/test-stdio-c++.cc b/tests/test-stdio-c++.cc index 533a72591..60bd00b5e 100644 --- a/tests/test-stdio-c++.cc +++ b/tests/test-stdio-c++.cc @@ -149,6 +149,10 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::snprintf, int, SIGNATURE_CHECK (GNULIB_NAMESPACE::sprintf, int, (char *, const char *, ...)); #endif +#if GNULIB_TEST_TMPFILE +SIGNATURE_CHECK (GNULIB_NAMESPACE::tmpfile, FILE *, (void)); +#endif + #if GNULIB_TEST_VASPRINTF SIGNATURE_CHECK (GNULIB_NAMESPACE::asprintf, int, (char **, const char *, ...)); -- 2.11.0