On Jan 23, 2014, at 7:23 AM, Gary Bilkus <m...@gary.bilkus.com> wrote:
> I've done some more testing and found a problem with libofx and possibly > aqbanking ( which I don't use ). It's easy enough to work round, but I'm not > sure what the correct fix should be on Windows > > > The problem is that there's a known issue with datediff and mingw, due to > differences in the versions of MSCVRT used by mingw as to whether they expect > time_t to be 32 or 64 bits. > > > If you know you are compiling for Windows 7, you can get it to work by > explicitly setting the windows version appropriately, so that it will use the > 64 bit versions of time_t ( even on 32 bit windows ). However, I suspect that > compiling that way won't work on XP which doesn't have the 64 bit version. > > > There is lots of noise about this issue in various forums, but no clear > answer what the 'correct' solution is if you want to be able to compile on > any supported Windows version, and ideally get a package which works > everywhere as well. > > > Anyone have any good ideas how to fix this cleanly. The least bad solution > might be simply to replace datediff with a simple subtraction, which should > work for the cases it's used in libofx. But other dependencies might be > different. > Are you perhaps thinking of “difftime”? DATEDIFF is a SQL function; difftime is a standard C Library function. This bug seems to be what you’re talking about: http://sourceforge.net/p/mingw/bugs/2152/, linked from http://mingw.5.n7.nabble.com/difftime-broken-td33080.html. So Microsoft has invented a new twist on the 32-bit vs. 64-bit time_t problem by having both and a rather graceless way of determining which to use. In GnuCash we finessed that by not using the standard C functions because we need 64-bit time_t regardless of whether the platform provides it. We’re currently using Glib functions that don’t use it; soon we’ll switch to Boost functions that don’t use it either. It looks to from the bug that you have it backwards: You need to coerce 32-bit time_t because MinGW is screwed up and only calls difftime32() regardless of the size of time_t. That means that you can’t build GnuCash with MinGW wsl>=4.0 on a Win64 system until they fix the bug, or unless AQBanking and LibOFX work around the bug by replacing difftime with a subtraction-and-cast. Regards, John Ralls _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel