The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#PLEASE NOTE: this Makefile was designed to be compatible with GNU make and dmake

CC       = gcc
AR       = ar
ARFLAGS  = csr
PERL     = perl

CP     = $(PERL) -MExtUtils::Command -e cp --
RM_F   = $(PERL) -MExtUtils::Command -e rm_f --
MKPATH = $(PERL) -MExtUtils::Command -e mkpath --

### GLOBAL PART ###

BUILDBITS= 32
BUILDNICK= mingw

PREFIX   = ../../_output_
INCDIR   = $(PREFIX)/include
LIBDIR   = $(PREFIX)/lib

CF_ALL   = -DTEC_UNAME=gcc4 -DTEC_SYSNAME=Win$(BUILDBITS) -DTEC_LITTLEENDIAN -DTEC_$(BUILDBITS) -DWIN32 -DNDEBUG -I"$(INCDIR)"
LF_ALL   = -L../lib/$(BUILDNICK) -L"$(LIBDIR)"

VER_OBJ      = version.o
VER_RC       = version.rc

BUILD_DIRS   = ../obj/$(BUILDNICK)/cd_zlib ../lib/$(BUILDNICK)

ALL_OBJS     = $(OBJS_cd_zlib)

STATIC_LIBS  = $(SLIB_cd_zlib)

DYNAMIC_LIBS = $(DLIB_cd_zlib) $(ILIB_cd_zlib)

ALL_LIBS     = $(STATIC_LIBS) $(DYNAMIC_LIBS)

.PHONY: install-all install-static install-dynamic all all-static all-dynamic clean build-dirs

all: all-static all-dynamic


### START OF cd_zlib ###
CF_cd_zlib   = -c  -Wall -O2 -I../include   -DGCC_WINDRES $(CF_cd_zlib_EXTRA)
LF_cd_zlib   = -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -luuid -loleaut32 -lole32 -lcomctl32 $(LF_cd_zlib_EXTRA)
SLIB_cd_zlib = ../lib/$(BUILDNICK)/libzlib1.a
DLIB_cd_zlib = ../lib/$(BUILDNICK)/libzlib1.dll.a
ILIB_cd_zlib = ../lib/$(BUILDNICK)/zlib1_alien_.dll
OBJS_cd_zlib = ../obj/$(BUILDNICK)/cd_zlib/adler32.o ../obj/$(BUILDNICK)/cd_zlib/crc32.o ../obj/$(BUILDNICK)/cd_zlib/inffast.o ../obj/$(BUILDNICK)/cd_zlib/inftrees.o ../obj/$(BUILDNICK)/cd_zlib/uncompr.o ../obj/$(BUILDNICK)/cd_zlib/gzclose.o ../obj/$(BUILDNICK)/cd_zlib/gzlib.o ../obj/$(BUILDNICK)/cd_zlib/gzread.o ../obj/$(BUILDNICK)/cd_zlib/gzwrite.o ../obj/$(BUILDNICK)/cd_zlib/compress.o ../obj/$(BUILDNICK)/cd_zlib/deflate.o ../obj/$(BUILDNICK)/cd_zlib/infback.o ../obj/$(BUILDNICK)/cd_zlib/inflate.o ../obj/$(BUILDNICK)/cd_zlib/trees.o ../obj/$(BUILDNICK)/cd_zlib/zutil.o

../obj/$(BUILDNICK)/cd_zlib/adler32.o : ./adler32.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/crc32.o : ./crc32.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/inffast.o : ./inffast.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/inftrees.o : ./inftrees.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/uncompr.o : ./uncompr.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/gzclose.o : ./gzclose.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/gzlib.o : ./gzlib.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/gzread.o : ./gzread.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/gzwrite.o : ./gzwrite.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/compress.o : ./compress.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/deflate.o : ./deflate.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/infback.o : ./infback.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/inflate.o : ./inflate.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/trees.o : ./trees.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@
../obj/$(BUILDNICK)/cd_zlib/zutil.o : ./zutil.c ; gcc $(CF_ALL) $(CF_cd_zlib) $^ -o $@

$(SLIB_cd_zlib): $(OBJS_cd_zlib)
	$(AR) $(ARFLAGS) $@ $^

$(ILIB_cd_zlib) $(DLIB_cd_zlib) : $(OBJS_cd_zlib)
	g++ -s -shared -o $(ILIB_cd_zlib) $^ -Wl,--enable-auto-import,--export-all -Wl,--out-implib=$(DLIB_cd_zlib) $(LF_cd_zlib) $(LF_ALL)
	-strip $(ILIB_cd_zlib)

cd_zlib-static: build-dirs $(SLIB_cd_zlib)
cd_zlib-dynamic: build-dirs $(ILIB_cd_zlib) $(DLIB_cd_zlib)

### compile RC

$(VER_OBJ) : $(VER_RC) ; windres --define GCC_WINDRES $^ -o $@

all: build-dirs $(STATIC_LIBS) $(DYNAMIC_LIBS)
all-static: build-dirs $(STATIC_LIBS)
all-dynamic: build-dirs $(DYNAMIC_LIBS)

install-all:
	$(MKPATH) "$(LIBDIR)"
	$(MKPATH) "$(INCDIR)"
	$(CP) ../lib/$(BUILDNICK)/* "$(LIBDIR)"
	$(CP) ../include/*.h "$(INCDIR)"

install-static: all-static
	$(MKPATH) "$(LIBDIR)"
	$(MKPATH) "$(INCDIR)"
	$(CP) $(STATIC_LIBS) "$(LIBDIR)"
	$(CP) ../include/*.h "$(INCDIR)"

install-dynamic: all-dynamic
	$(MKPATH) "$(LIBDIR)"
	$(MKPATH) "$(INCDIR)"
	$(CP) $(DYNAMIC_LIBS) "$(LIBDIR)"
	$(CP) ../include/*.h "$(INCDIR)"

build-dirs:
	$(MKPATH) $(BUILD_DIRS)

clean:
	$(RM_F) $(ALL_OBJS) $(ALL_LIBS) $(VER_OBJ)