X-Git-Url: https://git.openafs.org/?p=openafs.git;a=blobdiff_plain;f=CODING;h=b1e12c764c5fa03da16d41d580e614a826103510;hp=9b349131d4840d1b1c25b867a0b42eff0311bd3e;hb=7d4f3a4710fb8c9fbde4294c2458ecf32658300b;hpb=eff41a2e53acd2622d89003647ba711a8b5bc75c diff --git a/CODING b/CODING index 9b34913..b1e12c7 100644 --- a/CODING +++ b/CODING @@ -188,3 +188,80 @@ change. One workflow to do this: 2) In your editor, delete the existing Change-ID line. Save and quit. 3) Run "git commit --amend", saving and quitting again. Git will run the commit hook and generate a new Change-ID for Gerrit. + +Warnings +======== + +OpenAFS Warning detection +------------------------- + +There's been a concerted effort over the last few years, by many developers, +to reduce the number of warnings in the OpenAFS tree. In an attempt to +prevent warnings from creeping back in, we now have the ability to break the +build when new warnings appear. + +This is only available for systems with gcc 4.2 or later, and is disabled +unless the --enable-checking option is supplied to configure. Because we +can't remove all of the warnings, we permit file by file (and warning by +warning) disabling of specific warnings. The --enable-checking=all prevents +this, and errors for any file containing a warning. + +Disabling warnings +------------------ + +If warnings are unavoidable in a particular part of the build, they may be +disabled in an number of ways. + +You can disable a single warning type in a particular file by using GCC +pragmas. If a warning can be disabled with a pragma, then the switch to use +will be listed in the error message you receive from the compiler. Pragmas +should be wrapped in IGNORE_SOME_GCC_WARNINGS, so that they aren't used +with non-gcc compilers, and can be disabled if desired. For example: + #ifdef IGNORE_SOME_GCC_WARNINGS + # pragma GCC diagnostic warning "-Wold-style-definition" + #endif + +It would appear that when built with -Werror, the llvm clang compiler will +still upgrade warnings that are suppresed in this way to errors. In this case, +the fix is to mark that warning as ignored, but only for clang. For example: + #ifdef IGNORE_SOME_GCC_WARNINGS + # ifdef __clang__ + # pragma GCC diagnostic ignored "-Wdeprecated-declarations" + # else + # pragma GCC diagnostic warning "-Wdeprecated-declarations" + # endif + #endif + +If a pragma isn't available for your particular warning, you will need to +disable all warnings for the file in question. You can do this by supplying +the autoconf macro @CFLAGS_NOERROR@ in the build options for the file. For +example: + lex.yy.o : lex.yy.c y.tab.c + ${CC} -c ${CFLAGS} @CFLAGS_NOERROR@ lex.yy.c + +If you add a new warning inhibition, please also add it to the list below. + +Inhibited warnings +------------------ + +afs/afs_syscall.c : old-style + : strict-proto + : all (ukernel) : syscall pointer issues +afsd/afsd_kernel.c : deprecated : daemon() marked as deprecated on Darwin +auth/ktc.c : all (ukernel) : call_syscall doesn't have a prototype +bozo/bosserver.c : deprecated : daemon() marked as deprecated on Darwin +bucoord/ubik_db_if.c : strict-proto : Ubik_Call +bucoord/commands.c : all : Ubik_Call + : signed vs unsigned for dates +butc/tcudbprocs.c : all : ubik_Call +external/heimdal/hcrypto/validate.c: all: statement with empty body +kauth/admin_tools.c : all : signed vs unsigned for dates +kauth/authclient.c : strict-proto : ubik_Call nonsense +libadmin/kas/afs_kasAdmin.c: all : Ubik_Call nonsense +libadmin/samples/rxstat_query_peer.c : all : util_RPCStatsStateGet types +libadmin/samples/rxstat_query_process.c : all : util_RPCStatsStateGet types +libadmin/test/client.c : all : util_RPCStatsStateGet types +rxkad/ticket5.c : all : v5gen.c has set-but-unused variables +ubik/ubikclient.c : strict-protos : ubik_Call +volser/vol-dump.c : format : afs_sfsize_t +