|
23.3.2 Testing system features at application runtime
When pondering how to handle a difficult portability problem or
configurable option, consider whether the problem is better solved by
performing tests at runtime or by providing a configuration file to
customize the application. Keep in mind that the results of tests that
Autoconf can perform will ultimately affect how the program will be
built--and can limit the number of machines that the program can be
moved to without recompiling it. Here is an example where this
consideration had to be made in a real life project:
The pthreads for Win32 project has sought to provide a standards
compliant implementation for the POSIX threads API. It does
so by mapping the POSIX API functions into small functions
which achieve the desired result using the Win32 thread API.
Windows 95, Windows 98 and Windows NT have different levels of support
for a system call primitive that attempts to enter a critical section
without blocking. The TryEnterCriticalSection function is
missing on Windows 95, is an inoperative stub on Windows 98, and works
as expected on Windows NT. If this behavior was to be checked by
`configure' at compile time, then the resultant library would only
work on the variant of Windows that it was compiled for. Because it's
more common to distribute packages for Windows in binary form, this
would be an unfortunate situation. Instead, it is sometimes preferable
to handle this kind of portability problem with a test, performed by
your code at runtime.
|