#############################################################
# $Id$
#
## Makefile for building libcurl.a with MingW32 (GCC-2.95) and
## optionally OpenSSL (0.9.6)
## Use: make -f Makefile.m32
##
## Comments to: Troy Engel <tengel@sonic.net> or
##              Joern Hartroth <hartroth@acm.org>

CC = gcc
AR = ar
RANLIB = ranlib
STRIP = strip -g
OPENSSL_PATH = ../../openssl-0.9.6

########################################################
## Nothing more to do below this line!

INCLUDES = -I. -I.. -I../include -I../src
CFLAGS = -g -O2 -DMINGW32
ifdef SSL
  INCLUDES += -I"$(OPENSSL_PATH)/outinc" -I"$(OPENSSL_PATH)/outinc/openssl"
  CFLAGS += -DUSE_SSLEAY
  DLL_LIBS = -leay32 -lssl32 -lRSAglue
endif
COMPILE = $(CC) $(INCLUDES) $(CFLAGS)

libcurl_a_LIBRARIES = libcurl.a

libcurl_a_SOURCES = arpa_telnet.h file.c getpass.h netrc.h timeval.c base64.c \
	file.h hostip.c progress.c timeval.h base64.h formdata.c hostip.h progress.h	\
	cookie.c formdata.h http.c sendf.c cookie.h ftp.c http.h sendf.h url.c dict.c	\
	ftp.h if2ip.c speedcheck.c url.h dict.h getdate.c if2ip.h speedcheck.h		\
	urldata.h transfer.c getdate.h ldap.c ssluse.c version.c transfer.h getenv.c	\
	ldap.h ssluse.h escape.c getenv.h mprintf.c telnet.c escape.h getpass.c netrc.c	\
	telnet.h getinfo.c strequal.c strequal.h easy.c security.h		\
	security.c krb4.h krb4.c memdebug.h memdebug.c inet_ntoa_r.h http_chunks.h http_chunks.c \
	strtok.c

libcurl_a_OBJECTS =  file.o timeval.o base64.o hostip.o progress.o \
	formdata.o cookie.o http.o sendf.o ftp.o url.o dict.o if2ip.o \
	speedcheck.o getdate.o transfer.o ldap.o ssluse.o version.o \
	getenv.o escape.o mprintf.o telnet.o getpass.o netrc.o getinfo.o \
	strequal.o easy.o security.o krb4.o memdebug.o http_chunks.o \
	strtok.o

LIBRARIES =  $(libcurl_a_LIBRARIES)
SOURCES = $(libcurl_a_SOURCES)
OBJECTS = $(libcurl_a_OBJECTS)


all: libcurl.a libcurl.dll libcurldll.a

libcurl.a: $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES)
	-@erase libcurl.a
	$(AR) cru libcurl.a $(libcurl_a_OBJECTS)
	$(RANLIB) libcurl.a
	$(STRIP) $@

# remove the last line above to keep debug info

libcurl.dll libcurldll.a: libcurl.a libcurl.def dllinit.o
	-@erase $@
	dllwrap --dllname $@ --output-lib libcurldll.a --export-all --def libcurl.def $(libcurl_a_LIBRARIES) dllinit.o -L$(OPENSSL_PATH)/out $(DLL_LIBS) -lwsock32
	$(STRIP) $@

# remove the last line above to keep debug info

.c.o:
	$(COMPILE) -c $<

.s.o:
	$(COMPILE) -c $<

.S.o:
	$(COMPILE) -c $<

clean:
	-@erase $(libcurl_a_OBJECTS)

distrib: clean

	-@erase $(libcurl_a_LIBRARIES)

