#############################################################
# $Id$
#
## Makefile for building libcares.a with MingW32 (GCC-3.2)
## Use: make -f Makefile.m32 [demos]
##
## Quick hack by Guenter; comments to: /dev/nul
#
########################################################
## Nothing more to do below this line!

LIB	= libcares.a

CC	= gcc
LD	= gcc
RANLIB	= ranlib
#RM	= rm -f

CFLAGS	= -O2 -Wall
LDFLAGS	= -s
LIBS	= -lwsock32

# Makefile.inc provides the CSOURCES and HHEADERS defines
include Makefile.inc

OBJLIB	:= $(patsubst %.c,%.o,$(strip $(CSOURCES)))


$(LIB): $(OBJLIB)
	ar cru $@ $^
	$(RANLIB) $@

all: $(LIB) demos

demos: adig.exe ahost.exe acountry.exe

tags:
	etags *.[ch]

%.exe: %.o ares_getopt.o $(LIB)
	$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)

$(OBJLIB): ares.h ares_dns.h ares_private.h

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

check:

install:
	${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
	${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
	${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
	${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir}
	${RANLIB} ${DESTDIR}${libdir}/$(LIB)
	chmod u-w ${DESTDIR}${libdir}/$(LIB)
	${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
	${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
	(for man in $(MANPAGES); do \
	   ${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
	done)

clean:
	$(RM) ares_getopt.o $(OBJLIB) $(LIB) adig.exe ahost.exe acountry.exe

distclean: clean
	$(RM) config.cache config.log config.status Makefile

