i think your problems miss the point. an explicit portability layer
is another name for a virtual os interface. breaking things
up on a call-by-call basis creates calls^2 virtual os interfacen.
good luck in testing.
And in the case of things like the APR, it forces you to learn an
entirely new set of interfaces.
the ironic bit about autoconf is that the vast majority of autoconf
garbage
is dedicated to features that don't make any difference. using the
lowest-common denomitor call would work just as well. (and why
not, you have to code this case anyway.)
A case in point is some web-related stuff I'm dealing with at work.
I'll use libxml2 as an example. A grep for HAVE_ at the top level of
that source tree turns up:
HAVE_ANSIDECL_H
HAVE_ARPA_INET_H
HAVE_ARPA_NAMESER_H
HAVE_BEOS_THREADS
HAVE_COMPILER_TLS
HAVE_CTYPE_H
HAVE_DIRENT_H
HAVE_DLFCN_H
HAVE_ERRNO_H
HAVE_FCNTL_H
HAVE_FINITE
HAVE_FLOAT_H
HAVE_FPRINTF
HAVE_FSCANF
HAVE_FTIME
HAVE_GETADDRINFO
HAVE_GETTIMEOFDAY
HAVE_INTTYPES_H
HAVE_ISINF
HAVE_ISNAN
HAVE_LIBHISTORY
HAVE_LIBM
HAVE_LIBPTHREAD
HAVE_LIBREADLINE
HAVE_LIBZ
HAVE_LIMITS_H
HAVE_LOCALTIME
HAVE_MALLOC_H
HAVE_MATH_H
HAVE_MEMORY_H
HAVE_NETDB_H
HAVE_NETINET_IN_H
HAVE_PRINTF
HAVE_PTHREAD_H
HAVE_RESOLV_H
HAVE_SCANF
HAVE_SIGNAL
HAVE_SIGNAL_H
HAVE_SNPRINTF
HAVE_SPRINTF
HAVE_SSCANF
HAVE_STAT
HAVE_STDARG_H
HAVE_STDINT_H
HAVE_STDLIB_H
HAVE_STRDUP
HAVE_STRERROR
HAVE_STRFTIME
HAVE_STRINGS_H
HAVE_STRING_H
HAVE_STRNDUP
HAVE_SYS_MMAN_H
HAVE_SYS_SELECT_H
HAVE_SYS_SOCKET_H
HAVE_SYS_STAT_H
HAVE_SYS_TIMEB_H
HAVE_SYS_TIME_H
HAVE_SYS_TYPES_H
HAVE_TIME_H
HAVE_UNISTD_H
HAVE_VFPRINTF
HAVE_VFSCANF
HAVE_VPRINTF
HAVE_VSCANF
HAVE_VSNPRINTF
HAVE_VSPRINTF
HAVE_VSSCANF
HAVE_WIN32_THREADS
HAVE_ZLIB_H
If you weed out the bits that are already in Posix, you're left with
a few legitimate feature tests (libz, libreadline, getaddrinfo), a
test for the underlying threads implementation, workarounds for some
obsolete variants of time handling (all of which can be accommodated
by Posix), and some fancy printf variants, which the library has to
provide compatibility routines for anyway. And why the configure
script cares about what version of FORTRAN 77 compiler I have simply
escapes me.
It's endemic. The fact that it's not malicious is even worse. The
people coding this stuff just don't know any better: they learn from
what they see already deployed. Critical thinking doesn't exist any
more :-(
Another case in point ... this afternoon one of our product architects
(!) informed us we needed to install a wiki on the production web
blades. Why? Because they needed to serve up some 'nicely formatted'
static web pages to a couple of customers, and all they knew how to
generate was in a wiki syntax format. They didn't know how to turn
that into pretty HTML, so this was the solution. They were stunned
when we proposed a simpler alternative. (Call the documentation folks.)
--lyndon