=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 =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 # 5.10 # # .0 | .1 | .2 # .0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 # .0 # GNU/Linux (x86)# x | x | req # x | x | x | x | x | | x | x | x # x # GNU/Linux (amd64)# | | # | | | | | x | | | # # GNU/Linux (alpha)# | x | # | | | | | | | | # # FreeBSD (x86) # | x | x # | | | | | | | | x # x # NetBSD (alpha) # | | # | | | | | | | | # x # OpenBSD (x86) # | | # x | | | | | | | | # # AIX (PPC) # | | # | x | x | | | | | x | x # # Darwin (PPC) # x | | # | | | | | | | | # # HP/UX (IA64) # | | # HPUX | | | HPUX | | | | | # # Irix # | | # | | | | | | | | x # # Reliant (Mips) # Nest | Nest | # | | | | | | | | # # Solaris (Sparc)# x | req | # x | x | x | x | x | x | x | x | x # x # Solaris (64bit)# | | # | x | | | | | | | x # # Solaris (x86) # | x | # | x | | | | | | | x # # BS2000 (S/390) # | x | # | x | | | | | | | # # z/OS USS (S/390)# | | # | | | | | | | | zOS # # Cygwin (x86) # | | # | | | | | | | Win | x # x # MinGW MSYS # | Win | # | | | | | | | | # # Windows # Win | Win | # x | x | x | x | x | | x | x | x # x # =for html
=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 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 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, 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 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 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 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)