=head1 NAME

makepp_compatibility -- Compatibility list for makepp

=for vc $Id: makepp_compatibility.pod,v 1.12 2006/12/03 23:04:54 pfeiffer Exp $

=head1 DESCRIPTION

=head2 Perl Version vs. System

The many Perl versions available and still installed on many machines come
with various subtle bugs.  We have tried to work around most of them, but a
few remain.  We have a test suite of around 75 tests, all of which usually
pass.  On some platforms lacking some features, notably Cygwin, a few tests
are explicitly skipped.  This table shows with what version this has been
tested where, and whether it was successful.

=for html
<style type="text/css">
.good { white-space: nowrap; font-family: sans-serif; background-image: url(pre.png); background-repeat: repeat-y }
.soso { white-space: nowrap; font-family: sans-serif; background-color: #c0d0ff }
.bad  { white-space: nowrap; font-family: sans-serif; background-color: #ff4000 }
</style>
<ul>
<li>successful: <b class="good">&nbsp;x&nbsp;</b></li>
<li>mostly successful with footnote: <b class="soso">&nbsp;x<sup>*)</sup></b></li>
<!--li>failed: <b class="bad">&nbsp;<i>/</i>&nbsp;</b></li-->
</ul>
<table border="1" cellspacing="3" cellpadding="3">

=for comment
The following table, where each table row must be separated by an empty line,
has the structure " OS#x|x|x#x|x|...#".  Here 'x' means success, '/' means
failure, empty means not tested, and anything else is a footnote link to the
list below.  The first two lines are special, based on the OS field being
empty.  This is converted to html by install.pl and readable as is in other
formats.

		#||	5.6		#||||||||			5.8					#

		# .0	| .1	| .2	# .0	| .1	| .2	| .3	| .4	| .5	| .6	| .7	| .8	#

 GNU/Linux (x86)# x	| x	| x	# x	| x	| x	| x	| x	|	| x	| x	| x	#

 GNU/Linux (amd64)#	|	|	#	|	|	|	|	| x	|	|	|	#

 GNU/Linux (alpha)#	| x	|	#	|	|	|	|	|	|	|	|	#

 FreeBSD (x86)	#	| x	|	#	|	|	|	|	|	|	|	|	#

 OpenBSD (x86)	#	|	|	# x	|	|	|	|	|	|	|	|	#


 Solaris (Sparc)# x	| Sun	|	# x	| x	| x	| x	| x	| x	| x	| x	| x	#

 Solaris (64bit)#	|	|	#	| x	|	|	|	|	|	|	| x	#

 Solaris (x86)	#	| x	|	#	| x	|	|	|	|	|	|	| x	#

 AIX (PPC)	#	|	|	# x	|	|	|	|	|	|	| x	| x	#

 HP/UX (IA64)	#	|	|	# HPUX	|	|	| HPUX	|	|	|	|	|	#

 Darwin (PPC)	# x	|	|	#	|	|	|	|	|	|	|	|	#

 Reliant (Mips)	# Nest	| Nest	|	#	|	|	|	|	|	|	|	|	#


 BS2000 (S/390)	#	| x	|	#	| x	|	|	|	|	|	|	|	#


 Cygwin (x86)	#	|	|	#	|	|	|	|	| Win	| Win	|	|	#

 MinGW Msys	#	| Win	|	#	|	|	|	|	|	|	|	|	#

 Windows	#	| Win	|	#	|	|	|	|	|	| Win	|	|	#

=for html </table>

=over

=item Sun

On one machine, Perl 5.6.1 systematically swallows two warnings that occur
within a Perl rule action.  On another Sun machine Perl 5.6.1 passes this
test.

=item HPUX

Perl at least up to V5.8.8 has a 64bitall bug on HP/UX that hurts makepp
badly.  Therefore the test suite, if it recognized that its running on a 64
bit Perl, will rewrite several sources so as to have a workaround for this
problem.

=item Win

There are 3 different Perl environments on Windows, which normally extend one
another when installed in parallel.  Here they have been tested with a minimal
PATH, so as to separate them completely: Cygwin fairly closely emulates
GNU/Linux and gives the best results.  It cannot do B<recursive> makes (but
who would want them, since they are known to be a broken paradigm) and
B<parallel> builds.  For unexplored reasons B<makeppclean> is broken.

MinGW stays close to Windows, giving it only a Unixy look and feel.  It has a
clever workaround for lack of symbolic and normal links, namely copying
instead (C<&ln> has stolen this idea).  Alas this is not good enough for the
B<repository> mechanism, so that isn't available, in addition to the Cygwin
deficiencies.

Last there is ActiveState Perl on native Windows.  This essentially works, but
almost a third of the unskipped tests fail.  Probably not because of makepp
problems, but because the tests were historically written with Unix in mind.
On Windows most customary Unix commands are missing, and the "shell" is
extremely primitive.  A maximal use of makepp's builtin commands and embedded
Perl can increase makefile portability.  Any analysis, hints and patches by
Windows specialists are welcome!

=item Nest

Some old compilers do not like nested comments.  Since
F<additional_tests/2006_03_23_c_comments.test> looks at all kinds of
constellations, and verifies it's conclusions with the compiler, this test can
fail if you do not use gcc.

=back

=head2 File Systems

Various special file systems have unusual properties, giving makepp a hard
time when working on them:

=over

=item NFS

NFS may reorder file operations at its discretion, leading to unexpected
relationships between time stamps.  This is relevant for the build info meta
files, which makepp stores alongside each file.  Especially in build caches,
with their concurrent access, some workaround handling was necessary, but it
seems to work fine.

=item Windows CIFS on Gnu/Linux

A few special characters are not allowed in filenames.  Links are emulated by
copying while symbolic linking fails.  Apparently write operations come back
before they are visible on disk, which confuses makepp about the success of
the commands it executes.  Several tests fail due to this.  On the bright
side, timestamps have a precision of 100 nanoseconds (though the observed
obtainable differences are only about a centisecond).  This is much better
than Unix'es customary seconds -- alas perl's C<stat> function has no access
to this very welcome precision.

=item Windows Server Share on Cygwin

The same CIFS disk that was works so badly on Linux, passes all tests on
Cygwin.  Possibly there are options that might improve something.

=item Unix SMBFS on Gnu/Linux

Linking and symbolic linking fails.  No other tests fail.  I have no access to
a more realistic Windows SMB server, where the situation might be different.

=item VFAT on Gnu/Linux

A few special characters are not allowed in filenames.  Linking and symbolic
linking fails.  The file permission mask and owner are mount options, while
the time stamps are not settable.  Only a handful of tests which attempt to
change these things fail.

=back

=head1 AUTHOR

Daniel Pfeiffer (occitan@esperanto.org)
