# Makefile for zlib
# Copyright (C) 1995-2006 Jean-loup Gailly.
# For conditions of distribution and use, see copyright notice in zlib.h

# To compile and test, type:
#    ./configure; make test
# The call of configure is optional if you don't have special requirements
# If you wish to build zlib as a shared library, use: ./configure -s

# To use the asm code, type:
#    cp contrib/asm?86/match.S ./match.S
#    make LOC=-DASMV OBJA=match.o

# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
#    make install
# To install in $HOME instead of /usr/local, use:
#    make install prefix=$HOME

CC=cc

CFLAGS=-O
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DDEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
#           -Wstrict-prototypes -Wmissing-prototypes

SFLAGS=$(CFLAGS)
#SFLAGS=$(CFLAGS) -fPIC

LD=$(CC)
LDFLAGS=libz.a
LDSHARED=$(CC)
CPP=$(CC) -E

STATICLIB=libz.a
SHAREDLIB=libz.so
SHAREDLIBV=libz.so.1.2.3
SHAREDLIBM=libz.so.1
EXE=

LIBS=$(STATICLIB) $(SHAREDLIBV)

AR=ar rc
RANLIB=ranlib
TAR=tar
SHELL=/bin/sh

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
mandir=${prefix}/share/man
man3dir=${mandir}/man3
pkgconfigdir = ${libdir}/pkgconfig

OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
       zutil.o inflate.o infback.o inftrees.o inffast.o

OBJA =
#OBJA = match.o
# to use the asm code: make OBJA=match.o

TEST_OBJS = example.o minigzip.o

OBJS_PIC = $(OBJS:.o=.pic.o)
OBJA_PIC = $(OBJA:.o=.pic.o)

.SUFFIXES: .c .o .pic.o

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

.c.pic.o:
	$(CC) -c $(SFLAGS) -o $@ $*.c

all: $(STATICLIB) example$(EXE) minigzip$(EXE)
#all: $(STATICLIB) $(SHAREDLIBV) example$(EXE) minigzip$(EXE)

check: test
test: all
	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
	echo hello world | ./minigzip | ./minigzip -d || \
	  echo '		*** minigzip test FAILED ***' ; \
	if ./example; then \
	  echo '		*** zlib test OK ***'; \
	else \
	  echo '		*** zlib test FAILED ***'; \
	fi

match.o: match.S
	$(CPP) match.S > _match.s
	$(CC) -c _match.s
	mv _match.o match.o
	rm -f _match.s

match.pic.o: match.S
	$(CPP) match.S > _match.s
	$(CC) -c -fPIC _match.s
	mv _match.o match.pic.o
	rm -f _match.s

$(STATICLIB): $(OBJS) $(OBJA)
	$(AR) $@ $(OBJS) $(OBJA)
	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1

$(SHAREDLIBV): $(OBJS_PIC) $(OBJA_PIC)
	$(LDSHARED) -o $@ $(OBJS_PIC) $(OBJA_PIC)
	rm -f $(SHAREDLIB) $(SHAREDLIBM)
	ln -s $@ $(SHAREDLIB)
	ln -s $@ $(SHAREDLIBM)

example$(EXE): example.o $(STATICLIB)
	$(LD) -o $@ example.o $(LDFLAGS)

minigzip$(EXE): minigzip.o $(STATICLIB)
	$(LD) -o $@ minigzip.o $(LDFLAGS)

install: $(LIBS)
	mkdir -p $(DESTDIR)$(exec_prefix)
	mkdir -p $(DESTDIR)$(includedir)
	mkdir -p $(DESTDIR)$(libdir)
	mkdir -p $(DESTDIR)$(man3dir)
	mkdir -p $(DESTDIR)$(pkgconfigdir)
	cp zlib.h zconf.h $(DESTDIR)$(includedir)
	chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
	cp $(LIBS) $(DESTDIR)$(libdir)
	cd $(DESTDIR)$(libdir); chmod 755 $(LIBS)
	-@(cd $(DESTDIR)$(libdir); $(RANLIB) $(STATICLIB) || true) >/dev/null 2>&1
	cd $(DESTDIR)$(libdir); if test -f $(SHAREDLIBV); then \
	  rm -f $(SHAREDLIB) $(SHAREDLIBM); \
	  ln -s $(SHAREDLIBV) $(SHAREDLIB); \
	  ln -s $(SHAREDLIBV) $(SHAREDLIBM); \
	  (ldconfig || true)  >/dev/null 2>&1; \
	fi
	cp zlib.3 $(DESTDIR)$(man3dir)
	chmod 644 $(DESTDIR)$(man3dir)/zlib.3
	cp zlib.pc $(DESTDIR)$(pkgconfigdir)
	chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc
# The ranlib in install is needed on NeXTSTEP which checks file times
# ldconfig is for Linux

uninstall:
	cd $(DESTDIR)$(includedir); rm -f zlib.h zconf.h
	cd $(DESTDIR)$(libdir); rm -f $(STATICLIB); \
	if test -f $(SHAREDLIBV); then \
	  rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \
	fi
	cd $(DESTDIR)$(man3dir); rm -f zlib.3
	cd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc

mostlyclean: clean
clean:
	rm -f *.o *~ example$(EXE) minigzip$(EXE) \
	   libz.* foo.gz so_locations \
	   _match.s maketree contrib/infback9/*.o

maintainer-clean: distclean
distclean: clean
	cp -p Makefile.in Makefile
	cp -p zconf.in.h zconf.h
	rm -f zlib.pc .DS_Store

tags:
	etags *.[ch]

depend:
	makedepend -- $(CFLAGS) -- *.[ch]

# "fake" targets: not real filenames and no deps (else "touch clean" defeats)
.PHONY: install uninstall clean tags depend

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

adler32.o: zlib.h zconf.h
adler32.pic.o: zlib.h zconf.h
compress.o: zlib.h zconf.h
compress.pic.o: zlib.h zconf.h
crc32.o: crc32.h zlib.h zconf.h
crc32.pic.o: crc32.h zlib.h zconf.h
deflate.o: deflate.h zutil.h zlib.h zconf.h
deflate.pic.o: deflate.h zutil.h zlib.h zconf.h
example.o: zlib.h zconf.h
example.pic.o: zlib.h zconf.h
gzio.o: zutil.h zlib.h zconf.h
gzio.pic.o: zutil.h zlib.h zconf.h
inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inffast.pic.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inflate.pic.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
infback.pic.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inftrees.o: zutil.h zlib.h zconf.h inftrees.h
inftrees.pic.o: zutil.h zlib.h zconf.h inftrees.h
minigzip.o: zlib.h zconf.h
minigzip.pic.o: zlib.h zconf.h
trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
trees.pic.o: deflate.h zutil.h zlib.h zconf.h trees.h
uncompr.o: zlib.h zconf.h
uncompr.pic.o: zlib.h zconf.h
zutil.o: zutil.h zlib.h zconf.h
zutil.pic.o: zutil.h zlib.h zconf.h
