7.1 Portability Issues
Portability problems can be difficult to characterize since they span
the entire spectrum from a total paradigm shift (such as traditional
Mac OS versus System V Unix) to almost trivial bug fixes (such as a
fix to a bug in the error exit status of a program). Nevertheless,
here are some common portability problems that every
makefile must deal with sooner or later:
- Program names
-
It is quite common for
various platforms to use
different names for the same or similar programs. The most common is
the name of the C or C++ compiler (e.g., cc,
xlc). It is also common for GNU
versions of programs to be installed on a non-GNU
system with the g prefix (e.g.,
gmake, gawk).
- Paths
-
The location of programs and files often varies between platforms. For
instance, on Solaris systems the X directories are stored under
/usr/X while on many other systems the path is
/usr/X11R6. In addition, the distinction between
/bin, /usr/bin,
/sbin, and /usr/sbin is
often rather fuzzy as you move from one system to another.
- Options
-
The command-line
options to programs vary, particularly
when an alternate implementation is used. Furthermore, if a platform
is missing a utility or comes with a broken version, you may need to
replace the utility with another that uses different command-line
options.
- Shell features
-
By default, make executes command scripts
with /bin/sh, but
sh implementations vary widely in their features.
In particular, pre-POSIX shells are missing many features and will
not accept the same syntax as a modern shell.
The Open Group has a very useful white paper on the differences
between the System V shell and the POSIX shell. It can be found at
http://www.unix-systems.org/whitepapers/shdiffs.html.
For those who want more details, the specification of the POSIX
shell's command language can be found at http://www.opengroup.org/onlinepubs/007904975/utilities/xcu_chap02.html.
- Program behavior
-
Portable makefiles must
contend with programs that simply behave
differently. This is very common as different vendors fix or insert
bugs and add features. There are also upgrades to utilities that may
or may not have made it into a vendor's release. For
instance, in 1987 the awk program underwent a
major revision. Nearly 20 years later, some systems still do not
install this upgraded version as the standard awk.
- Operating system
-
Finally, there are the portability problems associated with a
completely different operating system such as Windows versus Unix or
Linux versus VMS.
|