Blob Blame Raw
From 10f48326f30ae89bea01124bdbab4702a21f3655 Mon Sep 17 00:00:00 2001
From: Miroslav Rezanina <mrezanin@redhat.com>
Date: Thu, 3 Dec 2020 11:17:02 -0500
Subject: [PATCH] Suppress prototype warning for nss headers
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

RH-Author: Miroslav Rezanina <mrezanin@redhat.com>
Message-id: <20201203111702.215084-1-mrezanin@redhat.com>
Patchwork-id: 100201
O-Subject: [RHEL-7.9.z qemu-kvm PATCH] Suppress prototype warning for nss headers
Bugzilla: 1884997
RH-Acked-by: Thomas Huth <thuth@redhat.com>
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
RH-Acked-by: Jon Maloy <jmaloy@redhat.com>

From: Miroslav Rezanina <mrezanin@redhat.com>

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1884997
Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=33460150
branch: rhel79/master
Upstream: n/a

Rebase of nss introduced following warning when using it for building qemu-kvm:

/usr/include/nss3/pk11pub.h:951:1: error: function declaration isn’t a prototype [-Werror=strict-prototypes]
int SECMOD_GetSystemFIPSEnabled();

This issue is tracked by https://bugzilla.redhat.com/show_bug.cgi?id=1885321. However,
this issue is not important enough to fix (as discussed in the bugzilla).

We have to hack qemu-kvm to live with this warning. To do it we add following hacks:

1) We disable using -Werror for nss test in configure. This allows configure to pass.

2) We disable -Werror=scrict-prototypes when including nss headers. This allows build to pass.

Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
Signed-off-by: Jon Maloy <jmaloy.redhat.com>
---
 configure                  | 13 ++++++-------
 libcacard/vcard_emul_nss.c |  8 ++++++++
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/configure b/configure
index 34e3accfdd..77c2f0a438 100755
--- a/configure
+++ b/configure
@@ -3246,13 +3246,11 @@ EOF
     libcacard_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
     libcacard_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
     test_cflags="$libcacard_cflags"
-    # The header files in nss < 3.13.3 have a bug which causes them to
-    # emit a warning. If we're going to compile QEMU with -Werror, then
-    # test that the headers don't have this bug. Otherwise we would pass
-    # the configure test but fail to compile QEMU later.
-    if test "$werror" = "yes"; then
-        test_cflags="-Werror $test_cflags"
-    fi
+    # nss > 3.53 generates warning when including it's headers. This breaks the
+    # build so we have to disable -Werror for build test.
+    # See https://bugzilla.redhat.com/show_bug.cgi?id=1885321
+    old_werror=$werror
+    werror=no
     if test -n "$libtool" &&
             $pkg_config --atleast-version=3.12.8 nss >/dev/null 2>&1 && \
       compile_prog "$test_cflags" "$libcacard_libs"; then
@@ -3266,6 +3264,7 @@ EOF
         fi
         smartcard_nss="no"
     fi
+    werror=$old_werror
 fi
 
 # check for libusb
diff --git a/libcacard/vcard_emul_nss.c b/libcacard/vcard_emul_nss.c
index 1a3e5683bc..f1aa51943b 100644
--- a/libcacard/vcard_emul_nss.c
+++ b/libcacard/vcard_emul_nss.c
@@ -17,8 +17,16 @@
 /* avoid including prototypes.h that redefines uint32 */
 #define NO_NSPR_10_SUPPORT
 
+/*
+ * nss > 3.53 genererates prototype warning when including headers so we can't
+ * treat this warning ass error to allow build.
+ * See https://bugzilla.redhat.com/show_bug.cgi?id=1885321
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
 #include <nss.h>
 #include <pk11pub.h>
+#pragma GCC diagnostic pop
 #include <cert.h>
 #include <key.h>
 #include <secmod.h>
-- 
2.18.2