openafs/README.WARNINGS
Simon Wilkinson f63047a3d1 Fix warnings-as-errors for clang
It seems like some versions of clang have a problem with using
pragmas to stop particular warnings being converted to errors with
-Werror. These compilers require that the warning be ignored completely
in order to suppress it.

Make the necessary changes to afsd and bozo, and update README.WARNINGS
to note the problem.

Change-Id: I66038130695d2ad27c289f29bcd8f6f2eddf1ded
Reviewed-on: http://gerrit.openafs.org/9135
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
2013-02-20 04:15:46 -08:00

74 lines
3.2 KiB
Plaintext

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