mirror of https://github.com/mabam/CAP.git
155 lines
6.2 KiB
Plaintext
155 lines
6.2 KiB
Plaintext
The following notes point out some of the items to watch out for when
|
|
porting CAP to different variants of BSD and other machines. Most of
|
|
these are items that have been "hit" in the past.
|
|
|
|
Index: GENERAL COMPATIBILITY
|
|
SYSTEM V
|
|
LIBRARIES
|
|
APPLICATIONS
|
|
CONFIGURATION
|
|
|
|
*********************
|
|
GENERAL COMPATIBILITY
|
|
*********************
|
|
|
|
sysvcompat.h in netat/sysvcompat.h attempts to allow the various
|
|
modules to mask incompatibilities between System V machines and bsd
|
|
machines. Except for some very basic translations (e.g. strchr vs.
|
|
index), all the mappings are done under a machine dependency (e.g.
|
|
ifdef hpux). Many different parts of CAP make use of this file,
|
|
though the largest client by far is Aufs. Most of the samples and
|
|
applications have not been tested or modified for System V
|
|
compatibility. NOTE: Aufs does not attempt to deal with the file name
|
|
length restrictions in System V: file names are simply truncated.
|
|
|
|
The machines in sysvcompat.h at present are: hpux and aux. Note: some
|
|
of the defintions for hpux are for older versions of hpux. This
|
|
points to a need to redo this file at a future point.
|
|
|
|
compat.h in netat/compat.h attempts to masks differences between
|
|
various bsd machine. To be more specific, it defines an additional
|
|
set of "macros", etc. that aren't found on all bsd based machines such
|
|
as sigmask, etc.
|
|
|
|
********
|
|
SYSTEM V
|
|
********
|
|
|
|
You can use conf.sysv.sh to generate a set of "ifdefs" suitable for
|
|
inclusion in sysvcompat.h for a particular machine. conf.sysv.sh
|
|
takes as an argument, the output file. The default is sysv.cpp.
|
|
|
|
Allowable ifdefs in sysvcompat.h are:
|
|
|
|
B2S_STRING_MAPON - Set if no strings.h or rindex or index. Must have
|
|
string.h and strrchr, strchr in this case.
|
|
|
|
B2S_BSTRING_MAPON - Set if no bcopy, bcmp, bzero. Then you must have
|
|
memcpy, memcmp, and memset.
|
|
|
|
USECHOWN - set you may chown a file to another
|
|
|
|
NEEDFCNTLDOTH - set if you need to include fcntl to get O_READONLY, etc.
|
|
|
|
USETIMES - use times to get process usage times instead of the
|
|
preferred bsd getrusage. Also assume that wait3 does not return usage
|
|
information.
|
|
|
|
NOWAIT3 - set if no wait3 in system - use wait instead which isn't as
|
|
flexible.
|
|
|
|
NODUP2 - No DUP2 call. Emulate with "close/dup"
|
|
|
|
NOLSTAT - no lstat for symbolic links. Use stat or don't use at all.
|
|
|
|
USERAND - don't use the bsd random call, use srand, rand instead
|
|
|
|
USEGETCWD - use the system 5 getcwd call to get the current working
|
|
directory instead of the bsd getwd call.
|
|
|
|
NOUTIMES - use utime to set file times instead of bsd utimes
|
|
|
|
NOPGRP - set if either setpgrp or killpg is missing. If one is, both
|
|
probably are, but it might be like hpux where one is in libc and one
|
|
in libBSD (in which case you need not define this, but modify
|
|
libspecial to have libBSD (SLIB in makefiles))
|
|
|
|
NOVFORK - system doesn't have vfork - what a shame. Use fork instead.
|
|
|
|
*********
|
|
LIBRARIES
|
|
*********
|
|
|
|
CAP LIBRARIES
|
|
-------------
|
|
Most of the machine dependencies are encoded into the modules and deal
|
|
with issues of structure byte alignment, incompatibilities with BSD
|
|
Unix, etc. Most of these are dealt with by doing "ifdef machine" and
|
|
triggering internal defines. Following is a module by module
|
|
description of some of the more important of these.
|
|
|
|
abkip.c has four major "defines". NORECVMSG and NOSENDMSG are set by
|
|
Configure and say whether sendmsg and recvmsg exist in the system
|
|
(they do scatter/gather io). NEEDMSGHDR should also be set if
|
|
<sys/socket.h> doesn't define it (as in old versions of aux).
|
|
NOFFS means that the target machine does not have the "ffs" subroutine
|
|
defined (find first set bit) and that we must use our own copy. hpux
|
|
and aux use NOFFS.
|
|
|
|
abddp.c has one major "define": INLINECHKSUM. INLINECHKSUM attempts
|
|
to speed up the ddp checksumming by defining the code in-line. This
|
|
been optimized for a vax and only tested on a vax. It is only set for
|
|
a vax :-). Note: it is possible to turn off ddp checksumming by
|
|
compiling abddp.c with "DONT_DOCHKSUM". This is NOT recommended. If
|
|
you have an application that requires turning off ddp checksumming,
|
|
you can call "checksum_error" with FALSE to ignore checksum errors.
|
|
|
|
abnbp.h in netat has an ifdef important for byteswapped machines.
|
|
Specifically, there is a bitfield definition and the order of the
|
|
items may depend upon the byte ordering of the target. You may need
|
|
to add an ifdef for your machine.
|
|
|
|
AFP Libraries
|
|
-------------
|
|
The AFP libraries contain three main components at the present time:
|
|
(1) a set of packing and unpacking routines that attempts to hide byte
|
|
swapping and struct packing differences between machines, (2) the des
|
|
subroutines, and (3) the locking routines. There are all routines
|
|
that might be used by either the client or server AFP software.
|
|
|
|
o Packing and unpacking
|
|
|
|
afpcmd.c is a driver for the packing and unpacking routines that
|
|
attempts to mask byte ordering and structure alignments. Currently
|
|
there are two defines in this module: BYTESWAPPED and
|
|
LOOSE_BYTESWAPPED. Like the defines in the libraries, these are also
|
|
hidden. The first simply says the machine is byte swapped like a vax.
|
|
The second allows cheating in dealing with byte swapping and should
|
|
only be defined if you are byte swapping and you can be sure that a
|
|
pointer to a "byte" will be usuable as pointer to a word or double
|
|
word. Currently, both defines are set for a vax. Sequents (nsxxxxx
|
|
and 386 based machines) and ns16000/ns32000 machines have BYTESWAPPED
|
|
on. pyramids, ibm032 (ibm rt pc), and 680xx based machines (sun,
|
|
aux/mac-ii, hpux/hp-9000 series) do not need either define. Note: you
|
|
should be able to turn on LOOSE_BYTESWAPPED for the nsxxxx processors,
|
|
but it is not done by default.
|
|
|
|
o locking
|
|
|
|
The two defines for locking are "NOLOCKF" and "NOFLOCK" that should be
|
|
set appropriately for you machine. Most BSD systems should have flock
|
|
available. For the implications of what happens when you do or don't
|
|
have these, see the documentation on the various client and server
|
|
(Aufs) programs.
|
|
|
|
|
|
************
|
|
APPLICATIONS
|
|
************
|
|
|
|
Aufs has a seperate document on porting/installation in
|
|
applications/aufs/INSTALLATION. However, it is worth mentioning that
|
|
most of the Aufs porting requirements are covered through the use of
|
|
sysvcompat.h and compat.h as mentioned in "GENERAL COMPATIBILITY".
|
|
|