diff mbox series

[2/2] package/zip: fix build with GCC 14

Message ID 20240510235510.2454216-2-brandon.maier@collins.com
State Accepted
Headers show
Series [1/2] support/testing: add zip test | expand

Commit Message

Brandon Maier May 10, 2024, 11:55 p.m. UTC
Builds with GCC 14 print the following error

> zip.h:726:10: error: conflicting types for 'memset'; have 'char *(char *, int,  unsigned int)'

This is because with GCC 14, Zip incorrectly detects that the memset functions
exist. Which enables the ZMEM flag and declares its own version of memset.

This is because the ./unix/configure script attempts to compile a C file using
'memset' but it does not include the <string.h>. This was allowed in gnu89, but
in GCC 14 -Werror=implicit-function-declaration is enabled by default[1].

We forcefully set '-std=gnu89' so that Zip will compile everything against
gnu89, which suppresses the warning.

[1] https://gcc.gnu.org/gcc-14/porting_to.html#warnings-as-errors

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
---
 package/zip/zip.mk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Thomas Petazzoni May 11, 2024, 6:56 a.m. UTC | #1
On Fri, 10 May 2024 23:55:10 +0000
Brandon Maier via buildroot <buildroot@buildroot.org> wrote:

> Builds with GCC 14 print the following error
> 
> > zip.h:726:10: error: conflicting types for 'memset'; have 'char *(char *, int,  unsigned int)'  
> 
> This is because with GCC 14, Zip incorrectly detects that the memset functions
> exist. Which enables the ZMEM flag and declares its own version of memset.
> 
> This is because the ./unix/configure script attempts to compile a C file using
> 'memset' but it does not include the <string.h>. This was allowed in gnu89, but
> in GCC 14 -Werror=implicit-function-declaration is enabled by default[1].
> 
> We forcefully set '-std=gnu89' so that Zip will compile everything against
> gnu89, which suppresses the warning.
> 
> [1] https://gcc.gnu.org/gcc-14/porting_to.html#warnings-as-errors
> 
> Signed-off-by: Brandon Maier <brandon.maier@collins.com>
> ---
>  package/zip/zip.mk | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

My first thought was that this should be fixed with a patch, that we
send upstream. However, it seems like the zip 3.0 release we're using
dates back from 2008, and despite an announce of zip 3.1 on the
website, this still hasn't happened. As it's not clear how active
upstream is, I've applied your solution that doesn't involve a patch.

Thanks!

Thomas
diff mbox series

Patch

diff --git a/package/zip/zip.mk b/package/zip/zip.mk
index 67958a4a66..3aa59e7ba7 100644
--- a/package/zip/zip.mk
+++ b/package/zip/zip.mk
@@ -31,7 +31,7 @@  ZIP_TARGET_CFLAGS = \
 define ZIP_BUILD_CMDS
 	$(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \
 		CFLAGS="$(ZIP_TARGET_CFLAGS) $(ZIP_CFLAGS)" \
-		AS="$(TARGET_CC) -c" \
+		CC="$(TARGET_CC) -std=gnu89" AS="$(TARGET_CC) -c" \
 		-f unix/Makefile generic
 endef
 
@@ -43,7 +43,7 @@  endef
 define HOST_ZIP_BUILD_CMDS
 	$(HOST_MAKE_ENV) $(MAKE) $(HOST_CONFIGURE_OPTS) -C $(@D) \
 		CFLAGS="$(HOST_CFLAGS) $(ZIP_CFLAGS)" \
-		AS="$(HOSTCC) -c" \
+		CC="$(HOSTCC) -std=gnu89" AS="$(HOSTCC) -c" \
 		-f unix/Makefile generic
 endef