mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 15:00:12 +00:00
8f2df21ffe
pull up prototypes to head
79 lines
2.6 KiB
Plaintext
79 lines
2.6 KiB
Plaintext
Notes on Coding Standards/Requirements for OpenAFS Source
|
|
---------------------------------------------------------
|
|
|
|
Do not use $< in any cross-platform dir as it requires a reasonable
|
|
make that is not available on all systems.
|
|
|
|
Be careful with prototypes/ANSI-C in code that will be compiled for
|
|
kernel source. In general, avoid them until we have figured out
|
|
exactly when/where they can be used safely.
|
|
|
|
Do not have build rules that build multiple targets. Make doesn't seem able
|
|
to handle this, and it interferes with -j builds. (In particular, build the
|
|
rxgen targets individually and not using the flags for building all the files
|
|
in one shot.)
|
|
|
|
Try to test builds using gmake -j # MAKE="gmake -j #", it seems like a good
|
|
way to find missing or order-dependent dependency rules. (Is there a better
|
|
way to do this?)
|
|
|
|
-- Prototyping and Style --
|
|
Prototypes for all source files in a given dir DDD should be placed
|
|
int the file DDD/DDD_prototypes.h. All externally used (either API
|
|
or used by other source files) routines and variables should be
|
|
prototyped in this file.
|
|
|
|
The prototypes should be a full prototype, with argument and return
|
|
types. (Should not generate a warning with gcc -Wstrict-prototypes.)
|
|
|
|
Format of the prototype files should look like:
|
|
|
|
Standard Copyright Notice
|
|
|
|
#ifndef AFS_SRC_DDD_PROTO_H
|
|
#define AFS_SRC_DDD_PROTO_H
|
|
|
|
/* filename.c */
|
|
prototypes
|
|
|
|
/* filename.c */
|
|
prototypes
|
|
|
|
#endif /* AFS_SRC_DDD_PROTO_H */
|
|
|
|
In most of the existing prototypes, the define is DDD_PROTOTYPES_H, which is
|
|
probably ok as well.
|
|
|
|
The declaration of the routines should be done in ANSI style. If at some
|
|
later date, it is determined that prototypes don't work on some platform
|
|
properly, we can use ansi2knr during the compile.
|
|
|
|
rettype routine(argtype arg)
|
|
{
|
|
|
|
}
|
|
|
|
All routines should have a return type specified, void if nothing returned,
|
|
and should have (void) if no arguments are taken.
|
|
|
|
Header files should not contain macros or other definitions unless they
|
|
are used across multiple source files.
|
|
|
|
All routines should be declared static if they are not used outside that
|
|
source file.
|
|
|
|
Compiles on gcc-using machines should strive to handle using
|
|
-Wstrict-prototypes -Werror. (this may take a while)
|
|
|
|
Routines shall be defined in source prior to use if possible, and
|
|
prototyped in block at top of file if static.
|
|
|
|
If you make a routine or variable static, be sure and remove it from
|
|
the AIX .exp files.
|
|
|
|
Suggested compiler flags:
|
|
gcc: -Wall -Wstrict-prototypes
|
|
Solaris Workshop CC: -fd -v
|
|
(You might not want the -fd, it isn't really useful, just complains about the
|
|
K&R style functions, but -v gives useful info.)
|