#############################################################
# $Id$
#
## Makefile for building libcurl.a with MingW32 (GCC-3.2) and
## optionally OpenSSL (0.9.8)
##
## Use: make -f Makefile.m32 [SSL=1] [SSH2=1] [DYN=1]
##
## Comments to: Troy Engel <tengel@sonic.net> or
##              Joern Hartroth <hartroth@acm.org>

ifndef OPENSSL_PATH
OPENSSL_PATH = ../../openssl-0.9.8d
endif
ifndef LIBSSH2_PATH
LIBSSH2_PATH = ../../libssh2-0.14
endif
ifndef ZLIB_PATH
ZLIB_PATH = ../../zlib-1.2.3
endif

CC = gcc
AR = ar
RM = rm -f
RANLIB = ranlib
STRIP = strip -g

########################################################
## Nothing more to do below this line!

INCLUDES = -I. -I../include
CFLAGS = -g -O2 -DBUILDING_LIBCURL -DHAVE_LONGLONG
ifdef SSH2
  INCLUDES += -I"$(LIBSSH2_PATH)/include" -I"$(LIBSSH2_PATH)/win32"
  CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
  DLL_LIBS += -L$(LIBSSH2_PATH)/win32 -lssh2
endif
ifdef SSL
  INCLUDES += -I"$(OPENSSL_PATH)/outinc" -I"$(OPENSSL_PATH)/outinc/openssl"
  CFLAGS += -DUSE_SSLEAY -DUSE_OPENSSL -DHAVE_OPENSSL_ENGINE_H -DHAVE_OPENSSL_PKCS12_H \
            -DHAVE_ENGINE_LOAD_BUILTIN_ENGINES -DOPENSSL_NO_KRB5 \
            -DCURL_WANTS_CA_BUNDLE_ENV
  DLL_LIBS += -L$(OPENSSL_PATH)/out -leay32 -lssl32
endif
ifdef ZLIB
  INCLUDES += -I"$(ZLIB_PATH)"
  CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
  DLL_LIBS += -L$(ZLIB_PATH) -lz
endif
ifdef SSPI
  CFLAGS += -DUSE_WINDOWS_SSPI
endif
COMPILE = $(CC) $(INCLUDES) $(CFLAGS)

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

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

libcurl_a_LIBRARIES = libcurl.a
libcurl_a_DEPENDENCIES = $(strip $(CSOURCES) $(HHEADERS))

all: libcurl.a libcurl.dll libcurldll.a

libcurl.a: $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES)
	$(RM) libcurl.a
	$(AR) cru libcurl.a $(libcurl_a_OBJECTS)
	$(RANLIB) libcurl.a
	$(STRIP) $@

RESOURCE = libcurl.res

# remove the last line above to keep debug info

libcurl.dll libcurldll.a: $(libcurl_a_OBJECTS) $(RESOURCE)
	$(RM) $@
	$(CC) -s -shared -Wl,--out-implib,libcurldll.a -o libcurl.dll \
	  $(libcurl_a_OBJECTS) $(RESOURCE) $(DLL_LIBS) -lws2_32 -lwinmm

# remove the above '-s' to keep debug info

.c.o:
	$(COMPILE) -c $<

libcurl.res: libcurl.rc
	windres -DCURLDEBUG=0 -O COFF -o $@ -i $^

clean:
	$(RM) $(libcurl_a_OBJECTS) $(RESOURCE)

distrib: clean
	$(RM) $(libcurl_a_LIBRARIES)

