# Makefile for zlib.  Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96.
# Copyright (C) 1995-1996 Jean-loup Gailly.
# For conditions of distribution and use, see copyright notice in zlib.h 

# To compile, or to compile and test, type:
# 
#   make -fmakefile.dj2;  make test -fmakefile.dj2
# 
# To install libz.a, zconf.h and zlib.h in the djgpp directories, type:
# 
#    make install -fmakefile.dj2
# 
# after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as
# in the sample below if the pattern of the DJGPP distribution is to
# be followed.  Remember that, while <sp>'es around <=> are ignored in
# makefiles, they are *not* in batch files or in djgpp.env.
# - - - - -
# [make]
# INCLUDE_PATH=%\>;INCLUDE_PATH%%\DJDIR%\include
# LIBRARY_PATH=%\>;LIBRARY_PATH%%\DJDIR%\lib
# BUTT=-m486
# - - - - -
# Alternately, these variables may be defined below, overriding the values
# in djgpp.env, as
INCLUDE_PATH=c:\usr\include

CC=gcc

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

# If cp.exe is not found, replace with copy /Y .
CP=cp -f
# If install.exe is not found, replace with $(CP).
INSTALL=install
# The default value of RM is "rm -f."  If "rm.exe" is not found, uncomment:
# RM=del
LDLIBS=-L. -lz
LD=$(CC) -s -o
LDSHARED=$(CC)

INCL=zlib.h zconf.h
LIBS=libz.a

AR=ar rcs

prefix=/usr/local
exec_prefix = $(prefix)

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

TEST_OBJS = example.o minigzip.o

all: example.exe minigzip.exe

test: all
	./example
	echo hello world | .\minigzip | .\minigzip -d 

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

libz.a: $(OBJS)
	$(AR) $@ $(OBJS)

%.exe : %.o $(LIBS)
	$(LD) $@ $< $(LDLIBS)

# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env .

.PHONY : uninstall clean

install: $(INCL) $(LIBS)
	-@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH)
	-@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH)
	for %%f in ($(INCL)) do $(INSTALL) %%f $(INCLUDE_PATH)
	for %%p in ($(LIBS)) do $(INSTALL) %%p $(LIBRARY_PATH)

uninstall:
	for %%f in ($(INCL)) do $(RM) $(INCLUDE_PATH)\%%f
	for %%p in ($(LIBS)) do $(RM) $(LIBRARY_PATH)\%%p

clean:
	for %%p in (*.d *.o *.exe libz.a libz.so* foo.gz) do $(RM) %%p

DEPS := $(wildcard *.d)
ifneq ($(DEPS),)
include $(DEPS)
endif
