logrotate: fix build with gcc 6
authorRahul Bedarkar <rahul.bedarkar@imgtec.com>
Fri, 19 Aug 2016 17:15:03 +0000 (22:45 +0530)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Fri, 19 Aug 2016 20:55:24 +0000 (22:55 +0200)
With gcc version 6, we get the following error when building logrotate:

  logrotate.c: In function 'postrotateSingleLog':
  logrotate.c:1784:5: error: this 'if' clause does not guard... [-Werror=misleading-indentation]
       if (!state->doRotate)
       ^~
  logrotate.c:1787:2: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'
    if (!hasErrors && log->flags & LOG_FLAG_TMPFILENAME) {
    ^~

This is fixed by grabbing an upstream commit,
6a36c105587b07ad14fc937f3ee6e2eb402621a2. Once this is fixed, we get:

  config.c: In function 'strndup':
  config.c:87:10: error: nonnull argument 's' compared to NULL [-Werror=nonnull-compare]
          if(!s)
            ^
  cc1: all warnings being treated as errors
  make[2]: *** [config.o] Error 1
  make[2]: *** Waiting for unfinished jobs....
  cc1: all warnings being treated as errors
  make[2]: *** [logrotate.o] Error 1

This is due to logrotate providing its own implementation of
strndup(). We could fix it, but it much better to simply use the one
provided by the C library, by fixing the detection method for strndup
availability. This is done in patch
0002-Use-autoconf-checks-for-strndup-and-asprintf.patch.

Fixes:

  http://autobuild.buildroot.net/results/6dc2eb22104076920d77425b1e608ef9b9e01c94/

Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Rahul Bedarkar <rahul.bedarkar@imgtec.com>
[Thomas: replace fix for the nonnull issue with a different one.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/logrotate/0002-Use-autoconf-checks-for-strndup-and-asprintf.patch [new file with mode: 0644]
package/logrotate/logrotate.hash
package/logrotate/logrotate.mk

diff --git a/package/logrotate/0002-Use-autoconf-checks-for-strndup-and-asprintf.patch b/package/logrotate/0002-Use-autoconf-checks-for-strndup-and-asprintf.patch
new file mode 100644 (file)
index 0000000..ed32098
--- /dev/null
@@ -0,0 +1,61 @@
+From 24fd7f81f9966071717f6a0effe8190310f1b393 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Fri, 19 Aug 2016 22:39:17 +0200
+Subject: [PATCH] Use autoconf checks for strndup and asprintf
+
+The current code in config.c can provide its own implementation of
+asprintf() and strndup() if not provided by the system. However, in
+order to decide if they should be provided, the check done is:
+
+ #if !defined(name_of_function)
+
+which only works if the function is actually defined as a macro, which
+is not necessarily the case.
+
+Therefore, we replace this logic by a proper AC_CHECK_FUNCS() check in
+the configure script.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ config.c     | 4 ++--
+ configure.ac | 2 ++
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/config.c b/config.c
+index dbbf563..2209afd 100644
+--- a/config.c
++++ b/config.c
+@@ -45,7 +45,7 @@
+ #include "asprintf.c"
+ #endif
+-#if !defined(asprintf) && !defined(_FORTIFY_SOURCE)
++#if !defined(HAVE_ASPRINTF) && !defined(_FORTIFY_SOURCE)
+ #include <stdarg.h>
+ int asprintf(char **string_ptr, const char *format, ...)
+@@ -78,7 +78,7 @@ int asprintf(char **string_ptr, const char *format, ...)
+ #endif
+-#if !defined(strndup)
++#if !defined(HAVE_STRNDUP)
+ char *strndup(const char *s, size_t n)
+ {
+        size_t nAvail;
+diff --git a/configure.ac b/configure.ac
+index e655b85..73b98da 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -13,6 +13,8 @@ AC_STRUCT_ST_BLOCKS
+ AC_CHECK_LIB([popt],[poptParseArgvString],,
+   AC_MSG_ERROR([libpopt required but not found]))
++AC_CHECK_FUNCS([strndup asprintf])
++
+ AC_ARG_WITH([selinux],
+   [AS_HELP_STRING([--with-selinux],
+     [support handling SELinux contexts (yes,no,check) @<:@default=check@:>@])],
+-- 
+2.7.4
+
index 77d4dc80776bb82539e287f45ebd118795866f08..8dee7156583312e80a17c2dd7d4345dca935593b 100644 (file)
@@ -1,2 +1,3 @@
 # Locally calculated
 sha256 2de00c65e23fa9d7909cae6594e550b9abe9a7eb1553669ddeaca92d30f97009 logrotate-3.9.2.tar.gz
+sha256 e0d360908ac506e02f08fa1ad70e17d6985045d8640f383fef8f322886d6e1e1 6a36c105587b07ad14fc937f3ee6e2eb402621a2.patch
index de4d837cadbada32bbf03b863bbadcf2d000758d..38f183c37a074a41ec7312c9f92ef910c771f03f 100644 (file)
@@ -13,6 +13,7 @@ LOGROTATE_DEPENDENCIES = popt host-pkgconf
 LOGROTATE_AUTORECONF = YES
 LOGROTATE_CONF_ENV = LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs popt`"
 LOGROTATE_CONF_OPTS = --without-selinux
+LOGROTATE_PATCH = https://github.com/logrotate/logrotate/commit/6a36c105587b07ad14fc937f3ee6e2eb402621a2.patch
 
 ifeq ($(BR2_PACKAGE_ACL),y)
 LOGROTATE_DEPENDENCIES += acl