There's also HAVE_TZSET (my bad for sending three emails in a row like this!) On Sat, Nov 23, 2019 at 1:37 AM Andras Farkas <deepbluemistake@gmail.com> wrote:
I noticed something in the NEWS file and in the code after sending this email. I see that in tzcode, along with USG_COMPAT for the XSI-required (optional in POSIX) daylight and timezone, there is HAVE_TZNAME for tzname, which is required by POSIX (and hence also in POSIX+XSI) Thus, the macros already exist for this separation of standards and optional/required stuff.
On Sat, Nov 23, 2019 at 1:27 AM Andras Farkas <deepbluemistake@gmail.com> wrote:
On Fri, Nov 22, 2019 at 9:30 PM Paul Eggert <eggert@cs.ucla.edu> wrote:
What happens if you compile with -DHAVE_POSIX_DECLS=0? Arguably it should be set that way if FreeBSD does not declare the POSIX-required 'daylight' and 'timezone'. With CFLAGS set to -DHAVE_POSIX_DECLS=0 alone, things compile and date runs A-OK. With CFLAGS set to '-DHAVE_POSIX_DECLS=0 -DUSG_COMPAT=1' the compilation fails, albeit in a different way from with -DUSG_COMPAT=1 alone. Should I send both sorts of failures as text files? I see now that POSIX marks 'daylight' and 'timezone' with "XSI", meaning it's optional and present only if the X/Open Systems Interfaces option is supported, so perhaps tzcode should have a different macro for identifiers that are XSI rather than core POSIX. Correct. The standard is separated into core POSIX, and POSIX+XSI (known combined as SUS, UNIX, X/Open, and a bunch of other names) The read-only (or intended to be read-only in your C program, and set by the implementation, i.e. the OS) C macros are: _POSIX_VERSION _POSIX2_VERSION _XOPEN_VERSION The macros intended to be set within a C program's source are: _POSIX_C_SOURCE _XOPEN_SOURCE In all these cases, if a XOPEN macro is set to something, you can already assume a POSIX value too, since POSIX is a subset of XOPEN, and XOPEN a superset of POSIX. Hence, daylight and timezone might be considered XSI-required rather than POSIX-required, when using those words specifically. A quick grep shows tzcode does already uses _POSIX_VERSION and _XOPEN_VERSION (I wonder if USG_COMPAT could be replaced entirely by POSIX and XOPEN macros, but I'll have to look more deeply into that tonight before saying what I think about that)
As a historical note, I think more XSI extensions to POSIX are SystemV-biased than BSD-biased, with a lot of them coming from the SVID. (though there are a couple BSD-biased XSI extensions, too) That's just a note and not a judgment or anything. uwu