# makefile for cygwin on x86
#   Builds both dll (with import lib) and static lib versions
#   of the library, and builds two copies of pngtest: one
#   statically linked and one dynamically linked.
#
# Copyright (C) 2002, 2006 Soren Anderson, Charles Wilson,
#    and Glenn Randers-Pehrson, based on makefile for linux-elf w/mmx by:
# Copyright (C) 1998-2000 Greg Roelofs
# Copyright (C) 1996, 1997 Andreas Dilger
# For conditions of distribution and use, see copyright notice in png.h

# This makefile intends to support building outside the src directory
# if desired. When invoking it, specify an argument to SRCDIR on the
# command line that points to the top of the directory where your source
# is located.

ifdef SRCDIR
VPATH = $(SRCDIR)
else
SRCDIR = .
endif

# Override DESTDIR= on the make install command line to easily support
# installing into a temporary location.  Example:
#
#    make install DESTDIR=/tmp/build/libpng
#
# If you're going to install into a temporary location
# via DESTDIR, $(DESTDIR)$(prefix) must already exist before
# you execute make install.

DESTDIR=

# To enable assembler optimizations, add '-DPNG_USE_PNGGCCRD' to
# $CFLAGS, and include pnggccrd.o in $OBJS, below, and in the dependency
# list at the bottom of this makefile.

CC=gcc
ifdef MINGW
MINGW_CCFLAGS=-mno-cygwin -I/usr/include/mingw
MINGW_LDFLAGS=-mno-cygwin -L/usr/lib/mingw
endif

# Where "make install" puts libpng*.a, *png*.dll, png.h, and pngconf.h
ifndef prefix
prefix=/usr
$(warning You haven't specified a 'prefix=' location. Defaulting to "/usr")
endif
exec_prefix=$prefix

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

ALIGN=
# for i386:
#ALIGN=-malign-loops=2 -malign-functions=2

WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
	-Wmissing-declarations -Wtraditional -Wcast-align \
	-Wstrict-prototypes -Wmissing-prototypes #-Wconversion

### if you use the asm, add pnggccrd.o to the OBJS list
###
### if you don't need thread safety, but want the asm accel
#CFLAGS= $(strip $(MINGW_CCFLAGS) -DPNG_THREAD_UNSAFE_OK -DPNG_USE_PNGGCCRD \
#	$(addprefix -I,$(ZLIBINC)) -Wall -O3 $(ALIGN) -funroll-loops \
#	-fomit-frame-pointer)  # $(WARNMORE) -g -DPNG_DEBUG=5
### if you need thread safety and want (minimal) asm accel
#CFLAGS= $(strip $(MINGW_CCFLAGS) -DPNG_USE_PNGGCCRD $(addprefix -I,$(ZLIBINC)) \
#	-Wall -O3 $(ALIGN) -funroll-loops \
#	-fomit-frame-pointer)  # $(WARNMORE) -g -DPNG_DEBUG=5
### Normal (non-asm) compilation
CFLAGS= $(strip $(MINGW_CCFLAGS) $(addprefix -I,$(ZLIBINC)) \
        -Wall -O3 $(ALIGN) -funroll-loops \
	-fomit-frame-pointer) # $(WARNMORE) -g -DPNG_DEBUG=5

LIBNAME = libpng12
PNGMAJ = 0
CYGDLL = 12
PNGMIN = 1.2.10beta3
PNGVER = $(PNGMAJ).$(PNGMIN)

SHAREDLIB=cygpng$(CYGDLL).dll
STATLIB=libpng.a
IMPLIB=libpng.dll.a
SHAREDDEF=libpng.def
LIBS=$(SHAREDLIB) $(STATLIB)
EXE=.exe

LDFLAGS=$(strip -L. $(MINGW_LDFLAGS) -lpng $(addprefix -L,$(ZLIBLIB)) -lz)
LDSFLAGS=$(strip -shared -L.  $(MINGW_LDFLAGS) -Wl,--export-all)
LDEXTRA=-Wl,--out-implib=$(IMPLIB) $(addprefix -L,$(ZLIBLIB)) -lz

MKDIR_P=/bin/mkdir -pv
RANLIB=ranlib
#RANLIB=echo

INCPATH=$(prefix)/include
LIBPATH=$(exec_prefix)/lib

BINPATH=$(exec_prefix)/bin
MANPATH=$(prefix)/man
MAN3PATH=$(MANPATH)/man3
MAN5PATH=$(MANPATH)/man5

# cosmetic: shortened strings:
S =$(SRCDIR)
D =$(DESTDIR)
DB =$(D)$(BINPATH)
DI =$(D)$(INCPATH)
DL =$(D)$(LIBPATH)

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

OBJSDLL = $(OBJS:.o=.pic.o)

.SUFFIXES: .c .o .pic.o

%.o : %.c
	$(CC) -c $(CFLAGS) -o $@ $<
%.pic.o : CFLAGS += -DPNG_BUILD_DLL
%.pic.o : %.c
	$(CC) -c $(CFLAGS) -o $@ $<

all: all-static all-shared libpng.pc libpng-config libpng.pc libpng-config

# Make this to verify that "make [...] install" will do what you want.
buildsetup-tell:
	@echo  VPATH is set to: \"$(VPATH)\"
	@echo  prefix is set to: \"$(prefix)\"
	@echo -e INCPATH,LIBPATH, etc. are set to:'\n' \
 $(addprefix $(D),$(INCPATH)'\n' $(LIBPATH)'\n' $(BINPATH)'\n' \
   $(MANPATH)'\n' $(MAN3PATH)'\n' $(MAN5PATH)'\n')'\n'

libpng.pc: scripts/libpng.pc.in
	@echo -e Making pkg-config file for this libpng installation..'\n' \
           using PREFIX=\"$(prefix)\"'\n'
	cat $(S)/scripts/libpng.pc.in | sed -e s\!@PREFIX@!$(prefix)! | \
	   sed -e s/-lm// > libpng.pc

libpng-config: scripts/libpng-config-head.in scripts/libpng-config-body.in
	@echo -e Making $(LIBNAME) libpng-config file for this libpng \
 installation..'\n' using PREFIX=\"$(prefix)\"'\n'
	( cat $(S)/scripts/libpng-config-head.in; \
	echo prefix=\"$(prefix)\"; \
	echo I_opts=\"-I$(INCPATH)/$(LIBNAME)\"; \
	echo L_opts=\"-L$(LIBPATH)\"; \
	echo libs=\"-lpng$(CYGDLL) -lz\"; \
	cat $(S)/scripts/libpng-config-body.in ) > libpng-config
	chmod +x libpng-config

static: all-static
shared: all-shared
all-static: $(STATLIB) pngtest-stat$(EXE)
all-shared: $(SHAREDLIB) pngtest$(EXE)

pnggccrd.o: pnggccrd.c png.h pngconf.h
	@echo ""
	@echo '    You can ignore the "control reaches end of non-void function"'
	@echo '    warning and "<variable> defined but not used" warnings:'
	@echo ""
	$(CC) -c $(CFLAGS) -o $@ $<

pnggccrd.pic.o:	pnggccrd.c png.h pngconf.h
	@echo ""
	@echo '    You can ignore the "control reaches end of non-void function"'
	@echo '    warning and "<variable> defined but not used" warnings:'
	@echo ""
	$(CC) -c $(CFLAGS) -DPNG_BUILD_DLL -o $@ $<

$(STATLIB): $(OBJS)
	ar rc $@ $(OBJS)
	$(RANLIB) $@

$(SHAREDDEF): scripts/pngw32.def
	cat $< | sed -e '1{G;s/^\(.*\)\(\n\)/EXPORTS/;};2,/^EXPORTS/d' | \
	sed -e 's/\([^;]*\);/;/' > $@

$(SHAREDLIB): $(OBJSDLL) $(SHAREDDEF)
	$(CC) $(LDSFLAGS) -o $@ $(OBJSDLL) -L. $(LDEXTRA)

pngtest$(EXE): pngtest.pic.o $(SHAREDLIB)
	$(CC) $(CFLAGS) $< $(LDFLAGS) -o $@

pngtest-stat$(EXE): pngtest.o $(STATLIB)
	$(CC) -static $(CFLAGS) $< $(LDFLAGS) -o $@

pngtest.pic.o: pngtest.c
	$(CC) $(CFLAGS) -c $< -o $@

pngtest.o: pngtest.c
	$(CC) $(CFLAGS) -c $< -o $@

test: test-static test-shared

test-static: pngtest-stat$(EXE)
	./pngtest-stat $(S)/pngtest.png

test-shared: pngtest$(EXE)
	./pngtest $(S)/pngtest.png

install-static: $(STATLIB) install-headers install-man
	-@if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
	install -m 644 $(STATLIB) $(DL)/$(LIBNAME).a
	-@rm -f $(DL)/$(STATLIB)
	(cd $(DL); ln -sf $(LIBNAME).a $(STATLIB))

install-shared: $(SHAREDLIB) libpng.pc libpng-config install-headers install-man
	-@if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
	-@if [ ! -d $(DB) ]; then $(MKDIR_P) $(DB); fi
	-@if [ ! -d $(DL)/pkgconfig ]; then $(MKDIR_P) $(DL)/pkgconfig; fi
	-@/bin/rm -f $(DL)/pkgconfig/$(LIBNAME).pc
	-@/bin/rm -f $(DL)/pkgconfig/libpng.pc
	install -m 644 $(IMPLIB) $(DL)/$(LIBNAME).dll.a
	-@rm -f $(DL)/$(IMPLIB)
	(cd $(DL); ln -sf $(LIBNAME).dll.a $(IMPLIB))
	install -s -m 755 $(SHAREDLIB) $(DB)
	install -m 644 libpng.pc $(DL)/pkgconfig/$(LIBNAME).pc
	(cd $(DL)/pkgconfig; ln -sf $(LIBNAME).pc libpng.pc)

install-headers:
	-@if [ ! -d $(DI) ]; then $(MKDIR_P) $(DI); fi
	-@if [ ! -d $(DI)/$(LIBNAME) ]; then $(MKDIR_P) $(DI)/$(LIBNAME); fi
	-@rm -f $(DI)/png.h
	-@rm -f $(DI)/pngconf.h
	install -m 644 $(S)/png.h $(S)/pngconf.h $(DI)/$(LIBNAME)
	-@rm -f $(DI)/libpng
	(cd $(DI); ln -sf $(LIBNAME) libpng; ln -sf $(LIBNAME)/* .)

install-man:
	-@if [ ! -d $(D)$(MAN3PATH) ]; then $(MKDIR_P) $(D)$(MAN3PATH); fi
	-@if [ ! -d $(D)$(MAN5PATH) ]; then $(MKDIR_P) $(D)$(MAN5PATH); fi
	install -m 644 $(S)/libpngpf.3 $(S)/libpng.3 $(D)$(MAN3PATH)
	install -m 644 $(S)/png.5 $(D)$(MAN5PATH)

install-config: libpng-config
	-@if [ ! -d $(DB) ]; then $(MKDIR_P) $(DB); fi
	-@/bin/rm -f $(DB)/libpng-config
	-@/bin/rm -f $(DB)/$(LIBNAME)-config
	cp libpng-config $(DB)/$(LIBNAME)-config
	chmod 755 $(DB)/$(LIBNAME)-config
	(cd $(DB); ln -sf $(LIBNAME)-config libpng-config)

# Run this to verify that a future `configure' run will pick up the settings
# you want.
test-config-install: SHELL=/bin/bash
test-config-install: $(DB)/libpng-config
	@echo -e Testing libpng-config functions...'\n'
	@ for TYRA in LDFLAGS CPPFLAGS CFLAGS LIBS VERSION; \
   do \
    printf "(%d)\t %10s =%s\n" $$(($$gytiu + 1)) $$TYRA \
    "$$($(DB)/libpng-config `echo --$$TYRA |tr '[:upper:]' '[:lower:]'`)"; \
    gytiu=$$(( $$gytiu + 1 )); \
   done

install: install-static install-shared install-man install-config

# If you installed in $(DESTDIR), test-installed won't work until you
# move the library to its final location.  Use test-dd to test it
# before then.

test-dd:
	echo
	echo Testing installed dynamic shared library in $(DL).
	$(CC) -I$(DI) $(CFLAGS) \
	   `$(BINPATH)/libpng12-config --cflags` pngtest.c \
	   -L$(DL) -L$(ZLIBLIB) \
	   -o pngtestd `$(BINPATH)/libpng12-config --ldflags`
	./pngtestd pngtest.png

test-installed:
	$(CC) $(CFLAGS) \
	   `$(BINPATH)/libpng12-config --cflags` pngtest.c \
	   -L$(ZLIBLIB) \
	   -o pngtesti$(EXE) `$(BINPATH)/libpng12-config --ldflags`
	./pngtesti$(EXE) pngtest.png

clean:
	/bin/rm -f *.pic.o *.o $(STATLIB) $(IMPLIB) $(SHAREDLIB) \
	pngtest-stat$(EXE) pngtest$(EXE) pngout.png $(SHAREDDEF) \
	libpng-config libpng.pc pngtesti$(EXE)

DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
writelock:
	chmod a-w *.[ch35] $(DOCS) scripts/*

.PHONY: buildsetup-tell libpng.pc libpng-config test-config-install clean

# DO NOT DELETE THIS LINE -- make depend depends on it.

png.o png.pic.o:		png.h pngconf.h png.c
pngerror.o pngerror.pic.o:	png.h pngconf.h pngerror.c
pngrio.o pngrio.pic.o:		png.h pngconf.h pngrio.c
pngwio.o pngwio.pic.o:		png.h pngconf.h pngwio.c
pngmem.o pngmem.pic.o:		png.h pngconf.h pngmem.c
pngset.o pngset.pic.o:		png.h pngconf.h pngset.c
pngget.o pngget.pic.o:		png.h pngconf.h pngget.c
pngread.o pngread.pic.o:	png.h pngconf.h pngread.c
pngrtran.o pngrtran.pic.o:	png.h pngconf.h pngrtran.c
pngrutil.o pngrutil.pic.o:	png.h pngconf.h pngrutil.c
pngtrans.o pngtrans.pic.o:	png.h pngconf.h pngtrans.c
pngwrite.o pngwrite.pic.o:	png.h pngconf.h pngwrite.c
pngwtran.o pngwtran.pic.o:	png.h pngconf.h pngwtran.c
pngwutil.o pngwutil.pic.o:	png.h pngconf.h pngwutil.c
pngpread.o pngpread.pic.o:	png.h pngconf.h pngpread.c

pngtest.o:			png.h pngconf.h pngtest.c
pngtest-stat.o:			png.h pngconf.h pngtest.c



