# makefile for mingw 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.
#
# Built from makefile.cygwin
# 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


# 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=

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

### Normal compilation
CFLAGS= $(strip $(MINGW_CCFLAGS) $(addprefix -I,$(ZLIBINC)) \
        -Wall -O3 $(ALIGN) -funroll-loops \
	-fomit-frame-pointer) # $(WARNMORE) -g -DPNG_DEBUG=5

LIBNAME = libpng14
PNGMAJ = 0
MINGDLL = 14
PNGMIN = 1.4.0beta5
PNGVER = $(PNGMAJ).$(PNGMIN)

SHAREDLIB=libpng$(MINGDLL).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))
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

pngconf.h.in:
	cat pngconf.h > pngconf.h.in

pngconf.h:	pngconf.h.in
	sed "/Makefile-supplied defines go here:/q" pngconf.h.in > pngconf.h

	/* if you don't want to use the intel MMX code, uncomment this */
	# echo "#define PNG_NO_MMX_CODE" >> pngconf.h

	/* if you don't need thread safety you can uncomment this */
	# echo "#define PNG_THREAD_UNSAFE_OK" >> pngconf.h

	sed "1,/Makefile-supplied defines go here:/d" pngconf.h.in >> pngconf.h

# 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$(MINGDLL) -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 pngintrn.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 pngintrn.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)/libpng14-config --cflags` pngtest.c \
	   -L$(DL) -L$(ZLIBLIB) \
	   -o pngtestd `$(BINPATH)/libpng14-config --ldflags`
	./pngtestd pngtest.png

test-installed:
	$(CC) $(CFLAGS) \
	   `$(BINPATH)/libpng14-config --cflags` pngtest.c \
	   -L$(ZLIBLIB) \
	   -o pngtesti$(EXE) `$(BINPATH)/libpng14-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 pngintrn.h png.c
pngerror.o pngerror.pic.o:	png.h pngconf.h pngintrn.h pngerror.c
pngrio.o pngrio.pic.o:		png.h pngconf.h pngintrn.h pngrio.c
pngwio.o pngwio.pic.o:		png.h pngconf.h pngintrn.h pngwio.c
pngmem.o pngmem.pic.o:		png.h pngconf.h pngintrn.h pngmem.c
pngset.o pngset.pic.o:		png.h pngconf.h pngintrn.h pngset.c
pnggcrd.o pnggcrd.pic.o:	png.h pngconf.h pngintrn.h pngget.c
pngget.o pngget.pic.o:		png.h pngconf.h pngintrn.h pngget.c
pngread.o pngread.pic.o:	png.h pngconf.h pngintrn.h pngread.c
pngrtran.o pngrtran.pic.o:	png.h pngconf.h pngintrn.h pngrtran.c
pngrutil.o pngrutil.pic.o:	png.h pngconf.h pngintrn.h pngrutil.c
pngtrans.o pngtrans.pic.o:	png.h pngconf.h pngintrn.h pngtrans.c
pngwrite.o pngwrite.pic.o:	png.h pngconf.h pngintrn.h pngwrite.c
pngwtran.o pngwtran.pic.o:	png.h pngconf.h pngintrn.h pngwtran.c
pngwutil.o pngwutil.pic.o:	png.h pngconf.h pngintrn.h pngwutil.c
pngpread.o pngpread.pic.o:	png.h pngconf.h pngintrn.h pngpread.c

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



