From ea390af213669bbc91ac1c0ddccea2f2ce610b43 Mon Sep 17 00:00:00 2001 From: Stefan Eissing Date: Mon, 14 Sep 2015 13:29:35 +0000 Subject: [PATCH] httpd compiles warning free on gcc and every new warning will be treated as an error, standard c-89 is enforced git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1702948 13f79535-47bb-0310-9956-ffa450edef68 --- acinclude.m4 | 2 +- configure.in | 24 ++++++++++++++++++++++-- include/http_config.h | 19 ++++++++++++++++++- include/scoreboard.h | 2 +- modules/ssl/ssl_engine_kernel.c | 4 ++-- server/util_expr_eval.c | 4 ++-- 6 files changed, 46 insertions(+), 9 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index f8c07aacfa..f4d34e044c 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -811,7 +811,7 @@ AC_DEFUN([APACHE_ADD_GCC_CFLAG], [ AC_CACHE_CHECK([whether gcc accepts $1], ap_gcc_ckvar, [ save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $1" - AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo() { return 0; }])], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [ap_gcc_ckvar=yes], [ap_gcc_ckvar=no]) CFLAGS="$save_CFLAGS" ]) diff --git a/configure.in b/configure.in index 12dcc09e8c..a75f692e1b 100644 --- a/configure.in +++ b/configure.in @@ -625,11 +625,12 @@ AC_ARG_ENABLE(maintainer-mode,APACHE_HELP_STRING(--enable-maintainer-mode,Turn o APR_ADDTO(CPPFLAGS, -DAP_DEBUG) if test "$GCC" = "yes"; then APR_ADDTO(CFLAGS,[-Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Wpointer-arith]) + APACHE_ADD_GCC_CFLAG([-std=c89]) + APACHE_ADD_GCC_CFLAG([-Werror]) APACHE_ADD_GCC_CFLAG([-Wdeclaration-after-statement]) - APACHE_ADD_GCC_CFLAG([-Werror=declaration-after-statement]) APACHE_ADD_GCC_CFLAG([-Wformat]) APACHE_ADD_GCC_CFLAG([-Wformat-security]) - APACHE_ADD_GCC_CFLAG([-Werror=format-security]) + APACHE_ADD_GCC_CFLAG([-Wunused]) elif test "$AIX_XLC" = "yes"; then APR_ADDTO(CFLAGS,-qfullpath -qinitauto=FE -qcheck=all -qinfo=pro) fi @@ -893,6 +894,13 @@ AC_MSG_NOTICE([]) AC_MSG_NOTICE([Restore user-defined environment settings...]) AC_MSG_NOTICE([]) +APACHE_CONF_SEL_CC=${CC} +APACHE_CONF_SEL_CFLAGS=${CFLAGS} +APACHE_CONF_SEL_LDFLAGS=${LDFLAGS} +APACHE_CONF_SEL_LIBS=${LIBS} +APACHE_CONF_SEL_CPPFLAGS=${CPPFLAGS} +APACHE_CONF_SEL_CPP=${CPP} + APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_) APR_RESTORE_THE_ENVIRONMENT(CFLAGS, EXTRA_) APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, EXTRA_) @@ -973,3 +981,15 @@ test -d docs/conf||$mkdir_p docs/conf AC_OUTPUT($APACHE_OUTPUT_FILES docs/conf/httpd.conf docs/conf/extra/httpd-autoindex.conf docs/conf/extra/httpd-dav.conf docs/conf/extra/httpd-default.conf docs/conf/extra/httpd-info.conf docs/conf/extra/httpd-languages.conf docs/conf/extra/httpd-manual.conf docs/conf/extra/httpd-mpm.conf docs/conf/extra/httpd-multilang-errordoc.conf docs/conf/extra/httpd-policy.conf docs/conf/extra/httpd-ssl.conf docs/conf/extra/httpd-userdir.conf docs/conf/extra/httpd-vhosts.conf docs/conf/extra/proxy-html.conf include/ap_config_layout.h support/apxs support/apachectl support/dbmmanage support/envvars-std support/log_server_status support/logresolve.pl support/phf_abuse_log.cgi support/split-logfile build/rules.mk build/pkg/pkginfo build/config_vars.sh,[true],[ APACHE_GEN_MAKEFILES ]) + +AC_MSG_NOTICE([summary of build options: + + Server Version: ${HTTPD_VERSION} + Install prefix: ${prefix} + C compiler: ${APACHE_CONF_SEL_CC} + CFLAGS: ${APACHE_CONF_SEL_CFLAGS} + LDFLAGS: ${APACHE_CONF_SEL_LDFLAGS} + LIBS: ${APACHE_CONF_SEL_LIBS} + CPPFLAGS: ${APACHE_CONF_SEL_CPPFLAGS} + C preprocessor: ${APACHE_CONF_SEL_CPP} +]) diff --git a/include/http_config.h b/include/http_config.h index ad5ba2f9da..96d012fa4e 100644 --- a/include/http_config.h +++ b/include/http_config.h @@ -412,6 +412,23 @@ struct module_struct { void (*register_hooks) (apr_pool_t *p); }; +/** + * The AP_MAYBE_USELESS macro is used vor variable declarations that + * might potentially exhibit "unused var" warnings on some compilers if + * left untreated. + * Since static intializers are not part of the C language (C89), making + * (void) usage is not possible. However many compiler have proprietary + * mechanism to suppress those warnings. + */ +#ifdef AP_MAYBE_USELESS +#elif defined(__GNUC__) +# define AP_MAYBE_USELESS(x) x __attribute__((unused)) +#elif defined(__LCLINT__) +# define AP_MAYBE_USELESS(x) /*@unused@*/ x +#else +# define AP_MAYBE_USELESS(x) x +#endif + /** * The APLOG_USE_MODULE macro is used choose which module a file belongs to. * This is necessary to allow per-module loglevel configuration. @@ -427,7 +444,7 @@ struct module_struct { */ #define APLOG_USE_MODULE(foo) \ extern module AP_MODULE_DECLARE_DATA foo##_module; \ - static int * const aplog_module_index = &(foo##_module.module_index) + AP_MAYBE_USELESS(static int * const aplog_module_index) = &(foo##_module.module_index) /** * AP_DECLARE_MODULE is a convenience macro that combines a call of diff --git a/include/scoreboard.h b/include/scoreboard.h index c07b28cb89..bc820b5400 100644 --- a/include/scoreboard.h +++ b/include/scoreboard.h @@ -26,7 +26,7 @@ extern "C" { #endif -#ifdef HAVE_SYS_TIMES_H +#ifdef APR_HAVE_SYS_TIME_H #include #include #endif diff --git a/modules/ssl/ssl_engine_kernel.c b/modules/ssl/ssl_engine_kernel.c index 1875dc9bd0..ebd9bdfdc6 100644 --- a/modules/ssl/ssl_engine_kernel.c +++ b/modules/ssl/ssl_engine_kernel.c @@ -2184,7 +2184,7 @@ int ssl_callback_alpn_select(SSL *ssl, } if (inlen == 0) { - // someone tries to trick us? + /* someone tries to trick us? */ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02837) "ALPN client protocol list empty"); return SSL_TLSEXT_ERR_ALERT_FATAL; @@ -2194,7 +2194,7 @@ int ssl_callback_alpn_select(SSL *ssl, for (i = 0; i < inlen; /**/) { unsigned int plen = in[i++]; if (plen + i > inlen) { - // someone tries to trick us? + /* someone tries to trick us? */ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02838) "ALPN protocol identifier too long"); return SSL_TLSEXT_ERR_ALERT_FATAL; diff --git a/server/util_expr_eval.c b/server/util_expr_eval.c index b37319e9b9..2d10ab5c68 100644 --- a/server/util_expr_eval.c +++ b/server/util_expr_eval.c @@ -98,7 +98,7 @@ static const char *ap_expr_eval_word(ap_expr_eval_ctx_t *ctx, case op_String: result = node->node_arg1; break; - case op_Var: + result = ap_expr_eval_var(ctx, (ap_expr_var_func_t *)node->node_arg1, node->node_arg2); break; @@ -1249,7 +1249,7 @@ static const char *filemod_func(ap_expr_eval_ctx_t *ctx, const void *data, apr_finfo_t sb; if (apr_stat(&sb, arg, APR_FINFO_MIN, ctx->p) == APR_SUCCESS && sb.filetype == APR_REG && sb.mtime > 0) - return apr_psprintf(ctx->p, "%" APR_OFF_T_FMT, sb.mtime); + return apr_psprintf(ctx->p, "%" APR_OFF_T_FMT, (apr_off_t)sb.mtime); else return "0"; } -- 2.40.0