URL: https://github.com/SSSD/sssd/pull/50
Author: fidencio
 Title: #50: [RFC] Use GNULIB's compiler warning code
Action: synchronized

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/50/head:pr50
git checkout pr50
From 185ff593a0e1010ad67914e5573de4e37cde45a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Wed, 12 Oct 2016 15:00:04 +0200
Subject: [PATCH 1/9] RESOLV: Fix "-Werror=null-dereference" caught by GCC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
---
 src/resolv/async_resolv.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/resolv/async_resolv.c b/src/resolv/async_resolv.c
index e859556..e7a4217 100644
--- a/src/resolv/async_resolv.c
+++ b/src/resolv/async_resolv.c
@@ -2247,7 +2247,9 @@ static int reply_weight_rearrange(int len,
             new_end = r;
         }
     }
-    new_end->next = NULL;
+    if (new_end) {
+        new_end->next = NULL;
+    }
 
     /* return the rearranged list */
     *start = new_start;

From 689f54fd41eb4ec256284d29074fa01d245b4bf5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Wed, 12 Oct 2016 16:02:55 +0200
Subject: [PATCH 2/9] SIFP: Fix "-Wjump-misses-init" caught by GCC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
---
 src/lib/sifp/sss_sifp_parser.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/lib/sifp/sss_sifp_parser.c b/src/lib/sifp/sss_sifp_parser.c
index 65babb5..43eab4d 100644
--- a/src/lib/sifp/sss_sifp_parser.c
+++ b/src/lib/sifp/sss_sifp_parser.c
@@ -283,7 +283,8 @@ sss_sifp_parse_basic(sss_sifp_ctx *ctx,
                     uint64_t, uint64_t, uint64, done);
         break;
     case DBUS_TYPE_STRING:
-    case DBUS_TYPE_OBJECT_PATH: ;
+    case DBUS_TYPE_OBJECT_PATH:
+    {
         const char *val = NULL;
 
         dbus_message_iter_get_basic(iter, &val);
@@ -306,6 +307,7 @@ sss_sifp_parse_basic(sss_sifp_ctx *ctx,
 
         ret = SSS_SIFP_OK;
         break;
+    }
     default:
         ret = SSS_SIFP_INVALID_ARGUMENT;
         break;

From 9c3f6ecf4702e7c3f9a999417fe8553215cacd65 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Wed, 12 Oct 2016 17:08:16 +0200
Subject: [PATCH 3/9] NSS: Fix "-Wold-style-definition" caught by GCC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
---
 src/responder/nss/nss_iface.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/responder/nss/nss_iface.c b/src/responder/nss/nss_iface.c
index b01732e..6c55f91 100644
--- a/src/responder/nss/nss_iface.c
+++ b/src/responder/nss/nss_iface.c
@@ -32,7 +32,7 @@ static struct sbus_iface_map iface_map[] = {
     { NULL, NULL }
 };
 
-struct sbus_iface_map *nss_get_sbus_interface()
+struct sbus_iface_map *nss_get_sbus_interface(void)
 {
     return iface_map;
 }

From 1baeeabf895686aaf0fe09117be4b717d33e3f18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Wed, 19 Oct 2016 09:05:30 +0200
Subject: [PATCH 4/9] TESTS: Fix "-Werror=null-dereference" caught by GCC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
Reviewed-by: Lukáš Slebodník <lsleb...@redhat.com>
---
 src/tests/krb5_child-test.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/tests/krb5_child-test.c b/src/tests/krb5_child-test.c
index d570d52..ec81826 100644
--- a/src/tests/krb5_child-test.c
+++ b/src/tests/krb5_child-test.c
@@ -210,8 +210,18 @@ create_dummy_req(TALLOC_CTX *mem_ctx, const char *user,
 
     /* The Kerberos context */
     kr->krb5_ctx = create_dummy_krb5_ctx(kr, realm);
+    if (!kr->krb5_ctx) {
+        DEBUG(SSSDBG_FATAL_FAILURE,
+              "Failed to create dummy krb5_ctx\n");
+        goto fail;
+    }
     /* PAM Data structure */
     kr->pd = create_dummy_pam_data(kr, user, password);
+    if (!kr->pd) {
+        DEBUG(SSSDBG_FATAL_FAILURE,
+              "Failed to create dummy pam_data");
+        goto fail;
+    }
 
     ret = krb5_get_simple_upn(kr, kr->krb5_ctx, NULL, kr->pd->user, NULL,
                               &kr->upn);

From e5ad8cf02cba0a67900c18123e1826d7c3aa45c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Tue, 8 Nov 2016 20:51:42 +0100
Subject: [PATCH 5/9] TOOLS: Fix "-Wstack-protector" caught by GCC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This warning only happens when building SSSD on RHEL6.

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
Reviewed-by: Lukáš Slebodník <lsleb...@redhat.com>
---
 src/tools/tools_util.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/tools/tools_util.c b/src/tools/tools_util.c
index 5e51a40..f32d85b 100644
--- a/src/tools/tools_util.c
+++ b/src/tools/tools_util.c
@@ -73,18 +73,17 @@ static int setup_db(struct tools_ctx *ctx)
 void usage(poptContext pc, const char *error)
 {
     size_t lentmp;
-    char nl[2] = "";
 
     poptPrintUsage(pc, stderr, 0);
 
     if (error) {
         lentmp = strlen(error);
         if ((lentmp > 0) && (error[lentmp - 1] != '\n')) {
-            nl[0]='\n';
-            nl[1]='\0';
+            fprintf(stderr, "%s\n", error);
+            return;
         }
 
-        fprintf(stderr, "%s%s", error, nl);
+        fprintf(stderr, "%s", error);
     }
 }
 

From 862d10c5f98ae4b891ddd1d40ae1aa186534e737 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Tue, 8 Nov 2016 21:05:09 +0100
Subject: [PATCH 6/9] SSSCTL: Fix "-Wshadow" warning caught by GCC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This warning only happens when building SSSD on RHEL6.

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
---
 src/tools/sssctl/sssctl_cache.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/tools/sssctl/sssctl_cache.c b/src/tools/sssctl/sssctl_cache.c
index b1a7cc9..d7cb259 100644
--- a/src/tools/sssctl/sssctl_cache.c
+++ b/src/tools/sssctl/sssctl_cache.c
@@ -30,7 +30,7 @@
 
 #define NOT_FOUND_MSG(obj) _(obj " %s is not present in cache.\n")
 
-#define SSSCTL_CACHE_NAME   {_("Name"), SYSDB_NAME, attr_name}
+#define SSSCTL_CACHE_NAME   {_("Name"), SYSDB_NAME, get_attr_name}
 #define SSSCTL_CACHE_CREATE {_("Cache entry creation date"), SYSDB_CREATE_TIME, attr_time}
 #define SSSCTL_CACHE_UPDATE {_("Cache entry last update time"), SYSDB_LAST_UPDATE, attr_time}
 #define SSSCTL_CACHE_EXPIRE {_("Cache entry expiration time"), SYSDB_CACHE_EXPIRE, attr_expire}
@@ -87,11 +87,11 @@ static errno_t time_to_string(TALLOC_CTX *mem_ctx,
     return EOK;
 }
 
-static errno_t attr_name(TALLOC_CTX *mem_ctx,
-                           struct sysdb_attrs *entry,
-                           struct sss_domain_info *dom,
-                           const char *attr,
-                           const char **_value)
+static errno_t get_attr_name(TALLOC_CTX *mem_ctx,
+                             struct sysdb_attrs *entry,
+                             struct sss_domain_info *dom,
+                             const char *attr,
+                             const char **_value)
 {
     errno_t ret;
     const char *orig_name;

From 87aa5492f72feb67016fbb3b8920aca723dff048 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Tue, 8 Nov 2016 22:05:33 +0100
Subject: [PATCH 7/9] SSSCTL: Use get_ prefix for the sssctl_attr_fn functions
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

As done for the attr_name_fn to avoid "-Wshadow", let's be consistent
and do the same for all the other sssctl_attr_fn functions.

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
---
 src/tools/sssctl/sssctl_cache.c | 38 +++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 19 deletions(-)

diff --git a/src/tools/sssctl/sssctl_cache.c b/src/tools/sssctl/sssctl_cache.c
index d7cb259..05a6724 100644
--- a/src/tools/sssctl/sssctl_cache.c
+++ b/src/tools/sssctl/sssctl_cache.c
@@ -31,10 +31,10 @@
 #define NOT_FOUND_MSG(obj) _(obj " %s is not present in cache.\n")
 
 #define SSSCTL_CACHE_NAME   {_("Name"), SYSDB_NAME, get_attr_name}
-#define SSSCTL_CACHE_CREATE {_("Cache entry creation date"), SYSDB_CREATE_TIME, attr_time}
-#define SSSCTL_CACHE_UPDATE {_("Cache entry last update time"), SYSDB_LAST_UPDATE, attr_time}
-#define SSSCTL_CACHE_EXPIRE {_("Cache entry expiration time"), SYSDB_CACHE_EXPIRE, attr_expire}
-#define SSSCTL_CACHE_IFP    {_("Cached in InfoPipe"), SYSDB_IFP_CACHED, attr_yesno}
+#define SSSCTL_CACHE_CREATE {_("Cache entry creation date"), SYSDB_CREATE_TIME, get_attr_time}
+#define SSSCTL_CACHE_UPDATE {_("Cache entry last update time"), SYSDB_LAST_UPDATE, get_attr_time}
+#define SSSCTL_CACHE_EXPIRE {_("Cache entry expiration time"), SYSDB_CACHE_EXPIRE, get_attr_expire}
+#define SSSCTL_CACHE_IFP    {_("Cached in InfoPipe"), SYSDB_IFP_CACHED, get_attr_yesno}
 #define SSSCTL_CACHE_NULL   {NULL, NULL, NULL}
 
 enum cache_object {
@@ -123,11 +123,11 @@ static errno_t get_attr_name(TALLOC_CTX *mem_ctx,
     return EOK;
 }
 
-static errno_t attr_time(TALLOC_CTX *mem_ctx,
-                         struct sysdb_attrs *entry,
-                         struct sss_domain_info *dom,
-                         const char *attr,
-                         const char **_value)
+static errno_t get_attr_time(TALLOC_CTX *mem_ctx,
+                             struct sysdb_attrs *entry,
+                             struct sss_domain_info *dom,
+                             const char *attr,
+                             const char **_value)
 {
     uint32_t value;
     errno_t ret;
@@ -140,11 +140,11 @@ static errno_t attr_time(TALLOC_CTX *mem_ctx,
     return time_to_string(mem_ctx, value, _value);
 }
 
-static errno_t attr_expire(TALLOC_CTX *mem_ctx,
-                           struct sysdb_attrs *entry,
-                           struct sss_domain_info *dom,
-                           const char *attr,
-                           const char **_value)
+static errno_t get_attr_expire(TALLOC_CTX *mem_ctx,
+                               struct sysdb_attrs *entry,
+                               struct sss_domain_info *dom,
+                               const char *attr,
+                               const char **_value)
 {
     uint32_t value;
     errno_t ret;
@@ -187,11 +187,11 @@ static errno_t attr_initgr(TALLOC_CTX *mem_ctx,
     return time_to_string(mem_ctx, value, _value);
 }
 
-static errno_t attr_yesno(TALLOC_CTX *mem_ctx,
-                          struct sysdb_attrs *entry,
-                          struct sss_domain_info *dom,
-                          const char *attr,
-                          const char **_value)
+static errno_t get_attr_yesno(TALLOC_CTX *mem_ctx,
+                              struct sysdb_attrs *entry,
+                              struct sss_domain_info *dom,
+                              const char *attr,
+                              const char **_value)
 {
     errno_t ret;
     bool val;

From 145d5b1c896d70a6329672bea0a65340e8a46976 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Tue, 8 Nov 2016 22:00:32 +0100
Subject: [PATCH 8/9] TESTS: Fix "-Wshadow" caught by GCC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This warning only happens when building SSSD on RHEL6.

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
---
 src/tests/sbus_codegen_tests.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/tests/sbus_codegen_tests.c b/src/tests/sbus_codegen_tests.c
index 05eb78d..2eae78a 100644
--- a/src/tests/sbus_codegen_tests.c
+++ b/src/tests/sbus_codegen_tests.c
@@ -115,15 +115,15 @@ END_TEST
 
 START_TEST(test_signals)
 {
-    const struct sbus_signal_meta *signal;
+    const struct sbus_signal_meta *sig;
     const struct sbus_arg_meta *arg;
 
-    signal = sbus_meta_find_signal(&com_planetexpress_Ship_meta, "BecameSentient");
-    ck_assert(signal != NULL);
-    ck_assert_str_eq(signal->name, "BecameSentient");
-    ck_assert(signal->args != NULL);
+    sig = sbus_meta_find_signal(&com_planetexpress_Ship_meta, "BecameSentient");
+    ck_assert(sig != NULL);
+    ck_assert_str_eq(sig->name, "BecameSentient");
+    ck_assert(sig->args != NULL);
 
-    arg = find_arg(signal->args, "gender");
+    arg = find_arg(sig->args, "gender");
     ck_assert(arg != NULL);
     ck_assert_str_eq(arg->name, "gender");
     ck_assert_str_eq(arg->type, "s");

From 9d4c4b38abe4cb8d5e2f8747ce5b79599043c77e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fiden...@redhat.com>
Date: Thu, 11 Aug 2016 07:58:44 +0200
Subject: [PATCH 9/9] BUILD: Make use of GNULIB's compiler warning code
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

As GNULIB has the 'manywarnings' module, which basically turns on every
GCC warning, let's make use of it. We can easily blacklist the warnings
we cannot cope with, but the main goal should be to have enabled every
possible GCC warning.

When new GCC warnings are created the 'manywarnings' file can be
refreshed from upstream GNULIB.

Compilation with -Werror is explicitly disabled for RHEL6 in our CI, as
a lot of warnings show up there due to old dependencies or even as
false-positives.

Signed-off-by: Fabiano Fidêncio <fiden...@redhat.com>
---
 Makefile.am                  |   7 +-
 configure.ac                 |   5 +
 contrib/ci/configure.sh      |   1 +
 src/manywarnings.m4          | 274 +++++++++++++++++++++++++++++++++++++++++++
 src/sssd-compile-warnings.m4 |  99 ++++++++++++++++
 src/warnings.m4              |  79 +++++++++++++
 6 files changed, 459 insertions(+), 6 deletions(-)
 create mode 100644 src/manywarnings.m4
 create mode 100644 src/sssd-compile-warnings.m4
 create mode 100644 src/warnings.m4

diff --git a/Makefile.am b/Makefile.am
index e037930..2d4c515 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -103,12 +103,7 @@ if WANT_AUX_INFO
     AM_CFLAGS += -aux-info $@.X
 endif
 if HAVE_GCC
-    AM_CFLAGS += -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith \
-                 -Wcast-qual -Wcast-align -Wwrite-strings -Wundef \
-                 -Werror-implicit-function-declaration -Winit-self \
-                 -Wmissing-include-dirs \
-                 -fno-strict-aliasing \
-                 -std=gnu99
+    AM_CFLAGS += $(WARN_CFLAGS)
 endif
 
 pkgconfig_DATA =
diff --git a/configure.ac b/configure.ac
index d3ef1e1..7d0ca19 100644
--- a/configure.ac
+++ b/configure.ac
@@ -11,6 +11,11 @@ m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
     [AC_USE_SYSTEM_EXTENSIONS],
     [AC_GNU_SOURCE])
 
+m4_include([src/warnings.m4])
+m4_include([src/manywarnings.m4])
+m4_include([src/sssd-compile-warnings.m4])
+SSSD_COMPILE_WARNINGS
+
 CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
 
 
diff --git a/contrib/ci/configure.sh b/contrib/ci/configure.sh
index 8e779cf..03a4b75 100644
--- a/contrib/ci/configure.sh
+++ b/contrib/ci/configure.sh
@@ -38,6 +38,7 @@ if [[ "$DISTRO_BRANCH" == -redhat-redhatenterprise*-6.*- ||
         "--disable-cifs-idmap-plugin"
         "--with-syslog=syslog"
         "--without-python3-bindings"
+        "--enable-werror=no"
     )
 fi
 
diff --git a/src/manywarnings.m4 b/src/manywarnings.m4
new file mode 100644
index 0000000..90823b0
--- /dev/null
+++ b/src/manywarnings.m4
@@ -0,0 +1,274 @@
+# manywarnings.m4 serial 8
+dnl Copyright (C) 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR)
+# --------------------------------------------------
+# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR.
+# Elements separated by whitespace.  In set logic terms, the function
+# does OUTVAR = LISTVAR \ REMOVEVAR.
+AC_DEFUN([gl_MANYWARN_COMPLEMENT],
+[
+  gl_warn_set=
+  set x $2; shift
+  for gl_warn_item
+  do
+    case " $3 " in
+      *" $gl_warn_item "*)
+        ;;
+      *)
+        gl_warn_set="$gl_warn_set $gl_warn_item"
+        ;;
+    esac
+  done
+  $1=$gl_warn_set
+])
+
+# gl_MANYWARN_ALL_GCC(VARIABLE)
+# -----------------------------
+# Add all documented GCC warning parameters to variable VARIABLE.
+# Note that you need to test them using gl_WARN_ADD if you want to
+# make sure your gcc understands it.
+AC_DEFUN([gl_MANYWARN_ALL_GCC],
+[
+  dnl First, check for some issues that only occur when combining multiple
+  dnl gcc warning categories.
+  AC_REQUIRE([AC_PROG_CC])
+  if test -n "$GCC"; then
+
+    dnl Check if -W -Werror -Wno-missing-field-initializers is supported
+    dnl with the current $CC $CFLAGS $CPPFLAGS.
+    AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported])
+    AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers"
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([[]], [[]])],
+        [gl_cv_cc_nomfi_supported=yes],
+        [gl_cv_cc_nomfi_supported=no])
+      CFLAGS="$gl_save_CFLAGS"])
+    AC_MSG_RESULT([$gl_cv_cc_nomfi_supported])
+
+    if test "$gl_cv_cc_nomfi_supported" = yes; then
+      dnl Now check whether -Wno-missing-field-initializers is needed
+      dnl for the { 0, } construct.
+      AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed])
+      AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [
+        gl_save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS -W -Werror"
+        AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[void f (void)
+               {
+                 typedef struct { int a; int b; } s_t;
+                 s_t s1 = { 0, };
+               }
+             ]],
+             [[]])],
+          [gl_cv_cc_nomfi_needed=no],
+          [gl_cv_cc_nomfi_needed=yes])
+        CFLAGS="$gl_save_CFLAGS"
+      ])
+      AC_MSG_RESULT([$gl_cv_cc_nomfi_needed])
+    fi
+
+    dnl Next, check if -Werror -Wuninitialized is useful with the
+    dnl user's choice of $CFLAGS; some versions of gcc warn that it
+    dnl has no effect if -O is not also used
+    AC_MSG_CHECKING([whether -Wuninitialized is supported])
+    AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -Werror -Wuninitialized"
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([[]], [[]])],
+        [gl_cv_cc_uninitialized_supported=yes],
+        [gl_cv_cc_uninitialized_supported=no])
+      CFLAGS="$gl_save_CFLAGS"])
+    AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported])
+
+  fi
+
+  # List all gcc warning categories.
+  # To compare this list to your installed GCC's, run this Bash command:
+  #
+  # comm -3 \
+  #  <(sed -n 's/^  *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \
+  #  <(gcc --help=warnings | sed -n 's/^  \(-[^ ]*\) .*/\1/p' | sort |
+  #      grep -v -x -f <(
+  #         awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec))
+
+  gl_manywarn_set=
+  for gl_manywarn_item in \
+    -W \
+    -Wabi \
+    -Waddress \
+    -Waggressive-loop-optimizations \
+    -Wall \
+    -Wattributes \
+    -Wbad-function-cast \
+    -Wbool-compare \
+    -Wbuiltin-macro-redefined \
+    -Wcast-align \
+    -Wchar-subscripts \
+    -Wchkp \
+    -Wclobbered \
+    -Wcomment \
+    -Wcomments \
+    -Wcoverage-mismatch \
+    -Wcpp \
+    -Wdate-time \
+    -Wdeprecated \
+    -Wdeprecated-declarations \
+    -Wdesignated-init \
+    -Wdisabled-optimization \
+    -Wdiscarded-array-qualifiers \
+    -Wdiscarded-qualifiers \
+    -Wdiv-by-zero \
+    -Wdouble-promotion \
+    -Wduplicated-cond \
+    -Wempty-body \
+    -Wendif-labels \
+    -Wenum-compare \
+    -Wextra \
+    -Wformat-contains-nul \
+    -Wformat-extra-args \
+    -Wformat-nonliteral \
+    -Wformat-security \
+    -Wformat-signedness \
+    -Wformat-y2k \
+    -Wformat-zero-length \
+    -Wframe-address \
+    -Wfree-nonheap-object \
+    -Whsa \
+    -Wignored-attributes \
+    -Wignored-qualifiers \
+    -Wimplicit \
+    -Wimplicit-function-declaration \
+    -Wimplicit-int \
+    -Wincompatible-pointer-types \
+    -Winit-self \
+    -Winline \
+    -Wint-conversion \
+    -Wint-to-pointer-cast \
+    -Winvalid-memory-model \
+    -Winvalid-pch \
+    -Wjump-misses-init \
+    -Wlogical-not-parentheses \
+    -Wlogical-op \
+    -Wmain \
+    -Wmaybe-uninitialized \
+    -Wmemset-transposed-args \
+    -Wmisleading-indentation \
+    -Wmissing-braces \
+    -Wmissing-declarations \
+    -Wmissing-field-initializers \
+    -Wmissing-include-dirs \
+    -Wmissing-parameter-type \
+    -Wmissing-prototypes \
+    -Wmultichar \
+    -Wnarrowing \
+    -Wnested-externs \
+    -Wnonnull \
+    -Wnonnull-compare \
+    -Wnull-dereference \
+    -Wodr \
+    -Wold-style-declaration \
+    -Wold-style-definition \
+    -Wopenmp-simd \
+    -Woverflow \
+    -Woverlength-strings \
+    -Woverride-init \
+    -Wpacked \
+    -Wpacked-bitfield-compat \
+    -Wparentheses \
+    -Wpointer-arith \
+    -Wpointer-sign \
+    -Wpointer-to-int-cast \
+    -Wpragmas \
+    -Wreturn-local-addr \
+    -Wreturn-type \
+    -Wscalar-storage-order \
+    -Wsequence-point \
+    -Wshadow \
+    -Wshift-count-negative \
+    -Wshift-count-overflow \
+    -Wshift-negative-value \
+    -Wsizeof-array-argument \
+    -Wsizeof-pointer-memaccess \
+    -Wstack-protector \
+    -Wstrict-aliasing \
+    -Wstrict-overflow \
+    -Wstrict-prototypes \
+    -Wsuggest-attribute=const \
+    -Wsuggest-attribute=format \
+    -Wsuggest-attribute=noreturn \
+    -Wsuggest-attribute=pure \
+    -Wsuggest-final-methods \
+    -Wsuggest-final-types \
+    -Wswitch \
+    -Wswitch-bool \
+    -Wswitch-default \
+    -Wsync-nand \
+    -Wsystem-headers \
+    -Wtautological-compare \
+    -Wtrampolines \
+    -Wtrigraphs \
+    -Wtype-limits \
+    -Wuninitialized \
+    -Wunknown-pragmas \
+    -Wunsafe-loop-optimizations \
+    -Wunused \
+    -Wunused-but-set-parameter \
+    -Wunused-but-set-variable \
+    -Wunused-function \
+    -Wunused-label \
+    -Wunused-local-typedefs \
+    -Wunused-macros \
+    -Wunused-parameter \
+    -Wunused-result \
+    -Wunused-value \
+    -Wunused-variable \
+    -Wvarargs \
+    -Wvariadic-macros \
+    -Wvector-operation-performance \
+    -Wvla \
+    -Wvolatile-register-var \
+    -Wwrite-strings \
+    \
+    ; do
+    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
+  done
+
+  # gcc --help=warnings outputs an unusual form for these options; list
+  # them here so that the above 'comm' command doesn't report a false match.
+  gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2"
+  gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc"
+  gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2"
+  gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2"
+
+  # These are needed for older GCC versions.
+  if test -n "$GCC"; then
+    case `($CC --version) 2>/dev/null` in
+      'gcc (GCC) '[[0-3]].* | \
+      'gcc (GCC) '4.[[0-7]].*)
+        gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option"
+        gl_manywarn_set="$gl_manywarn_set -funit-at-a-time"
+          ;;
+    esac
+  fi
+
+  # Disable specific options as needed.
+  if test "$gl_cv_cc_nomfi_needed" = yes; then
+    gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers"
+  fi
+
+  if test "$gl_cv_cc_uninitialized_supported" = no; then
+    gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized"
+  fi
+
+  $1=$gl_manywarn_set
+])
diff --git a/src/sssd-compile-warnings.m4 b/src/sssd-compile-warnings.m4
new file mode 100644
index 0000000..97de901
--- /dev/null
+++ b/src/sssd-compile-warnings.m4
@@ -0,0 +1,99 @@
+dnl
+dnl Enable all known GCC compiler warnings, except for those
+dnl we can't yet cope with
+dnl
+AC_DEFUN([SSSD_COMPILE_WARNINGS],[
+    dnl ******************************
+    dnl More compiler warnings
+    dnl ******************************
+
+    AC_ARG_ENABLE([werror],
+                  AS_HELP_STRING([--enable-werror], [Use -Werror (if supported)]),
+                  [set_werror="$enableval"],
+                  [if test -d $srcdir/.git; then
+                     is_git_version=true
+                     set_werror=yes
+                   else
+                     set_werror=no
+                   fi])
+
+    # List of warnings that are not relevant/wanted
+
+    dontwarn=$1
+
+    # In case these warnings are enabled we will break the build on every single
+    # system used by our CI
+    dontwarn="$dontwarn -Wcpp"
+    dontwarn="$dontwarn -Winline"
+    dontwarn="$dontwarn -Wsystem-headers"
+
+    # We have no intention to fix these warnings
+
+    # If we enable this warning, complitaion will break on RHEL6
+    dontwarn="$dontwarn -Woverlength-strings"
+
+    # Enable this again as soon as GCC is updated on RHEL6
+    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34114
+    dontwarn="$dontwarn -Wunsafe-loop-optimizations"
+
+    # These are the warnings that, currently, we cannot cope with
+    dontwarn="$dontwarn -Warray-bounds"
+    dontwarn="$dontwarn -Wbad-function-cast"
+    dontwarn="$dontwarn -Wformat-nonliteral"
+    dontwarn="$dontwarn -Wformat-signedness"
+    dontwarn="$dontwarn -Wformat-y2k"
+    dontwarn="$dontwarn -Wlogical-op"
+    dontwarn="$dontwarn -Wmissing-prototypes"
+    dontwarn="$dontwarn -Wmissing-declarations"
+    dontwarn="$dontwarn -Wpacked"
+    dontwarn="$dontwarn -Wsign-compare"
+    dontwarn="$dontwarn -Wstrict-overflow"
+    dontwarn="$dontwarn -Wsuggest-attribute=pure"
+    dontwarn="$dontwarn -Wsuggest-attribute=const"
+    dontwarn="$dontwarn -Wsuggest-attribute=format"
+    dontwarn="$dontwarn -Wsuggest-attribute=noreturn"
+    dontwarn="$dontwarn -Wswitch-default"
+    dontwarn="$dontwarn -Wunused-parameter"
+    dontwarn="$dontwarn -Wunused-macros"
+    dontwarn="$dontwarn -Wvla"
+
+    # Get all possible GCC warnings
+    gl_MANYWARN_ALL_GCC([maybewarn])
+
+    # Remove the ones we don't want, blacklisted earlier
+    gl_MANYWARN_COMPLEMENT([wantwarn], [$maybewarn], [$dontwarn])
+
+    # Check for $CC support of each warning
+    for w in $wantwarn; do
+      gl_WARN_ADD([$w])
+    done
+
+    # GNULIB uses '-W' (aka -Wextra) which includes a bunch of stuff.
+    # Unfortunately, this means you can't simply use '-Wsign-compare'
+    # with gl_MANYWARN_COMPLEMENT
+    # So we have -W enabled, and then have to explicitly turn off ...
+    gl_WARN_ADD([-Wno-array-bounds])
+    gl_WARN_ADD([-Wno-sign-compare])
+    gl_WARN_ADD([-Wno-unused-parameter])
+
+    # Use improved glibc headers
+    AH_VERBATIM([FORTIFY_SOURCE],
+    [/* Enable compile-time and run-time bounds-checking, and some warnings,
+        without upsetting newer glibc. */
+     #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
+     # define _FORTIFY_SOURCE 2
+     #endif
+    ])
+
+    # Extra special flags
+    gl_WARN_ADD([-fno-strict-aliasing])
+    gl_WARN_ADD([-std=gnu99])
+    gl_WARN_ADD([-Werror-implicit-declaration])
+
+    if test "$set_werror" = "yes"
+    then
+      gl_WARN_ADD([-Werror])
+    fi
+
+    AC_SUBST([WARN_CFLAGS])
+])
diff --git a/src/warnings.m4 b/src/warnings.m4
new file mode 100644
index 0000000..924e21d
--- /dev/null
+++ b/src/warnings.m4
@@ -0,0 +1,79 @@
+# warnings.m4 serial 11
+dnl Copyright (C) 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_AS_VAR_APPEND(VAR, VALUE)
+# ----------------------------
+# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
+m4_ifdef([AS_VAR_APPEND],
+[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
+[m4_define([gl_AS_VAR_APPEND],
+[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
+
+
+# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED],
+#                       [PROGRAM = AC_LANG_PROGRAM()])
+# -----------------------------------------------------------------
+# Check if the compiler supports OPTION when compiling PROGRAM.
+#
+# FIXME: gl_Warn must be used unquoted until we can assume Autoconf
+# 2.64 or newer.
+AC_DEFUN([gl_COMPILER_OPTION_IF],
+[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
+AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl
+AS_LITERAL_IF([$1],
+  [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))],
+  [gl_positive="$1"
+case $gl_positive in
+  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
+m4_pushdef([gl_Positive], [$gl_positive])])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [
+  gl_save_compiler_FLAGS="$gl_Flags"
+  gl_AS_VAR_APPEND(m4_defn([gl_Flags]),
+    [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["])
+  AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])],
+                 [AS_VAR_SET(gl_Warn, [yes])],
+                 [AS_VAR_SET(gl_Warn, [no])])
+  gl_Flags="$gl_save_compiler_FLAGS"
+])
+AS_VAR_IF(gl_Warn, [yes], [$2], [$3])
+m4_popdef([gl_Positive])dnl
+AS_VAR_POPDEF([gl_Flags])dnl
+AS_VAR_POPDEF([gl_Warn])dnl
+])
+
+# gl_UNKNOWN_WARNINGS_ARE_ERRORS
+# ------------------------------
+# Clang doesn't complain about unknown warning options unless one also
+# specifies -Wunknown-warning-option -Werror.  Detect this.
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS],
+[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option],
+   [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'],
+   [gl_unknown_warnings_are_errors=])])
+
+# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS],
+#             [PROGRAM = AC_LANG_PROGRAM()])
+# ---------------------------------------------
+# Adds parameter to WARN_CFLAGS if the compiler supports it when
+# compiling PROGRAM.  For example, gl_WARN_ADD([-Wparentheses]).
+#
+# If VARIABLE is a variable name, AC_SUBST it.
+AC_DEFUN([gl_WARN_ADD],
+[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS])
+gl_COMPILER_OPTION_IF([$1],
+  [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])],
+  [],
+  [$3])
+m4_ifval([$2],
+         [AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
+         [AC_SUBST([WARN_CFLAGS])])dnl
+])
+
+# Local Variables:
+# mode: autoconf
+# End:
_______________________________________________
sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org
To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org

Reply via email to