[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: failure to include C++'s <ctype> when gmtime and localtime are repla

From: Alexandre Duret-Lutz
Subject: Re: failure to include C++'s <ctype> when gmtime and localtime are replaced by gnulib
Date: Tue, 17 Dec 2013 17:10:47 +0100

On Thu, Jul 18, 2013 at 10:17 PM, Alexandre Duret-Lutz
<address@hidden> wrote:
> Hi,
> My C++ code uses a few modules of gnulib and has to be
> cross-compilable with MinGW.
> Using gnulib 312af25ba220ccff068245f0dc698e9bcc8f03f8, my
> cross-compilation builds fail with:
> In file included from /usr/include/c++/4.6/bits/locale_facets_nonio.h:39:0,
> from /usr/include/c++/4.6/locale:43,
> from escape.cc:29:
> /usr/include/c++/4.6/ctime:72:11: error: '::gmtime' has not been declared
> /usr/include/c++/4.6/ctime:73:11: error: '::localtime' has not been declared
> Header <ctime> includes <time.h> and does something like this:
> #include <time.h>
> #undef gmtime
> #undef localtime
> namespace std
> {
>   using ::gmtime;
>   using ::localtime;
> } // namespace
> So it will only work if the functions gmtime and localtime actually exist.
> I'm cross-compiling to --host=i686-w64-mingw32 so the logic in gettimeofday.m4
> results in:
> configure:14457: checking whether gettimeofday clobbers localtime buffer
> configure:14506: result: guessing yes
> causing the following to be emitted in config.h:
>   #define gmtime rpl_gmtime
>   #define localtime rpl_localtime
> Consequently the actual functions declared in the system's <time.h>
> are now declared as rpl_gmtime and rpl_localtime, and <ctype> will not
> find the gmtime and localtime functions.
> The worst part of this is that actually my code does not use gmtime() or
> localtime(), and I don't think any of the gnulib modules I use (argmatch,
> argp, error, gethrxtime, isatty, mkstemp, mkstemps, progname, stpcpy,
> sys_wait) really require these functions.  I can see that the gethrxtime 
> module
> requires the gettime module which in turns requires the gettimeofday module,
> but the latter module is only used for its gettimeofday() function.
> It seems this C++ crosscompilation issue was already reported by John Eaton
> two years ago 
> <http://lists.gnu.org/archive/html/bug-gnulib/2011-11/msg00388.html>
> but without reaching a conclusion.
> I applied the patch given by JWE in that thread. I had to fix the
> prototype of gmtime()
> and localtime() in time.in.h because these functions should take only one
> argument, and I also had to add AC_SUBST for HAVE_GMTIME and HAVE_LOCALTIME
> for the case where gl_GETTIMEOFDAY_REPLACE_LOCALTIME is not called.
> Then all my builds became green again :-)
> The fixed patch with a ChangeLog (in his name) is attached.


Alexandre Duret-Lutz

reply via email to

[Prev in Thread] Current Thread [Next in Thread]