#############################################################
## 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

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

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)

