# makefile for libpng
# Copyright (C) 2015, 2018-2025 Cosmin Truta
# Copyright (C) 2002, 2006, 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

# Where the zlib library and include files are located
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=../zlib
ZLIBINC=../zlib

CC = cc
CPP = $(CC) -E
LD = $(CC)
AR = ar
RANLIB = ranlib
MV_F = mv -f
RM_F = rm -f
AWK = awk

DFNFLAGS = # DFNFLAGS contains -D options to use in the libpng build
DFA_EXTRA = # extra files that can be used to control configuration
CPPFLAGS = -I$(ZLIBINC) # -DPNG_DEBUG=5
CFLAGS = -O2 -g
ARFLAGS = rc
LDFLAGS = -L$(ZLIBLIB) -g
LIBS = -lz -lm

# Pre-built configuration
# See scripts/pnglibconf/pnglibconf.mak for more options
PNGLIBCONF_H_PREBUILT = pnglibconf.h.prebuilt

OBJS = png.o pngerror.o pngget.o pngmem.o pngpread.o pngread.o \
       pngrio.o pngrtran.o pngrutil.o pngset.o pngsimd.o \
       pngtrans.o pngwio.o pngwrite.o pngwtran.o pngwutil.o

.c.o:
	$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $*.c

all: libpng.a pngtest

# The standard pnglibconf.h exists as pnglibconf.h.prebuilt.
# Copy this over if the following doesn't work.
pnglibconf.h: pnglibconf.dfn
	$(RM_F) $@ pnglibconf.c pnglibconf.out pnglibconf.tmp
	echo '#include "pnglibconf.dfn"' >pnglibconf.c
	@echo "## If '$(CC) -E' fails, try /lib/cpp (e.g. CPP='/lib/cpp')" >&2
	$(CPP) $(DFNFLAGS) pnglibconf.c >pnglibconf.out
	$(AWK) -f scripts/pnglibconf/dfn.awk\
	    out=pnglibconf.tmp pnglibconf.out >&2
	$(MV_F) pnglibconf.tmp $@

pnglibconf.dfn: scripts/pnglibconf/pnglibconf.dfa \
                scripts/pnglibconf/options.awk \
                pngconf.h pngusr.dfa $(DFA_XTRA)
	$(RM_F) $@ pnglibconf.pre pnglibconf.tmp
	@echo "## Calling $(AWK) from scripts/pnglibconf/pnglibconf.mak" >&2
	@echo "## If 'awk' fails, try a better awk (e.g. AWK='nawk')" >&2
	$(AWK) -f scripts/pnglibconf/options.awk\
            out=pnglibconf.pre version=search\
            pngconf.h scripts/pnglibconf/pnglibconf.dfa\
	    pngusr.dfa $(DFA_XTRA) >&2
	$(AWK) -f scripts/pnglibconf/options.awk\
	    out=pnglibconf.tmp pnglibconf.pre >&2
	$(MV_F) pnglibconf.tmp $@

libpng.a: $(OBJS)
	$(AR) $(ARFLAGS) $@ $(OBJS)
	$(RANLIB) $@

pngtest: pngtest.o libpng.a
	$(LD) $(LDFLAGS) -o $@ pngtest.o libpng.a $(LIBS)

test: pngtest
	./pngtest

install:
	@echo "The $@ target is no longer supported by this makefile."
	@false

clean:
	$(RM_F) *.o libpng.a pngtest pngout.png pnglibconf.h
	$(RM_F) pnglibconf.c pnglibconf.dfn pnglibconf.out pnglibconf.pre

# TODO:
# Use the compiler to generate dependency files (e.g. "$(CC) -MD") and
# include those files here, for the benefit of the Make implementations
# that support the GNU Make syntax extensions.

png.o:      png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngerror.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngget.o:   png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngmem.o:   png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngpread.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngread.o:  png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngrio.o:   png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngrtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngrutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngset.o:   png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngsimd.o:  png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngtrans.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngwio.o:   png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngwrite.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngwtran.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h
pngwutil.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h pngtarget.h

pngtest.o:  png.h pngconf.h pnglibconf.h
