=head1 NAME
makepp_compatibility -- Compatibility list
for
makepp
=
for
vc
$Id
: makepp_compatibility.pod,v 1.17 2008/08/09 09:34:03 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. We would like to hear of your
results on other platforms too!
=
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:
.bad { white-space: nowrap; font-family: sans-serif; background-color:
</style>
<ul>
<li>successful: <b class=
"good"
>
 
;x
 
;</b></li>
<li>mostly successful
with
footnote: <b class=
"soso"
>
 
;x<sup>*)</sup></b></li>
<!--li>failed: <b class=
"bad"
>
 
;<i>/</i>
 
;</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.
GNU/Linux (x86)
GNU/Linux (amd64)
GNU/Linux (alpha)
FreeBSD (x86)
NetBSD (alpha)
OpenBSD (x86)
AIX (PPC)
Darwin (PPC)
HP/UX (IA64)
Irix
Reliant (Mips)
Solaris (Sparc)
Solaris (64bit)
Solaris (x86)
BS2000 (S/390)
z/OS USS (S/390)
Cygwin (x86)
MinGW MSYS
Windows
=
for
html </table>
=over
=item HPUX
Perl at least up to V5.8.8
has
a 64bitall bug on HP/UX that hurts makepp
badly. If it recognized that its running on a 64 bit Perl, it will rewrite
several sources so as to have a workaround
for
this problem.
=item req
Some instances of 5.6 at least on Linux and Solaris will
dump
in a Perl
C<
require
> statement. Strangely this only happens in one test, so you are
probably ok using these Perls.
=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:
=over
=item *
Cygwin fairly closely emulates GNU/Linux and gives the best results. Perl
5.8.7
has
a small problem
with
environment vars, making one test fail. In the
long gone past, parallel builds didn
't work, but it hasn'
t be verified which
version of Cygwin or Perl made them usable.
=item *
MinGW stays
close
to Windows, giving it only a Unixy look and feel. It
has
a
clever workaround
for
lack of symbolic 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.
Strangely they are still rebuilding solely 5.6.1 (which fails only in the
makeppgraph test), at least
with
MD5 support. But
with
very few packages
(MSYS) to install, this gives you a nice small Unix-like environment.
=item *
On ActiveState Perl
with
only native 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. While
Windows programs can handle normal slashes as directory separators, this does
not work
for
command names. Those should be written as F<dir$/command>, where
C<$/> is a forward or backward slash, depending on the environment. If you
tell
makepp, via the SHELL variable, where to find a a Unix-like Shell, you
don't have these worries.
It cannot
do
smart recursive makes (but who would want them, since they are
known to be a broken paradigm) and B<parallel> builds. Perl 5.6.0 fails on
quite a few tests, especially
with
$SHELL
, 5.6.1 fails on two tests. It will
rewrite FileInfo.pm so as to have a needed workaround
for
an
lstat
bug.
=back
=item zOS
On z/OS Unix System Services smart recursive make doesn't work. If your
compiler is picky about option order, you may have to
write
your own rules.
(Perl 5.10.0 is not compilable on an Ebcdic
system
and
for
5.8.8 in
miniperlmain.c you may have to remove the silly
"(void)env;"
.)
=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 most older Unix file systems -- 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. One test fails.
=back
=head1 AUTHOR
Daniel Pfeiffer (occitan
@esperanto
.org)