From 36a16fd76160d53ba986650f066a5061a24b2297 Mon Sep 17 00:00:00 2001 From: Cosmin Truta Date: Tue, 21 Jan 2025 18:42:49 +0200 Subject: [PATCH] build: Add scripts/makefile.c89; update other makefiles Add scripts/makefile.c89 and refactor scripts/makefile.emcc, scripts/makefile.clang and scripts/makefile.gcc Refactor variable definitions inside scripts/makefile.clang, scripts/makefile.gcc and scripts/makefile.emcc, and start using the option `-pedantic-errors` unconditionally. This option was first implemented in GCC version 3.1, and it was available in Clang and in other Clang-based compilers (e.g. Emscripten) from the beginning. Add scripts/makefile.c89, derived from the above makefiles, but with `-pedantic-errors -std=c89`. We aren't enabling the C89 level by default, to avoid any incompatibility, whether intentional or accidental, with the compiler's default language level. However, we are still continuing to support C89 in the 'libpng16' branch, and this special makefile can be used for testing purposes. --- scripts/makefile.c89 | 97 ++++++++++++++++++++++++++++++++++++++++++ scripts/makefile.clang | 22 ++++++---- scripts/makefile.emcc | 14 ++++-- scripts/makefile.gcc | 22 ++++++---- 4 files changed, 134 insertions(+), 21 deletions(-) create mode 100644 scripts/makefile.c89 diff --git a/scripts/makefile.c89 b/scripts/makefile.c89 new file mode 100644 index 000000000..1f2fc1d61 --- /dev/null +++ b/scripts/makefile.c89 @@ -0,0 +1,97 @@ +# makefile for libpng using an ANSI C89 compiler +# Copyright (C) 2000, 2014, 2019-2025 Cosmin Truta +# Copyright (C) 2008, 2014 Glenn Randers-Pehrson +# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc. +# +# This code is released under the libpng license. +# For conditions of distribution and use, see the disclaimer +# and license in png.h + +# Location of the zlib library and include files +ZLIBINC = ../zlib +ZLIBLIB = ../zlib + +# Compiler, linker, lib and other tools +#CC = c89 +CC = cc +LD = $(CC) +AR = ar +RANLIB = ranlib +CP = cp +RM_F = rm -f + +# Compiler and linker flags +NOHWOPT = -DPNG_ARM_NEON_OPT=0 -DPNG_MIPS_MSA_OPT=0 \ + -DPNG_POWERPC_VSX_OPT=0 -DPNG_INTEL_SSE_OPT=0 +STDC = -pedantic-errors -std=c89 +WARN = -Wall -Wextra -Wundef +WARNMORE = -Wcast-align -Wconversion -Wshadow -Wpointer-arith -Wwrite-strings \ + -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes +LOCAL_CPPFLAGS = $(NOHWOPT) +CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5 +ALL_CPPFLAGS = $(LOCAL_CPPFLAGS) $(CPPFLAGS) +LOCAL_CFLAGS = $(STDC) $(WARN) # $(WARNMORE) +CFLAGS = -O2 # -g +ALL_CFLAGS = $(LOCAL_CFLAGS) $(CFLAGS) +ARFLAGS = rc +LDFLAGS = -L$(ZLIBLIB) # -g +LIBS = -lz -lm + +# File extensions +EXEEXT = + +# Pre-built configuration +# See scripts/pnglibconf.mak for more options +PNGLIBCONF_H_PREBUILT = scripts/pnglibconf.h.prebuilt + +# File lists +OBJS = png.o pngerror.o pngget.o pngmem.o pngpread.o \ + pngread.o pngrio.o pngrtran.o pngrutil.o pngset.o \ + pngtrans.o pngwio.o pngwrite.o pngwtran.o pngwutil.o + +# Targets +all: static + +pnglibconf.h: $(PNGLIBCONF_H_PREBUILT) + $(CP) $(PNGLIBCONF_H_PREBUILT) $@ + +.c.o: + $(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) -o $@ $*.c + +static: libpng.a pngtest$(EXEEXT) + +shared: + @echo This is a generic makefile that cannot create shared libraries. + @echo Please use a configuration that is specific to your platform. + @false + +libpng.a: $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + $(RANLIB) $@ + +test: pngtest$(EXEEXT) + ./pngtest$(EXEEXT) + +pngtest$(EXEEXT): pngtest.o libpng.a + $(LD) $(LDFLAGS) -o $@ pngtest.o libpng.a $(LIBS) + +clean: + $(RM_F) *.o libpng.a pngtest$(EXEEXT) pngout.png pnglibconf.h + +png.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngerror.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngget.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngmem.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngpread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngrio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngrtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngrutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngset.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngtrans.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngwio.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngwrite.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngwtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h +pngwutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h + +pngtest.o: png.h pngconf.h pnglibconf.h diff --git a/scripts/makefile.clang b/scripts/makefile.clang index 08aaccf85..52eaa1bad 100644 --- a/scripts/makefile.clang +++ b/scripts/makefile.clang @@ -1,5 +1,5 @@ # makefile for libpng using clang (generic, static library) -# Copyright (C) 2000, 2014, 2019-2024 Cosmin Truta +# Copyright (C) 2000, 2014, 2019-2025 Cosmin Truta # Copyright (C) 2008, 2014 Glenn Randers-Pehrson # Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc. # @@ -21,13 +21,17 @@ RM_F = rm -f # Compiler and linker flags NOHWOPT = -DPNG_ARM_NEON_OPT=0 -DPNG_MIPS_MSA_OPT=0 \ - -DPNG_POWERPC_VSX_OPT=0 -DPNG_INTEL_SSE_OPT=0 -WARNMORE = -Wwrite-strings -Wpointer-arith -Wshadow \ - -Wmissing-declarations -Wtraditional -Wcast-align \ - -Wstrict-prototypes -Wmissing-prototypes # -Wconversion -DEFS = $(NOHWOPT) -CPPFLAGS = -I$(ZLIBINC) $(DEFS) # -DPNG_DEBUG=5 -CFLAGS = -O2 -Wall -Wextra -Wundef # $(WARNMORE) -g + -DPNG_POWERPC_VSX_OPT=0 -DPNG_INTEL_SSE_OPT=0 +STDC = -pedantic-errors # -std=c99 +WARN = -Wall -Wextra -Wundef +WARNMORE = -Wcast-align -Wconversion -Wshadow -Wpointer-arith -Wwrite-strings \ + -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes +LOCAL_CPPFLAGS = $(NOHWOPT) +CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5 +ALL_CPPFLAGS = $(LOCAL_CPPFLAGS) $(CPPFLAGS) +LOCAL_CFLAGS = $(STDC) $(WARN) # $(WARNMORE) +CFLAGS = -O2 # -g +ALL_CFLAGS = $(LOCAL_CFLAGS) $(CFLAGS) ARFLAGS = rc LDFLAGS = -L$(ZLIBLIB) # -g LIBS = -lz -lm @@ -51,7 +55,7 @@ pnglibconf.h: $(PNGLIBCONF_H_PREBUILT) $(CP) $(PNGLIBCONF_H_PREBUILT) $@ .c.o: - $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $< + $(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) -o $@ $*.c static: libpng.a pngtest$(EXEEXT) diff --git a/scripts/makefile.emcc b/scripts/makefile.emcc index 1ab01b8db..861b39750 100644 --- a/scripts/makefile.emcc +++ b/scripts/makefile.emcc @@ -1,5 +1,5 @@ # makefile for libpng using emscripten -# Copyright (C) 2000, 2014, 2019-2024 Cosmin Truta +# Copyright (C) 2000, 2014, 2019-2025 Cosmin Truta # Copyright (C) 2021 Kirk Roerig # Copyright (C) 2008, 2014 Glenn Randers-Pehrson # Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc. @@ -20,8 +20,16 @@ RANLIB = emranlib CP = cp RM_F = rm -f +STDC = -pedantic-errors # -std=c99 +WARN = -Wall -Wextra -Wundef +WARNMORE = -Wcast-align -Wconversion -Wshadow -Wpointer-arith -Wwrite-strings \ + -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes +LOCAL_CPPFLAGS = CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5 -CFLAGS = -O2 -Wall -Wextra -Wundef +ALL_CPPFLAGS = $(LOCAL_CPPFLAGS) $(CPPFLAGS) +LOCAL_CFLAGS = $(STDC) $(WARN) # $(WARNMORE) +CFLAGS = -O2 +ALL_CFLAGS = $(LOCAL_CFLAGS) $(CFLAGS) ARFLAGS = rc LDFLAGS = -L$(ZLIBLIB) PNGTEST_LDFLAGS = --preload-file=pngtest.png @@ -43,7 +51,7 @@ pnglibconf.h: $(PNGLIBCONF_H_PREBUILT) $(CP) $(PNGLIBCONF_H_PREBUILT) $@ .c.o: - $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $< + $(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) -o $@ $*.c static: libpng.a pngtest diff --git a/scripts/makefile.gcc b/scripts/makefile.gcc index fc0a1a090..7a11744dc 100644 --- a/scripts/makefile.gcc +++ b/scripts/makefile.gcc @@ -1,5 +1,5 @@ # makefile for libpng using gcc (generic, static library) -# Copyright (C) 2000, 2014, 2019-2024 Cosmin Truta +# Copyright (C) 2000, 2014, 2019-2025 Cosmin Truta # Copyright (C) 2008, 2014 Glenn Randers-Pehrson # Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc. # @@ -21,13 +21,17 @@ RM_F = rm -f # Compiler and linker flags NOHWOPT = -DPNG_ARM_NEON_OPT=0 -DPNG_MIPS_MSA_OPT=0 \ - -DPNG_POWERPC_VSX_OPT=0 -DPNG_INTEL_SSE_OPT=0 -WARNMORE = -Wwrite-strings -Wpointer-arith -Wshadow \ - -Wmissing-declarations -Wtraditional -Wcast-align \ - -Wstrict-prototypes -Wmissing-prototypes # -Wconversion -DEFS = $(NOHWOPT) -CPPFLAGS = -I$(ZLIBINC) $(DEFS) # -DPNG_DEBUG=5 -CFLAGS = -O2 -Wall -Wextra -Wundef # $(WARNMORE) -g + -DPNG_POWERPC_VSX_OPT=0 -DPNG_INTEL_SSE_OPT=0 +STDC = -pedantic-errors # -std=c99 +WARN = -Wall -Wextra -Wundef +WARNMORE = -Wcast-align -Wconversion -Wshadow -Wpointer-arith -Wwrite-strings \ + -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes +LOCAL_CPPFLAGS = $(NOHWOPT) +CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5 +ALL_CPPFLAGS = $(LOCAL_CPPFLAGS) $(CPPFLAGS) +LOCAL_CFLAGS = $(STDC) $(WARN) # $(WARNMORE) +CFLAGS = -O2 # -g +ALL_CFLAGS = $(LOCAL_CFLAGS) $(CFLAGS) ARFLAGS = rc LDFLAGS = -L$(ZLIBLIB) # -g LIBS = -lz -lm @@ -51,7 +55,7 @@ pnglibconf.h: $(PNGLIBCONF_H_PREBUILT) $(CP) $(PNGLIBCONF_H_PREBUILT) $@ .c.o: - $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $< + $(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) -o $@ $*.c static: libpng.a pngtest$(EXEEXT)