		       GlusterFS Porting Guide
                       -----------------------

* General setup

The configure script will detect the target platform for the build.
All platform-specific CFLAGS, macro definitions should be done
in configure.ac

Platform-specific code can be written like this:

#ifdef GF_DARWIN_HOST_OS
  /* some code specific to Darwin */
#endif

* Coding guidelines

In general, avoid glibc extensions. For example, nested functions don't work
on Mac OS X. It is best to stick to C99.

When using library calls and system calls, pay attention to the
portability notes. As far as possible stick to POSIX-specified behavior.
Do not use anything expressly permitted by the specification. For example,
some fields in structures may be present only on certain platforms. Avoid
use of such things.

Do not pass values of constants such as F_*, O_*, errno values, etc. across
platforms.

Please refer compat-errno.h for more details about errno handling inside
glusterfs for cross platform.

* Specific issues

- The argp library is available only on Linux through glibc, but for other
  platforms glusterfs has already included argp-standalone library which will
  statically linked during the glusterfs build.

- Extended attribute calls (setxattr, listxattr, etc.) have differing prototypes
  on different platforms. See compat.h for macro definitions to resolve this, also
  read out the specific extended attribute documentation for your platforms.

------------------------------------------
Last revised: Thu Feb 28 13:58:07 IST 2008
------------------------------------------
