> Yeah. In practice, there are exactly two cases we care about: either
> both of these functions will be declared in <stdlib.h> like POSIX
> says, or both of them will be in <xlocale.h>. There's no need to
> work harder than we have to do to figure that out.
>
> I'm totally unimpressed with the proposal of depending on the
> __FreeBSD__ macro instead of having a proper configure check. For
> one thing, we have no idea whether NetBSD or OpenBSD have this same
> issue. For another, it might be version-specific, or might become so
> if FreeBSD decides to start following POSIX on this point someday.
OK, I'm not an expert in Autotools but this patch (see attachment) seems
to solve a problem.
Here are some notes.
Unfortunately test program requires two include files:
```
#include <stdlib.h>
#include <xlocale.h>
int main()
{
size_t tmp = wcstombs_l(NULL, NULL, 0, 0);
return 0;
}
```
Thus I need two checks - 1) that test program compiles when xlocal.h is
included 2) that test program does not compile if only stdlib.h is
included (what if wcstombs_l is actually declared there?).
On Ubuntu 14.04:
```
$ ./configure
...
checking whether wcstombs_l is available if stdlib.h is included... no
checking whether wcstombs_l is available if stdlib.h and xlocale.h are
included... no ...
$ cat ./src/include/pg_config.h | grep WCSTOMBS_L_IN_XLOCALE
/* #undef WCSTOMBS_L_IN_XLOCALE */
$ make -j2 -s
Writing postgres.bki
Writing schemapg.h
Writing postgres.description
Writing postgres.shdescription
Writing fmgroids.h
Writing fmgrtab.c
In file included from gram.y:14933:0:
scan.c: In function ‘yy_try_NUL_trans’:
scan.c:10321:23: warning: unused variable ‘yyg’ [-Wunused-variable]
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var
may be unused depending upon options. */ ^
$ make check
...
=======================
All 161 tests passed.
=======================
```
On FreeBSD 10.2:
```
$ ./configure
...
checking whether wcstombs_l is available if stdlib.h is included... no
checking whether wcstombs_l is available if stdlib.h and xlocale.h are
included... yes ...
$ cat ./src/include/pg_config.h | grep WCSTOMBS_L_IN_XLOCALE
#define WCSTOMBS_L_IN_XLOCALE 1
$ gmake -j2 -s
Writing postgres.bki
Writing schemapg.h
Writing postgres.description
Writing postgres.shdescription
Writing fmgroids.h
Writing fmgrtab.c
$ gmake check
...
=======================
All 161 tests passed.
=======================
```
As you can see warnings are gone. Warning on Ubuntu was always there
and as comment suggests is irrelevant in current context.
Please note that these changes:
```
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 <<
31) << 31))
```
... were generated but `autoreconf -iv`. I was not sure what to do
about them. Eventually I decided to keep them. Still these changes could
be safely discarded.
--
Best regards,
Aleksander Alekseev
http://eax.me/