Now that Minix is free software, it's higher priority for autoconf to
support it more accurately. Minix is small so this should be easy to
do. I just downloaded Minix 2.0 (the free version) and discovered the
following:
* The macro _POSIX_1_SOURCE is no longer used. So we don't need to
worry about it any more, except perhaps as part of the obsolescent
AC_MINIX macro (and if we retain it, we should document it as being
irrelevant for Minix 2.0 and later).
* Defining _MINIX causes <stdio.h> to declare popen and pclose.
So if the suggestion in my previous message is used, _MINIX
will be defined properly.
* Defining _POSIX_SOURCE causes the following changes.
<limits.h> defines symbols like _POSIX_ARG_MAX and ARG_MAX.
<setjmp.h> defines sigjmp_buf, siglongjmp, and sigsetjmp.
<signal.h> defines sigset_t, sighandler_t, struct sigaction, kill,
and related macros and functions.
<stdio.h> defines fileno, fdopen, L_ctermid, and L_cuserid.
<time.h> defines tzset and the obsolecent name CLK_TCK.
These changes are enabled only by defining _POSIX_SOURCE; they
aren't enabled by defining _MINIX.
The last bullet is the problematic one.
It looks like it would be better after all to follow my initial
suggestion and define _POSIX_SOURCE if <stdio.h> does not define
fileno. This would be done by trying to compile the fileno test
program with -D_POSIX_C_SOURCE=2147483647 (the modern way to do it),
and if that doesn't help to try again with -D_POSIX_SOURCE (the
old-fashioned way, which Minix 2.0 uses).
Sorry that my suggestions waffled about _POSIX_SOURCE, but it is a
problematic area. You can't define _POSIX_SOURCE or _POSIX_C_SOURCE
unconditionally, as that causes possibly-undesirable changes on
Solaris and many other platforms. On the other hand, if you don't
define thes macros up-front on hosts like Minix, you either need hacks
like AC_MINIX and AC_ISC_POSIX, or you need to have a separate
autoconf macro for fileno, tzset, etc.; and both these alternatives
are more unpleasant than simply defining one of those feature-test
macros if <stdio.h> doesn't define fileno.